将四个字符串常量连接成一个

时间:2011-03-27 08:11:02

标签: c++ c string

我有两个字符串常量const char *,如下所示:

const char * p1 = "abcd";
const char * p2 = "efgh";

我想将它们转换为单个字符串,以便它成为文件名:

const char * filename = "abcd_efgh.txt";

我尝试连接char *但失败了。请指导我如何做到这一点。

由于

6 个答案:

答案 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