Объединить четыре строковые константы в одну - PullRequest
2 голосов
/ 27 марта 2011

У меня есть две строковые константы const char * вот так:

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

Я хочу преобразовать их в одну строку, чтобы она стала именем файла:

const char * filename = "abcd_efgh.txt";

Я попытался объединить char *, но потерпел неудачу. Пожалуйста, направьте меня, как это сделать.

Спасибо

Ответы [ 6 ]

4 голосов
/ 27 марта 2011

char* являются указателями , т.е. они содержат адрес сегмента памяти, в котором хранятся данные. Вам нужно выделить новый, достаточно большой буфер, а затем использовать функцию strcat() для объединения строк.

Это действительно способ C, а не C ++. В C ++ вы должны использовать строковый класс, такой как std::string, который обрабатывает все вещи для выделения буфера.

3 голосов
/ 27 марта 2011

Я бы пошел с sprintf()

char buffer[strlen(p1) + strlen(p2) + 6];
sprintf(buffer, "%s_%s.txt", abcd, efgh);

(Вы добавляете 6 для _, .txt и \0 для завершения строки; 1 + 4 + 1)

1 голос
/ 27 марта 2011

Вы можете использовать функцию strcat :

/* 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;
}
0 голосов
/ 27 марта 2011
const std::string p1 = "abcd";
const std::string p2 = "efgh";

std::string filename = p1 + "_" + p2 + ".txt";
0 голосов
/ 27 марта 2011

Вы объявили строку имени файла const, которая слишком ограничительна для того, что вы хотите сделать во время выполнения, но может быть выполнена препроцессором во время компиляции, используя правило соседней строки :

#define PART1 "abcd"
#define PART2 "efgh"

const char* p1 = PART1 ;
const char* p2 = PART2 ;

const char* filename = PART1 "_" PART2 ".txt"

Однако, если вам не нужно, чтобы имя файла было const, используйте одно из уже предложенных решений.

0 голосов
/ 27 марта 2011

Попробуйте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...