История изменений
Исправление 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 - Можно использовать память при этом всегда контролируй размер обращения к ней