初学者有关C语言中fopen的另一个问题
我是C和一般编程人员的新手。我想编写一个C程序,该程序将读取文本文件的内容并将其打印到控制台。我有一个名为test.txt的文本文件,其中包含字符串“ Hi”。我用以下代码创建了一个C程序:
#include <stdio.h>
main()
{
FILE *myfile;
myfile=fopen(\"test.txt\", \"r\");
printf(\"%s\", myfile);
fclose(myfile);
}
该程序可以编译OK(至少使用默认设置),但是当我运行该程序时,不会出现字符串“ Hi”。您能帮我看看我在做什么错吗?谢谢。
另外,您有没有推荐的C参考网站?我正在寻找一个包含C语言规范的网站,也许其中包括有关如何使用库函数的示例。
非常感谢您的宝贵时间。
安德鲁
卡内基·梅隆大学
没有找到相关结果
已邀请:
5 个回复
稀瓣囊
当您打开文件时,如果操作失败,则将返回NULL,因此,最好进行显式检查,以使您知道出了什么问题。 fscanf()返回成功读取的次数(此处为1,表示一次转换为字符串),如果已到达文件末尾,则返回EOF。格式字符串首先使用空格删除输入流中的所有空格(换行符,空格,制表符)。 在scanf()函数中使用字段宽度说明符(80)意味着仅读取这么多字符,因此输入不能超出分配的空间-有用! [^]表示将仅在遇到指定字符之前读取流。 [^ \\ n]是一种获取其中带有空格的字符串的方法,因为scanf()系列通常仅读取遇到字符串的空格。请注意,换行符不会被删除(它仍然是流中的第一行)。 然后打印字符串,并添加换行符。该程序将循环遍历文件中的许多行(最多80个字符,用换行符分隔)。如果要保留行,可以将string组成char数组,并每次增加。这是fscanf()格式字符串中的第一个空格派上用场的地方,它将删除仍位于流的开头的换行符(以及其他任何前面的空格)。 我没有找到任何在线学习C的权威教程,但是有很多可用的。当前标准不适用于初学者,但可以免费提供草稿表格:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf 另一个很好的资源(但不是教程)是http://c-faq.com/ 我发现的关于标准库功能的最佳参考是Harbison&Steele的C:A参考手册-不幸的是,它不是免费的。
门锑腺潮
指向的位置打印字符串。那显然是不正确的(如果您不知道为什么,那是因为
期望a4ѭ,而不是
,而
则不指向文件的内容。)。 要从文件中读取数据,请使用
:
如果要将整个文件读入缓冲区,则需要花些时间,因为必须确定文件的长度,然后在适当大小的堆上动态分配内存以容纳文件。在cplusplus.com的
页面上有一个很好的教程。
浅镁
抵浮细
更为有意义,因为它会读取行终止符(
)。
碧肮械淌设
检查以确保未到达文件末尾。
,将缓冲区中的所有内容都设为0。
将从文件中读取最多79个字符到缓冲区中。请注意,最大大小应为79,而不是缓冲区的大小80。这是因为数组中的最后一点应保留给空字符\'\\ 0 \',这向C指示字符串已结束。 请勿使用
。该函数被认为是不安全的,因为它可能导致缓冲区溢出,在这种情况下,字符被写入为该字符串分配的存储空间之外。 如果您一般不熟悉编程,我建议您在学习C之前学习一种更适合初学者的语言,例如Python。对于新程序员来说,C被认为是棘手的,因为它没有自动内存管理,面向对象的编程功能或大型标准库。