我的函数save_words接收armazena和size。 Armazena是一个包含段落的动态数组,大小与数组的大小相同。在这个函数中,我想在其他称为单词的动态数组中逐字逐句。当我运行它时,它会崩溃。 我感谢您的帮助。
char **save_words(char **armazena, int *size)
{
char *token = NULL;
char** armazena_aux = armazena;
int i, count=0;
char **words = (char**) malloc(sizeof(char*)*(10));
for(i=0; i<size; i++)
{
token = strtok(*(armazena+i)," .?!,");
while( token != NULL )
{
int tam = strlen(token);
armazena[count] = (char*) malloc(tam+2);
strcpy(armazena[count],token);
armazena[count][tam+1]='\0';
count++;
token = strtok(NULL, " .?!,");
if (count%10==0)
{
words = realloc(words, sizeof(char*)*(count + 10));
}
}
}
return words;
}
答案 0 :(得分:0)
armazena[count] = (char*) malloc(tam+2);
你想要的是什么?我原以为words[count] = ...;
。第一次通过外循环是好的,因为你将armazena [0]提升到strtok,但如果它包含多个单词,你第二次通过外循环将处理第一次生成的字符串。
更糟糕的是,如果第一个字符串包含的字数超过了armazena矢量可以容纳的字数,那么你将会腐败一些......