c - Memset 未将 char 指针归零

标签 c memset

我知道有很多这样的问题,这可能是一个简单的问题,但我似乎无法弄清楚:(

char * char_buffer = (char *) malloc(64);
printf("%x\n", char_buffer);
memset(char_buffer,
       0,
       64);

printf("%x\n", char_buffer);

输出:

50000910
50000910

为什么 char_buffer 不归零?有人可以解释一下发生了什么吗?

最佳答案

您对指针所指向的空间之间的区别感到困惑。

您的代码不会将指针归零。它将指向的空间归零。 memset 函数就是这样的。事实上,您不想将指针归零,因为这样它将不再指向您分配的内存。

您的printf语句尝试打印指针的值,即所指向空间的地址。不是所指向的空间的内容。

实际上 printf 语句会导致未定义的行为,因为您不匹配格式说明符。您的编译器应该对此发出警告。

这是一些正确的代码:

printf("The buffer's address is %p\n", char_buffer);
printf("The buffer contains: %02X %02X %02X ...\n", 
    (unsigned char)char_buffer[0],
    (unsigned char)char_buffer[1],
    (unsigned char)char_buffer[2]);

要使用 %X 说明符,您必须传入非负值,这就是强制转换的原因。您可以将缓冲区声明为 unsigned char *,在这种情况下,不需要进行强制转换。

关于c - Memset 未将 char 指针归零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33355442/

相关文章:

C动态分配的数组使用memset进行初始化

c - 使用 calloc 进行赋值

c++ - 这两个memset有什么区别?

c - C-使用枚举向用户发送错误消息?

c strcpy 文件描述符

有人能解释一下这个C函数吗?

c++ memset导致int **指针的段错误

c - C中的sprintf和printf有什么区别?

c - 获取单个字符并将其传递给 C 中的函数

c - 使用 memset 时出现运行时错误