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



我有一个函数,string_one两个字符串,string_two一个指向一个字符的指针。

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

while (*string_one){
    string_one++;
    }
    *string_one = *string_two;

但我在输出中看不到第二个字符串!

如何添加两个字符串? 我接近了吗?

当你写的时候

*string_one = *string_two;

只是复制一个字符,因为您正在取消引用字符指针

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

所以这个

while (*string_one) {
  string_one++;
}
*string_one = *string_two;

只会用 string_two 中的第一个字符覆盖 \0,这将导致第一个字符串不再以 null 结尾。

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

while (*string_one) {
  string_one++;
}
while (*string_two) {
  *string_one++ = *string_two++;
}
*string_one = '';

同样,前提是string_one最初指向一个足够大的字符串来容纳两个字符串。

你试过你的代码吗?

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

其次,C 字符串是一个字符数组,最后一个字符为零字节。代码用string_two的第一个字符覆盖string_one末尾的零字节。

第三,标准 C 库中有一个名为 strcat 的函数,可以执行您想要执行的操作。它不会检查是否有足够的空间,您必须在通话前执行此操作。

恐怕

你的代码是无效的。

 *string_one = *string_two;

string_two的第一个元素复制到string_one。这永远不会增加任何东西。此外,您需要附加完整的字符串,而不仅仅是一个元素。

你需要的是strcat().您可以在此处找到更多信息。

一般说明:

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

最新更新