为什么用argv []调用sscanf()只能使用一次?

问题描述:

我需要得到argv [1]和argv [2]不同的类型。我发现我只能使用sscanf()一次,否则无法检索argv中的下一个字符串。 这是我的代码。为什么用argv []调用sscanf()只能使用一次?

int main(int argc, char *argv[]) 
{ 
    char t; 
    float temp; 
    sscanf(argv[1], "-%[cf]",&t); 
    sscanf(argv[2], "%f", &temp); 
    return 0; 
} 

只有第一个sscanf()可以获得格式化的值。 我怎样才能完成argv [2]?

+3

'argc'的价值是什么。 'argv [2]'里面有什么? –

+2

如果'argv [2]'是一个正确格式的浮点数,这应该工作。 –

+4

你怎么知道它不像你期望的那样工作?无论如何,请提供一个您正在调用此程序的示例命令行。 –

尝试将字符串数据保存在导致未定义行为(UB)的char中。

"%[]"预计匹配一个字符数组。

// char t; 
// sscanf(argv[1], "-%[cf]",&t); 

char t[100]; 
if (sscanf(argv[1], "-%99[cf]",t) != 1) Handle_Failure(); 

推荐:
添加的宽度限制,像99,以限制字符串输入。设置为小于t的尺寸1。
检查返回值sscanf()