Как я могу присоединить символ к постоянному символу *? - PullRequest
1 голос
/ 23 августа 2011

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

4 голосов
/ 23 августа 2011

Для написанной вами функции требуются две 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;
}
2 голосов
/ 23 августа 2011

Если вы хотите присоединиться к одному символу, вам нужно написать отдельную функцию, которая добавляет количество символов от s2 для добавления.

1 голос
/ 23 августа 2011

Лучше всего создать новую функцию, которая позволяет добавлять один символ в строку. Но если вы хотите по какой-то причине использовать функцию join(), вы также можете сделать следующее:

char *command = "nest";
char *buffer  = " "; // one space and an implicit trailing '\0'
char *halloween;

*buffer = command[0];
halloween = join("hallowee", buffer);  
...