0

私は次のコードを持っています

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

int main (void)
{

    unsigned int pqr = 201;
    unsigned int def = 113;

    printf("The values are,%u,%s,%s,%u\n", pqr,"\0","\0",def);
    printf("The values are,%u,%d,%d,%u\n", pqr,atoi("\0"),atoi("\0"),def);


}

値は、201 ,,, 113
です。値は、201,0,0,113です。

最初のprintfは、値の文字列がNULLに設定されていて、フォーマット指定子 "%S"を使用した場合、何も表示しません。2番目のフォーマット指定子%dを使用して同じ結果を得るにはどうすればよいですか。現在、何も表示されない代わりに「0」が表示されます。

4

4 に答える 4

4

最初のprintfは、値の文字列がNULLに設定されていて、フォーマット指定子 "%S"を使用した場合、何も表示しません。

""空の文字列です。"\0"ヌル文字が追加された空の文字列です。と同じではありませんNULL。変換指定子にnullポインターを渡すことsは、未定義の動作です。

2番目のフォーマット指定子%dを使用して同じ結果を得るにはどうすればよいですか。

それはいけません。変換仕様を使用すると、値が出力printfされます。何も印刷できません。%dint

于 2012-10-15T19:23:50.500 に答える
3

%d常に整数を出力するため、常にいくつかの数字のシーケンスを出力します。整数の概念はNULLないので、何も印刷しないようにすることはできません。

ちなみに、は文字列で"\0"はありません。は。は、すべての文字列の目的で、と同等です。NULLNULL"\0"""

于 2012-10-15T19:25:24.773 に答える
0

このatoi()関数は文字列を整数に変換します。これにより、null文字列()のが0であり、数値ではないランダム文字列のatoiも0である0ため、2番目のケースで出力されます。atoi"\0"0

%d整数の表示に使用され、%sは文字列の表示に使用されます

于 2012-10-15T19:27:14.830 に答える
0

0かどうかをテストし、必要な場合は印刷します。

{
    int number = 0;
    char dummy[24];
    printf("This is the number: %s\n", (number == 0)? "" : itoa(number, dummy, 10));
}

三項演算子(? :)は、数値がゼロかどうかを確認する必要があります。ゼロの場合は、出力される空の文字列を返します。

数値がゼロでない場合はitoa 、数値(基数10)で(整数からASCIIへ)実行され、その文字列が返されます。

動作するには、結果を格納するためitoaのバッファ、つまりdummy変数が必要です。

于 2012-10-15T19:25:15.730 に答える