[過去ログ]
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1500329247/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
765: デフォルトの名無しさん [sage] 2017/09/30(土) 01:55:47.47 ID:+yH9ha/d ちょっと不可解な部分があったから質問させてくれ string型のデータをサーバに送信したくてOSSの関数に渡しているんだが、 データが一部壊れてしまう 問題のコードは、 string str = "{id:abc, ... , }" void* payload = (void*) str.c_str(); send(payload, str.length()); これをやると、先頭の5バイトがうまく入らない いくら考えても全然理由がわからず、意味のないことだと思いつつも以下のコードを書いてみたら何故かうまくいった string str = "{id:abc, ... , }" char* tmp = (char*)malloc(str.length() * sizeof(char) + 1); strcpy(tmp, str.c_str()); payload = (void*)tmp; send(payload, str.length()); 下のコードを使えばうまく動いてるから問題ないんだけど、上のコードがダメな理由がわからずすごく気持ち悪い。 何か上の例だとまずい部分があるのかな? 送信関数は以下 send(void* payload, size_t length); 環境はVC++ 2012 Windows 7 64bit ちなみに、同じコードを別環境(gcc 4.4.7 Cent OS 32bit)で動かすと、両方うまくいった http://mevius.5ch.net/test/read.cgi/tech/1500329247/765
771: 765 [sage] 2017/09/30(土) 10:38:13.12 ID:+yH9ha/d みんな回答ありがとう。 >>766 string型のメソッドで、文字列をconst char*にするやつ >>767,769 非同期送信にはなってるんだけど、sendの後に送信結果を受け取る関数を呼んでる。 そのあとでpayloadは解放されるようになってるから、送信完了までは実体は生きてると思う >>770 OSSの関数がそう定義されてるから変換したんだ {id:abc. ... , } のうち先頭5文字の{id:aがおかしくなってるんだよね・・ Wiresharkでみると、バイトコード88ってなってたけどなんでそうなったのかが全然わかんない http://mevius.5ch.net/test/read.cgi/tech/1500329247/771
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.440s*