使用C字符串函数解析C字符串(通过控制台的用户输入) - 分段错误

时间:2012-10-21 09:35:30

标签: c string-parsing

我正在尝试编写一个解析字符串(一个char *)字符的函数,但由于某种原因我收到了一个细分错误。我正在尝试读取用户输入并解析程序名称和参数,但这有点不敬。

控制台:

>./mish 
>mish>ls
>command start:ls 
>*tempCommand:l 
>bottom
>Segmentation fault

代码:

    ParserData parseCommand(ParserData parserData, char* command)
    {
        char* tempCommand;
        char* currToken = '\0';
        short firstSpace = 0;

        printf("command start:%s \n", command);

        strcpy(tempCommand, command);

        while(*tempCommand)
        {
            printf("*tempCommand:%c \n", *tempCommand);

            if((char)*tempCommand == ' ' && firstSpace == 0)
            {
               printf("currToken: %c \n", (char)*currToken);
               strcpy(parserData.myChildProgramName,currToken);
               printf("after:");
               currToken = '\0';
               firstSpace = 1;
            }
            else if((char)*tempCommand != ' ' && *tempCommand != '-')
            {
              //strcat(currToken, tempCommand); 
            }

            printf("bottom\n");

            printf("currToken: %c \n", *currToken);

            tempCommand++;

       }

       printf("out\n");
       parserData.myChildProgramArguments = currToken;

      return parserData;
   }

2 个答案:

答案 0 :(得分:4)

在以下情况下,

tempCommand是一个联合char*

strcpy(tempCommand, command);
调用

,导致分段错误,因为strcpy()将写入不应该的地方。在致电tempCommand之前为strcpy()分配内存:

tempCommand = malloc(strlen(command) + 1); /* +1 for terminating null. */
if (tempCommand)
{
    /* Use 'tempCommand' */
}

在不再需要时请记住free(tempCommand);

没有理由将*curToken*tempCommand的值转换为char,因为它已经是类型。

答案 1 :(得分:0)

您需要使用malloc动态地为tempCommand变量分配内存。

类似的东西:

tempCommand = malloc(sizeof(command));

这应该可以解决问题。祝你好运!