0

程序接收信号 SIGSEGV,Segmentation fault

在线:如果(argv[1][0] == '-')。

当在 unix shell 中看到“-c”标志时,我试图让它做一些事情

int main(int argc, char **argv)
    {

    int target_column=1;
    int column_flag=0;
    int descending_flag=0;

    /* command-line argument control */
        printf("Argument(s) detected(%d)\n", argc);

        /* default mode */
        if (argc = 3)
        {
    if (argv[1][0] == '-')
             {
                 /* column flag */
                 if (argv[1][1] == 'c')
                 {
                     column_flag=1;
                     printf("column flag found, ");
                 }
                 /* error checking */
                 else
                 {
                     fprintf(stderr, "tsort -c <column> [-d]\n");
                     exit(EXIT_FAILURE);
                 }
             }

非常感谢您的回答。这绝对是那个小错字。

4

3 回答 3

4

如果要检查参数的数量,请使用==

if (argc = 3)   // This assigns 3 to argc and always yields true
{
    if (argv[1][0] == '-')

应该

if (argc == 3)
{
    if (argv[1][0] == '-')

编译器应该警告你这一点。如果没有,请始终编译-Wall -Wextra以避免这种情况。

于 2013-09-21T16:01:13.097 回答
3

您的代码中有错字:

if (argc = 3)

应该是:

if (argc == 3)

.

人们经常将常量放在左边以避免此类错误,例如:

if(3 = argc)

无法编译,因为无法分配常量。

于 2013-09-21T16:01:17.950 回答
1

您在这一行将 argc 的值更改为 3:

if (argc = 3)

它应该是:

if (argc == 3)

这是可行的(编译器不会给出错误消息),因为赋值在 C++ 中有一个返回值。在这种情况下,该值为 3,其计算结果为真。因此,您将始终尝试访问第一个参数以查找可能不存在的“-”。这会导致段错误。

于 2013-09-21T16:01:11.410 回答