strncat函数c ++无效

时间:2016-05-14 05:29:06

标签: c++ string

我需要编写void strncat,它将source的前num个字符追加到destination,再加上一个终止的null-character。如果source中C字符串的长度小于num,则仅复制终止空字符的内容。我做错了什么?

#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];
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我猜测(因为你甚至没有提供strncat的完整定义),你的问题是你没有增加开始。它现在写的方式,每次用源[i]

的值覆盖相同的点

你可能想说

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

或者你应该只使用i,因为start应该完全跟踪i,因为它已初始化为i,然后每次我都应该递增一次。

此外,从效率的角度来看,您需要多次迭代source次。一旦调用strlen(必须通过字符串中的每个字母来计算它们),然后再次调用for循环。您应该寻找删除strlen。

答案 1 :(得分:-1)

编译错误:

错误C1075:在左括号'{'...

之前找到的文件结尾

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