Копия строки в C - PullRequest
       56

Копия строки в C

0 голосов
/ 13 октября 2018

У меня есть функция, на которую я передаю символьный указатель, например:

funtion_name (char* string){
...
}

Я хочу скопировать строку во временную строковую переменную, а затем скопировать ее в структуру.Это то, что я сделал до сих пор:

char* namecpy = malloc(strlen(string+1));
strcpy(namecpy, string);
strcpy(ptr->name, namecpy);

Это вызывает ошибку сегментации при вызове функции.Я думаю, это потому, что мне не разрешено напрямую копировать в переменную структуры ... но как еще мне скопировать это?

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Вы можете комбинировать malloc и strcpy вместе с функцией strdup.(#include <string.h>)

ptr->name = strdup(string);

не забудьте позвонить free на ptr-> name после того, как с ним покончено.

0 голосов
/ 13 октября 2018

Вы копируете его дважды и, предположительно, вторая цель, ptr->name распределяется неправильно, поэтому он падает.

Что вы хотите сделать, это:

ptr->name = malloc(strlen(string)+1);
strcpy(ptr->name, string);

Выделите буфер в целевом местоположении.Не связывайтесь с временными переменными, если вам абсолютно не нужно.

Каждый буфер, в который вы пишете, должен иметь достаточно памяти, выделенной для него заранее .C не собирается проверять это для вас, он будет делать именно то, что вы просите, не задумываясь, поэтому, например, при работе с опасным оборудованием, таким как бензопила, вы должны очень внимательно следить за тем, как вы его используете.

...