2015-10-09 31 views
0

我正在运行一个简单的无限循环,需要在用户输入中将其拆分成数组。当我尝试显示数组的元素时,我得到一个seg错误。 这是我的代码。用户输入的分段错误

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; 
} 

任何想法,我错了,相同的代码工作正常.cpp文件,用g ++编译时。

回答

3

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

char* usrInputStr = NULL; 

,然后你继续使用它:

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

那么我需要malloc吗? –

+0

这是一种选择。其他选项是使用足够大的数组,或者使用'std :: getline'(一个C++库函数)。 –

0

您还没有分配的任何内存位置字符* usrInputStr并扫描一些实际上是空指针的内容。这导致了你一些分段错误的错误。你只需分配一些动态内存。 例如: -

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