我试图使用" strtok"将用户输入分成4个部分。所以一个示例字符串看起来像" john 1.3 2.4 3"。
我想将第一个存储在字符数组中,第二个和第三个存储为浮点变量,最后一个存储为整数。
首先,我尝试使用scanf并将变量存储到所需的位置。 我被告知使用fgets并拆分字符串会更好。我的代码如下所示:
char Input[4];
char names[5];
struct numbers
{
float start;
float end;
int rows;
}values;
fgets(Input, sizeof(Input), stdin);
token = strtok(Input, " ");
strcpy(names, token);
values.start = atof(strtok(NULL, " "));
values.end = atof(strtok(NULL, " "));
values.rows= atoi(strtok(NULL, " "));
输入用户输入后出现分段错误。 我怎么解决这个问题? 使用scanf更好吗?
答案 0 :(得分:1)
char Input[40];
char names[5];
char *token;
struct numbers
{
float start;
float end;
int rows;
}values;
fgets(Input, sizeof(Input), stdin);
token = strtok(Input, " ");
strcpy(names, token);
values.start = atof(strtok(NULL, " "));
values.end = atof(strtok(NULL, " "));
values.rows= atoi(strtok(NULL, " "));
printf("%s\n %.1f\n %.1f\n %d",names,values.start,values.end,values.rows);
增加Input数组的大小。
答案 1 :(得分:1)
解决方案:请增加"输入"。
的大小问题原因:根据您的代码"输入"只能有四个 字符。因此,当输入字符串超过4个字符时," strtok"尝试 读取数据超出边界,可能导致分段错误。