vc ++ sscanf将%f分配给double并不起作用

时间:2016-01-12 13:09:04

标签: 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)" 我已经尝试将double更改为float 但是我以后打印时的值总是0或系统崩溃

2 个答案:

答案 0 :(得分:2)

您正在使用cmt格式说明符将%s扫描到未初始化的指针dump中。崩溃是你能得到的最好的事情。

增加:

嗯,根据MSDN,当sscanf()处理%s时,它会显示:

  

字符串,直到第一个空白字符(空格,制表符或换行符)

输入中没有空格,因此整个字符串"(TR=100.5)"已分配给dump

但是为什么你还需要dump,因为你知道字符是什么?只需使用:

sscanf(cmt, "(TR=%f)", &value);

答案 1 :(得分:0)

我使用%lf扫描到双倍 是的,因为弗拉德说%s读取整个字符串,所以%lf没有得到值