Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么使用argv[]调用sscanf()只能使用一次?_C_Argv_Scanf - Fatal编程技术网

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

为什么使用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()可以获得格式

我需要将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()可以获得格式化的值。
如何处理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