Копирование одной части строки в другую в 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
,