我正在尝试创建多个文件,在其中定义文件名的第一部分,然后使用用户输入的字符串作为第二部分。 因此,如果用户输入“文件名”,我想创建 1TEMP 文件名、1FLUX 文件名、1PRESSURE 文件名
到目前为止:
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");
}
这会产生错误,关于如何执行此操作有什么想法吗?
最佳答案
不要忘记 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'
是一个字符串,而不是一个字 rune 字。单引号用于字 rune 字。请参阅here .
并且只有相邻的字符串文字如前面提到的那样连接here .
Adjacent string literal tokens are concatenated.
即,在 printf("%s", "hello ""world");
中,"hello ""world"
将变为 "hello世界”
。
但这仅适用于字符串文字。
编辑:snprintf()
优于 sprintf()
,因为如果要写入的字符串太大而无法存储在内存中,则后者可能会超出范围。发生写入的字符串。使用snprintf()
,您可以指定要写入的字节数。
char name[60];
snprintf(names, 60, "1TEMP%s", filename);
关于c - 需要获取用户输入的字符串并创建多个包含用户字符串的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46773646/