c - 2 个 printf() 之间的程序段错误

标签 c segmentation-fault ansi-c fgetc

希望有人能帮忙。我让这个程序完美运行,将几行代码从一个函数移到另一个函数,然后一切都崩溃了。

我在下面包含了从函数顶部到段错误的代码片段。它高兴地输出“我们到这里了吗?”但不是下一个陈述,我花了很多时间试图弄清楚这一点,以至于我不记得我必须开始的工作构建

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

这个故事的寓意:工作代码比“正确”代码更好,在尝试调整工作代码之前始终复制工作代码。

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

最佳答案

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

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';

关于c - 2 个 printf() 之间的程序段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25285422/

相关文章:

c - 在C中逐字符读取字符串

通过 fgets() 读取文件时检查错误

c - 用户输入后出现段错误

c++ - 动态内存分配的交叉编译器问题

c - 解码后的shellcode不执行: Illegal instruction: 4

使用指针检查字符数组中的数字,在 c 中给出错误,给出运行时错误

c - 如何在 Ubuntu 中运行使用 string.h 的 C 程序

android - 致命信号11

c++ - 在 C 中创建数组时出现段错误

c - 在C中查找char的最大值