在编译这个程序时,我收到了我从未预料到的输出。当我审查这个程序时,我希望 pointer 的结果仍然是“Hello, world!”因为据我所知,pointer 从未受到 pointer2 的影响。然而,我的输出显示,当 pointer 被打印时,它包含 pointer2 的字符串“y you guys!”。怎么会这样??谢谢!!
#include <stdio.h>
#include <string.h>
int main() {
char str_a[20];
char *pointer;
char *pointer2;
strcpy(str_a, "Hello, world!\n");
pointer = str_a;
printf(pointer);
pointer2 = pointer + 2;
printf(pointer2);
strcpy(pointer2, "y you guys!\n");
printf(pointer);
}
输出
Hello, world!
llo, world!
Hey you guys!
最佳答案
你有一个内存区域,数组str_a
.
在 strcpy
之后调用和分配给 pointer
和 pointer2
在内存中看起来像这样:
+---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+ | H | e | l | l | o | , | | w | o | r | l | d | ! | \n | \0 | (uninitialized data) | +---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+ ^ ^ | | | pointer2 | pointer
变量pointer
指向 str_a[0]
和 pointer2
指向 str_a[2]
.
当您调用 strcpy
时与 pointer2
作为目的地,您更改 pointer2
的内存指向,这是与 pointer
相同的数组还指出,只是几个字符。
关于与指针程序的混淆(c编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38193619/