1

我一直在读取结构数组的值时遇到问题,我一直遇到分段错误。这是代码:

int main() 
{
    /* Get PATH Environment Variable */
    char *pathv[MAX_PATHS];
    char cmd_line[MAX_ARGS];
    struct command_t cmd[3];         //THIS IS THE STRUCT ARRAY
    size_t len = 0;

    /* Parse The Path */
    ParsePath(pathv);

    while(1) {

        /* Print Continuous Prompt */
        PrintPrompt();

        /* Read Command Line & Parse It */
        ReadCommand(cmd_line);

        ParseCommand(cmd_line, cmd);    //PASSING IT TO THIS METHOD
    }

    return 0;
}



int ParseCommand(char *buffer, struct command_t *cmd)
{
    char *name = "Test";
    cmd[0].name;  //IF THIS IS COMMENTED OUT AND THE OTHER LINE AS WELL, PROGRAM RUNS
    printf("%s\n", cmd[0].name); //FINE....THESE TWO LINES CAUSE SEG. FAULT
}

struct command_t {
    char *name;
    int argc;
    char *argv[MAX_ARGS];
};

我究竟做错了什么?非常感谢您的帮助。

4

2 回答 2

2

您永远不会初始化cmd或写入任何数据。访问的未初始化数据在 C 中是未定义的行为,所以是的,崩溃是有效的。cmd[0].name在读取之前,您需要先写入一些内容。

于 2013-10-20T18:06:16.593 回答
1

在 C 中,当您声明一个变量而不给它赋值时,并不意味着它是空的。它可能指向以前运行过的东西的内存垃圾。

您尝试printf()cmd[0].name没有初始化的情况下输入内容可能是灾难性的。

您应该在尝试访问其值之前初始化结构中的每个变量,或者至少将所有内容填零以使其安全阅读:

memset(cmd, 0, sizeof(*cmd) * 3);
于 2013-10-20T18:13:41.333 回答