У меня есть массив символов:
char* name = "hello";
Нет, у вас есть символьный указатель на строковый литерал . Во многих случаях вы можете добавить модификатор const, в зависимости от того, больше ли вас интересует, на что указывает name или строковое значение " hello ". Вы не должны пытаться изменить литерал ("привет"), потому что могут случиться плохие вещи .
Главное, что нужно передать, это то, что C не имеет правильного (или первоклассного ) строкового типа. «Строки» - это, как правило, массивы символов (символов) с завершающим нулевым («\ 0» или десятичным 0) символом, обозначающим конец строки, или указатели на массивы символов.
Я бы предложил прочитать Массивы символов , раздел 1.9 в Язык программирования C (стр. 28, второе издание). Я настоятельно рекомендую прочитать эту небольшую книгу (<300 страниц), чтобы выучить C. </p>
В дополнение к вашему вопросу могут помочь разделы 6 - Массивы и указатели и раздел 8 - Символы и строки из C FAQ . Вопрос 6,5 и 8,4 могут быть хорошими местами для начала.
Надеюсь, это поможет вам понять, почему ваш отрывок не работает. Другие обрисовали в общих чертах, какие изменения необходимы, чтобы заставить это работать. В основном вам нужен массив символов (массив символов), достаточно большой, чтобы хранить всю строку с завершающим (завершающим) символом '\ 0'. Затем вы можете использовать стандартную функцию библиотеки C strcpy (или, еще лучше, strncpy), чтобы скопировать в нее «Hello», и затем вы хотите объединить, используя стандартную функцию библиотеки C языка strcat (или, еще лучше, strncat). Вы захотите включить заголовочный файл string.h для объявления объявлений функций.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
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;
}