2011-12-09 13 views
0
#include <stdio.h> 
#include <string.h> 

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

私はmemsetセット0pを開始するすべてのバイトを想定。私は何も見ないと少し驚いています。 memsetのために何が起こっていたのですか?Cのmemset出力

+3

memset(p、 '0'、10);を試してください。次にp [9] = 0とする。 (文字列の終わり)あなたが得るものを見てください。 –

答えて

6

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

0

ANS: 0(intデータ)は、同等のchar(ASCII)に型キャストされ、メモリ10個すべてにコピーされます。偶然にも、0(int)とcharの対応はnull文字 `'\ 0'です。したがって、画面に何も表示されません。 論理的には、画面にヌルが印刷されていると言えます。

{ie; (char)0 is equivalent to '\0' (null character)} 

、について説明:

memset(p,0,10); 

オブザーバー(2バイト)の整数であり、第二パラメータ0、しかしのmemset()は、各バイト配列に0データを設定する必要がありますpの。 1バイトのメモリ空間に2バイトの整数をコピーする方法は?これは不可能です。

memset()メソッドはまずintデータをchar(1バイト)に型キャストし、そのメモリ配列の各バイトにchar(1バイト)を書き込みます。

メモ:memset()は、文字列の最後にヌル文字を挿入しません。だから我々は明示的にそれをしなければならない。