Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.66
0xDC
2 / 2 / 0
Регистрация: 15.09.2011
Сообщений: 104
#1

Траблы с функцией sprintf - C++

20.08.2012, 15:37. Просмотров 4269. Ответов 7
Метки нет (Все метки)

Всем добрый день. У меня есть структура. После того как я забил все поля структуры мне нужно сформировать одну большую строку из этих полей, каждое поле которое разделено символом новой строки. Используя функцию sprintf получаю системные ошибки какие-то. Подскажите в чем дело? Полей очень много.
C++
1
2
3
sprintf(formal,"%s\\n%s\n%s\\n%s\\n и тд",
    SdpEx.s_name, SdpEx.OriginEx.username, SdpEx.OriginEx.unicast_address);
    printf(formal);//formal - строка содержащая атрибуты
Когда создаю строку из двух полей, все нормально, а дальше ошибки...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2012, 15:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Траблы с функцией sprintf (C++):

Передача массива символов в функцию strlen после создания его функцией sprintf - C++
Если вводится 1 символ, выводится "8", 2 символа - "9". И так далее. Почему? Это нормально? Задание требует преобразование long double в...

sprintf и % - C++
wsprinfA(buff,"%dasda"); как сделать так, что бы этот код работал ? экранирование % не помогает = \ Добавлено через 1 минуту ...

Sprintf - C++
Первый круг проходит спокойно, а на втором ошибку выбивает, но я не могу найти где я ошибся: char Random2and4(char ***Massive) { ...

Аналог sprintf - C++
Здравствуйте! Допустим есть функция которая наращивает строку, добавлением строки/символа/числа или остальных объектов из которых можно...

Sprintf и классы - C++
Уважаемые, нужна помощь. Есть следующий класс: class tText { public: char *text; int x; int y; float R, G, B, A;...

Sprintf не работает - C++
Почему при запуске программа вырубается ? проблема где-то в sprintf #include <iostream> #include <cstdlib> #include...

7
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
20.08.2012, 16:15 #2
Цитата Сообщение от 0xDC Посмотреть сообщение
Используя функцию sprintf получаю системные ошибки какие-то.
Когда создаю строку из двух полей, все нормально, а дальше ошибки...
Сейчас, подожди. Позвною знакомому экстрасенсу, он мне раскажет, какие у тебя ошибки, а потом уже решим вопрос.
Truth
Ну какие ошибки-то? Как мы угадаем :<

p.s Судя по твоей sprintf, ты формируешь строку из 4ех "%s", а передаешь в функции лишь 3 переменных.
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
20.08.2012, 16:19 #3
Use the std::string, Luke.
0
0xDC
2 / 2 / 0
Регистрация: 15.09.2011
Сообщений: 104
20.08.2012, 16:20  [ТС] #4
Цитата Сообщение от nexen Посмотреть сообщение
Сейчас, подожди. Позвною знакомому экстрасенсу, он мне раскажет, какие у тебя ошибки, а потом уже решим вопрос.
Truth
Ну какие ошибки-то? Как мы угадаем :<

p.s Судя по твоей sprintf, ты формируешь строку из 4ех "%s", а передаешь в функции лишь 3 переменных.
Unhandled exception at 0x1029984f (msvcr90d.dll) in XP4.exe: 0xC0000005: Access violation reading location 0x00000034.
Unhandled exception at 0x1029984f (msvcr90d.dll) in XP4.exe: 0xC0000005: Access violation reading location 0x00000034.

и еще куча. функции спринтф все равно сколько лексем в одну строку соединять, или есть какой-нибудь параметр, указывающий количество?
0
Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
20.08.2012, 16:23 #5
VASYA\nPETYA
212342341234\n‹р‹Жи.ґ\n и тд
это выход сейчас. при отсутствие переданного последнего параметра цепляет мусор, экранированные символы \n попадают в текст.

для правильного выхода надо так

C++
1
2
sprintf(formal,"%s\n%s\n%s\nи тд",
    SdpEx.s_name, SdpEx.OriginEx.username, SdpEx.OriginEx.unicast_address);
и тогда выйдет

VASYA
PETYA
212342341234
и тд
0
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2012, 16:31 #6
0xDC, что из себя представляет твоя formal - есть уверенность что под неё выделен буффер достаточной длинны???Также бросается в глаза вот что
Цитата Сообщение от 0xDC Посмотреть сообщение
"%s\\n%s\n%s\\n%s\\n
вконце первой строки есть \ причём скорее всего вот эта связка \\ воспримется как символ '\' в строке а \n добавит с formal перевод каретки.
0
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2012, 16:36 #7
Короче вот работающий код, а там уже дело за разработчиком
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main()
{
    char formal[128] = {0};
    sprintf
    (
        formal,
        "%s\n%s\n%s\n",
        "String1", "String2", "String3"
    );
    printf("%s",formal);
    return 0;
}
http://liveworkspace.org/code/ec95fac9e3a0b87c62de7b94e45894da
String1
String2
String3
0
Миниатюры
Траблы с функцией sprintf  
0xDC
2 / 2 / 0
Регистрация: 15.09.2011
Сообщений: 104
20.08.2012, 16:50  [ТС] #8
Всем Огромное спасибо! Но проблемы была не в блокирующих символах и еще что-то там. Все намного проще. В структуре поля не только типа Char есть еще unsigned int, в Си везде нужно прописывать спецификаторы преобразования, то есть %s\\n %u\\n .Всем спасибо
0
20.08.2012, 16:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2012, 16:50
Привет! Вот еще темы с ответами:

Странный sprintf - C++
Структура, ее получение и вывод: struct User { int unk1; int unk2; int UserType; int unk3; int unk4; int Id; int...

c++ , sprintf() и Дух Плюсов - C++
Здравствуйте! Как вам известно во многих учебниках по С++ говорится, что функции printf и scanf использовать можно, но это не в стиле...

Sprintf отрабатывает по разному - C++
Если просто запустить программу то sprintf округляет тип double до целых, если в режиме отладки то нет. То есть в первом случае выдет 23 во...

printf sprintf не понятно - C++
Почему в printf строка отображается нормально, а sprintf вместо строки вставляет &quot;(null)&quot; ? что нужно сделать со строкой что бы она...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.