繁体   English   中英

C Memset输出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM