uint32_t变量奇怪的变化
uint32_t variable is strange changing
我有简单的代码:
#define NUM_UA_SOCK 100
typedef struct _UA_REQUEST
{
string full_url;
uint32_t url_adler32 ;
TCPsocket sock_ua ;
uint32_t status_flag ; // ref Enum STATUS
} UA_REQUEST ;
UA_REQUEST GLB_ARRAY__UA_REQ[ NUM_UA_SOCK ] ;
void handle_ua_sock_ready( uint32_t ii )
{
string _req_mstr;
byte*request = (byte*) _req_mstr.c_str() ;
byte*pcrlf = NULL ;
UA_REQUEST*ar = GLB_ARRAY__UA_REQ ;
// Get request from UA
int32_t nrcv ;
printf("index = %lu\n", ii);
TCPsocket sock = ar[ii].sock_ua;
nrcv = SDLNet_TCP_Recv( sock , request , MAXLEN ) ;
printf("After index = %lu\n", ii);
}
handle_ua_sock_ready() 函数开头的 ii 变量的值为 0。在调用 nrcv = SDLNet_TCP_Recv( sock , request , MAXLEN ) 之后;行它变得具有非常大的价值,例如 1852397344。
它是单线程应用程序。我正在使用 VS 2010、SDL、SDL_net 库。
PS: 当我在Linux下编译时,它工作正常。
您将 request
传递给 SDLNet_TCP_Recv
函数并告诉该函数 request
指向大小为 MAXLEN
的缓冲区。由于 request
来自从空 std::string
缓冲区中丢弃常量,这显然是错误的。
你想要一个向量
std::vector<unsigned char> request;
request.resize(MAXLEN);
...
nrcv = SDLNet_TCP_Recv( sock , request.data() , request.size() ) ;
我有简单的代码:
#define NUM_UA_SOCK 100
typedef struct _UA_REQUEST
{
string full_url;
uint32_t url_adler32 ;
TCPsocket sock_ua ;
uint32_t status_flag ; // ref Enum STATUS
} UA_REQUEST ;
UA_REQUEST GLB_ARRAY__UA_REQ[ NUM_UA_SOCK ] ;
void handle_ua_sock_ready( uint32_t ii )
{
string _req_mstr;
byte*request = (byte*) _req_mstr.c_str() ;
byte*pcrlf = NULL ;
UA_REQUEST*ar = GLB_ARRAY__UA_REQ ;
// Get request from UA
int32_t nrcv ;
printf("index = %lu\n", ii);
TCPsocket sock = ar[ii].sock_ua;
nrcv = SDLNet_TCP_Recv( sock , request , MAXLEN ) ;
printf("After index = %lu\n", ii);
}
handle_ua_sock_ready() 函数开头的 ii 变量的值为 0。在调用 nrcv = SDLNet_TCP_Recv( sock , request , MAXLEN ) 之后;行它变得具有非常大的价值,例如 1852397344。 它是单线程应用程序。我正在使用 VS 2010、SDL、SDL_net 库。 PS: 当我在Linux下编译时,它工作正常。
您将 request
传递给 SDLNet_TCP_Recv
函数并告诉该函数 request
指向大小为 MAXLEN
的缓冲区。由于 request
来自从空 std::string
缓冲区中丢弃常量,这显然是错误的。
你想要一个向量
std::vector<unsigned char> request;
request.resize(MAXLEN);
...
nrcv = SDLNet_TCP_Recv( sock , request.data() , request.size() ) ;