创建一个文本文件,其中filename基于一个或两个数组中的值

时间:2014-12-29 20:06:08

标签: c text-files fopen naming

在C程序中,我试图创建一个文本文件,其中文件名应该基于结构中一个或两个char数组的输入。

目前我查询文件名如下:

printf("Type a filename:");
scanf("%s", &filename);
strcat(&filename, ".txt");
pFile=fopen(filename,"a");

...但是让我说我​​对char数组的输入是 John ,如何使用这个输入来创建文件名 John.txt

..甚至更好:结合两个char数组的名称:

fgets(pIndex->name, 20, stdin);  //lets say input here is John
fgets(pIndex->country, 20, stdin);  //...and input here is England

生成 JohnEngland.txt

等文件名

非常感谢!

-Espen

3 个答案:

答案 0 :(得分:2)

您可以使用此

生成 JohnEngland.txt 等文件名
char filename[45];
sprintf (filename, "%s%s.txt", pIndex->name, pIndex->country);

答案 1 :(得分:1)

防止溢出

snprintf(filename, sizeof(filename), "%s%s.txt", pIndex->name, pIndex->country);

或MS Windows变体

sprintf_s(filename, sizeof(filename), "%s%s.txt", pIndex->name, pIndex->country);

答案 2 :(得分:1)

您可以使用strcat和friends函数来连接多个字符串。我更喜欢strtcat over strcat,尤其是用户输入,以防止缓冲区溢出。也不要在"%s"中使用scanf,因为这允许用户插入任意长度的字符串,这反过来也会导致缓冲区溢出。

#include <string.h>

const char* suffix = ".txt";
char filename[1024];
char* output = NULL;

scanf("%50s", filename); // Don't use %s because that could lead to a buffer overflow and is therfor insecure.
output = strncat(filename, suffix, 1024);

strncat文件名后会附加后缀。 检查man strcat或您当地的资源是否存在涉及strncat的其他问题。