8

通常、文字列を入力するときは、次のようにします。

#include <stdio.h>
int main()
{
    char str[256];
    scanf("%s",str);
    //Other Operation
}

しかし、今日、プログラミングの授業で、私の友人の一人が次scanfのような行を書きました:

scanf("%s",&str);

コンパイルに合格し、動作します。

問題は、これが C で「合法」かどうか、または単に未定義の動作かどうかを知りたいということです。

4

3 に答える 3

6

これは未定義の動作です (型は is をscanf()期待しているがchar *、 a を渡すためchar (*)[256])、配列のアドレスは (ポインターの数値に関して) 多くの場合、最初の要素のアドレス。

公式ドキュメントから:

このオブジェクトに適切な型がない場合、または変換の結果が提供されたスペースで表現できない場合、動作は未定義です。

(私のものを強調)

于 2013-08-13T16:45:00.740 に答える