我在C中尝试从用户输入中获取字符串,以便程序可以打开所选文件。
我尝试使用fgets因为我在很多线程上读到它是更安全的选择(而不是获取)。
但是当使用gets存储字符串时,文件会打开,但是fgets不会。
以下是我正在使用的代码:
char csvFile[256];
FILE *inpfile;
printf("Please enter CSV filename: ");
fgets(csvFile,256,stdin);
printf("\nFile is %s\n",csvFile);
inpfile = fopen(csvFile,"r");
if(inpfile == NULL)
{
printf("File cannot be opened!");
}
我知道文件存在,但是fgets输入了if块 唯一的区别是使用:
gets(csvFile);
取代
fgets(csvFile,256,stdin);
任何人都可以帮我理解这个吗? 提前谢谢。
答案 0 :(得分:4)
您需要删除尾随换行符:
char csvFile[256], *p;
fgets(csvFile, sizeof csvFile, stdin);
if ((p = strchr(csvFile, '\n')) != NULL) {
*p = '\0'; /* remove newline */
}
答案 1 :(得分:1)
您可以分别在句子的第一行和结尾添加两个“=”来检查csvFile
末尾的换行符。
printf("\n=File is %s=\n",csvFile);
您可以使用csvFile
库中的strtok()
功能轻松删除<string.h>
末尾的换行符。因此,您可能需要在以下列方式使用fgets()
读取输入字符串后添加一行代码:
fgets(csvFile, sizeof csvFile, stdin);
strtok(csvFile, "\n");
答案 2 :(得分:0)
您在fgets
和gets
之间观察到的差异是fgets
将换行符留在读取字符串的末尾。但它不应该让您返回gets
- 如果它是换行符,只需删除csvFile
中的最后一个字符。