我试图在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警告)。这会在作为只读位置的分配连接时出错。有什么解决方案吗?
答案 0 :(得分:2)
您正在看到未定义行为的症状。你正在写你不应该的记忆。
使用时:
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
是空字符串,则第一种形式将是错误的。