0

メモリ内のバッファを開き、データを書き込む次のコードがあります。

int main() {
    char buf[1000] = {0};
    FILE * os = fmemopen(buf, 1000, "w");
    fprintf(os, "%d", 100);
    fclose(os);

    printf("%d\n", buf);

    return 0;
}

出力は、 : または負の数などの乱数895734416です...なぜこれが起こっているのですか?

4

3 に答える 3

3

printf("%d\n", buf);buf戻り値の代わりにアドレスを出力します。

于 2013-08-28T04:47:07.927 に答える
3
printf("%d\n", buf);

これは、のアドレスをbufポインター変数として出力します。

本当にそのアドレスを印刷したい場合は、%p代わりに%d.

文字列を出力したい場合は を使用%sしますが、ファイルから読み取ったバッファがヌルで終了していることを確認してください。

于 2013-08-28T04:48:50.890 に答える
1

メモリには、すべてのデータが 1 と 0 で格納されます。データをどのように解釈するかはあなた次第です。

If you want the data to be printed as integer, use %d.
If you are printing a address , use %p.
If you want the data to be printed as char, use %c.
If you want the data to be printed as string, use %s.

あなたの例では、使用

printf("%d\n", buf);

適切な出力を得るために。

于 2013-08-28T04:54:39.577 に答える