 |
|

07.07.2019, 14:43
|
|
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами:
4319022
Репутация:
113
|
|
Сообщение от ๖ۣۣۜШурик
C++:
Код:
// Возникает ошибка
string data
;
CHAR szBuffer
[
1024
]
;
strcpy
(
szBuffer
,
"{\"hash\":\"475d03f623908a13b6d8171221119a77\"}"
)
;
data
+=
szBuffer
;
// Не возникает ошибка
string data
;
CHAR szBuffer
[
1024
]
;
strcpy
(
szBuffer
,
"TEST"
)
;
data
+=
szBuffer
;
Хелп
Попробуй заменить CHAR на char
все норм робит
|
|
|

07.07.2019, 14:48
|
|
Новичок
Регистрация: 01.12.2009
Сообщений: 0
С нами:
8654409
Репутация:
0
|
|
Сообщение от Stiopko
Попробуй заменить CHAR на char
все норм робит
Разницы никакой, ошибка также останется (проверено уже давно).
Сообщение от Спойлер

Какой толк проверять компиляцию если ошибка появляется при запуске? Скомпилировать и я могу...
|
|
|

07.07.2019, 14:52
|
|
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами:
4319022
Репутация:
113
|
|
Сообщение от ๖ۣۣۜШурик
Разницы никакой, ошибка также останется (проверено уже давно).
Сообщение от Спойлер

Какой толк проверять компиляцию если ошибка появляется при запуске? Скомпилировать и я могу...
Оно скомпилировалось и выполнилось и вывело строку
|
|
|

07.07.2019, 14:54
|
|
Новичок
Регистрация: 01.12.2009
Сообщений: 0
С нами:
8654409
Репутация:
0
|
|
Сообщение от Stiopko
Оно скомпилировалось и выполнилось и вывело строку
Уже всё, решил проблему
|
|
|

07.07.2019, 15:46
|
|
Постоянный
Регистрация: 17.01.2014
Сообщений: 493
С нами:
6483143
Репутация:
93
|
|
Сообщение от _Vine_
+ 1 не нужен, так ты будешь получать указатель на конец строки + 1, а это не только может приводить к неправильному результату функции, но и изменять данные в чужой выделенной памяти и приводить к сбою программы
Сообщение от _Vine_
И вообще, можно было бы реализовать функцию и без промежуточного буфера temp
В моём случае, строка может быть слеплена с другими символами, и если скопировав её не оградить нулём, strcmp может принять следующий символ за её продолжение, и выдать 1 вместо 0, даже если константа меньшего размера, что с одной стороны и логично, ведь он выдаёт 1, а значит первое больше, но с другой стороны мне этого совершенно не нужно, и хватит сравнения того числа символов, что получено как искомая строка.
Как раз для ограждения и нужен yo, как указатель на конец. У меня не вполне адекватно себя ведёт преобразование памяти ptrTo*, потому вместо инкремента имеющегося адреса я создал указатель. Мб я криворукий, но так хотя бы ошибки доступа мозг не выносят.
temp как раз служит хранилищем для строки, без доп буфера я не нашёл способ оградить байты нулём и сравнить с искомой строкой, ну а без нуля шо - описал выше.
Сообщение от _Vine_
strstr
Он не ищет дальше первого нуля. В моём случае пришлось бы обрабатывать каждый ноль, а это геморрой, на мой взгляд
[QUOTE="_Vine_"]
Тут должен быть оператор
|
|
|

07.07.2019, 19:51
|
|
Постоянный
Регистрация: 17.01.2014
Сообщений: 493
С нами:
6483143
Репутация:
93
|
|
[QUOTE="ishi"]
[QUOTE="Спойлер"]
[COLOR="#363940"]
Обновляю запрос.
В yo была утечка, исправив слепил это:
C++:
[CODE]
int
findstring
(
void
*
where_
,
char
*
what
,
int
whereSize
)
{
void
*
temp
=
malloc
(
strlen
(
what
)
+
1
)
;
int
iterator
=
0
;
char
*
yo
=
static_cast
(
temp
)
+
strlen
(
what
)
+
1
;
char
*
tempptr
=
static_cast
(
where_
)
;
while
(
iterator
Теперь из десяти запусков по 100 вызовов, 8-9 запусков идут без ошибок, а конкретно: ошибка вылетает первые
|
|
|

07.07.2019, 20:17
|
|
Участник форума
Регистрация: 17.12.2017
Сообщений: 110
С нами:
4423953
Репутация:
68
|
|
как перезаписать строку времени в /timestamp?
|
|
|

08.07.2019, 16:06
|
|
Участник форума
Регистрация: 26.11.2015
Сообщений: 148
С нами:
5506473
Репутация:
78
|
|
Как можно при помощи СФ заблокировать камеру свою (т.е. чтобы нельзя было ей вращать вокруг персонажа)?
|
|
|

09.07.2019, 12:17
|
|
Постоянный
Регистрация: 28.02.2018
Сообщений: 307
С нами:
4319022
Репутация:
113
|
|
почему при втором запросе вылетает игра?
C++:
Код:
void
AddToString
(
char
*
*
myStr
,
const
char
*
sourse
)
{
char
*
newStr
;
if
(
*
myStr
!=
nullptr
)
{
if
(
sizeof
(
*
myStr
)
>=
strlen
(
*
myStr
)
+
strlen
(
sourse
)
+
1
)
{
strcat
(
*
myStr
,
sourse
)
;
return
;
}
else
{
newStr
=
new
char
[
strlen
(
*
myStr
)
+
strlen
(
sourse
)
+
1
]
;
strcpy
(
newStr
,
*
myStr
)
;
strcat
(
newStr
,
sourse
)
;
delete
[
]
*
myStr
;
}
}
else
{
newStr
=
new
char
[
strlen
(
sourse
)
+
1
]
;
strcpy
(
newStr
,
sourse
)
;
}
*
myStr
=
newStr
;
}
const
char
*
SendPost
(
const
char
*
site
,
const
char
*
file
,
char
*
data
,
char
*
*
mainBuf
,
bool
*
isError
)
{
if
(
*
mainBuf
==
nullptr
)
AddToString
(
mainBuf
,
""
)
;
HINTERNET hSession
=
InternetOpenA
(
"Test"
,
INTERNET_OPEN_TYPE_PRECONFIG
,
NULL
,
NULL
,
0
)
;
if
(
hSession
!=
NULL
)
{
HINTERNET hConnect
=
InternetConnectA
(
hSession
,
site
,
INTERNET_DEFAULT_HTTP_PORT
,
NULL
,
NULL
,
INTERNET_SERVICE_HTTP
,
0
,
1
)
;
if
(
hConnect
!=
NULL
)
{
HINTERNET hHttpRequest
=
HttpOpenRequestA
(
hConnect
,
"POST"
,
file
,
NULL
,
NULL
,
0
,
0
,
1
)
;
if
(
hHttpRequest
!=
NULL
)
{
char
szReq
[
1024
]
=
""
,
szBuffer
[
1025
]
;
DWORD dwByteRead
=
0
;
BOOL bRead
;
if
(
*
mainBuf
!=
nullptr
)
mainBuf
[
0
]
=
'\0'
;
LPCSTR header
;
header
=
"Accept: *\/*"
;
HttpAddRequestHeadersA
(
hHttpRequest
,
header
,
strlen
(
header
)
,
HTTP_ADDREQ_FLAG_ADD
)
;
header
=
"Content-Type: application/x-www-form-urlencoded"
;
HttpAddRequestHeadersA
(
hHttpRequest
,
header
,
strlen
(
header
)
,
HTTP_ADDREQ_FLAG_ADD
)
;
if
(
HttpSendRequestA
(
hHttpRequest
,
NULL
,
0
,
data
,
strlen
(
data
)
)
)
{
while
(
true
)
{
bRead
=
InternetReadFile
(
hHttpRequest
,
szBuffer
,
sizeof
(
szBuffer
)
-
1
,
&
dwByteRead
)
;
if
(
bRead
==
FALSE
||
dwByteRead
==
0
)
break
;
szBuffer
[
dwByteRead
]
=
'\0'
;
AddToString
(
mainBuf
,
szBuffer
)
;
}
if
(
isError
!=
nullptr
)
*
isError
=
false
;
}
else
if
(
isError
!=
nullptr
)
*
isError
=
true
;
}
else
if
(
isError
!=
nullptr
)
*
isError
=
true
;
InternetCloseHandle
(
hHttpRequest
)
;
}
else
if
(
isError
!=
nullptr
)
*
isError
=
true
;
InternetCloseHandle
(
hConnect
)
;
}
else
if
(
isError
!=
nullptr
)
*
isError
=
true
;
InternetCloseHandle
(
hSession
)
;
return
*
mainBuf
;
}
|
|
|

09.07.2019, 13:25
|
|
Новичок
Регистрация: 18.10.2015
Сообщений: 6
С нами:
5563739
Репутация:
0
|
|
Сообщение от Stiopko
sizeof(*myStr)
Скорее всего проблема в том, что здесь всегда будет результат 4 (8) при компиляции в x32 (x64).
Лучше используй std::string.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|