我有一个函数,它将两个字符串string_one
和string_two
都指向一个字符。
我想到了将它们加在一起的方法:
while (*string_one){
string_one++;
}
*string_one = *string_two;
但我看不到输出中的第二个字符串!
如何添加两个字符串呢?我接近了吗?
答案 0 :(得分:6)
写作时
*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 = '\0';
再次假设string_one最初指向一个足以容纳两个字符串的字符串。
答案 1 :(得分:2)
你有没有试过你的代码?
首先,您需要确保两个字符串都有足够的空间。连接字符串而不检查是否有足够的空间可能是世界上所有黑客计算机中50%的原因。
其次,C字符串是一个char数组,其零字节作为最后一个char。您的代码使用string_two的第一个字符覆盖string_one末尾的零字节。
第三,标准C库中有一个名为strcat的函数正在执行您想要执行的操作。它不会检查是否有足够的空间,你必须在通话前这样做。
答案 2 :(得分:1)
我很害怕,你的代码无效。
*string_one = *string_two;
会将string_two
的第一个元素复制到string_one
。这永远不会添加任何东西。此外,您需要追加完整的字符串,而不仅仅是一个元素。
您需要的是strcat()
。您可以在here上找到更多信息。
一般说明:
strcat()
函数将src
字符串附加到dest
字符串,覆盖\0
末尾的终止空字节(dest
),并且然后添加一个终止空字节。字符串可能不重叠,dest
字符串必须有足够的空间用于结果。如果dest
不够大,程序行为是不可预测的。