【问题标题】:Segmentation Fault taking user input接受用户输入的分段故障
【发布时间】:2015-10-09 16:45:29
【问题描述】:

我正在运行一个简单的无限循环,它需要接收用户输入并将其拆分为一个数组。当我尝试显示数组的元素时,出现段错误。 这是我的代码。

while(1){
        int tokenCount = 1;
        char* usrInputStr = NULL;
        char* buffer;

        scanf ("%[^\n]%*c", usrInputStr);

        int len = strlen(usrInputStr);

           for (int i = 0; i <len ; ++i) {
               if(isspace(usrInputStr[i])) tokenCount++;
           }

        char* currentTokens[tokenCount+1];
        int index = 0;
        buffer = strtok(usrInputStr, " ");
        while(buffer != NULL){
            currentTokens[index] = buffer;
            index++;
            buffer = strtok(NULL, " ");
        }
        for (int i = 0; i < index+1; ++i)
        {
            currentTokens[i];
        }


    }//end of backbone while

    return 0;
}

知道我哪里出错了,当使用 g++ 编译时,相同的代码在 .cpp 文件中运行良好。

【问题讨论】:

    标签: c arrays segmentation-fault


    【解决方案1】:

    在你初始化usrInputStr之后,你还没有为它分配内存:

    char* usrInputStr = NULL;
    

    然后你继续使用它:

    scanf ("%[^\n]%*c", usrInputStr);
    

    【讨论】:

    • 那我需要malloc吗?
    • 这是一种选择。其他选项是使用足够大的数组,或使用std::getline(C++ 库函数)。
    【解决方案2】:

    您还没有为 char * usrInputStr 分配任何内存位置并扫描到它实际上是一个空指针的东西。这导致您出现一些分段错误错误。您只需为其分配一些动态内存。 例如:-

    char * usrInputStr = (char *) malloc (50*sizeof(char));

    【讨论】:

      猜你喜欢
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多