文件指针是否导致代码中的分段错误

时间:2018-06-15 08:17:33

标签: c linux segmentation-fault

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdarg.h>
#include <sys/types.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>

char date[35] = {"0"};

void main()
{
        FILE *fp;
        char ch;
        int i=0;

        if(fork() == 0)
        {
                system("date '+%Y-%m-%d %H:%M:%S' > date.txt");
                exit(0);
        }
        wait(0);

        fp = fopen("date.txt","w+");
        if(fp == 0) {return;}

        while((ch = fgetc(fp)) != EOF)
        {
                date[i++] = (char)ch;
        }
        fclose(fp);
        date[i] = '\0';

        printf("date = %s", date);
}

我在此代码中继续获取分段错误。 我甚至尝试过创建名为&#34; date.txt&#34;的文件。手动

命令date '+%Y-%m-%d %H:%M:%S' > date.txt可以很好地处理bash。

有人可以帮我找到,我做错了什么?

[更新:]忘记初始化i = 0.已编辑,但段违规仍然存在。

3 个答案:

答案 0 :(得分:1)

您正在使用char值来检查EOF,但由于EOF是一个数值,因此ch将永远不会等于EOF。这意味着你的循环将永远运行,超出你的数组,只有35个元素。您必须改为使用int ch

答案 1 :(得分:0)

您应该初始变量i或它获得随机值。

void main()
{
    FILE *fp;
    char ch;
    int i = 0;
...
}

答案 2 :(得分:0)

该语句溢出了最大大小35.这意味着i大于0..34。

date[i++] = (char)ch;