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)