这是在c中将两个字符串相加的有效方法吗?

这是在c中将两个字符串相加的有效方法吗?,c,string,C,String,我有一个函数,它包含两个字符串string\u one和string\u two都是指向字符的指针 我想到了一种方法将它们加在一起: while (*string_one){ string_one++; } *string_one = *string_two; 但是我看不到输出中的第二个字符串 如何将两个字符串添加到一起?我接近了吗?恐怕你的代码无效 *string_one = *string_two; 将string\u-two的第一个元素复制到string\u-

我有一个函数,它包含两个字符串
string\u one
string\u two
都是指向字符的指针

我想到了一种方法将它们加在一起:

while (*string_one){
    string_one++;
    }
    *string_one = *string_two;
但是我看不到输出中的第二个字符串


如何将两个字符串添加到一起?我接近了吗?

恐怕你的代码无效

 *string_one = *string_two;
string\u-two
的第一个元素复制到
string\u-one
。这不会增加任何东西。此外,您需要附加完整的字符串,而不仅仅是一个元素

您需要的是
strcat()
。你可以找到更多关于这个的信息

一般说明:

strcat()
函数将
src
字符串附加到
dest
字符串,覆盖
dest
末尾的终止空字节(
\0
),然后添加终止空字节。字符串不能重叠,并且
dest
字符串必须有足够的空间来显示结果。如果
dest
不够大,则程序行为是不可预测的


你有没有试过你的代码

首先,您需要确保两个字符串都有足够的空间。连接字符串而不检查两者是否有足够的空间,可能是世界上50%的计算机被黑客攻击的原因

其次,C字符串是一个字符数组,最后一个字符为零字节。您的代码用字符串\ 2的第一个字符覆盖字符串\ 1结尾的零字节

第三,标准C库中有一个名为strcat的函数,它正是您想要做的事情。它不会检查是否有足够的空间,你必须在通话前检查

当你写作时

*string_one = *string_two;
您只是在复制一个字符,因为您正在反引用一个字符指针

若要将两个字符串相互添加,需要覆盖第一个字符串上的\0,然后追加第二个字符串中的字符(前提是您有足够的空间)

那么这个

while (*string_one) {
  string_one++;
}
*string_one = *string_two;
将仅使用字符串\u two中的第一个字符覆盖\0,这将导致第一个字符串不再以null结尾

相反,你应该再次做类似的事情,比如

while (*string_one) {
  string_one++;
}
while (*string_two) {
  *string_one++ = *string_two++;
}
*string_one = '\0';
同样,假设string_one最初指向一个足以容纳两个字符串的字符串