Просмотр полной версии : SF | Проблемы с получением серверного сообщения
Всем, ку
Хоть я и развился в SF довольно-таки просто, но все таки стыдный вопрос возник
Есть у меня RPC пакет с id = 93 (кто знает, тот поймет)
Так вот, как правильно его прочитать, чтоб вывести итоговое сообщение в чат
У меня вышло так
с++:
UINT32 dColor
;
UINT32 messageLen
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
dColor
)
;
params
->
bitStream
->
Read
(
messageLen
)
;
char
*
msg
=
new
char
[
messageLen
]
;
params
->
bitStream
->
Read
(
msg
,
messageLen
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
msg
)
;
params
->
bitStream
->
ResetReadPointer
(
)
;
Но вот в чем загвоздка, после прочтения, у меня вместе с сообщением может вывести мусор. С чем это связано
AdCKuY_DpO4uLa
08.04.2021, 11:24
C++:
UINT32 dColor
;
UINT32 messageLen
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
dColor
)
;
params
->
bitStream
->
Read
(
messageLen
)
;
char
*
msg
=
new
char
[
messageLen
]
;
params
->
bitStream
->
Read
(
msg
,
messageLen
)
;
msg
[
messageLen
]
=
'\0'
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
msg
)
;
msg
[
]
delete
;
msg
=
nullptr
;
params
->
bitStream
->
ResetReadPointer
(
)
;
Попробуй так
kin4stat
08.04.2021, 12:57
C++:
UINT32 dColor
;
UINT32 messageLen
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
dColor
)
;
params
->
bitStream
->
Read
(
messageLen
)
;
char
*
msg
=
new
char
[
messageLen
]
;
params
->
bitStream
->
Read
(
msg
,
messageLen
)
;
msg
[
messageLen
]
=
'\0'
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
msg
)
;
msg
[
]
delete
;
msg
=
nullptr
;
params
->
bitStream
->
ResetReadPointer
(
)
;
Попробуй так
Сегфолт
AdCKuY_DpO4uLa
08.04.2021, 13:00
Сегфолт
Что?
Musaigen
08.04.2021, 14:07
Что?
Ошибка сегментации — Википедия (https://www.blast.hk/redirect/aHR0cHM6Ly9ydS53aWtpcGVkaWEub3JnL3dpa2kvJUQwJTlFJU QxJTg4JUQwJUI4JUQwJUIxJUQwJUJBJUQwJUIwXyVEMSU4MSVE MCVCNSVEMCVCMyVEMCVCQyVEMCVCNSVEMCVCRCVEMSU4MiVEMC VCMCVEMSU4NiVEMCVCOCVEMCVCOA)
ru.wikipedia.org
AdCKuY_DpO4uLa
08.04.2021, 14:37
Ошибка сегментации — Википедия (https://www.blast.hk/redirect/aHR0cHM6Ly9ydS53aWtpcGVkaWEub3JnL3dpa2kvJUQwJTlFJU QxJTg4JUQwJUI4JUQwJUIxJUQwJUJBJUQwJUIwXyVEMSU4MSVE MCVCNSVEMCVCMyVEMCVCQyVEMCVCNSVEMCVCRCVEMSU4MiVEMC VCMCVEMSU4NiVEMCVCOCVEMCVCOA)
ru.wikipedia.org
И почему она происходит?
Dark_Knight
08.04.2021, 16:04
И почему она происходит?
Потому что ты дурак, вот почему. Обращаешься к несуществующему участку памяти.
Все конечно хорошо, а проблему кто-нить скажет?)
Dark_Knight
08.04.2021, 16:24
Пробуй.
C++:
UINT32 dColor
;
UINT32 len
;
std
::
string text
;
auto
*
bs
=
params
->
bitStream
;
bs
->
Read
(
dColor
)
;
bs
->
Read
(
len
)
;
text
.
resize
(
len
)
;
bs
->
Read
(
text
.
data
(
)
,
len
)
;
kin4stat
08.04.2021, 19:28
Ещё и обозвал((
Тебе повезло что тебя не крашнуло потому что
undefined behavior
Пробуй.
C++:
UINT32 dColor
;
UINT32 len
;
std
::
string text
;
auto
*
bs
=
params
->
bitStream
;
bs
->
Read
(
dColor
)
;
bs
->
Read
(
len
)
;
text
.
resize
(
len
)
;
bs
->
Read
(
text
.
data
(
)
,
len
)
;
Последняя функция вызывает ошибку
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C2664 "bool BitStream::Read(char *,const int)": невозможно преобразовать аргумент 1 из "const _Elem *" в "char *" SFPlugin c:\users\anonim\desktop\sf plugin template\sfplugin\main.cpp 26
Dark_Knight
10.04.2021, 19:53
Пробуй так.
C++:
bs
->
Read
(
(
PCHAR
)
text
.
data
(
)
,
len
)
;
Пробуй так.
C++:
bs
->
Read
(
(
PCHAR
)
text
.
data
(
)
,
len
)
;
Да, робит
Можешь сказать, что это за функция .data()?
kin4stat
10.04.2021, 21:41
Да, робит
Можешь сказать, что это за функция .data()?
std::string.data() - Recherche Google (https://www.blast.hk/redirect/aHR0cHM6Ly9nb29nbGUuY29tL3NlYXJjaD9xPXN0ZDo6c3RyaW 5nLmRhdGEoKQ)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot