Visual c++ vc++;sscanf将%f分配给双精度';行不通
我在这里哪里做错了Visual c++ vc++;sscanf将%f分配给双精度';行不通,visual-c++,Visual C++,我在这里哪里做错了 char *cmt,*dump; double value=0; if (cmt = strstr(fulldesc, "(TR=")) { sscanf(cmt, "%s=%f)",dump, &value); fulldesc类似于“(TR=100.5)”或“(TR=1000)” 我已经试过把双人换成浮动 但是当我以后打印它时,它的值总是0或系统崩溃您正在使用%s格式说明符将cmt扫描到未初始化的指针转储中。撞车是你能得到的最好的
char *cmt,*dump;
double value=0;
if (cmt = strstr(fulldesc, "(TR="))
{
sscanf(cmt, "%s=%f)",dump, &value);
fulldesc类似于“(TR=100.5)”或“(TR=1000)”
我已经试过把双人换成浮动
但是当我以后打印它时,它的值总是0或系统崩溃您正在使用
%s
格式说明符将cmt
扫描到未初始化的指针转储中。撞车是你能得到的最好的东西
增加:
好的,根据,当sscanf()
处理%s
时,它的内容是:
字符串,最多为第一个空格字符(空格、制表符或换行符)
输入中没有空格,因此整个字符串(TR=100.5)
被分配到dump
但是,既然你知道字符是什么,你为什么还需要这个转储文件呢?只需使用:
sscanf(cmt, "(TR=%f)", &value);
您正在使用%s
格式说明符将cmt
扫描到未初始化的指针转储
。撞车是你能得到的最好的东西
增加:
好的,根据,当sscanf()
处理%s
时,它的内容是:
字符串,最多为第一个空格字符(空格、制表符或换行符)
输入中没有空格,因此整个字符串(TR=100.5)
被分配到dump
但是,既然你知道字符是什么,你为什么还需要这个转储文件呢?只需使用:
sscanf(cmt, "(TR=%f)", &value);
我使用%lf扫描到两倍
是的,正如Vlad所说,%s读取整个字符串,因此%lf不会得到值我使用%lf扫描到双精度
是的,正如Vlad所说,%s读取整个字符串,因此%lf不会得到值谢谢Vlad,我将*dump更改为dump[32],它不再崩溃,但仍然无法获得双值来准备代码,以防将来在cmt之前或之后(TR=%lf)会有额外的值。谢谢Vlad,我将*dump更改为dump[32]而且它不再崩溃,但仍然无法获得双精度值来准备代码,以防将来在cmt之前或之后出现额外的错误(TR=%lf)