用C语言编写具有用户定义名称的输出文件
我是C语言的新手,正在尝试在程序运行之前定义一个输出文件名。我的车出了故障 这是我的密码:用C语言编写具有用户定义名称的输出文件,c,C,我是C语言的新手,正在尝试在程序运行之前定义一个输出文件名。我的车出了故障 这是我的密码: #include <stdio.h> int main (int argc, const char * argv[]) { char fname[128]; printf("Enter the file name\n"); scanf("%123s",fname); strcat("/Users/user/Desktop/learn/", fname);
#include <stdio.h>
int main (int argc, const char * argv[]) {
char fname[128];
printf("Enter the file name\n");
scanf("%123s",fname);
strcat("/Users/user/Desktop/learn/", fname);
strcat(fname, ".txt");
FILE *fp;
fp=fopen(fname,"a");
fprintf(fp, "Testing... OK I think it worked\n");
return 0;
}
#包括
int main(int argc,const char*argv[]{
char-fname[128];
printf(“输入文件名\n”);
scanf(“%123s”,fname);
strcat(“/Users/user/Desktop/learn/”,fname);
strcat(fname,“.txt”);
文件*fp;
fp=fopen(fname,“a”);
fprintf(fp,“测试……好的,我认为它起作用了”;
返回0;
}
在对strcat的第一次调用中,您将使用字符串文本作为目标指针。因此,您将“/Users/user/Desktop/learn/”与fname关联,并将结果存储在存储“/Users/user/Desktop/learn/”的位置,该位置甚至可能不可写
包含在strcat
中
strcat
的第一个参数必须是指针,而不是字符串文字strcat
本身不安全,请改用scanf
和fopen
的结果fp
main
的签名应该是intmain(intargc,char*argv[])
通常也不鼓励使用
scanf
,使用fscanf
和sscanf
。这不是strcat()
的工作方式
我认为有两种方法:
- 正确使用
,并输入文件名:fname
并使用它 目前,这种方法仍然存在输入限制为123字节的问题,这可能太大了,所以最好暂时忘掉它。这只是为了得到这个想法 也许char fname[128]; strcpy(fname, "/Users/user/Desktop/learn/"); // ok as long as you don't make the 128 too small char * input = fname + strlen(fname); // now points after the final / printf("Enter the file name\n"); scanf("%123s", input); // the 123 is probably not correct strncat(fname, ".txt", sizeof fname);
更好:fgets()
fgets(input, sizeof(fname)-strlen(fname), stdin);
- 使用命令行参数,这是我最喜欢的方法:
// first check if argc is >= 2, i. e. if the caller has supplied an argument char fname[128]; strcpy(fname, "/Users/user/Desktop/learn/"); strncat(fname, argv[1], sizeof fname); strncat(fname, ".txt", sizeof fname);
#包括
#包括
int main(int argc,const char*const*argv[]
{
char-fname[128];
字符路径[]=“/home/abc/test/”;
printf(“输入文件名\n”);
scanf(“%123s”,fname);
strcat(fname,“.txt”);
strcat(路径,fname);
文件*fp;
fp=fopen(路径“a”);
fprintf(fp,“测试……好的,我认为它起作用了”;
fclose(fp);
返回0;
}
谢谢大家的评论。这是工作代码:
#include <stdio.h>
#include <string.h>
int main (int argc, const char*const* argv[])
{
char fname[128];
strcpy(fname, "/Users/user/Desktop/learn/");
char * input = fname + strlen(fname);
printf("Enter the file name\n");
scanf("%s", input);
strncat(fname, ".txt", sizeof fname);
printf("The output pathway and file will be called %s\n", fname);
FILE *fp;
fp=fopen(fname,"a");
fprintf(fp, "Testing... OK I think it worked\n");
fclose(fp);
return 0;
}
#包括
#包括
int main(int argc,const char*const*argv[]
{
char-fname[128];
strcpy(fname,“/Users/user/Desktop/learn/”;
char*input=fname+strlen(fname);
printf(“输入文件名\n”);
扫描频率(“%s”,输入);
strncat(fname,.txt),fname的大小;
printf(“输出路径和文件将被称为%s\n”,fname);
文件*fp;
fp=fopen(fname,“a”);
fprintf(fp,“测试……好的,我认为它起作用了”;
fclose(fp);
返回0;
}
你在main()
上的签名是错误的。对于一个新成员来说,这是一种非常严厉的待遇,因为他也是该语言的新手。他又不是叫你做作业什么的。这是一个有隐含问题的有效问题,我们经验丰富的人应该能够回答,并就他如何能更好地提问以及如何学习语言提供一些指导。我知道这有很多错误,但谢谢你的评论。我参加的这门课让我们期待着熟悉CThank you!第一种方法奏效了。在尝试命令行参数之前,我需要更好地使用命令行参数。@Davis“使用命令行参数更好”在本文中是什么意思?这听起来像是一个大问题,但事实并非如此。这是一个家庭作业,所以我使用了第一种有效的方法,第二种方法需要更多的c语言知识,我还没有。@Davis,我不这么认为。用C语言处理用户输入肯定更容易出错,也更具挑战性,并且需要比处理命令行参数更多的知识和谨慎。后者已经在内存中,而前者必须先写入内存。如果键入长路径名,就会发生有趣的事情。应该事后记录,这可能在幸运的情况下起作用,但确实使用了scanf()(永远不要这样做!),并且没有正确使用strncat()的最后一个参数。它也不会在strncat、fopen()之后检查错误。糟糕。
#include <stdio.h>
#include <string.h>
int main (int argc, const char*const* argv[])
{
char fname[128];
strcpy(fname, "/Users/user/Desktop/learn/");
char * input = fname + strlen(fname);
printf("Enter the file name\n");
scanf("%s", input);
strncat(fname, ".txt", sizeof fname);
printf("The output pathway and file will be called %s\n", fname);
FILE *fp;
fp=fopen(fname,"a");
fprintf(fp, "Testing... OK I think it worked\n");
fclose(fp);
return 0;
}