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

标签 c pointers

在编译这个程序时,我收到了我从未预料到的输出。当我审查这个程序时,我希望 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/

相关文章:

c - C 控制台应用程序的输入返回令人困惑的条件输出响应组合

c - 为什么下面代码的答案是1000?

c - 数组显示其指针而不是其值

c - 为什么这个 C 代码会出现总线错误? (不允许外部函数)

pointers - 戈朗 Cgo : panic: runtime error: cgo argument has Go pointer to Go pointer

创建一个跳房子游戏,看看它在 c 中是否可解

C 套接字客户端/服务器滞后

c++ - Windows 上有复制文件夹的界面吗?

将字符串与字母进行比较,参数不兼容

c - 空指针算术和取消引用