Sscanf问题和从命令行读取

Sscanf问题和从命令行读取,c,command-line,segmentation-fault,scanf,C,Command Line,Segmentation Fault,Scanf,你好,哈哈,又来了。 C-Unix 我在读这样的东西: a、 输出[23+10i] sscanf(argv[count], "[%d%c%di]", &a, &operand1, &b); 我想分开如下: a=23 b=10 操作数='+' 但是我得到了SEGFULT(内核转储)错误,我做错了什么 顺便说一下,非常感谢你回答我所有愚蠢的问题这对我很有用 #include <stdio.h> int main(int argc, char **argv) {

你好,哈哈,又来了。 C-Unix 我在读这样的东西:

a、 输出[23+10i]

sscanf(argv[count], "[%d%c%di]", &a, &operand1, &b);
我想分开如下: a=23 b=10 操作数='+' 但是我得到了SEGFULT(内核转储)错误,我做错了什么

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

这对我很有用

#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;
}
#包括
int main(int argc,字符**argv){
INTA,b;
字符操作数1;
int n;
printf(“扫描argv[argc-1]:%s\n”,argv[argc-1]);
/*它对我有用*/
n=sscanf(argv[argc-1],“[%d%c%di],&a,&O操作数1,&b);
printf(“%d个读取值\n”,n);
如果(n!=3)printf(“scanf中有一个错误…\n”);
printf(“值为%d、%c和%d\n”,a,操作数1,b);
返回0;
}
和一个示例运行:

$ ./a.out [23+43i] scanning argv[argc - 1]: [23+43i] 3 values read The values were 23, +, and 43 美元/年出[23+43i] 扫描argv[argc-1]:[23+43i] 读取3个值 数值分别为23、+、和43 请注意,
argv[argc]
是一个空指针。

它适合我

#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;
}
#包括
int main(int argc,字符**argv){
INTA,b;
字符操作数1;
int n;
printf(“扫描argv[argc-1]:%s\n”,argv[argc-1]);
/*它对我有用*/
n=sscanf(argv[argc-1],“[%d%c%di],&a,&O操作数1,&b);
printf(“%d个读取值\n”,n);
如果(n!=3)printf(“scanf中有一个错误…\n”);
printf(“值为%d、%c和%d\n”,a,操作数1,b);
返回0;
}
和一个示例运行:

$ ./a.out [23+43i] scanning argv[argc - 1]: [23+43i] 3 values read The values were 23, +, and 43 美元/年出[23+43i] 扫描argv[argc-1]:[23+43i] 读取3个值 数值分别为23、+、和43
请注意,
argv[argc]
是一个空指针。

计数的值是多少?
a
operan1
b
的声明是什么?很难说,但是打印argv[count]以确保它是您想要的参数。
[
是一个shell元字符,可能会导致你的参数与你想象中的不同。如果你在参数周围加引号,你会得到同样的结果吗:
/a.out“[23+10i]”“
?@Adam nope,即使加上引号,它也会不断出现segfault.count=1,我会打印出来。>$a.out“[23+45i]”命令行有1个参数:1:[23+45i]分段错误(内核转储)
count
的值是多少?a、
operan1
b
的声明是什么?很难说,但打印argv[count]以确保它是您想要的参数。
[
是一个shell元字符,可能会导致你的参数与你想象中的不同。如果你在参数周围加引号,你会得到同样的结果吗:
/a.out“[23+10i]”“
?@Adam nope,即使加上引号,它也会不断出现segfault.count=1,我会打印出来。>$a.out“[23+45i]”命令行有1个参数:1:[23+45i]分段错误(堆芯转储)