LINUX.ORG.RU

История изменений

Исправление LINUX-ORG-RU, (текущая версия) :

//тут после символов лежит мусор, не забывай
char string[5000] = {‘S’,‘o’,‘u’,‘r’,‘c’,‘e’,‘\0’};


char *out = malloc(strlen(string) + 1);
memset(out,'\0',strlen(string)+1);// заполни весь кусок нулями потом копируй
strcpy(out, string);

Для выделения можно использовать calloc() он инициализирует выделенную память нулями, но без гарантий.

Ради скорости порой можно не очищать буферы памяти, но только тогда когда ты точно знаешь что делаешь. В случае неопределённости, разная используемая длинна и тому подобное любую память, от malloc/calloc после получения заполняй одним значением, в случае букавок заполняй нулями дабы получать везде где данные не используются конец строки. В случае неожиданностей (ты напутал индексы или ещё что) ты можешь ради теста заполнить данные например символом ‘A’ и выявить то где ты не прав и на косячил.

Помни в си ты оперируешь просто блоками памяти.

1 - Получил/зарезервировал память, сохранил размер памяти

2 - Заполнил(очистил) память определённым значением

3 - Можно использовать память при этом всегда контролируй размер обращения к ней

Исходная версия LINUX-ORG-RU, :

//тут после символов лежит мусор, не забывай
char string[5000] = {‘S’,‘o’,‘u’,‘r’,‘c’,‘e’,‘\0’};




char *out = malloc(strlen(string) + 1);
memset(out,'\0',strlen(string)+1);// заполни весь кусок нулями потом копируй
strcpy(out, string);

Для выделения можно использовать calloc() он инициализирует выделенную память нулями, но без гарантий.

Ради скорости порой можно не очищать буферы памяти, но только тогда когда ты точно знаешь что делаешь. В случае неопределённости, разная используемая длинна и тому подобное любую память, от malloc/calloc после получения заполняй одним значением, в случае букавок заполняй нулями дабы получать везде где данные не используются конец строки. В случае неожиданностей (ты напутал индексы или ещё что) ты можешь ради теста заполнить данные например символом ‘A’ и выявить то где ты не прав и на косячил.

Помни в си ты оперируешь просто блоками памяти.

1 - Получил/зарезервировал память, сохранил размер памяти

2 - Заполнил(очистил) память определённым значением

3 - Можно использовать память при этом всегда контролируй размер обращения к ней