为什么用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]?
答
尝试将字符串数据保存在导致未定义行为(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()
。
'argc'的价值是什么。 'argv [2]'里面有什么? –
如果'argv [2]'是一个正确格式的浮点数,这应该工作。 –
你怎么知道它不像你期望的那样工作?无论如何,请提供一个您正在调用此程序的示例命令行。 –