【发布时间】:2018-11-25 01:34:50
【问题描述】:
#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);
}
我一直在这段代码中遇到分段错误。 我什至尝试过手动创建名为“date.txt”的文件。
date '+%Y-%m-%d %H:%M:%S' > date.txt 命令在 bash 上单独运行良好。
谁能帮我看看,我做错了什么?
[update:] 忘记初始化 i = 0。已编辑,但段违规仍然存在。
【问题讨论】:
-
您应该检查 fp 是否 == 为 NULL,而不是 0
-
这里
date[i++]i的价值是什么?你没有初始化i。 -
..
int i = 0; -
'char ch;'永远不会是 EOF。
-
如果将 char 更改为 int 解决了您的问题,您可以通过单击投票按钮下方的复选标记将答案标记为正确。 (这也会给你两个声望点)
标签: c linux segmentation-fault