每次代码到达第一个strtok时我都会遇到段错误
token = strtok(commandLine," ");
我只是尝试使用空格作为分隔符来解析stdin并将其存储起来。我看到很多问题是人们在字符串文字上使用strtok,我认为这也适用于我的情况,但我该如何解决呢? 感谢。
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
int main(int argc, char* argv[]){
//Used for parsing
char commandLine[255];
char* tokens[10];
char* token;
int counter;
int i;
printf("gets to pt 1\n");
//Parsing
while( fgets(commandLine, 255, stdin) ){
printf("\n%s\n", commandLine);
token = strtok(commandLine," ");
printf("gets here");
counter = 0;
for(counter = 0; token != NULL; counter++){
strcpy(tokens[counter], token);
token = strtok(NULL, " ");
}
}
printf("gets to point2");
for(i = 0; tokens[i] != NULL; i++){
printf("%s ", tokens[i]);
}
编辑:
这是工作代码。
正如User93353指出的那样,我必须为我的令牌分配内存,所以我改变了
char* tokens[10]
到
char tokens[10][100]
我的for循环没有正确结束,不得不改变
tokens[i] != NULL
到
i<counter
-
int main(int argc, char* argv[]){
//Used for parsing
char commandLine[255];
char tokens[10][100];
char* token;
int counter;
int i;
printf("gets to pt 1\n");
//Parsing
while( fgets(commandLine, 255, stdin) ){
printf("\n%s\n", commandLine);
token = strtok(commandLine," ");
printf("gets here");
for(counter = 0; token != NULL; counter++){
strcpy(tokens[counter], token);
token = strtok(NULL, " ");
}
printf("gets to printing");
for(i = 0; i<counter; i++){
printf("%s", tokens[i]);
}
}
}
答案 0 :(得分:1)
为tokens
数组的每个元素分配内存。
简单的方法是将其声明为
#define SOME_SIZE 100
char tokens[10][SOME_SIZE];
否则,tokens[0]
,tokens[1]
等指向内存中的某个随机位置。 strcpy
到该随机位置会导致程序崩溃。