在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
答案 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的其他问题。