0
#include <stdio.h>
#include <string.h>

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

からmemset始まるすべてのバイトを設定すると思います。何も印刷されていないのに少し驚いています。一体何が起こっていたのですか?p0memset

4

2 に答える 2

6

memsetすべてのバイトを0に設定します。したがって、を逆参照pするcharと、値0(NULバイト)のaが得られ、ほとんどのシステムでは、そのようなacharを出力しても目に見える出力は生成されません。代わりにバイトの数値を出力する場合は、を使用しますprintf("%d", *p);

于 2011-12-09T18:37:55.353 に答える
0

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()は、文字列の最後にヌル文字を入れません。したがって、明示的に行う必要があります。

于 2015-05-12T10:26:07.513 に答える