он забыл в sprintf указать буфер для формирования строки. То есть, написал что-то типа такого:
sprintf("format string %s, %d", cstr, 123);
По умолчанию в ibmi C компиляторе не включено то, что строковые литералы должны быть в RO памяти. В результате функция отработала и попортила память, где лежала форматная строка.
Далее были философские рассуждения об опасности указателей, в плане того, что можно вот так память запороть. Венцом рассуждений был вопрос: а в С++ защита от "испоганивания" памяти лучше, чем в Си?
Конечно... нет
Так обсуждали же уже выше, что в литералы писать нельзя и нормальный компилятор это ловит
> нормальный компилятор > ibm i
Я, например, всегда даю компилятору опцию, чтобы он литералы клал в RO. То есть, если бы он так сделал, то да, он бы не поймал это на этапе компиляции. Но программа бы упала в рантайме.
Обсуждают сегодня