Когда моя строка содержит нулевой символ в программе c?

Я до сих пор не знаю, когда моя строка в программе c содержит нуль в конце, а когда нет.

Пример моего кода

...
float t0 = 2.43, t1 = 3.42, t2 = 1, t3 = 10.9;
...
printf("%.2f %.2f %.2f %.2f", t0, t1, t2, t3); 
...

Если я использую printf, как в моем коде, будет ли программа c автоматически добавлять нулевое завершение в конец напечатанной строки или нет?


person Anti Mafia    schedule 10.03.2015    source источник
comment
Возможно, вам поможет документация по printf(). Функция printf отправляет результирующий вывод в stdout. Терминатор не выдается. Или вы думали о sprintf() ?   -  person WhozCraig    schedule 10.03.2015
comment
Извините, но я не вижу здесь никакой строки...   -  person Sourav Ghosh    schedule 10.03.2015
comment
@SouravGhosh Похоже, что OP относится к выходному содержимому printf и к тому, заканчивается ли оно нулем-терминатором (чего нет). Пока что ни один ответ ниже, похоже, не уловил этого. Мое дешевое стекло, некруглое, плохое оправдание хрустального шара говорит мне, что вопрос в конечном итоге связан с перенаправлением stdout и добавляет ли этот вывод терминатор к целевому устройству.   -  person WhozCraig    schedule 10.03.2015
comment
@WhozCraig Да, сэр, теперь я понял. Однако пока ответы сбивают с толку.   -  person Sourav Ghosh    schedule 10.03.2015
comment
я запутался, что правда? люди дают разные ответы ниже   -  person Anti Mafia    schedule 10.03.2015
comment
@Anti Mafia Путаница возникает из-за того, что вы говорите о строке формата или выводе printf(). См. редактирование в этом ответе   -  person chux - Reinstate Monica    schedule 10.03.2015


Ответы (4)


В: Если я использую printf, как в своем коде, будет ли программа c автоматически добавлять завершающий нуль в конец строки, которая печатается, или нет?
О: Нет. printf() обычно не печатает завершающий нулевой символ '\0'. Вместо этого "%.2f %.2f %.2f %.2f" вызывает вывод типа "1.12 2.23 3.34 4.45" с последним символом, напечатанным как '5'.

[Правка]
Формат "%.2f %.2f %.2f %.2f" – это строка, оканчивающаяся нулем в конце '\0'. Распечатанный вывод printf() не печатал '\0'. Нулевой терминатор '\0' в формате сигнализирует printf() об остановке. Нулевой терминатор '\0' сам по себе не печатается.

Примечание. В языке C строка C всегда имеет завершающий нулевой символ '\0'. Если массив char не содержит ни одного, это не строка. Таким образом, вывод printf() в приведенном выше примере — это не строка, а просто набор символов.

person chux - Reinstate Monica    schedule 10.03.2015

1-й аргумент в

printf("%.2f %.2f %.2f %.2f", ...

является строковым литералом ("%.2f %.2f %.2f %.2f") и да, также строковые литералы заканчиваются 0.

person alk    schedule 10.03.2015

На самом деле да, если бы вы объявили char format[]="%f %f\n"; с помощью gdb или добавили некоторый исследовательский код, вы бы смогли увидеть нулевой байт, завершающий строку.

person phil    schedule 10.03.2015

Ответ на If i use printf like in my code, does the string that printed contain null character at the end? — да, он есть, но вы не увидите его в printf.

Нулевой терминатор указывает на конец строки, когда она представлена ​​в виде массива символов. При использовании функции printf вы передаете указатель на начало строки в качестве параметра, и она будет печатать строку до окончания NULL.

person Anton.P    schedule 10.03.2015