C语言如何读取文件中的字符串
在C语言中,我们可以使用标准库函数fopen()
打开一个文件,然后使用fgetc()
、fgets()
或fread()
等函数逐个字符地读取文件内容,这里我们主要介绍fgetc()
、fgets()
和fread()
三种方法。
1、使用fgetc()
函数读取单个字符
fgetc()
函数是C语言中最简单的文件读取函数,它可以逐个字符地读取文件内容,下面是一个使用fgetc()
函数的示例:
include <stdio.h> int main() { FILE *file; char ch; file = fopen("example.txt", "r"); // 以只读模式打开文件 if (file == NULL) { printf("无法打开文件 "); return 1; } while ((ch = fgetc(file)) != EOF) { // 当读取到文件末尾时,fgetc()会返回EOF putchar(ch); // 将读取到的字符输出到屏幕上 } fclose(file); // 关闭文件 return 0; }
2、使用fgets()
函数读取一行字符串
fgets()
函数可以一次性读取一行字符串,包括空格和换行符,下面是一个使用fgets()
函数的示例:
include <stdio.h> include <string.h> int main() { FILE *file; char buffer[1024]; char *line; int line_number = 0; file = fopen("example.txt", "r"); // 以只读模式打开文件 if (file == NULL) { printf("无法打开文件 "); return 1; } while ((line = fgets(buffer, sizeof(buffer), file)) != NULL) { // 当读取到文件末尾时,fgets()会返回NULL line_number++; // 记录已读取的行数 printf("%d: %s", line_number, line); // 将读取到的行输出到屏幕上 } fclose(file); // 关闭文件 return 0; }
3、使用fread()
函数读取指定数量的字符
fread()
函数可以一次性读取指定数量的字符,下面是一个使用fread()
函数的示例:
include <stdio.h> include <string.h> int main() { FILE *file; char buffer[1024]; int bytesRead; int line_number = 0; int max_lines = 100; // 每行最多包含100个字符(不包括换行符) int total_bytes = max_lines * sizeof(buffer); // 总字节数等于每行字符数乘以每个字符的字节数(假设每个字符占用1字节) file = fopen("example.txt", "r"); // 以只读模式打开文件 if (file == NULL) { printf("无法打开文件 "); return 1; } memset(buffer, '\0', sizeof(buffer)); // 将缓冲区清零,以便存储读取到的字符串 while ((bytesRead = fread(buffer, sizeof(char), total_bytes, file)) > 0) { // 当读取到文件末尾时,fread()会返回0或负数(表示错误) line_number++; // 记录已读取的行数,注意要加1,因为最后一行可能没有换行符,所以需要特殊处理 buffer[bytesRead] = '\0'; // 在缓冲区的末尾添加字符串结束符('\0')以表示字符串结束位置(不包括换行符) printf("%d: %s", line_number, buffer); // 将读取到的行输出到屏幕上,注意要加上字符串结束符('\0')以避免潜在的安全问题(如缓冲区溢出) } fclose(file); // 关闭文件(如果没有发生错误)或忽略错误(如果发生错误)并继续执行后续代码(例如使用errno设置错误标志)-> 这里我们选择关闭文件以释放资源并防止死锁等竞态条件) -> 如果发生错误,请确保在程序结束前正确处理错误(例如使用exit(EXIT_FAILURE)退出程序或调用abort()终止程序等) -> 注意:在某些情况下,您可能希望在发生错误时继续执行后续代码,例如在调试过程中或在不需要完全终止程序的情况下,在这种情况下,请确保在程序结束前正确处理错误。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/271533.html