【问题标题】:Having trouble with a c program that separates strings into paragraphs. sentences and words将字符串分成段落的 c 程序有问题。句子和单词
【发布时间】:2020-04-18 11:10:53
【问题描述】:

程序需要从用户那里获取输入文本和一个选项。在这个阶段,我目前正在研究 ap: 选项,它从用户那里读取文本并将相应的数据附加到相应的数组中。 (此外,我必须输入带有选项作为前缀的文本,例如 ap:Text,因为这是测试我的程序的机器人输入它的方式。)。

这里是代码:https://gist.github.com/Kritsos/03d08f29beb97d24eba1cbc4e83962ab

我知道这有点难以理解,所以我会尽可能地解释它。首先,我知道有很多内存泄漏,我会在这 3 个函数正常工作后立即处理它们。我试图动态分配几乎所有东西(这就是我使用三指针的原因),我希望分配是正确的,而不是问题的原因。 par 函数应该从输入文本中获取一个段落,这很容易,因为输入文本本身就是一个段落,所以我只是将文本复制到段落数组中。现在 sent 和 word 功能是我遇到问题的功能。两者都基于相同的逻辑。我从用户那里获取输入文本,我尝试找到结束字符(“.!?;”代表句子“”代表单词),在那里放置一个'\0',将字符串复制到相应的数组然后做同样的事情但是我没有再次检查整个输入文本,而是从放置 '\0' + 1 的位置开始。

【问题讨论】:

  • 我觉得这个家庭作业给这堂课带来了很多麻烦stackoverflow.com/q/59509457
  • 这当然是……想想去年的项目是井字游戏。
  • Valgrind says 你在你的 reallocs 中使用了统一化的值,但是你的代码对我来说太难了,我无法弄清楚发生了什么。您真的应该考虑对其进行重组,以便每个功能都做更少的工作并且更容易推理。考虑一下:首先具有计算单词/句子数量并将其作为整数返回的函数,然后分配所需的数组,然后具有填充这些数组的函数。
  • 您可以通过使用数组索引而不是指针体操来简化您的代码。而且,一旦你认为你需要*** 指针,你应该重新设计成结构。注意:除main() 之外的所有函数都返回 void。为什么?
  • 我希望下一课是关于结构的。另外:即使没有它们,这里也不需要三指针。只需双指针和指针数组就足够了。函数可以返回它们使用或产生的字符/单词/段落的数量。或错误代码。

标签: c string pointers


【解决方案1】:

您的代码中有许多错误,导致您当前崩溃的关键错误是第 8、32 和 59 行。对此的所有变体:

**paragraphs = realloc(**paragraphs, *num_par * sizeof(char *));

您正在对从未分配过的指针调用 realloc。

这里的教训不是“小心指针”或类似的东西,但显然你应该这样做。教训是大量的间接性变得难以推理。与其试图让一个三星级的解决方案奏效,不如探索一种不需要这些代码体操的不同方法。

【讨论】:

  • 所以我必须在主函数中添加所有数据?因为我们的代码将被测试的平台在有限的资源堆栈上运行,所以我必须使用指针。
  • 有无数种方法可以解决这个问题,有些非常直接,有些则非常深奥。我只是提醒您,您当前的方法并不容易,值得重新考虑,而不是无休止地反对这个特定的实现。
  • 您能否给我一个提示,告诉我一个 Comp sci 大一学生如何继续解决这个问题?
  • @I_Hate_C I gave this a shot on my lunch break,随意使用其中的任何内容来激发有关如何构建代码的一些想法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多