[英]C Memset output
#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字节),并且在大多数系统,打印这样的char
不产生可见的输出。 如果要打印字节的数值,请使用printf("%d", *p);
。
ANS: 0(int数据)被类型转换为等效的char(ASCII),然后复制到所有10个内存数组中。 巧合的是,与char等效的0(int)是空字符''\\ 0'。 因此,屏幕上什么也没有显示。 从逻辑上讲,我们可以说在屏幕上打印了null。
{ie; (char)0 is equivalent to '\0' (null character)}
说明:
memset(p,0,10);
观察第二个参数0,它是一个整数(2个字节),但是memset()必须在p的每个字节数组中设置0数据。 如何在1个字节的存储空间上复制2个字节的integet? 这是不可能的。
因此,memset()方法首先将int数据类型转换为char(1个字节),然后将char(1个字节)写入该内存阵列的每个字节。
注意:memset()不会在字符串末尾放置任何空字符。 因此,我们必须明确地做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.