atoi命令中的分段错误

时间:2017-08-02 06:53:19

标签: c

我有以下代码:

int main(int argc, char *argv[])
{
    int value,direction=0;
    char c;
    printf ("go\n");
    while((c = getopt(argc, argv, "wr:")) != -1) {
        printf ("go\n");
        printf("%c\n",c);
        switch(c) {
        case 'w':
            printf ("go\n");
            value=atoi(optarg);
            printf ("go\n");
            printf("The input value is %x",value);
            direction=1; //1 for write
            break;
        case 'r':
            direction=0; // 0 for read
            break;
        default:
            printf("invalid option: %c\n", (char)c);
            usage();
            return -1;
        }

    }
}

现在,当我通过编写

来运行程序时
 ./spicode.out -w 25

我需要在使用optarg之后选择25,但它会产生分段错误。

我做错了什么?

2 个答案:

答案 0 :(得分:4)

您应该在命令行选项之间放置冒号。

   c = getopt(argc, argv, "w:r")

答案 1 :(得分:2)

来自gnu.org:

  

此字符串中的选项字符后面可以跟冒号(':')   表明它需要一个必要的参数

因此wr:变为w:r