【发布时间】:2014-08-13 11:52:17
【问题描述】:
希望有人可以提供帮助。我让这个程序完美运行,将几行代码从一个函数移到另一个函数,结果一切都崩溃了。
我在函数顶部添加了一个 sn-p,直到出现段错误。它高兴地输出“我们到了吗?”但不是下一个声明,我花了很多时间试图弄清楚这一点,以至于我不记得我必须开始的工作构建
它(至少是下面的部分)应该将整个文本文件复制到一个字符串
故事的寓意:工作代码比“正确”代码更好,在尝试调整之前总是复制工作代码。
void validateFile(FILE* file, char** menuStore, char** submenuStore)
{
char* temp = NULL;
size_t size;
boolean flag = true;
char first;
/*Loop Counter*/
int i;
fseek(file, 0, SEEK_END);
size = ftell(file) * sizeof(char);
fseek(file, 0, SEEK_SET);
if ((temp = malloc(size)) == NULL)
{
printf("\nUnable to allocate Memory, Program exiting");
exit(EXIT_FAILURE);
} else
{
for (i = 0; i < (size / sizeof(char)); i++)
{
temp[i] = fgetc(file);
}
printf("\n did we get here?");
printf("\nFile loaded, validating...");
【问题讨论】:
-
sizeof(char)始终为 1 -
将换行符 last 放入要打印的字符串中。请记住,默认情况下,
stdout的输出是行缓冲的,因此无论在那一秒printf之后发生的任何事情,在您打印换行符(或显式刷新缓冲区)之前,您都不会看到文本。 -
对于崩溃,总是在调试器中运行您的崩溃程序。调试器将停在崩溃的位置,让您检查并向上走函数调用堆栈。
-
@JoachimPileborg 谢谢你,我原以为我的一位导师会在过去 4 年的某个时候提到这一点......我现在会看看那之后的东西并继续挖掘。
标签: c segmentation-fault ansi fgetc