我想从文件加载字符到二维数组。但我不知道单独行的长度(阵列中每行1行(1行))。所以我分配了1 * char *数组,然后计算1行中的字符并分配它们。然后我想realloc
(2 * char *)数组,因此它可以处理2行。在第二回合中,它总是崩溃(行patterns=realloc(patterns, sizeof(*patterns)*patternCounter);
)。我知道代码不完美(我不控制错误等),但我认为这不会有帮助。现在它也不起作用。C realloc二维字符数组
注:的函数的第一个参数尚未
输入文件(每行1个字,端线“\ n”,所以最后一行是空的)
woman
man
meat
animal
anim
我的代码中使用
void failure(state *automaton, FILE *fpattern){
int patternCounter=0, charCounter=0, i;
char c;
char **patterns=NULL;
rewind(fpattern);
while((c=fgetc(fpattern))!=EOF){
charCounter++;
if(c=='\n') {
patternCounter++;
patterns=realloc(patterns, sizeof(*patterns)*patternCounter);
fseek(fpattern, -charCounter, SEEK_CUR);
for (i = 0; i < charCounter; i++) {
patterns[i]=malloc(1);
}
for (i = 0; i < charCounter-1; i++) {
patterns[patternCounter-1][i]=(char)fgetc(fpattern);
}
patterns[patternCounter-1][i]='\0';
fgetc(fpattern);
charCounter=0;
printf("%s\n", patterns[patternCounter-1]);
}
}
for (i = 0; i < patternCounter; i++) {
printf("%s\n", patterns[i]);
}
}
我不明白什么是错的。调试没有帮助。
线'图案[patternCounter-1] [I] =(char)的龟etc(fpattern);'应引起,因为只有1个字节的缓冲区溢出被分配给'patterns [patternCounter-1]'。另外,抛出以前读取的数据是非常糟糕的主意。 – MikeCAT
Fmmm,实际上'patterns [patternCounter-1]'可能是未初始化的。 – MikeCAT
你的单词有最大长度吗?它会让你更容易,因为按字节分配数组并不是那么好... – Holt