循环中的奇怪指针行为
Strange pointer behaviour in loop
我不知道为什么这段代码不起作用。(我知道如何解决它,但我对这个特定的解决方案感兴趣)它接受一个字符串并放在另一个字符串的末尾。 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 = ' ';
}
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++;
即使在
发现 null 并且循环完成后,此表达式也会递增x
:
while(*x++);
在这种情况下,您将第二个字符串附加到 null 之后,以便不会"看到"字符串的一部分。字符串变为 "abc def"
。
当找到 null 时,以下内容不会递增x
,因此*x
循环完成后将指向 null:
while(*x) x++;
因此,在这种情况下,您的字符串正确显示为 "abcdef"
.
这个循环:
while(*x++);
x
移动到空终止符之外。所以你的c-string在和以前一样的地方结束。y
中的字符被写入x
,但它们在空终止符之后,因此它们不会被打印出来。
当您使用
while(*x++);
x
指向语句末尾的 null 字符后面的一个。实际上,你最终会得到
x[] = {'a', 'b', 'c', ' ', 'd', 'e', 'f', ' ', ....}
在main
.
相关文章:
- 用于C++中带有数组和指针的循环
- C++指针在 for 循环中被覆盖
- C++ - 循环访问指针数组会导致错误
- 为什么循环会导致指针出现问题?
- 如何循环访问 cpp 中的函数返回的字符指针数组
- foor 循环的最后一次迭代中的指针更改
- 在 for 循环中定义的临时数组,并分配给属于指针数组的指针
- foreach循环中指针到std::unique_ptr的隐式转换
- 在循环(C++)中用新指针填充映射
- 使用基于范围的指针循环和向量时出现C++错误
- 使用基于范围的for循环取消对矢量指针的引用
- 在指针迭代中使用for循环时出现分段错误
- 用基于范围的for循环填充指针向量
- 指针上的 For 循环:它会移动整个地址范围吗?
- 在循环迭代期间将引用保存到矢量中的空指针
- For 循环使用指针遍历数组无法正常工作
- 使用指针循环访问 RAM
- 通过指向函数的指针循环传递数组的一部分
- 通过指针循环遍历字符串数组
- 使用指针循环访问多维数组