компилировать код c ++ в режиме c - PullRequest
4 голосов
/ 23 ноября 2011

Ниже мой код сохранен как файл .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 ++ воспринимал это как сам код на языке С.

Я пробовал extern "C", что не помогло.

Ответы [ 5 ]

14 голосов
/ 23 ноября 2011

Строка символов "12" содержит 3 места в C ++ (тоже в C, кстати). Вам нужен еще один символ для окончания '\0'.

char str[2][3]= { "12", "12"};
10 голосов
/ 23 ноября 2011

Это "подходит"

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' } };
1 голос
/ 23 ноября 2011

C ++ является более строгим языком, чем C. Проблема состоит в том, что вы создаете массив, содержащий массивы из двух символов, а затем назначаете каждому подмассиву три символа (последовательность '1', '2' и терминатор строки '\0').

Массив должен быть объявлен так:

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

Компилятор C не помечает это и пропускает строку-терминатор, поэтому ваш оператор printf будетскорее всего выведите мусор после строки.

0 голосов
/ 23 ноября 2011

Хотя это не поможет вашей проблеме, вы можете выбрать язык для компиляции. С gcc это флаг -x, за которым должен следовать язык. Как gcc -x c что-то.cpp ... будет использовать компилятор c для компиляции.

0 голосов
/ 23 ноября 2011
#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 ++ ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...