为什么使用argv[]调用sscanf()只能使用一次?
我需要将argv[1]和argv[2]设置为不同的类型。我发现我只能使用sscanf()一次,否则无法检索argv中的下一个字符串。 这是我的密码为什么使用argv[]调用sscanf()只能使用一次?,c,argv,scanf,C,Argv,Scanf,我需要将argv[1]和argv[2]设置为不同的类型。我发现我只能使用sscanf()一次,否则无法检索argv中的下一个字符串。 这是我的密码 int main( int argc, char *argv[]) { char t; float temp; sscanf(argv[1], "-%[cf]",&t); sscanf(argv[2], "%f", &temp); return 0; } 只有第一个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]?尝试将字符串数据保存在
char
中,从而导致未定义的行为(UB)
“%[]”
需要匹配字符数组
// 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]
是格式正确的浮点,那么应该可以这样做。您如何知道它没有按照预期工作?无论如何,请给出一个调用此程序的示例命令行。我使用makefile来运行测试。这是我的测试:/第4部分-f 50.0