Я не хочу знать, как решить эту проблему ...
Да, вы действительно делаете!
Если ваша char[1]
переменная всегда содержит \0
, то, что вы делаете, небезопасно. А также. если оно содержит , то то, что вы делаете, - ничто: -)
Правильный способ сделать то, что вы пытаетесь сделать, это предположить необходимость printf
:
printf("%.1s", readbuffer);
Это гарантирует, что вы не будете пытаться читать дальше этого единственного символа. Конечно, если вы знаете , что всегда будет персонаж, просто используйте:
putchar(*readbuffer);
С точки зрения того, почему разные версии gcc
сообщают по-разному, это можно объяснить простым улучшением со временем. По той же причине, например, gcc
будет жаловаться на несоответствие между количеством спецификаторов формата и количеством аргументов в чем-то вроде:
printf ("%s %d\n", "hello");
тогда как некоторые другие реализации не могут.
В частности, хотя стандарт предписывает, что должен сообщаться в качестве диагностики, он не ограничивает иначе, какие реализации могут сообщать как диагностику за пределами этого.
Более поздние версии компилятора могут добавлять или удалять эти необязательные средства диагностики или изменять способ принятия решения о них.