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

标签 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[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()的返回值。

关于c - 为什么使用 argv[] 调用 sscanf() 只能使用一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33185253/

相关文章:

C打印空间金字塔

python - 限制命令行输入数量的替代方法

c - C运算中的Socket客户端

c++ - 在不移动末尾的情况下删除文件中间的字节?

c# - 为什么我的 C 程序比对应的 C# 程序慢?

c - 预期为 ‘char **’ 但参数的类型为 ‘char *’ --argv

c - 如何使用scanf检查用户是否输入了整数

c - 将 %f、%e、%g、%E 或 %G 与 scanf 一起使用有什么区别吗?

c++ - 如果使用无符号整数,通过减去 1 将基于 1 的编号转换为基于 0 的编号是否安全?

java - 有没有办法在java中查询argv的运行时?