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

10-08 07:11