分段错误(核心转储)问题

时间:2013-09-14 20:24:48

标签: c arrays segmentation-fault

我正在尝试读取用户的输入,然后对每个单词进行标记,并将每个单词放入一个字符串数组中。最后,打印出数组的内容以进行调试。我的代码如下。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main() {

  int MAX_INPUT_SIZE = 200;
  volatile int running = 1;
  while(running) {

    char input[MAX_INPUT_SIZE];
    char tokens[100];

    printf("shell> ");
    fgets(input, MAX_INPUT_SIZE, stdin);

    //tokenize input string, put each token into an array
    char *space;
    space = strtok(input, " ");
    tokens[0] = space;

    int i = 1;
    while (space != NULL) {
      space = strtok(NULL, " ");
      tokens[i] = space;
      ++i;
    }

    for(i = 0; tokens[i] != NULL; i++) {
      printf(tokens[i]);
      printf("\n");
    }

  printf("\n");     //clear any extra spaces

  //return (EXIT_SUCCESS);
  }
}

在“shell&gt;”提示符下输入输入后,gcc给出了以下错误:

Segmentation fault (core dumped)

知道这个错误发生的原因吗?在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

char tokens[100];  

此声明应该是包含多个字符串的字符数组(二维字符数组)

  char tokens[100][30];   
  //in your case this wont work because you require pointers   
  //while dealing with  `strtok()`

使用

字符指针数组

char *tokens[100];  

这也是错误的

printf(tokens[i]);   

打印字符串时,应使用格式说明符为%s的printf 像这样改变

printf("%s", tokens[i]);