我知道有很多这样的问题,这可能是一个简单的问题,但我似乎无法弄清楚:(
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/