Как я могу присоединить символ к постоянному символу *?
У меня есть функция, которая соединяет две постоянные char* и возвращает результат. Хотя я хочу соединить символ с постоянным символом * например
char *command = "nest";
char *halloween = join("hallowee", command[0]); //this gives an error
char *join(const char* s1, const char* s2)
{
char* result = malloc(strlen(s1) + strlen(s2) + 1);
if (result)
{
strcpy(result, s1);
strcat(result, s2);
}
return result;
}
3 ответа
Для написанной вами функции требуются две C-строки (т.е. две const char *
переменные). Здесь ваш второй аргумент command[0]
который не является указателем (const char *
) но простой символ 'n' (const char
). Функция, однако, полагает, что переданное вами значение является указателем, и пытается найти строку в адресе памяти, заданную значением ASCII буквы "n", что вызывает проблему.
РЕДАКТИРОВАТЬ: Чтобы это работало, вам придется изменить join
функция:
char *join(const char* s1, const char c)
{
int len = strlen(s1);
char* result = malloc(len + 2);
if (result)
{
strcpy(result, s1);
result[len] = c; //add the extra character
result[len+1] = '\0'; //terminate the string
}
return result;
}
Если вы хотите присоединиться к одному символу, вам нужно написать отдельную функцию, которая берет количество символов из s2
добавить.
Лучше всего создать новую функцию, которая позволяет добавлять один символ в строку. Но если вы хотите использовать join()
Функция как есть по какой-то причине, вы также можете действовать следующим образом:
char *command = "nest";
char *buffer = " "; // one space and an implicit trailing '\0'
char *halloween;
*buffer = command[0];
halloween = join("hallowee", buffer);