#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個の配列すべてにコピーされます。偶然にも、charと0(int)に相当するのは、ヌル文字`'\0'です。そのため、画面には何も表示されません。論理的には、nullが画面に出力されていると言えます。
{ie; (char)0 is equivalent to '\0' (null character)}
説明:
memset(p,0,10);
(2バイトの)整数である2番目のパラメーター0を観察しますが、memset()はpの各バイト配列に0データを設定する必要があります。2バイトの整数を1バイトのメモリスペースにコピーするにはどうすればよいですか?これは不可能です。
したがって、memset()メソッドは最初にintデータをchar(1バイト)に型キャストし、次にchar(1バイト)をそのメモリ配列の各バイトに書き込みます。
注:memset()は、文字列の最後にヌル文字を入れません。したがって、明示的に行う必要があります。