Копирование одной части строки в другую в C

У меня проблемы с попыткой скопировать одну часть строки в другую. Учитывая эти два указателя на символ:

line points at string cointaining: "helmutDownforce:1234:44:yes"
username points at: NULL

Вот моя функция, которая принимает эти указатели в качестве входных данных:

char* findUsername(char* line, char* username){
    char* ptr = strstr(line, ":");
    ptrdiff_t index = ptr - line;
    strncpy(username, line, index);

    return username;
}

Я получаю ошибку сегментации во время strncpy. Как так? В результате я хочу, чтобы функция возвращала указатель на строку, содержащую helmutDownforce.

2 ответа

Эта функция выделяет и возвращает новую строку, поэтому, чтобы избежать утечки памяти, вызывающая функция должна быть ответственна за ее освобождение. Если в строке нет двоеточия-разделителя, он вернется NULL,

char* findUsername(char* line){
    char* ptr = strchr(line, ':');
    /* check to make sure colon is there */
    if (ptr == NULL) {
        return NULL;
    }

    int length = ptr - line;
    char *username = malloc(length+1);

    /* make sure allocation succeeded */
    if (username == NULL) return NULL;

    memcpy(username, line, length);
    username[length] = '\0';
    return username;
}

В соответствии с руководством strncpy:

the destination string dest must be large enough to receive the copy

Таким образом, вы должны сначала выделить немного памяти malloc за username перед звонком strncpy,

Другие вопросы по тегам