使用C++中的函数在第三个函数中连接两个字符数组需要调试帮助 我不明白为什么不编译。在花了一个小时之后,我决定从你们那里得到一些帮助。根据我的理解,第一个for循环肯定会复制整个字符串S1到S3。我不知道为什么会崩溃。实际上,我很天真地把更多的程序叫做初学者,而不是C++。 所以我不想使用内置函数,因为我正在学习用户定义函数的概念。 我在main中调用了函数作为string_cats1,s2 void string_cat(char *s1, char*s2){ char s3[200]; int i = 0, j = 0; for (i=0; s1[i] != '\0'; i++){ s3[i] = s1[i]; } while (s3[i] != '\0') { i++; } while (s2[j] != '\0') { s3[i++] = s2[j++]; } s3[i] = NULL; cout << s3 << endl; }

使用C++中的函数在第三个函数中连接两个字符数组需要调试帮助 我不明白为什么不编译。在花了一个小时之后,我决定从你们那里得到一些帮助。根据我的理解,第一个for循环肯定会复制整个字符串S1到S3。我不知道为什么会崩溃。实际上,我很天真地把更多的程序叫做初学者,而不是C++。 所以我不想使用内置函数,因为我正在学习用户定义函数的概念。 我在main中调用了函数作为string_cats1,s2 void string_cat(char *s1, char*s2){ char s3[200]; int i = 0, j = 0; for (i=0; s1[i] != '\0'; i++){ s3[i] = s1[i]; } while (s3[i] != '\0') { i++; } while (s2[j] != '\0') { s3[i++] = s2[j++]; } s3[i] = NULL; cout << s3 << endl; },c++,C++,我对您的代码进行了一些小改动: #include<iostream> using namespace std; void string_cat(char *s1, char*s2) { char s3[200]; int i = 0, j = 0; for (i=0; s1[i] != '\0'; i++){ s3[i] = s1[i]; } while (s2[j] != '\0') { s3[i++]

我对您的代码进行了一些小改动:

#include<iostream>

using namespace std;


void string_cat(char *s1, char*s2)
{
    char s3[200]; int i = 0, j = 0;
    for (i=0; s1[i] != '\0'; i++){
        s3[i] = s1[i];
    }

    while (s2[j] != '\0')
    {
        s3[i++] = s2[j++];

    }
    s3[i] = '\0';

    cout << s3 << endl;

}

int main()
{
        char str1[5] = "abcd";
        char str2[5] = "efgh";

        string_cat(str1, str2);
}
运行:


您希望第一个while循环做什么?此外,您可能希望把术语弄清楚。编译是将.cpp文件转换为Windows下的可执行文件:.exe或*nix/MacOS下的.out/任意文件的过程。这一部分进展顺利,当您实际运行程序时会出现故障。对于s3[i]!='\0'{i++;}好吗?注意char s3[200];使数组s3未初始化。所以,你不应该读还没有写的东西。看看。肯定没有内部缓冲。算法可能是:1。在s1中搜索“\0”。2.将s2复制到s1,从地址“\0”开始,直到s2中的“\0”,包括。3.如果指针在循环中发生更改,则返回s1的原始值。必须先复制指针,但只复制指针,而不复制指针指向的内容。关于越界访问,这听起来有点危险,但这就是它的定义。strcat的调用者负责在s1中提供足够的记忆。不要强调早期学习。犯错误是可以的。不犯错误的人一事无成。向他们学习是宝贵的好经验。你不能指望一夜之间拿起C++,它是一种复杂的语言。尽管如此,你还是要努力工作,迟早你会成为一名专家。在for循环中,你会将字符复制到s3,但不会将终止的“\0”复制到s3。似乎应该添加更多代码,以确保在for循环之后立即将终止的“\0”添加到s3。
$ g++ StringMerge.cpp -o StringMerge.o
$ ./StringMerge.o
abcdefgh