объединить char array в C

У меня есть массив aa char:

char* name = "hello"; 

Я хочу добавить расширение к этому имени, чтобы сделать это

 hello.txt 

Как я могу это сделать?

name += ".txt" не будет работать

Посмотрите на функцию strcat .

В частности, вы можете попробовать следующее:

 const char* name = "hello"; const char* extension = ".txt"; char* name_with_extension; name_with_extension = malloc(strlen(name)+1+4); /* make space for the new string (should check the return value ...) */ strcpy(name_with_extension, name); /* copy name into the new var */ strcat(name_with_extension, extension); /* add the extension */ 

У меня есть массив символов:

 char* name = "hello"; 

Нет, у вас есть указатель на строковый литерал . Во многих вариантах использования вы можете добавить модификатор const, в зависимости от того, интересуетесь ли вы тем, какое имя указывает, или строковым значением, « привет ». Вам не следует пытаться модифицировать литерал («привет»), потому что могут произойти плохие вещи .

Главное, чтобы передать, что C не имеет правильного (или первоclassного ) строкового типа. «Строки» – это, как правило, массивы символов (символов) с завершающим нулевым символом («\ 0» или десятичным 0) для обозначения конца строки или указателями на массивы символов.

Я бы предложил прочитать Character Arrays , раздел 1.9, на языке программирования C (стр. 28 второе издание). Я настоятельно рекомендую прочитать эту небольшую книгу (<300 страниц), чтобы узнать C.

В дополнение к вашему вопросу, разделы 6 – Массивы и указатели и раздел 8 – Символы и строки часто задаваемых вопросов C могут помочь. Вопрос 6.5 и 8.4 могут быть хорошими местами для начала.

Надеюсь, это поможет вам понять, почему ваш отрывок не работает. Другие изложили, какие изменения необходимы, чтобы заставить его работать. В основном вам нужен массив символов (массив символов), достаточно большой, чтобы хранить всю строку с завершающим (заканчивающимся) символом ‘\ 0’. Затем вы можете использовать стандартную библиотеку C библиотеки strcpy (или, еще лучше, strncpy), чтобы скопировать «Hello» в нее, а затем вы хотите объединиться с помощью стандартной функции stcc (или лучше всего strncat) библиотеки C). Вам нужно будет включить заголовочный файл string.h, чтобы объявить объявления функций.

 #include  #include  #include  int main( int argc, char *argv[] ) { char filename[128]; char* name = "hello"; char* extension = ".txt"; if (sizeof(filename) < strlen(name) + 1 ) { /* +1 is for null character */ fprintf(stderr, "Name '%s' is too long\n", name); return EXIT_FAILURE; } strncpy(filename, name, sizeof(filename)); if (sizeof(filename) < (strlen(filename) + strlen(extension) + 1) ) { fprintf(stderr, "Final size of filename is too long!\n"); return EXIT_FAILURE; } strncat(filename, extension, (sizeof(filename) - strlen(filename)) ); printf("Filename is %s\n", filename); return EXIT_SUCCESS; } 

Сначала скопируйте текущую строку в больший массив с помощью strcpy , затем используйте strcat .

Например, вы можете:

 char* str = "Hello"; char dest[12]; strcpy( dest, str ); strcat( dest, ".txt" ); 

Вы могли бы скопировать и вставить ответ здесь, или вы могли бы прочитать, что наш хост Джоэл должен сказать о strcat .

asprintf не является стандартом 100%, но доступен через библиотеки библиотек стандарта GNU и BSD, поэтому вы, вероятно, имеете его. Он выделяет результат, поэтому вам не нужно сидеть и подсчитывать символы.

 char *hi="Hello"; char *ext = ".txt"; char *cat; asprintf(&cat, "%s%s", hi, ext); 
 #include  #include  #include  char *name = "hello"; int main(void) { char *ext = ".txt"; int len = strlen(name) + strlen(ext) + 1; char *n2 = malloc(len); char *n2a = malloc(len); if (n2 == NULL || n2a == NULL) abort(); strlcpy(n2, name, len); strlcat(n2, ext, len); printf("%s\n", n2); /* or for conforming C99 ... */ strncpy(n2a, name, len); strncat(n2a, ext, len - strlen(n2a)); printf("%s\n", n2a); return 0; // this exits, otherwise free n2 && n2a }