char* init_array()
{
const int size = 5;
char *p = (char*) malloc(size * sizeof(char));
strcpy(p, "Hello, world! How are you?");
return p;
}
с размером = 5, malloc должен получить 5 свободных символов из памяти, но данная строка не вписывается в 5 символов, но она работает.C - strcpy с размером malloc меньше размера аргумента
Мой вопрос: почему? Сначала я думал, что результат будет усечен, но p - это полная строка, а не только «Hello» или «Hell \ 0»
Я использую GCC в Linux. Связано ли это с компилятором или стандартным материалом?
Откуда вы знаете, что это работает? то, что вы наблюдаете, - это «неопределенное поведение».Вы знаете, что ваш код неисправен, но эти ошибки не всегда приводят к сбоям или сбоям, на самом деле все может произойти. –
Добро пожаловать в переполнение стека! Стандартное предупреждение: [Не выдавать результат malloc] (http://stackoverflow.com/q/605845/1151654) – Eregrith
Просто распечатайте указатель возврата, используя printf («% s», init_array()); – usrc