我有两个字符串常量const char *
,如下所示:
const char * p1 = "abcd";
const char * p2 = "efgh";
我想将它们转换为单个字符串,以便它成为文件名:
const char * filename = "abcd_efgh.txt";
我尝试连接char *
但失败了。请指导我如何做到这一点。
由于
答案 0 :(得分:4)
char*
是指针,即它们保存存储数据的内存段的地址。您需要分配一个新的,足够大的缓冲区,然后使用strcat()
函数来连接字符串。
这实际上是C方式,而不是C ++方式。在C ++中,您应该使用一个字符串类,例如std::string
,它可以为您处理所有缓冲区分配内容。
答案 1 :(得分:3)
我会选择sprintf()
char buffer[strlen(p1) + strlen(p2) + 6];
sprintf(buffer, "%s_%s.txt", abcd, efgh);
(您为_
,.txt
和\0
添加6以终止字符串; 1 + 4 + 1)
答案 2 :(得分:1)
您可以使用the strcat
function:
/* strcat example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str[80];
strcpy (str,"these ");
strcat (str,"strings ");
strcat (str,"are ");
strcat (str,"concatenated.");
puts (str);
return 0;
}
答案 3 :(得分:0)
您已声明文件名字符串const,这对于您在运行时要执行的操作过于严格,但可以在编译时由预处理器使用相邻字符串规则完成:
#define PART1 "abcd"
#define PART2 "efgh"
const char* p1 = PART1 ;
const char* p2 = PART2 ;
const char* filename = PART1 "_" PART2 ".txt"
但是,如果您不需要文件名为const
,请使用已提出的解决方案之一。
答案 4 :(得分:0)
const std::string p1 = "abcd";
const std::string p2 = "efgh";
std::string filename = p1 + "_" + p2 + ".txt";
答案 5 :(得分:-2)
试试这个:
char name1[] = "my_demo";
char name2[] = "_file.txt";
char* filename = (char*) malloc(sizeof(char) * (strlen(name1) + strlen(name2) + 1));
strcpy(filename, name1);
strcat(filename, name2);
printf("Filename is: %s \n", filename);
free(filename);
<强>输出:强>
Filename is: my_demo_file.txt