我对声明和使用字符感到困惑-例如在此sscanf示例中

时间:2018-11-09 20:41:22

标签: c++ char scanf

以下示例可以正常工作:

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; data1 = 150

但是如果命令定义为:我不知道如何使这项工作: char command;char * command

2 个答案:

答案 0 :(得分:0)

如果有

char command;

然后您可以使用地址运算符&

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

如果有

char *command;

然后您首先需要将指针指向有效的某个地方:

command = malloc(1);

char actual_command;
command = &actual_command;

然后像在问题中一样使用command


所有这些都应该放在课本中或在课堂上讲授。如果没有,请改书或上课(或者,如果错过的话,在课上多加注意)。

答案 1 :(得分:0)

  

如果命令定义为:char,我不知道如何使它工作   命令;或char *命令。

您始终需要确保传递了sscanf 要在其中存储值的字符地址。(最初,您传递的是command,即char的数组名称,它等于数组中第一个成员的地址(唯一的成员,因为“ you”声明的数组大小为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);