#include <stdio.h>
#include <string.h>
int main() {
char* p = new char[10];
memset(p,0,10);
printf("%c",*p);
}
我想memset
将每个字节设置p
为0
. 看到什么都没有打印出来,我有点惊讶。到底是为了memset
什么?
memset
确实将所有字节设置为0;因此,当您取消引用时p
,您会得到char
值为 0(NUL 字节)的 a,并且在大多数系统上,打印这样的 achar
不会产生可见的输出。如果要打印字节的数值,请使用printf("%d", *p);
.
ANS: 0(int 数据)被转换为等效的 char(ASCII),然后复制到所有 10 个内存数组上。巧合的是 0 (int) 到 char 的等价物是空字符 ''\0'。因此,屏幕上没有显示任何内容。从逻辑上讲,我们可以说 null 打印在屏幕上。
{ie; (char)0 is equivalent to '\0' (null character)}
说明:
memset(p,0,10);
观察第二个参数 0,它是一个整数(2 个字节),但是 memset() 必须在 p 的每个字节数组中设置 0 数据。如何在 1 字节内存空间上复制 2 字节整数?这是不可能的。
因此,memset() 方法首先将 int 数据类型转换为 char(1 字节),然后将 char(1 字节)写入该内存数组的每个字节。
注意: memset() 不会在字符串末尾放置任何空字符。所以我们必须明确地做到这一点。