c中的字符串连接,不使用函数

String concatenation in c, not using function

我正在尝试连接未在 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";

string1string2 有足够的内存分别容纳 "water""melon"

使用

char string1[100] = "water", string2[] = "melon";

有了它,string1 将有足够的内存容纳 "watermelon"

改进建议:

而不是

while(i++, string1[i] != 0);

使用

while ( string1[i] != 0 ) i++;

第二种形式不仅更具可读性,而且还避免了错误。 如果 string1 是空字符串,第一种形式将是错误的。