首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C Memset输出

C Memset输出
EN

Stack Overflow用户
提问于 2011-12-10 02:34:56
回答 2查看 514关注 0票数 0
代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int main() {
  char* p = new char[10];
  memset(p,0,10);
  printf("%c",*p);
}

我认为memset会将从p开始的每个字节都设置为0。我有点惊讶,什么都没有打印出来。memset到底发生了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-10 02:37:55

memset会将所有字节设置为0;因此,当您取消对p的引用时,会得到一个值为0( NUL字节)的char,并且在大多数系统上,打印这样的char不会产生任何可见的输出。如果您想打印字节的数值,请使用printf("%d", *p);

票数 6
EN

Stack Overflow用户

发布于 2015-05-12 18:26:08

ASCII:0(整型数据)被类型转换为等价的字符(),然后复制到所有10个内存数组上。巧合的是,0 (int)与char的等价物是空字符`'\0‘。因此,屏幕上没有显示任何内容。从逻辑上讲,我们可以说在屏幕上打印的是null。

代码语言:javascript
复制
{ie; (char)0 is equivalent to '\0' (null character)}

解释:

代码语言:javascript
复制
memset(p,0,10);

观察第二个参数0,它是一个整数(2字节),然而memset()必须在p的每个字节数组中设置0数据。如何在1字节的内存空间上复制2字节的整数?这是不可能的。

因此,memset()方法首先将int数据类型转换为char(1字节),然后将char (1字节)写入该内存数组的每个字节。

注意: memset()不会将任何空字符放在字符串的末尾。所以我们必须明确地这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8450086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档