我需要编写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];
}
}
}
答案 0 :(得分:0)
我猜测(因为你甚至没有提供strncat的完整定义),你的问题是你没有增加开始。它现在写的方式,每次用源[i]
的值覆盖相同的点你可能想说
destination[begin++] = source[i];
或者你应该只使用i
,因为start应该完全跟踪i
,因为它已初始化为i,然后每次我都应该递增一次。
此外,从效率的角度来看,您需要多次迭代source
次。一旦调用strlen(必须通过字符串中的每个字母来计算它们),然后再次调用for循环。您应该寻找删除strlen。
答案 1 :(得分:-1)
编译错误:
错误C1075:在左括号'{'...
之前找到的文件结尾错误c4996:'strncat':此函数或变量可能不安全。考虑使用strncat_s代替。