2015-03-10 9 views
0

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

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

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

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

+2

Возможно, некоторые [документы для 'printf()' помогут] (http://en.cppreference.com/w/c/io/fprintf). Функция 'printf' отправляет полученный результат в' stdout'. Терминатор не выбрасывается. Или вы думаете о 'sprintf()'? – WhozCraig

+0

Извините, но я не вижу _string_ здесь ... –

+0

@SouravGhosh OP, по-видимому, ссылается на выходные данные 'printf' и заканчивается ли * it * с нулевым терминатором (который он не). До сих пор ни один из приведенных ниже ответов, похоже, не понял. Мое дешевое стекло, внеочередное плохое оправдание для хрустального шара говорит мне, что в конечном итоге вопрос связан с перенаправлением stdout и добавляет ли этот вывод терминатор к целевому устройству. – WhozCraig

ответ

2

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

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

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

0

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

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

+0

'NULL'! =' null'; 'null' ==' NUL' == '0' – alk

0

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

1

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

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

является строковым ("%.2f %.2f %.2f %.2f") и да, и строковые литералы 0 -завершённый.