Вы, конечно, вызываете неопределенное (или хотя бы неопределенное) поведение. Вы объявляете буфер и затем передаете его через setvbuf
в stdout
. С этого момента, буфер принадлежит stdout
и больше не вам. Это означает, что вы больше не можете получить к нему доступ. Но это именно то, что вы делаете.
Я не могу доказать это из формулировки стандарта, но есть определенная комбинация параграфов, которая приводит к моему выводу.
Обновление: В ISO 799 говорится в 7.19.5.6p2 о функции setvbuf
: Содержимое массива в любое время неопределенно. То, что вы видите, просто стечение обстоятельств. Вы также можете увидеть что-нибудь еще, гарантия от ISO C99 отсутствует.
Обновление 2: Поскольку содержимое массива неопределенное, все они могут также быть ненулевыми символами. И в этом случае buf
больше не содержит строку . Поэтому вы явно вызываете неопределенное поведение .