我正在尝试创建一些文件,我在其中定义文件名的第一部分,然后使用用户输入的字符串作为第二部分。 所以如果用户输入“filename”,我想创建1TEMPfilename,1FLUXfilename,1PRESSUREfilename
到目前为止:
main ()
{
char filename[64];
printf("Enter the Runfile ID (e.g. jul0476.a\n");
fgets(filename,50,stdin);
//create new files
FILE *fp;
fp = fopen('1FINALTEMP'filename,"w");
}
这会产生错误,有关如何执行此操作的任何想法吗?
答案 0 :(得分:0)
不要忘记fgets()
也会在尾随换行符(\n
)中读取。您可能想删除它。
fgets(filename,50,stdin);
filename[strlen(filename)-1]='\0';
之后创建新文件名。
char names[3][60];
sprintf(names[0], "1TEMP%s", filename);
sprintf(names[1], "1FLUX%s", filename);
sprintf(names[2], "1PRESSURE%s", filename);
然后使用这些字符串作为fopen()
的参数,如
fopen(names[0], "w");
通过查看其返回值来检查fopen()
是否成功。如果是NULL
,则会发生一些错误。
至于fp = fopen('1FINALTEMP'filename,"w");
给出错误,'1FINALTEMP'
是一个字符串而不是字符文字。单引号用于字符文字。请参阅here。
只有相邻的字符串文字连接起来here。
连接相邻的字符串文字标记。
即,在printf("%s", "hello " "world");
中,"hello " "world"
将成为"hello world"
。
但这只适用于字符串文字。
编辑:snprintf()
优先于sprintf()
,因为如果要写入的字符串太大而无法存储在发生写入的字符串中,后者可能会写出越界。使用snprintf()
,您可以指定要写入的字节数。
char name[60];
snprintf(names, 60, "1TEMP%s", filename);
答案 1 :(得分:-1)
尝试从fgets中获取存储文件名的字符串变量,然后使用' +'并连接你提供的内容(1Finaltemp)然后将其传递给文件指针,如fp = fopen(myNewFile,w)