Я запутался в объявлении и использовании символов - например, в этом примере sscanf - PullRequest
0 голосов
/ 09 ноября 2018

Следующий пример отлично работает:

char rc[20]="1,150";
char command[1];
int data1 = 0;
int data2 = 0;
int data3 = 0;
int count = sscanf(rc, "%c,%d,%d,%d", command, &data1, &data2, &data3); 

Это дает: количество = 2; команда [0] = 1; данные1 = 150

Но я не знаю, как заставить это работать, если команда определена как: char command; или char * command.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Я не знаю, как заставить это работать, если команда определена как: char команда; или команда char *.

Вы всегда должны убедиться, что sscanf передан адрес символа , в котором вы хотите сохранить значение. (Первоначально вы передали command, который является именем массива char, что эквивалентно адресу первого члена в массиве (единственный член, так как «вы» объявили размер массива 1.))

В первом случае ваш код почти верен как есть.

char command;
int count = sscanf(rc, "%c,%d,%d,%d", &command, &data1, &data2, &data3); 

Второй случай сложнее. Адрес символа легко передать, потому что command будет именно таким типом. Но на что указывает указатель? Вам нужно инициализировать его значение так, чтобы оно указывало на char, в которое вы можете записать.

char comm_value = '?';
char* command = &comm_value;
int count = sscanf(rc, "%c,%d,%d,%d", command, &data1, &data2, &data3); 
0 голосов
/ 09 ноября 2018

Если у вас есть

char command;

тогда вы можете использовать адрес оператора &:

sscanf(..., &command, ...);

Если у вас есть

char *command;

тогда вам сначала нужно сделать указатель где-нибудь действительным:

command = malloc(1);

или

char actual_command;
command = &actual_command;

, затем используйте command, как вы делаете в своем вопросе.


Все это должно быть в вашем учебнике или преподаваться в классе. Если нет, то поменяйте книгу или класс (или уделите больше внимания в классе, если вы его пропустили).

...