C++ strncat函数c++;不起作用

C++ strncat函数c++;不起作用,c++,string,C++,String,我需要编写void strncat,它将源的第一个num字符附加到目标,再加上一个终止的null字符。如果源中的C字符串的长度小于num,则仅复制到终止空字符之前的内容。我做错了什么 #include <iostream> #include <cstring> #include <string> using namespace std; const int MAXDESTINATION = 40; const int MAXSOURCE = 150; int

我需要编写void strncat,它将源的第一个num字符附加到目标,再加上一个终止的null字符。如果源中的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];
        }
    }
}
#包括
#包括
#包括
使用名称空间std;
const int MAXDESTINATION=40;
常量int MAXSOURCE=150;
int main(){
char dest[MAXDESTINATION+1]=“它没有任何意义”;
char src[MAXSOURCE+1]=“如果它没有开始摇摆!”;
int a=斯特伦(目的地);
int b=strlen(src);
strncat(dest,src,MAXDESTINATION-a);}
void strncat(字符目标[],常量字符源[],int num){
if(int strlen(源)
你也许想说

        destination[begin++] = source[i];
或者您应该使用
i
来代替,因为begin应该准确地跟踪
i
,因为它初始化为i,然后应该在每次输入i时递增一次

此外,从效率的角度来看,您正在对源代码进行多次迭代。一次是调用strlen(必须遍历字符串中的每个字母才能对其进行计数),然后是for循环。您应该删除strlen。

编译错误:

错误C1075:在左大括号“{”之前找到文件结尾


错误C496:“StnCAT”:这个函数或变量可能是不安全的。考虑使用STRNCATIOS。

我假设你谈论编译器错误。因为你所显示的代码将不会生成。如果发布关于生成错误的问题,总是在问题体中包括完整的和未编辑的生成输出,并标记代码行。错误是(带有注释)。@JoachimPileborg“如果源代码中的C字符串长度小于num,则仅复制到终止空字符的内容”听起来不像编译器错误我不知道什么
If(int strlen(source)
是的,但是你不想把
int
放在那里。这看起来像是一个函数声明,但我无法想象这是合法的。@xaxxon,这就是我的意思。所示的代码不会生成。很抱歉,它不允许我发布#include And之类的东西,因为它不算作代码?好的,谢谢,我会尝试一下,我会接受out strlen的int(源)为什么这不允许我将你的strncat返回void。你不能打印void。非常感谢你,我取出了cout,但当我尝试调试它时,它说仍然存在生成错误,即使它本身并没有阻止生成。你需要发布更新的代码以及特定的编译器错误。你可以其他问题或将新代码添加到您已有问题的底部。不要修改原始代码,否则任何注释/答案都没有意义。单击问题底部的“编辑”按钮并将其添加到此处,而不是发布答案。不过,我们需要查看生成此错误的新代码。此外,您还需要请不要将函数命名为strncat--请将其命名为..“my_strncat”或其他名称抱歉,我不知道您的意思,因为我以前已经编辑过它。发布的是显示这些编译错误的已编辑代码