Вы забываете, что в C все char
строки действительно называются завершенными нулями байтовыми строками . Значение с нулевым символом в конце важно, и будет использоваться для поиска конца строк (например, strlen
).
Если пропущены строки, функции go выйдут из границы, и у вас будет неопределенное поведение .
Терминатор с нулем - это символ '\0'
, и важно также помнить, что он не считается сам по себе strlen
и что ему нужно место в создаваемой вами строке:
char *novy = malloc(strlen(text) + 1); // +1 to make room for the terminator
Конечно, вам также нужно скопировать этот терминатор:
for(int j = 0; j <= strlen(text); j++) {
novy[j] = toupper(text[j]);
}
Обратите внимание на использование less - чем или равный оператор в состоянии l oop. Это обеспечит копирование терминатора.