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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.66
0xDC
2 / 2 / 0
Регистрация: 15.09.2011
Сообщений: 104
20.08.2012, 15:37     Траблы с функцией sprintf #1
Всем добрый день. У меня есть структура. После того как я забил все поля структуры мне нужно сформировать одну большую строку из этих полей, каждое поле которое разделено символом новой строки. Используя функцию 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 - строка содержащая атрибуты
Когда создаю строку из двух полей, все нормально, а дальше ошибки...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2012, 15:37     Траблы с функцией sprintf
Посмотрите здесь:

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

p.s Судя по твоей sprintf, ты формируешь строку из 4ех "%s", а передаешь в функции лишь 3 переменных.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
20.08.2012, 16:19     Траблы с функцией sprintf #3
Use the std::string, Luke.
0xDC
2 / 2 / 0
Регистрация: 15.09.2011
Сообщений: 104
20.08.2012, 16:20  [ТС]     Траблы с функцией sprintf #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.

и еще куча. функции спринтф все равно сколько лексем в одну строку соединять, или есть какой-нибудь параметр, указывающий количество?
Pure
 Аватар для Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
20.08.2012, 16:23     Траблы с функцией sprintf #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
и тд
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2012, 16:31     Траблы с функцией sprintf #6
0xDC, что из себя представляет твоя formal - есть уверенность что под неё выделен буффер достаточной длинны???Также бросается в глаза вот что
Цитата Сообщение от 0xDC Посмотреть сообщение
"%s\\n%s\n%s\\n%s\\n
вконце первой строки есть \ причём скорее всего вот эта связка \\ воспримется как символ '\' в строке а \n добавит с formal перевод каретки.
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2012, 16:36     Траблы с функцией sprintf #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/ec95fa...de7b94e45894da
String1
String2
String3
Миниатюры
Траблы с функцией sprintf  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2012, 16:50     Траблы с функцией sprintf
Еще ссылки по теме:

C++ Аналог sprintf
Передача массива символов в функцию strlen после создания его функцией sprintf C++
C++ Sprintf

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

Или воспользуйтесь поиском по форуму:
0xDC
2 / 2 / 0
Регистрация: 15.09.2011
Сообщений: 104
20.08.2012, 16:50  [ТС]     Траблы с функцией sprintf #8
Всем Огромное спасибо! Но проблемы была не в блокирующих символах и еще что-то там. Все намного проще. В структуре поля не только типа Char есть еще unsigned int, в Си везде нужно прописывать спецификаторы преобразования, то есть %s\\n %u\\n .Всем спасибо
Yandex
Объявления
20.08.2012, 16:50     Траблы с функцией sprintf
Ответ Создать тему
Опции темы

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