【问题标题】:C Segment Fault on char** Arraychar** 数组上的 C 段错误
【发布时间】:2015-12-10 22:39:17
【问题描述】:

当我的程序遇到第一个 if 语句时,我不确定为什么会收到分段错误。

这是 simpleShell 程序中的一个方法,其唯一目的是解析存储在 cmd 中的标准输入输入,并通过空格解析为 args 中的单独参数

它永远不会打印if 语句

void parseCmd(char* cmd, char** args)
{       
    int i;


    printf("----------> Parsed here \n");
    for(i = 0; i < MAX_LINE; i++) {
        args[i] = strsep(&cmd, " ");

        if (args[i][0] == '-') {
            printf("I was here... \n");
        }


        if(args[i] == NULL) break;
    }
}

【问题讨论】:

  • char **no 数组!
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。

标签: c string parsing pointers strsep


【解决方案1】:

您缺少两个明显的 NULL 检查。

  1. 对照args检查NULL
  2. 检查strsep() 返回值中的NULL。

否则,您很可能会在任何一种情况下尝试 NULL 指针引用,这会导致 undefined behavior

【讨论】:

  • 我不敢相信我错过了,ofc args 在换行符上将为空,只需将 if 语句向上移动,谢谢!
猜你喜欢
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
相关资源
最近更新 更多