c - 需要获取用户输入的字符串并创建多个包含用户字符串的文件

标签 c file

我正在尝试创建多个文件,在其中定义文件名的第一部分,然后使用用户输入的字符串作为第二部分。 因此,如果用户输入“文件名”,我想创建 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/

相关文章:

c - 我想为我自己的 Linux 内核工作文件夹生成交叉引用

将 char 转换为 char 数组或将 char 数组转换为 char?

c - C中二维数组的内存分配

Ruby: 没有这样的文件或目录 @ rb_sysopen - testfile (Errno::ENOENT)

c - 逐行读取文本并为每行分配变量

php - 检查文件是否存在,不存在则创建

c - 来自 'void*' 的 Malloc 无效转换

将 "pointer to const"转换为 "pointer to const VLA"

java - 如何在方法中接受文本文件?

javascript - jQuery/JavaScript 读取本地文本文件