Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.94
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
#1

Вывод строки в printf - C++

18.03.2012, 16:23. Просмотров 6815. Ответов 5
Метки нет (Все метки)

Есть варианты кода, пытающиеся вывести строку "abc" в stdout.

C++
1
2
3
4
5
6
7
#include <stdio.h>
 
int main ()
{
    printf ("%s", "abc");
    return 0;
}
C++
1
2
3
4
5
6
7
#include <stdio.h>
 
int main ()
{
    printf ("%s", (char[]) {"abc"});
    return 0;
}
C++
1
2
3
4
5
6
7
#include <stdio.h>
 
int main ()
{
    printf ("%s", (char[]) {'a', 'b', 'c', '\0'});
    return 0;
}
C++
1
2
3
4
5
6
7
#include <stdio.h>
 
int main ()
{
    printf ("%s", (char[]) {'a', 'b', 'c'});
    return 0;
}
Почему только посл. вариант ничего не выводит на экран? Неужели всё дело лишь в терминальном нуле? Почему компилятор не может добавить его самостоятельно, как, например, во втором примере здесь? Дело в том, что, не указав размер массива явно, я сказал компилятору, что размер будет равен кол-ву элементов в списке инициализации?

Ну, даже в таком случае я думал, что printf выведет хоть что-то на экран, пусть это было бы и не то, что ожидалось.

Неужели printf сначала проверяет наличие терминального нуля в строке, которую он собирается вывести в stdout? Исходников crt под рукой нет, посмотреть не могу.

И как прав. называется конструкция вида

C++
1
(char[]) {'a', 'b', 'c'}
Создание безымянного массива фундаментального типа char размером 3 байта?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2012, 16:23     Вывод строки в printf
Посмотрите здесь:

C++ Вывод long double с используя printf()
C++ Вывод кавычек при использовании printf
C++ Вывод данных с помощью функции printf()
C++ Ввод\вывод одномерного массива (printf)
Вывод строки фиксированной длинны в cout (аля printf(%5.0d)! C++
Как в Си перенаправить стандартный вывод printf? C++
C++ Вывод аргументов printf() в обратном порядке
Форматированный вывод с использованием printf() C++
Ввод/вывод через printf() и scanf() C++
Странный вывод printf C++
Происходит вывод лишней цифры в printf C++
C++ Вывод printf

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
thebvog
 Аватар для thebvog
73 / 53 / 3
Регистрация: 20.02.2012
Сообщений: 239
18.03.2012, 16:50     Вывод строки в printf #2
YourLastSong, да, дело в нуле, как раз конец строки для printf. И массив, это не строка, к нему не может ничего добавляться. В том числе и \0 как после "abc".

У меня
C++
1
printf("%s",(char[]) {'a','b','c'});
выводит строку до первого попавшегося нуля.
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
18.03.2012, 16:52  [ТС]     Вывод строки в printf #3
И массив, это не строка, к нему не может ничего добавляться
Разве массив символов - это не C-string как раз?

выводит строку до первого попавшегося нуля
Но его же там нет.
thebvog
 Аватар для thebvog
73 / 53 / 3
Регистрация: 20.02.2012
Сообщений: 239
18.03.2012, 16:58     Вывод строки в printf #4
YourLastSong, массив символов это char[], а строка, которую вы выводите это указатель char* на массив символов в памяти, причём в конец "abc" ещё вставляется 0.
Кто сказал, что нет там нуля? Он будет выводит весь сегмент данных пока не встретит 0 или не будет прерван своим условием (например, длиной вывода).
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
18.03.2012, 17:41  [ТС]     Вывод строки в printf #5
Он будет выводит весь сегмент данных пока не встретит 0 или не будет прерван своим условием (например, длиной вывода).
У меня ничего не выводит. Это implementation-defined?
thebvog
 Аватар для thebvog
73 / 53 / 3
Регистрация: 20.02.2012
Сообщений: 239
18.03.2012, 17:47     Вывод строки в printf #6
YourLastSong, возможно, хотя я пробовал под GCC и VC, и результат у меня, насколько помню, был один и тот же. Это чем-то напоминает прерывание DOS-a или BIOS-а для вывода строки, там так же будет выводить пока не встретит конец строки.
Yandex
Объявления
18.03.2012, 17:47     Вывод строки в printf
Ответ Создать тему
Опции темы

Текущее время: 19:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru