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

标签 c concatenation

我正在尝试连接不使用 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 是空字符串,第一种形式将是错误的。

关于c - c中的字符串连接,不使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32419862/

相关文章:

c - getint 和 getch

c - 跟踪 Pthread 完成的顺序

python - 列表拼接效率

mysql - 根据另一个表中的现有值在 MySQL 表中插入记录

mysql - 在mysql的CONCAT中添加通配符

c - SDL - Blit Surface 将浮点值作为 rect 参数传递

php - 通俗地说什么是位域?

'\0'结尾的C字符串

MYSQL插入concat结果

javascript - Javascript concat() 方法中第一个参数的用途是什么?