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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
karaulov6
-42 / 23 / 2
Регистрация: 23.03.2013
Сообщений: 238
Завершенные тесты: 1
#1

printf sprintf не понятно - C++

07.09.2013, 15:26. Просмотров 1720. Ответов 33
Метки нет (Все метки)

Почему в printf строка отображается нормально, а sprintf вместо строки вставляет "(null)" ?

что нужно сделать со строкой что бы она нормально копировалась в sprintf?


char * какая-то строка полученная с бд

printf(строка) пишет "строка"

sprintf(... "строка: %s.", строка) получается "строка: (null)."
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2013, 15:26     printf sprintf не понятно
Посмотрите здесь:

как i двигается понятно но вот не понятно как это делает j ? - C++
Здравствуйте, вопрос очень глупы но все же есть цикл for (int i = 0,j = 0; i < source.length; i++) как i двигается понятно но вот не...

Чем ::printf предпочтительнее printf? - C++
Смотрю на код одного толкового программиста и, как новичек в С++, удивляюсь: какой смысл писать в таком стиле? Это же вроде одно и то же....

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

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

Аналог 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...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,737
07.09.2013, 17:42     printf sprintf не понятно #16
Цитата Сообщение от karaulov6 Посмотреть сообщение
ValeryS, ну воспользуйся гугл переводчиком
а нахрена он мне ?
я то знаю что означает extern
Цитата Сообщение от karaulov6 Посмотреть сообщение
ну пусть будет просто char * ,
что значит пусть будет?
это твоя самописная функция?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
07.09.2013, 17:42     printf sprintf не понятно #17
Цитата Сообщение от karaulov6 Посмотреть сообщение
мне кажется в строке чего-то не хватает... а как ее исправить не знаю
Всё там хватает. Вот пример аналогичного вывода (причём все работает):

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
char *get_message(void)
{
    return "42";
}
 
int main(void)
{
    char buf[BUFSIZ];
    snprintf(buf, sizeof buf, "Here is your message: %s\n", get_message());
    fputs(buf, stdout);
    return 0;
}
Я настаиваю, что дело в функции account_get_auth_mute_reason. Её исходники есть?
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,737
07.09.2013, 17:43     printf sprintf не понятно #18
Цитата Сообщение от karaulov6 Посмотреть сообщение
Мне гугл говорит про какую-то null terminal строку,
еще раз повторю за
Цитата Сообщение от Nameless One Посмотреть сообщение
ты уже возвращаемое значение account_get_auth_mute_reason проверил в отладчике?
karaulov6
-42 / 23 / 2
Регистрация: 23.03.2013
Сообщений: 238
Завершенные тесты: 1
07.09.2013, 17:44  [ТС]     printf sprintf не понятно #19
Цитата Сообщение от Nameless One Посмотреть сообщение
Я настаиваю, что дело в функции account_get_auth_mute_reason. Её исходники есть?
C++
1
2
3
4
        extern char  * account_get_auth_mute_reason(t_account * account)
        {
            return account_get_strattr(account, "BNET\\acct\\mutereason");
        }
Но я уверяю что проблема не в ней, т.к используется функция сервера account_get_strattr, разве что баг сервера какой-то

Сейчас проверю в отладчике
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
07.09.2013, 17:48     printf sprintf не понятно #20
Цитата Сообщение от karaulov6 Посмотреть сообщение
разве что баг сервера какой-то
Разве что функция NULL возвращает…

Что такой код показывает?
C
1
2
3
const char *msg = account_get_auth_mute_reason(acc);
printf("%p\n", msg);
printf("%s\n", msg);
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,737
07.09.2013, 17:50     printf sprintf не понятно #21
Цитата Сообщение от karaulov6 Посмотреть сообщение
extern char ** account_get_auth_mute_reason(t_account * account)
extern убери и посмотри что получится
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
07.09.2013, 17:51     printf sprintf не понятно #22
Кстати, ещё вопросы. У тебя программа однопоточная? Функция account_get_strattr реентерабельна?
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,737
07.09.2013, 17:57     printf sprintf не понятно #23
нашел пример использования функции
C++
1
2
char const * user_quota;
 user_quota=account_get_strattr(user,"BNET\\auth\\mailquota");
так что прав Nameless One,
Цитата Сообщение от Nameless One Посмотреть сообщение
const char *msg = account_get_auth_mute_reason(acc);
karaulov6
-42 / 23 / 2
Регистрация: 23.03.2013
Сообщений: 238
Завершенные тесты: 1
07.09.2013, 18:09  [ТС]     printf sprintf не понятно #24
http://screenshot.su/show.php?img=c5...da7d71f680.jpg

возвращает указатель на строку с причиной, но не NULL.

Добавлено через 9 минут
А может быть это проблема с кодировкой? на сервере ANSI по моему (хотя скорее всего не из-за этого )
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
07.09.2013, 18:11     printf sprintf не понятно #25
karaulov6, по-моему, это heisenbug.

В результате отладочной сессии что вывелось? По-прежнему "(null)"?
karaulov6
-42 / 23 / 2
Регистрация: 23.03.2013
Сообщений: 238
Завершенные тесты: 1
07.09.2013, 18:13  [ТС]     printf sprintf не понятно #26
Цитата Сообщение от Nameless One Посмотреть сообщение
karaulov6, по-моему, это heisenbug.

В результате отладочной сессии что вывелось? По-прежнему "(null)"?
да, в отладчике причина написана, но в результате вместо причины (null)

что можно сделать со строкой ? скопировать куда-нибудь что бы потом проверить, или может еще что-нибудь?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
07.09.2013, 18:17     printf sprintf не понятно #27
karaulov6, хм, а простая строка в snprintf_s выводится? Типа:

C
1
snprintf_s(msg, msg_size, "%s", "test string");
karaulov6
-42 / 23 / 2
Регистрация: 23.03.2013
Сообщений: 238
Завершенные тесты: 1
07.09.2013, 18:20  [ТС]     printf sprintf не понятно #28
ахах чудеса %s%s%s account_get_auth_mute_reason(acc), account_get_auth_mute_reason(acc), account_get_auth_mute_reason(acc)

получается (null)PipecPipec (Pipec - причина )

что это может быть? можно конечно так и оставить, но будет не красиво постоянно видеть (null)... Можно как-то обрезать (null) что бы его небыло видно?
ну или помогите избавится от этой ошибки, бред какой-то
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
07.09.2013, 18:23     printf sprintf не понятно #29
karaulov6, Это не решение проблемы, а костыль. Нужно искать проблему и решать ее.
В таком случае более нормальным костылем будет сделать что-то вроде.

C++
1
2
char* cause = 0;
while (!(cause = account_get_auth_mute_reason(acc));
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2013, 18:26     printf sprintf не понятно
Еще ссылки по теме:

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

Траблы с функцией sprintf - C++
Всем добрый день. У меня есть структура. После того как я забил все поля структуры мне нужно сформировать одну большую строку из этих...

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

Ошибка с sprintf в C++ Opengl - C++
sprintf(sz, &quot;You win. Time: %d F2 - Restart game Esc - Exit&quot;, sec); error C4996: 'sprintf': This function or variable may be...

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


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

Или воспользуйтесь поиском по форуму:
karaulov6
-42 / 23 / 2
Регистрация: 23.03.2013
Сообщений: 238
Завершенные тесты: 1
07.09.2013, 18:26  [ТС]     printf sprintf не понятно #30
Ну там очень много кода, я и за месяц не найду проблему, строка возвращается , но только с 2 раза работает. пытался вызвать перед sprintf функцию а потом там, но не получилось.
Yandex
Объявления
07.09.2013, 18:26     printf sprintf не понятно
Ответ Создать тему
Опции темы

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