编译这个程序时,我收到了一个我从未预料到的输出当我回顾这个程序时,我希望指针的结果仍然是“你好,世界!”因为据我所知指针从未受到指针2的影响然而,我的输出显示,当指针被打印时,它包含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
之后,在内存中看起来像这样:
+---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+
|H | e | l | l | o |,| w | o | r | l | d ||\n | \0 |(未初始化的数据)|
+---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+
^ ^
| |
|指针2
|
指针
变量pointer2
指向pointer
,str_a[0]
指向pointer2
。
当您使用str_a[2]
作为目标调用strcpy
时,您将更改pointer2
指向的内存,这是pointer2
也指向的同一个数组,只是后面的几个字符。