У меня есть этот простой анализатор строк в функции токенов ... Но что-то мне не хватает.
int parse_line(char *line,char **words){
int wordc=0;
/* get the first token */
char *word = strtok(line, " ");
words[wordc]=(char*)malloc(256*sizeof(char));
strcpy(words[wordc++],word );
/* walk through other tokens */
while( word != NULL ) {
word = strtok(NULL, " ");
words[wordc]=(char*)malloc(256*sizeof(char));
strcpy(words[wordc++],word );
}
return wordc;
}
Когда я запускаю его, я получаю ошибку сегментации! В качестве первого аргумента я даю строку char [256] и в качестве второго, конечно, слова char **, но у меня есть первая память mallo c для этого. вот так
char **words = (char **)malloc(256 * sizeof(char *));
main:
.
.
.
char buffer[256];
char **words = (char **)malloc(256 * sizeof(char *));
.
.
.
n = read(stdin, buffer, 255);
if (n < 0){
perror("ERROR");
break;
}
parse_line(buffer,words);
Когда программа выполняет parse_line, она завершается с ошибкой сегментации
Находит, где происходит ошибка сегмента. И это здесь:
strcpy(words[wordc++],word );
И, в частности, на первом strcpy. Еще до того, как оно достигнет l oop