我在哪里做错了?
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或系统崩溃
答案 0 :(得分:2)
您正在使用cmt
格式说明符将%s
扫描到未初始化的指针dump
中。崩溃是你能得到的最好的事情。
增加:
嗯,根据MSDN,当sscanf()
处理%s
时,它会显示:
字符串,直到第一个空白字符(空格,制表符或换行符)
输入中没有空格,因此整个字符串"(TR=100.5)"
已分配给dump
。
但是为什么你还需要dump
,因为你知道字符是什么?只需使用:
sscanf(cmt, "(TR=%f)", &value);
答案 1 :(得分:0)
我使用%lf扫描到双倍 是的,因为弗拉德说%s读取整个字符串,所以%lf没有得到值