Получение размера массива char *, переданного в качестве входа в функцию C ++ - PullRequest
0 голосов
/ 12 июля 2011

Я пытаюсь передать массив указателей символов в качестве входных данных из драйвера теста C в функцию C ++ (доступно в оболочке C)

char* LowerList[10];
LowerList[0]="abc";
LowerList[1]="def";
LowerList[2]="hij";

Когда доступно на стороне C ++, значения, отображаемые для элементаотображается как

char* LowerList[0]="abc";
LowerList[1]="def";
LowerList[2]="hij";
LowerList[3]=ƒì¶S<\$ UV<35?Ä@
LowerList[34]=ƒ<bad pointer>

Мне нужно получить размер массива, переданного в размер C ++, который я мог бы использовать с помощью while (LowerList [count]), но не смог сделать это из-за значения барахла,Пожалуйста, дайте мне знать, если я смогу найти правильный размер char * LowerList [] путем инициализации, выделения памяти или преобразования его в вектор.

Исправлен код выше для ошибки опечатки

Вот мои комментарии к некоторым предложениям, которые были мне даны:

1) Передайте размер массива в качестве параметра - ограничение для моего сценария. 2) Для преобразования в вектор нужен размербыть доступным 3) Значение Sentinel, в какой позиции мне нужно добавить.Как указывалось ранее, я пытаюсь обработать сценарий, в котором пользователь передает значение как 3, что приводит к сбою. У меня нет никакого контроля над тем, как ограничить использование C моей оболочкой C ++ с помощью его драйвера C-теста.

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Кроме того, ваша инициализация, как указано, совершенно неверна. У вас есть:

char* LowerList[10]; 
char* LowerList[0]="abc"; 
char* LowerList[1]="def"; 
char* LowerList[2]="hij";

То, что вы хотите:

char* LowerList[10]; 
LowerList[0]="abc"; 
LowerList[1]="def"; 
LowerList[2]="hij";

или альтернатива JAB. Проблема с вашей версией заключается в том, что вы по сути объявляете LowerList 4 раза, но вы не можете этого сделать.

1 голос
/ 12 июля 2011

Указатели от LowerList[3] до LowerList[9] неинициализированы, если я не ошибаюсь.Вы всегда можете просто использовать NULL в качестве значения часового и либо назначить его явно, либо сделать что-то вроде этого:

char* LowerList[10] = { "abc", "def", "hij" };

Это должно инициализировать оставшиеся указатели в массиве в NULL.

В ответ на ваш второй комментарий:

#define LOWER_LIST_SIZE 10
#define MINIMUM_SIZE 2

#if LOWER_LIST_SIZE < MINIMUM_SIZE
    #error "LOWER_LIST_SIZE must be >= MINIMUM_SIZE"
#endif

char *LowerList[LOWER_LIST_SIZE] = // etc.

Или что-то в этом роде.

http://en.wikipedia.org/wiki/C_preprocessor#User-defined_compilation_errors_and_warnings

...