c - 使用 GDB 检查 C 指针

标签 c pointers gdb

我目前正在准备一本书,并且正在学习使用 GDB 检查 C 中的指针。在书中,当您检查指针时,输出如下:

(gdb) x/xw pointer
0xbffff7e0: 0x6c6c6548
(gdb) x/s pointer
0xbffff7e0: "Hello, world!\n"
(gdb)

但是当我自己这样做时,我得到以下输出:

(gdb) x/xw pointer
0x7ffff7de59a0 <_dl_fini>:  0xe5894855
(gdb) x/s pointer
0x7ffff7de59a0 <_dl_fini>:  "UH\211\345AWAVAUATSH\203\354(L\213%\250\177!"

我的问题是:为什么我会得到如此不同的输出。 我知道我做错了什么,但是,那是什么?

谢谢大家。

源代码:

#include <stdio.h>
#include <string.h>

int main() {

    char str[20];
    char *pointer;
    char *pointer2;

    strcpy(str, "Hello, world!\n");
    pointer=str;
    printf(pointer);

    pointer2=pointer+2;
    printf(pointer2);
    strcpy(pointer2, "y you guuuys!\n");
    printf(pointer);
}

最佳答案

我怀疑你的“错误”是,“x/s 指针”返回指针指向的“字符串”(记住:字符串以\0 结尾)。 然而,在这种情况下,您的指针不是字符串,这就是为什么您会得到那个奇怪的“字符串”

关于c - 使用 GDB 检查 C 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51603106/

相关文章:

c - 逃离 chroot()

c++ - Eclipse 中 C++ 调试的 macOS 10.15 Catalina gdb 问题

c++ - 函数名和函数指针

c - 在 CUDA C 中取消引用指针

c++ - 在析构函数中删除指针时崩溃

gdb - 在 GDB 中调试使用 MinGW32 编译的 Ada 应用程序

c++ - 如何使 GDB 更快

c - 我们什么时候应该在 C 中使用断言?

c - AIX 5.3 与 Solaris 5.10 - C strcat 实现

c - 使用循环和 switch 语句进行一维数组操作迭代