我正在尝试连接不使用 Dev-C++ 编译器中的函数的字符串。所以我的代码是:
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main(void){
char string1[] = "water", string2[] = "melon";
int i=0,j=0;
while(i++, string1[i] != 0);
for(j=0;string2[j] !=0; i++){
string1[i] = string2[j];
j++;
}
printf("%s",string1);
getch();
return 0;
我得到的输出是:watermelp。问题出在哪里?
注意:我不能使用 *string1
和 *string2
来代替 string1[]
和 string2[]
。因为我必须在声明它们时使用 const
(因为 Wwrite-strings 警告)。这在连接为只读位置的分配时会出错。有解决办法吗?
最佳答案
您正在看到未定义行为的症状。您正在覆盖不应该覆盖的内存。
当您使用时:
char string1[] = "water", string2[] = "melon";
string1
和 string2
有足够的内存分别容纳 "water"
和 "melon"
。
使用
char string1[100] = "water", string2[] = "melon";
这样,string1
将有足够的内存来容纳 “watermelon”
。
改进建议:
代替
while(i++, string1[i] != 0);
使用
while ( string1[i] != 0 ) i++;
第二种形式不仅更具可读性,而且还避免了错误。
如果 string1
是空字符串,第一种形式将是错误的。
关于c - c中的字符串连接,不使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32419862/