【发布时间】:2016-09-22 10:49:33
【问题描述】:
自从我用 C 编程以来已经有好几年了,所以我一直在努力做一个简单的“从标准输入获取文件名和路径,读取文件,将文件打印到标准输出”任务,我知道不应该这样做要那么难,但你。这是我的代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(void) {
int c;
FILE *file;
//scanf("%s", filename);
char *filename;
filename = (char *)malloc(200 * sizeof(char));
read(STDIN_FILENO, filename, 200);
printf("%s", filename);
file = fopen(filename, "r");
if (file) {
while ((c = getc(file)) != EOF)
putchar(c);
fclose(file);
} else {
printf("File not found.");
}
printf("\n");
return(0);
}
我的代码继续简单地打印出File not found.,当我知道我的文件路径和一切都是正确的时(不仅因为我真的将它从我的文件夹中的 Mac OSX El Capitan 拖放到终端中 -多么可爱的功能,而且)因为我有一个使用scanf 的程序的不同版本,它找到了文件并很好地阅读了它,(如你所见,我在我的代码中注释掉了它)。
我正在编写的另一个程序只使用了这个程序,我去掉了scanf,因为我认为它对该程序中的其他事情产生了负面影响,所以我希望能够使用read()
如果有人对我如何解决这个问题或为什么这不起作用有任何建议,我将不胜感激,因为我已经在这工作了几个小时,并且非常想继续我的 我需要编码的实际程序!
非常感谢
【问题讨论】:
-
你不应该转换
malloc()的返回值,c不需要它。不要使用sizeof(char),因为它什么都不添加,并且始终为 1,不要使用malloc(),因为您可以定义一个包含 200 个字符的数组,还可以使用fgets()读取文件名并删除结束行字符。 -
在调用
malloc()、read()等系统函数时,一定要检查返回值以保证操作成功。显示错误消息时,这些错误指示是从对系统函数的调用中返回的,在stderr上显示错误,以及您的文本和系统错误消息,使用:perror( "your text" ); -
在现代
C中,当从main()函数返回时,如果返回值为0则不需要return语句..