在2个printf()之间编程Segfaults

时间:2014-08-13 11:52:18

标签: c segmentation-fault ansi fgetc

希望有人可以提供帮助。我让这个程序运行得很好,将一行代码从一个函数移动到另一个函数,这一切都崩溃了。

我在函数顶部包含了一个片段,直到segfault。它很高兴地输出“我们到了吗?”但不是下一个声明,我花了这么多时间试图弄清楚我不记得我必须开始的工作构建

它(至少在下面的部分)应该将整个文本文件复制到字符串

故事的道德:工作代码优于“正确”代码,在尝试调整代码之前始终复制工作代码。

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...");

1 个答案:

答案 0 :(得分:-1)

从文件中读取时,不应该像这样使用循环 -

for (i = 0; i < (size / sizeof(char)); i++)
{
    temp[i] = fgetc(file);
}

您应该在从文件中读取时检查EOF条件 -

i=0;
while((temp[i]=fgetc(file))!=EOF)
     i++;

并将字符串的结尾设为\0。这是更好的方法。

temp[i]='\0';