我将这个简单的行解析器放入标记函数中...但是我缺少一些东西。
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 **字,但我有第一个malloc内存。像这样>
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上。在它到达while循环之前
我将这个简单的行解析器放入了标记函数中……但是我缺少一些东西。 int parse_line(char * line,char ** words){int wordc = 0; / *获取第一个标记* / char * word = strtok(line,“ ...
while( word != NULL ) {
word = strtok(NULL, " ");
words[wordc]=(char*)malloc(256*sizeof(char));
strcpy(words[wordc++],word );
}
以下建议的代码:
您的答案是正确的!但是由于读取,我再次出现了segF!我没有注意到,当我运行程序时,它并没有停止读取read的输入!相反,它通过了。我所做的是我将读取内容更改为fgets,并且有效!随着你的变化!有人可以向我解释吗???为什么它不止于读取功能?