включить код C на C ++ странная ошибка

0

Я пытаюсь использовать некоторые C-функции (сделанные мной) в коде c++. Я использую Eclipse.

Код Main.cpp:

#include <Windows.h>
extern "C" {
   #include "f.h"
}
int main(){
   return 1;
}

Теперь у меня много функций, но это дает мне ошибку на тех, у которых есть эта строка инициализации. Таким образом, мой fh код:

char o[9] = "00000000\0";

Но...

initializer-string for array of chars is too long   f.h

если я скомпилирую его в C Это будет работать... почему?

  • 0
    Если вы дадите длину для массива char в C и инициализируете его именно таким количеством символов, к строке не добавляется 0-терминатор. Я не знаю, как обстоят дела в C ++, но я знаю, что это действительно C.
  • 0
    да, инфа в C действительна! В С ++ нет! но с extern "C", я хочу сделать его действительным в C ++ (но это не работает)
Показать ещё 14 комментариев
Теги:
include

4 ответа

1

Он пытается скопировать десять символов в массив, который вы определили как 9 символов.

Пытаться:

char o[9] = "00000000";

он уже имеет нулевой символ в конце. Или попросите компилятор выполнить подсчет. то есть.

char o[] = "00000000";
  • 0
    в C является действительным, и я пытаюсь скомпилировать этот заголовок в C
0

Вы сказали компилятору, что вы предоставите ему 9 символов, вместо этого вы предоставили только 8, просто потому, что нулевой символ не учитывается при подсчете символов.

char o[8] = "00000000\0";

Попробуй это. Это также может работать.

char o[8] = "00000000";
  • 0
    На самом деле они предоставили ему 10 символов, а ваш массив слишком мал на 1 элемент.
  • 0
    char o [9] = "00000000 \ 0"; в т работает! И я пытаюсь скомпилировать код FH как C не C ++
Показать ещё 3 комментария
0

Причина в том, что c-строка автоматически добавит '\ 0' в конце. Так,

"00000000\0"

Реальное представление памяти "00000000\0\0", которое составляет 10 байтов.

  • 0
    Это верно, только если вы не дадите длину явно.
0

Нет необходимости явно писать \0, если вы заключаете в двойные кавычки, она обрабатывается как строка с нулевым завершением.

  • 0
    в C является действительным, и я пытаюсь скомпилировать этот заголовок в C из проекта C ++
  • 0
    @ user2903357 Я использовал extern "C", все еще не работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню