#include <stdio.h>
#include <string.h>
int main() {
char* p = new char[10];
memset(p,0,10);
printf("%c",*p);
}我认为memset会将从p开始的每个字节都设置为0。我有点惊讶,什么都没有打印出来。memset到底发生了什么?
发布于 2011-12-10 02:37:55
memset会将所有字节设置为0;因此,当您取消对p的引用时,会得到一个值为0( NUL字节)的char,并且在大多数系统上,打印这样的char不会产生任何可见的输出。如果您想打印字节的数值,请使用printf("%d", *p);。
发布于 2015-05-12 18:26:08
ASCII:0(整型数据)被类型转换为等价的字符(),然后复制到所有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()不会将任何空字符放在字符串的末尾。所以我们必须明确地这样做。
https://stackoverflow.com/questions/8450086
复制相似问题