【发布时间】:2020-07-15 19:47:33
【问题描述】:
我正在尝试一个简单的程序,该程序将从输入中读取一个字符串、一个大写字母和 2 个浮点数。
无论我如何调试、更改或检查代码或输入,我都会在最后一次读取令牌时遇到分段错误。
我输入的输入是:text A,1,2。我希望程序忽略大写字母和值之间的所有空格和逗号。
#include <stdio.h>
#include <string.h>
int main(){
char *value, *string;
char buffer[100];
float x;
if(fgets(buffer, sizeof(buffer), stdin)==NULL)
printf("empty input\n");
string = strtok(buffer, " ");
if(strcmp(string, "text")==0){
if((value = strtok(NULL, " \t\n")!=NULL)) /*seg.falt causes here*/
sscanf(value, " %f", &x); /*or here*/
}
}
如果我在控制台中使用p value 打印value 的值,它会显示0x1 <error: cannot access memory at adress 0x1,并且我假设它是一个空指针,但为什么呢?令牌中应该有2。
关于我缺少什么的任何见解?
【问题讨论】:
-
strtok 不会返回浮点数(%f 格式字符串)
-
啊,我的错,改成:sscanf(token, "%f", &y); printf("%f\n",y);但我仍然看到 x 没有从 sscanf 获得正确的值 (1)。 sscanf 是否应该从 char-string 令牌中获取浮点数并将其分配给 x?
-
您有
int x, y,因此请尝试在sscanf和printf中使用"%d",或更改为float x, y。 -
我也无法重现该段。错误,请尝试通过minimal reproducible example 指出问题
-
@ackdary 我认为这是我可以将代码缩短到核心问题的最好方法
标签: c segmentation-fault strtok