gpt4 book ai didi

与指针程序的混淆(c编程)

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:43 24 4
gpt4 key购买 nike

在编译这个程序时,我收到了我从未预料到的输出。当我审查这个程序时,我希望 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 之后调用和分配给 pointerpointer2在内存中看起来像这样:

+---+---+---+---+---+---+---+---+---+---+---+---+---+----+----+----------------------+| 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com