用 C 读写文件
Posted
技术标签:
【中文标题】用 C 读写文件【英文标题】:Read and Write Files in C 【发布时间】:2018-10-30 17:58:16 【问题描述】:我的任务:
编写一个程序,询问用户是读取还是写入文件。如果写入文件,它会要求输入一行文本,并将其写入文件。如果读取,它会读取文件并将其输出到屏幕。文本以非二进制模式写出 - 这与项目 #2 的文件读写不同。记住我们如何使用
fgets()
输入字符串。还有一个fputs()
。
我正在尝试编写写入部分的代码,但我无法弄清楚我的错误是什么。另外我真的不知道如何创建阅读部分。那我只需要打开文件吗?
我的代码是:
#include <stdio.h>
#define HOLD_SCREEN while(getchar()!='q')
int write()
int num;
FILE*fptr;
fptr = fopen_s;
if (fptr == NULL)
printf("ERROR");
exit(1);
printf("Enter num: ");
scanf_s("%d", &num);
fprintf(fptr, "%d", num);
fclose(fptr);
return(0);
int main(void)
while (1)
printf("\n\tEnter an option: (R)ead or (W)rite a file or enter a q if you want to quit: ");
char buf[50];
buf[0] = '\0';
scanf_s("%s", buf, 50);
switch (toupper(buf[0]))
case 'W':
write();
break;
case 'R':
printInventory();
break;
case 'Q':
return(0);
HOLD_SCREEN;
return(0);
非常感谢您的帮助。
【问题讨论】:
fptr = fopen_s;
??文件名和其他安全检查在哪里?
当您尝试编译代码时,您的编译器会给出哪些错误和警告?
试试fptr = fopen("myfile.txt","w");
不要使用scanf_s()
。它并不比普通的scanf()
更安全,而且它不便携。指出任何推动 C 的附件 K 元素(例如 scanf_s()
)的人:Field Experience With Annex K — Bounds Checking Interfaces:“由于与规范存在大量偏差,因此不能认为 Microsoft 实现符合或可移植。”
在开始阅读 R/W/q 选项时,我建议您使用getchar
而不是scanf_s
。
【参考方案1】:
写作:
fopen_s
需要3个参数,
errno_t fopen_s(FILE** pFile, const char *filename, const char *mode);
一个例子(在写模式下)
errno_t err;
FILE *fptr
err = fopen_s(&fptr, "text.txt", "w" );
我也冒昧地猜测这是使用fopen_s
而不是fopen
的微软堆栈。否则,你应该使用fopen
like
FILE *fptr
fptr= fopen("text.txt", "w");
阅读:
除了第三个参数之外,类似的参数是 err = fopen_s(&fptr, "text.txt", "r" );
或 fptr = fopen("text.txt, "r")
并使用 fgets
读取一行输入(有很多示例)。
【讨论】:
以上是关于用 C 读写文件的主要内容,如果未能解决你的问题,请参考以下文章