При динамическом назначении памяти в C для строк, считаете ли вы конец \ 0 строки char? - PullRequest
0 голосов
/ 08 марта 2012

При динамическом назначении памяти в C для строк, считаете ли вы конец \ 0 строки char?

char *copyInto, *copyFrom="test";

// Should 
copyInto = (char*)malloc(strlen(copyFrom));
// suffice?

// or should this be the following?
copyInto = (char*)malloc(strlen(copyFrom)+1);

// assuming you want to copy the string from copyFrom into copyInto
strcpy(copyInto,copyFrom);

// Does anyone recommend just \0-ing the whole copyInto as in
copyInto = (char*)calloc(strlen(copyFrom)+1);
// and if so, should it still be (strlen(copyFrom)+1) size?

1 Ответ

6 голосов
/ 08 марта 2012
  1. Не приводите возвращаемые значения malloc() или calloc() (или realloc() в этом отношении) в программе на Си.
  2. Да, вам нужно иметь +1.
  3. Зачем использовать calloc() для обнуления всей строки, если вы просто собираетесь скопировать в нее немедленно? Мне кажется, что это пустая трата циклов.
...