我正在尝试读取用户的输入,然后对每个单词进行标记,并将每个单词放入一个字符串数组中。最后,打印出数组的内容以进行调试。我的代码如下。
#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)
知道这个错误发生的原因吗?在此先感谢您的帮助!
答案 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]);