Инициализация массива char * const с данными, которые не известны во время компиляции - PullRequest
0 голосов
/ 26 апреля 2020

Как инициализировать массив char * const с записями, которые не являются литеральными? Записи поступают со стандартного ввода. Я попытался

char * const args[2] = (char * const *)calloc(2,1025);
sscanf(command,"%s %s ",args[0],args[1]);
/*args will be used later*/

и получил «неверный инициализатор», если приведение не было там, и «приведение указывает тип массива», если приведение было там. И если бы я вообще избежал callo c, то обе записи аргументов оказались бы нулевыми. Кажется, что независимо от того, что я делаю, массив типа char * const не может быть заполнен значениями после того, как он объявлен.

Редактировать: Вот моя следующая попытка

char **args = (char **)calloc(1025,3);
/*Section A start*/
strcpy(args[0],(char*)"the");
strcpy(args[1],(char*)"thethe");
/*Section A end*/
sscanf(command,"%s %s ",args[0],args[1]);

Загадка что код является блоком кода следующим образом. Если я не включаю раздел A, то аргументы args [0], args [1] неверно равны нулю после sscanf (очевидно, sscanf плохо работает с нулевыми переменными). Если я включу раздел A, я получу ошибку по разделу A. Так что, похоже, я сбит с толку, независимо от того, в каком направлении я поверну. Возможно, есть альтернатива, некоторая секция B, которая дает однозначные значения args [0], args [1], чтобы они могли находиться в ненулевом состоянии, когда на сцене появляется sscanf.

1 Ответ

0 голосов
/ 26 апреля 2020

Последнее оставшееся исправление состоит в замене секции A на секцию B, показанную здесь:

char **args = (char **)calloc(1025,3);
/*Section B start*/
args[0] = (char*)malloc(1025);
args[1] = (char*)malloc(1025);
/*Section B end*/
sscanf(command,"%s %s ",args[0],args[1]);
...