#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.已编辑,但段违规仍然存在。
答案 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;