2016-05-14 72 views
0

我需要编写void strncat,它将源的第一个数字字符追加到目标,再加上一个终止空字符。如果源文件中C字符串的长度小于num,则只复制直到终止空字符的内容。我究竟做错了什么?strncat函数C++不工作

#include <iostream> 
#include <cstring> 
#include <string> 
using namespace std; 

const int MAXDESTINATION = 40; 
const int MAXSOURCE = 150; 
int main() { 
char dest[MAXDESTINATION + 1] = "It don't mean a thing"; 
char src[MAXSOURCE + 1] = " if it don't got the Go-Go swing!"; 

int a = strlen(dest); 
int b = strlen(src); 
strncat(dest, src, MAXDESTINATION - a) ;} 

void strncat(char destination[], const char source[], int num) { 
if (int strlen(source) < num) { 
    int begin = 0; 
    bool less = false; 
    for (int i = 0; i <num; i++) { 
     if (destination[i] == '\0') { 
      begin = i; 
      less = true; 
     } 
     if (less == true) { 
      destination[begin] = source[i]; 
     } 
    } 
} 
+1

我假设你谈论你的编译器错误?因为你展示的代码不会构建。如果发布关于构建错误的问题,请始终在问题主体中包含完整和未编辑的构建输出,并将错误所在的代码行标记为(例如注释)。 –

+0

@JoachimPileborg“如果源文件中C字符串的长度小于num,则只复制到达终止空字符的内容”听起来不像编译器错误 – xaxxon

+0

我不知道'if(int strlen (源) xaxxon

回答

0

我猜测(因为你还没有提供甚至完整的strncat的定义)你的问题是你没有增加开始。这是写现在的方式,在同一地点是在源每次改写值[I]

你也许要说

 destination[begin++] = source[i]; 

或者也许你应该只使用i代替,如开始应可能完全跟踪i,因为它已初始化为i,然后每次我都应该增加一次。

此外,从效率的角度来看,您正在多次迭代source。一旦你打电话给strlen(必须通过字符串中的每个字母来计算它们),然后再次在for循环中。你应该看看删除strlen。

+0

好吧,谢谢,我会尝试,我会取出整数为strlen(来源) –

+0

为什么这不允许我cout << strncat(dest,src,MAXDESTINATION - a)<< endl; –

+0

你的strncat返回void。你不能打印出一个空白。 – xaxxon

-1

编译错误:

错误C1075:文件末尾左括号之前找到 '{' ...

错误C4996: 'strncat函数':此函数或变量可能是不安全的。考虑使用strncat_s来代替。

+0

而不是张贴一个答案,点击你问题底部的编辑按钮,然后添加它,然后我们需要看到产生这个错误的新代码,并且你不应该命名你的函数strncat - 将它命名为..“my_strncat”或者其他东西 – xaxxon

+0

对不起,我不知道你的意思,因为我已经编辑它之前。张贴的是我编辑的代码,显示这些编译错误 –