Как я могу присоединить символ к постоянному символу *?

У меня есть функция, которая соединяет две постоянные 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);  
Другие вопросы по тегам