Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用fopen_s并在c中自定义文件名_C - Fatal编程技术网

使用fopen_s并在c中自定义文件名

使用fopen_s并在c中自定义文件名,c,C,我知道如果我想使用fopen\u s,它应该是这种格式的fopen\u s(*文件,“name.txt”,“w”) 但是如果我想自定义文件名,我应该怎么做? 我试过fopen\u s(*file,str,“w”)其中str是“file.txt”,但它只是显示了帮助,没有创建任何文件。有人能帮我吗?谢谢 这是我的密码: char str[100]; printf("Enter .txt file name\n"); fgets(str, 100, stdin); FILE

我知道如果我想使用
fopen\u s
,它应该是这种格式的
fopen\u s(*文件,“name.txt”,“w”)

但是如果我想自定义文件名,我应该怎么做? 我试过
fopen\u s(*file,str,“w”)
其中
str
“file.txt”
,但它只是显示了帮助,没有创建任何文件。有人能帮我吗?谢谢

这是我的密码:

char str[100];
    printf("Enter .txt file name\n");
    fgets(str, 100, stdin);
    FILE *fp;

    fopen_s(&fp, str, "w");
if (fp == NULL)
    {
        printf("HELP\n");    exit(1);
    }
fclose(fp);

阅读fgets的功能:
fgets()从流中最多读入一个小于大小的字符,并将它们存储到s指向的缓冲区中。EOF或换行符后,读取停止。如果新行被读取,它将被存储到缓冲区中。终止空字节(aq\0aq)存储在缓冲区中最后一个字符之后。

您需要打印得到的文件,以确保传递的文件名有效(例如,不应该有
\n

解决这些问题的一个好方法是从小事做起,例如,将某些内容分配给
str
,以确保其余代码正常工作,然后继续并尝试从
STDIN
中读取


另一个有用的方法是检查
fopen_s
返回的
errno
,这会让您对发生的情况有一个很好的了解。

它可能不起作用,因为您没有正确地传递第一个参数?也许,如果您尝试创建一个演示,告诉我们您有什么问题(如何“它不工作”),我们可以更好地帮助您。另外,请花一些时间阅读,并且。编辑后的代码更有意义。而且应该有效。或者更确切地说,如果您可以打开文件,它应该可以工作,但您不能。这就是
fp==NULL
的意思,
fopen_s
无法打开文件(如果您试图阅读任何类型的文档,您确实应该知道!)。输入的文件是否存在?路径的所有部分都存在吗?如果您将绝对路径作为输入,会发生什么情况?如果我使用fopen_s(&fp,“filename.txt”,“w”),它将工作并创建一个名为“filename”的txt文件,而不是显示帮助。但是我想要的是自定义程序中的文件名@某些程序员认为这是因为str实际上包含“filename.txt\n”而不是“filename.txt”。假设您在文件名中不允许使用换行符的Windows上运行此操作,因此会出现错误。