ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   SF | Проблемы с получением серверного сообщения (https://forum.antichat.xyz/showthread.php?t=1384027)

ANZR 08.04.2021 05:09

Всем, ку

Хоть я и развился в 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

Цитата:

Сообщение от AdCKuY_DpO4uLa

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

Цитата:

Сообщение от KiN4StAt

Сегфолт

Что?

Musaigen 08.04.2021 14:07

Цитата:

Сообщение от AdCKuY_DpO4uLa

Что?

Ошибка сегментации — Википедия

ru.wikipedia.org

AdCKuY_DpO4uLa 08.04.2021 14:37

Цитата:

Сообщение от Musaigen

И почему она происходит?

Dark_Knight 08.04.2021 16:04

Цитата:

Сообщение от AdCKuY_DpO4uLa

И почему она происходит?

Потому что ты дурак, вот почему. Обращаешься к несуществующему участку памяти.

ANZR 08.04.2021 16:20

Все конечно хорошо, а проблему кто-нить скажет?)

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

Цитата:

Сообщение от AdCKuY_DpO4uLa

Ещё и обозвал((

Тебе повезло что тебя не крашнуло потому что

undefined behavior


Время: 03:33