这段小代码中的分段错误?

时间:2013-04-18 22:27:44

标签: c segmentation-fault strtok

 char *commandstrings[MAXARGS];

    commandstr = strtok(line,"|");
    int i = 0;

    while(commandstr != NULL){
      commandstrings[i] = commandstr;
      printf("%s \n",commandstr);
      commandstr = strtok(NULL,"|");
      i++;
    }

     printf("first parsing complete!");

大家好。我尝试使用strtok将字符串分成各种子字符串,并将它们存储到一个名为" commandstrings"的字符串数组中。

问题是我在到达最终的printf之前就遇到了分段错误。 假设我把这一行作为参数:" lol | omg | BBQ"

程序打印:

OMG
烧烤
分段错误(核心转储)

可能是什么问题?我不认为我需要用其他代码来骚扰你们,因为"而#34;循环执行得很好,错误在离开cicle之前就会出现,因为最后一次打印没有显示。

谢谢!

1 个答案:

答案 0 :(得分:5)

以下适用于我。也可在http://codepad.org/FZmK4usU

获取
#include <stdio.h>
#include <string.h>

int main() {

    char line[] = "lol | omg | bbq";
    enum{ MAXARGS = 10 };
    char const *commandstrings[MAXARGS];

    int i = 0;
    char * commandstr = strtok(line,"|");

    while(commandstr != NULL){
        commandstrings[i] = commandstr;
        printf("%s \n",commandstrings[ i ]);
        i++;
        commandstr = strtok(NULL,"|");
    }

    printf("first parsing complete!");
}