我在http://www.cprogramming.com/tutorial/c/lesson10.html上学习C编程教程。本教程将用C语言教授文件I/O;特别是讨论fopen命令。有一次,他们给出了以下示例(我认为应该打印test.txt文件的内容):

FILE *fp;
fp=fopen("c:\\test.txt", "w");
fprintf(fp, "Testing...\n");

所以,我制作了一个名为test.txt的文本文件,并将其保存在当前的工作目录(C:\ cygwin\home\Andrew\cprogramming)中。然后我在同一个目录中创建了一个c文件,它包含以下代码:
#include <stdio.h>

int main()
{
  FILE *fp;
  fp=open("test.txt","w");
  fprintf(fp,"Testing...\n");
}

当我使用gcc编译这个c文件(我称之为helloworld2.c)时,会得到以下消息:
helloworld2.c: In function `main':
helloworld2.c:40: warning: assignment makes pointer from integer without a cast

当我尝试运行可执行文件时,我得到:
Segmentation fault (core dumped)

你知道我下一步该怎么做吗?
非常感谢你抽出时间。

最佳答案

这是因为您使用open而不是fopenOpen来自POSIX标准并返回(整数)句柄;fopen返回FILE结构的内存地址。两者不能互换使用。现在,代码隐式地将接收到的整数(可能是4)转换为FILE*指针,使其指向内存地址4。当fprintf试图访问程序时,此段会出错。
fopen是跨平台的,但open仅是POSIX。你现在可能需要坚持fopen

关于c - C语言中使用fopen命令的初学者很难,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6318272/

10-13 04:45