gpt4 book ai didi

C 重新分配二维字符数组

转载 作者:行者123 更新时间:2023-11-30 17:06:54 27 4
gpt4 key购买 nike

我想将字符从文件加载到二维数组。但我不知道单独行的长度(数组中每 1 行 1 行(1 个字))。所以我分配了 1*char* 数组,然后计算 1 行中的字符并分配它们。然后我想重新分配 (2*char*) 数组,以便它可以处理 2 行。在这里,第二回合,它总是崩溃(行 patterns=realloc(patterns, sizeof(*patterns)*patternCounter); )。我知道代码并不完美(我不控制错误等),但我认为这没有帮助。现在也不起作用了。

注意:函数的第一个参数尚未使用

输入文件(每行 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]);
}
}

我不明白出了什么问题。调试没有帮助。

最佳答案

您正在丢弃先前分配的缓冲区并仅分配 1 个元素,然后尝试在那里保存太多字符,这是非常糟糕的事情。

尝试改变

for (i = 0; i < charCounter; i++) {
patterns[i]=malloc(1);
}

patterns[patternCounter-1]=malloc(charCounter);

关于C 重新分配二维字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34396636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com