1. ホーム
  2. c

[解決済み】なぜか。"エラー: 配列型を持つ式への代入"

2022-02-13 20:47:10

質問

#include <stdio.h>

int main(void) {
    int arr[10];
    arr = "Hello";
    printf("%s",arr);
    return 0;
}

上記のコードでは、コンパイラーエラーが発生します。

t.c: In function ‘main’:
t.c:5:9: error: assignment to expression with array type
     arr = "Hello";
         ^
t.c:6:12: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int *’ [-Wformat=]
     printf("%s",arr);
            ^

一方、以下のコードでは正常に動作します。

#include <stdio.h>

int main(void) {
    char arr[10] = "Hello";
    printf("%s",arr);
    return 0;
}


私にはどちらも同じに見えます。何か見落としているのでしょうか?

解決方法は?

それらは ではない を同一とする。

まず第一に、このような方法で int を文字列リテラルで配列化し、最悪の場合は 未定義の動作 ポインタから整数への変換とその変換結果の有効性は、プラットフォーム固有の動作であるためです。この点で、両方のスニペットは無効です。

次に、データ型を修正するために char 配列が使用されます。

  • 最初の場合

    arr = "Hello";
    
    

    割り当て これは,代入のLHSが配列型である場合には許されない.

  • OTOH

    char arr[10] = "Hello";
    
    

    初期化 という文がありますが、これは完全に有効な文です。