#include <stdio.h>
#include <string.h>
int main() {
char* p = new char[10];
memset(p,0,10);
printf("%c",*p);
}
私はmemset
セット0
にp
を開始するすべてのバイトを想定。私は何も見ないと少し驚いています。 memset
のために何が起こっていたのですか?Cのmemset出力
#include <stdio.h>
#include <string.h>
int main() {
char* p = new char[10];
memset(p,0,10);
printf("%c",*p);
}
私はmemset
セット0
にp
を開始するすべてのバイトを想定。私は何も見ないと少し驚いています。 memset
のために何が起こっていたのですか?Cのmemset出力
memset
すべてのバイトを0に設定します。したがって、p
を逆参照すると、値0(NULバイト)のchar
が得られます。ほとんどのシステムでは、char
などの印刷では目に見えない出力が生成されます。代わりに、バイトの数値を印刷する場合は、printf("%d", *p);
を使用してください。
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()は、文字列の最後にヌル文字を挿入しません。だから我々は明示的にそれをしなければならない。
memset(p、 '0'、10);を試してください。次にp [9] = 0とする。 (文字列の終わり)あなたが得るものを見てください。 –