c - 打印 FILE 变量的内容
问题描述
我正在设置一个指向变量指针数组的指针,这些变量将打开文件并计算单词。我遇到的问题是如何在输出中打印文件名。单词的计数有效(减去一些小的双空格等)。
这些文件作为命令行参数输入。这是代码:
FILE **Files = malloc(sizeof(FILE *) * (count)); //Array of file pointers
for (i = 0 ; i < count ; i++)
{
Files[i] = fopen(argv[i + 1], "r");
}
for (i = 0 ; i < count ; i++)
{
wordCount = countWords(Files[i]);
printf("File %s: number of words is: %d\n", Files[i], wordCount);
}
如果 fopen == NULL 以保持简短,我省略了错误检查。我尝试了 *Files[i]、*(&Files[i]) 和其他一些尝试打印出变量的内容。有没有办法将 FILE * 变量打印为字符串?
解决方案
由于argv[i + 1]
是文件名,因此您需要打印argv[i + 1]
. 您不想打印Files[i]
,因为它不是指向文件名的指针或与文件名有任何关联的任何内容。
您可能没有意识到这一点,但文件名并不能唯一标识文件。一个文件可以根本没有名称(例如,如果它在打开时从它所在的唯一目录中删除)或可以有多个名称(例如,如果它硬链接到多个目录中)。尝试从文件转到文件名并不简单,只有在有特定原因时才应该这样做。
推荐阅读
- angular - 如何以及在何处使用 Angular http 方法检查服务中收到的 JSON
- c# - C# Outlook COMException“项目已被移动或删除”
- tinymce - TinyMCE 缺少通过网格为某些用户创建表
- python - 使用 Geopandas/GeoPlot 生成 GeoTiff
- java - 如何通过ID打开特定活动
- azure - 保护 Azure API 管理上的端点,以便只有应用程序(无需登录)可以调用它
- sql - 使用SQL查找多列行中的最小值
- c# - Oledb OledbDataAdapter 和 CommandBuilder 错误 Syntaxfehler in der INSERT INTO-Anweisung
- spring-boot - spring-kafka 中的消费者错误处理中的重试尝试计数不起作用
- python - 使用 pyomo 模型优化功能