我有以下代码连接两个字符串。第一个有while条件,但第二个有for循环失败。我使用以下输入独立运行它们。
int original[100]="c" , add[50] = "pgm";
concatenate_string(original, add);
printf("String after concatenation is \"%s\"\n", original);
//strcat(original,add);
//printf("strcat is : %s",original);
void concatenate_string(char *original, char *add)
{
while(*original)
original++;
while(*add)
{
*original = *add;
add++;
original++;
}
*original = '\0';
}
void strcat(char *original,char *add)
{
for (;*original++;);
for (;*add;)
*original++=*add++;
*(original)='\0';
}
答案 0 :(得分:7)
因为在第二个代码中,您在nul \0
符号后附加字符串:
for (;*original++;);
^ always increments, even after nul found
应该是:
for (;*original; original++);
注意:
代码:
for (;*original++;);
相当于
while (*original++);
但不是你正在使用的。
答案 1 :(得分:2)
在第二个循环开始之前,您的第二个版本会额外++
。尝试在两个循环之间添加--original;
,或者在第二个循环中添加初始化。
答案 2 :(得分:0)
#include<stdio.h>
#include<string.h>
void string_add(char *original,char *add) {
int i = 0,j,length = 0;
i = strlen(original);
length = strlen(add);
for(j = 0; j<length; j++,i++)
original[i] = add[j];
}
int main()
{
char original[20] = "I am from ", add[10] = "india";
string_add(original, add);
printf("Concatinated : %s\n",original);
return 0;
}