【问题标题】:Sscanf problem and reading from command-lineSscanf 问题和从命令行读取
【发布时间】:2010-12-07 23:31:48
【问题描述】:

你好哈哈再次。 C- Unix 我正在阅读这样的内容:

a.out [23+10i]

sscanf(argv[count], "[%d%c%di]", &a, &operand1, &b);

我想分开如下: a=23 b=10 操作数='+' 但是我收到了 segfault(core dumped) 错误,我做错了什么?

顺便说一句,非常感谢你回答我所有愚蠢的问题

【问题讨论】:

  • count 的值是多少? aoperand1b的声明是什么?
  • 很难说,但打印出 argv[count] 以确保它是您想要的参数。
  • [ 是一个 shell 元字符,可能会导致您的参数不是您认为的那样。如果你在你的论点周围加上引号,你会得到相同的结果吗:./a.out "[23+10i]"
  • @Adam 不,即使有引号,它也会不断出现段错误。计数 = 1,我将其打印出来。 >$ a.out "[23+45i]" 命令行有1个参数:1:[23+45i] Segmentation Fault (core dumped)

标签: c command-line segmentation-fault scanf


【解决方案1】:

对我有用

#include <stdio.h>
int main(int argc, char **argv) {
    int a, b;
    char operand1;
    int n;

    printf("scanning argv[argc - 1]: %s\n", argv[argc - 1]);
    /* It works for me */
    n = sscanf(argv[argc - 1], "[%d%c%di]", &a, &operand1, &b);

    printf("%d values read\n", n);
    if (n != 3) printf("there was an error in scanf ...\n");
    printf("The values were %d, %c, and %d\n", a, operand1, b);
    return 0;
}

还有一个示例运行:

$ ./a.out [23+43i] 扫描 argv[argc - 1]: [23+43i] 读取 3 个值 值为 23、+ 和 43

注意argv[argc]是一个NULL指针。

【讨论】:

    猜你喜欢
    • 2014-02-16
    • 2021-05-24
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    相关资源
    最近更新 更多