Memset 没有将 char 指针归零
Memset not zeroing char pointer
我知道有很多这样的问题,这可能是一个简单的问题,但我似乎无法弄明白:(
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(p,v,n)
将字节 v
写入由 p
和其后的 n-1
字节指向的字节。根本不碰指针p
(按值传入,怎么会呢?)
您正在打印缓冲区的地址,而不是其内容。在 memset()
之后的内容 是 零。试试看:
printf("%d", char_buffer[0]);
并查看零 ;)
您对指针和space被指向的区别感到困惑。
您的代码没有将指针归零。它将指向的 space 清零。 memset
函数以这种方式运行。事实上,您不想将指针归零,因为那样它就不再指向您分配的内存。
您的 printf
语句试图打印指针的值,即所指向的 space 的地址。不是指向 space 的内容。
实际上 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 *
,在这种情况下就不需要强制转换了。
要打印出缓冲区,您必须遍历它。我使用这样的东西:
void printbuf(char *buf, int size)
{
int i = 0;
char b = 0;
for (i = 0; i < size; i++) {
if (i % 8 == 0) {
printf("\n%3d: ", i);
}
b = buf[i];
printf("%2hhX ", b);
}
}
我知道有很多这样的问题,这可能是一个简单的问题,但我似乎无法弄明白:(
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(p,v,n)
将字节 v
写入由 p
和其后的 n-1
字节指向的字节。根本不碰指针p
(按值传入,怎么会呢?)
您正在打印缓冲区的地址,而不是其内容。在 memset()
之后的内容 是 零。试试看:
printf("%d", char_buffer[0]);
并查看零 ;)
您对指针和space被指向的区别感到困惑。
您的代码没有将指针归零。它将指向的 space 清零。 memset
函数以这种方式运行。事实上,您不想将指针归零,因为那样它就不再指向您分配的内存。
您的 printf
语句试图打印指针的值,即所指向的 space 的地址。不是指向 space 的内容。
实际上 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 *
,在这种情况下就不需要强制转换了。
要打印出缓冲区,您必须遍历它。我使用这样的东西:
void printbuf(char *buf, int size)
{
int i = 0;
char b = 0;
for (i = 0; i < size; i++) {
if (i % 8 == 0) {
printf("\n%3d: ", i);
}
b = buf[i];
printf("%2hhX ", b);
}
}