2

我正在尝试使用 c 创建/打开文件。我使用 fgets 命令输入名称,所以我不能溢出缓冲区,如下所示:

void main() {
    printf("Enter file name: ");
    char * fileName = (char *) calloc(MAX_BUFFER_SIZE, sizeof(char));
    fgets(fileName, MAX_BUFFER_SIZE, stdin);
    FILE *inputFile = fopen(fileName, "w");
    if(inputFile==NULL) perror(fileName);
}

使用调试器,我可以看到我为文件名输入的值是我希望的值,但是 fopen 函数返回 NULL 指针并且我得到“无效参数”错误。如果我改用scanf("%s", fileName)没有问题并且文件已创建,但这样我可能会溢出缓冲区。任何想法为什么第一个示例不起作用?提前致谢 :)

4

2 回答 2

4

读取的字符串fgets末尾可能有换行符。您必须先将其删除,然后才能使用fopen.

如何删除最后的换行符?

于 2012-05-14T07:19:48.493 回答
2

fgets()处理换行符的方式与scanf("%s")or不同gets()。与它们不同,fgets()在字符串中包含换行符。输入文件名后,您按下回车键,这可能会将换行符包含在您的文件名中,因此使其无效。

于 2012-05-14T07:21:59.017 回答