如何解决打印在 C 中多次重新分配的数组
基本上:
我正在从文本文件中提取字符。每个单词以一个结尾
\n
在文本文件中。
我想创建一个 char **
数组,其中只包含每个单词的第一个字符。
为此,我正在扫描文本文件并在我的 chars
数组上运行。
如果当前 char
是 \n
,则在插入到 null terminator \0
数组时将其替换为 chars
。
这样,当我用我的 words
在该阵列上运行时,我将能够在 char **words_arr
之间分开。
我希望 **words_arr
指向单词的每个第一个字符,这意味着每个 \0
后面的一个字符表示单词的结尾。
size_t words = 1,total_characters = 30;
char **original_address,**words_arr,*chars,character;
chars = (char *)malloc(sizeof(char) * total_characters);
words_arr = original_address = (char **)malloc(sizeof(char *) * (words);
while (i < total_characters)
{
character = fgetc(text_file);
if (character == EOF)
{
break;
}
if (character == '\n')
{
*chars = '\0';
*words_arr = chars + 1;
++words;
words_arr = (char **)realloc(original_address,sizeof(char *) * (words));
words_arr += words-1;
}
else
{
*chars = character;
}
++chars;
++i;
}
另外,我不知道我有多少字,这就是我使用 realloc
函数的原因,尽管我不确定我做对了。
现在,我可以打印 chars
数组并查看所有单词,并且每个单词都从新行开始。
但是当我尝试打印 words
数组时,我遇到了分段错误。
我正在尝试使用以下方法打印它们:
i = 0;
chars -= total_characters;
while (i < total_characters)
{
runner = chars + i;
if (*runner == '\0')
{
printf("\n");
}
else
{
printf("%c",*runner);
}
++i;
}
printf("\n\n");
words_arr -= words;
i = 0;
while (i < words)
{
printf("%s",*(words_arr + i));
++i;
}
正如我所说,第一次打印或 chars
数组成功。
words_arr
的第二个打印返回 Segmentation fault
。
谢谢。
解决方法
这部分:
words_arr = (char **)realloc(original_address,sizeof(char *) * (words));
是错误的(出于多种原因)。
当 realloc
成功返回(即分配了新内存)时,original_address
的值不再有效。但是在您的代码中,您在循环内再次使用 original_address
。
您需要在每个 original_address
之后更新 realloc
,以便它对下一个 realloc
有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。