【发布时间】:2014-12-29 17:15:47
【问题描述】:
我不知道为什么这段代码不起作用。 (我知道如何解决它,但我对这个特定的解决方案很感兴趣)它需要一个字符串并将放在另一个字符串的末尾。 x = "abc"、y = "def" 和执行 foo 后,x = "abcdef"。执行我的代码后,我只得到"abc"。
#include <stdio.h>
#define MAX 10
void foo(char *x, char *y){
while(*x++);
while(*y){
*x++ = *y++;
}
*x = '\0';
}
int main(void){
char x[MAX+1], y[MAX+1];
scanf("%s %s", x, y);
foo(x, y);
printf("%s", x);
return 0;
}
如果我这样做,代码可以正常工作。
while(*x) x++;
【问题讨论】:
-
你问的是
while(*x++);和while(*x) x++;之间的区别吗?如果是这样,您的大部分代码都是无关紧要的。 -
while(*x++);将在找到 null 后增加x。while(*x) x++;不会。 -
@juanchopanza 他并没有特别问这个问题。他给出的代码是他开发的问题的一部分,所以它不是没用的!
-
当前代码上的 cmets: 1) this: 'int main(void){' 应该是: 'int main(){' 2) 应该检查 scanf() 的返回值以确保操作正确成功 3) 用户很容易超出输入缓冲区,因此在 scanf() 中的 '%s' 格式说明符上设置最大输入字符数 4) foo() 应该检查 x 中字符串的长度和y 以确保这些字符串的 concat 适合 x。 5) foo() 当前保留来自 x 的字符串终止符 nul 字节,它应该覆盖它
-
@user3629249 实际上在 C 中,当函数不带任何参数时,输入 int main(void) 是正确的。