копия указателя строки - PullRequest
7 голосов
/ 23 марта 2011

У меня есть функция, у которой есть вход и указатель на массив char в C. В этой функции я манипулирую основной строкой, однако я хочу сделать резервную копию в другой переменной, прежде чем использовать ее. Я хочу поместить его в резервную копию [2000], поэтому, если указатель изменится, резервная копия не изменится. Как я могу это сделать?

Ответы [ 7 ]

11 голосов
/ 23 марта 2011
void function (const char *string)
{
   char *stringcopy = malloc (1 + strlen (string));
   if (stringcopy)
       strcpy (stringcopy, string);
   else  fprintf (stderr, "malloc failure!"):
   ...
   do whatever needs to be done with `stringcopy`
}
9 голосов
/ 23 марта 2011

Для дублирования строк в C есть библиотечная функция с именем strdup, созданная для этого:

Память, выделенная strdup, должна быть освобождена после использования с помощью free.

strdup обеспечивает выделение памяти и операцию копирования строки за один шаг. Использование массива char может стать проблематичным, если в какой-то момент времени копируемая строка окажется больше, чем размер массива.

2 голосов
/ 23 марта 2011

Ваши друзья следующие функции

  • таНос
  • MemSet
  • calloc
  • тетср
  • зЬгср
  • strdup
  • strncpy

Но лучше всего, самый большой друг - человек :)

1 голос
/ 23 марта 2011

Используйте strncpy ().

void myfunc(char* inputstr)
{
    char backup[2000];
    strncpy(backup, inputstr, 1999);
    backup[1999] = '\0';
}

Копирование символов 1999 года в массив символов 2000 оставляет последний символ для нулевого терминатора.

0 голосов
/ 23 марта 2011

ссылка на strcpy.

strcpy( backup, source );

Примечание по ссылке.

Чтобы избежать переполнений, размер массива, указанного адресатом, должен быть достаточно длиннымсодержит ту же строку C, что и источник (включая завершающий нулевой символ), и не должна перекрываться в памяти с источником.

0 голосов
/ 23 марта 2011

Используйте memcpy для создания резервной копии.

char backup[2000];
char original[2000];

sprintf(original, "lovely data here");
memcpy(backup, original, 2000);

char* orig_ptr = original;
0 голосов
/ 23 марта 2011

Вы можете использовать strcpy , чтобы сделать копию массива (строки) char перед началом изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...