【发布时间】:2020-05-08 01:03:15
【问题描述】:
我有这个简单的行解析器到标记函数中...... 但是我缺少一些东西。
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循环之前
【问题讨论】:
-
char * 行是字符串是的!像一行字符
-
xing,你到底是什么意思?我还需要分配什么?
-
请在您的问题中添加一个简单的
main(),在其中定义示例行并调用parse_line()函数 -
xing,如果我为第一个单词的 exac 大小分配内存,那么如果第二个更大,我会遇到问题。
-
为什么从一开始就分配一个安全的大数字会出现问题??
标签: c segmentation-fault malloc strtok