4

以下は、.cppファイルと.cファイルとして保存された私のコードです

.cでは正常にコンパイルされましたが、.cppで次のエラーがスローされました

test.cpp:6: error: initializer-string for array of chars is too long
test.cpp:6: error: initializer-string for array of chars is too long

 

#include< stdio.h>

int main()
{

char str[2][2]= { "12", "12"};
int i;

for(i=0; i<2; i++)
printf("%d %s\n", i, str[i]);

return 0;
}

c++コンパイラがこれをCコード自体として受け取るようなコンパイラ指令などはありますか。

私は、extern "C"を試しましたが、役に立ちませんでした。

4

5 に答える 5

14

文字列「12」は、C++ で 3 か所を保持します (C でも、ところで)。終端用にもう 1 文字必要です'\0'

char str[2][3]= { "12", "12"};
于 2011-11-23T08:53:32.207 に答える
10

これは「合う」だろう

char str[2][2] = {
  { '1', '2' },
  { '1', '2' }
};

しかし、あなたはこれが欲しいです: https://ideone.com/wZB8F

char str[2][3]= { "12", "12"};

nullそうしないと、終了文字を入れる余地がありません

同等:

char str[2][3]= { { '1', '2', '\0' },
                  { '1', '2', '\0' } };
于 2011-11-23T08:52:56.790 に答える
1

C++ は C よりも厳密な言語です。問題は、2 文字の配列を含む配列を作成し、各サブ配列に 3 文字 (シーケンス と文字列ターミネータ) を割り当てる'1'こと'2'です'\0'

配列は次のように宣言する必要があります。

char str[2][3]= { "12", "12"};

C コンパイラはこれにフラグを立てず、文字列ターミネータをスキップするため、printfステートメントは文字列の後にガベージを出力する可能性が高くなります。

于 2011-11-23T08:55:59.190 に答える
0

問題の解決にはなりませんが、コンパイルする言語を選択できます。gcc では -x フラグであり、その後に言語が続く必要があります。gcc -xc something.cpp のように ... C コンパイラを使用してコンパイルします。

于 2011-11-23T09:07:44.853 に答える
0
#include< stdio.h>

int main() 
{
    char str[][3]= { "12","12"}; 
    int i;

    for(i=0; i<2; i++) 
    {
        printf("%d %s\n", i, str[i]);
    }

    return 0; 
}

C++で動作するバージョンです....

于 2011-11-23T08:56:14.080 に答える