- 1 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 09:10:30 ]
- エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.39【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1182740506/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 192 名前:デフォルトの名無しさん [2007/07/22(日) 13:42:13 ]
- >>189
0で初期化していないと そのポインタを使って何かをしてしまったときに 予期せぬ動作をしてしまうからじゃないの?
- 193 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:42:29 ]
- >>187
ポインタが 0 で初期化されるってのは、 ヌルポインタで初期化されるって意味だ。 static char* p; は static char* p = 0; と同じってこと。 ポインタに 0 を代入するとヌルポインタとして扱われるから、 要するにヌルポインタで初期化されるということ。
- 194 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:43:12 ]
- >>185
>>191 つまり保護のため?
- 195 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:43:24 ]
- >>189
NULLで初期化するなって書いてあった?
- 196 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:51:23 ]
- 静的な変数がビット表現 0 の値ではなくヌルポインタで初期化されるというのは、
C++ ならこんな形で確認できる。 #include <iostream> using namespace std; int main() { class A; static int A::*p; static int A::*null = 0; cout << (int&)p << endl; cout << (int&)null << endl; } p と null はメンバ変数へのポインタってやつなんだが、 こいつのヌルポインタのビット表現は大抵の環境で 0 にはならない。 上のコードを実行すると、p と null とで 0 でない同じ値が出力されると思う。
- 197 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:56:06 ]
- なんだかよくわからないけど、
とにかくNULLは使わない方がいいというのは解りました ありがとうございます
- 198 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 13:57:53 ]
- >>196
0なんだが
- 199 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:02:46 ]
- なんだってー。
0 になる環境もあるのかー。
- 200 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:06:16 ]
- g++ なら -1 になる。
- 201 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:06:27 ]
- >>189
NULLは、C言語では #define NULL (void *)0 と定義されていた。(今のCは定義を見たことがないから分からない) つまり、このC言語処理系では0はint型。 int *a; a = 0; /* コンパイルエラーまたはウォーニング */ a = NULL; /* OK */ 一方、C++では、0は特別な値に昇格した。 C++では、0はint型と(void *)型の両方の性質を持った。 つまり #define NULL 0 と定義されているが、これはかつて、C++がCの上位互換性的要素が高かったため このように定義してないと移植時に不便であったという意味合いが強い。 int *a; a = 0; // OK(推奨) a = NULL; // OK(互換性のため。推奨されず) C++がなぜそうなったかは私には分からないが、 「ifならカッコの中が0であればif文は実行されない。それ以外は実行される」 という定義のように、C++の構造化の文法に不都合が無かった(むしろ定義上都合がよい)ことや (void *)0 が実用的に不便だったからかもしれない。 その辺はもっと詳しい人に
- 202 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:09:30 ]
- >>201
あんま適当な事言わないで。
- 203 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:14:33 ]
- >>202
遠慮なく訂正していいんだよ
- 204 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:14:55 ]
- まあいいんじゃね。うそをうそと(ry
- 205 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:19:42 ]
- まず、C の時代から 0 はヌルポインタだ。
だというのに C で NULL を ((void*)0) と定義することが許されていたのは、 整数型へそのまま代入できてしまわないようにするためだ。 まあ警告止まりかもしれないが、ないよりゃマシだ。 何で C++ でその定義が許されなくなったかというと、 C では void ポインタから他のポインタへの暗黙のキャストが許されていたけど、 C++ ではそれを禁止するようになったからだ。 いちいち明示的なキャストが必要になるのでは困るので、 NULL は 0 と定義されるようになった。 そして、C でも C++ でも NULL が推奨されないなんて話は聞いたことがない。 ポインタを扱っているという目印になるわけで、プログラムを読みやすくする効果がある。 どんどん使えばいい。
- 206 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:30:56 ]
- 注意する点があるとすれば、
NULL にキャストが必要になるっつー状況がないわけではないことだ。 例えば C++ で NULL を可変個引数に渡す時とか。 そのままだと int 型の 0 が渡されてしまう。 ヌルポインタのビット表現が 0 でない環境だけじゃなく、 ポインタ型のサイズが 64 ビットで int 型のサイズが 32 ビットなんて環境(普通の 64 ビット環境)でも問題になる。 C++ においては NULL は単にプログラムを読みやすくするためだけに使われるもので、 NULL と書いたから安心だ、と思ってはいけない。 そういう意味で NULL には危険性はあるのかもしれないけど、 NULL を使わないと可読性が大きく犠牲になるから NULL を使った方がマシ。
- 207 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:51:39 ]
- >>201
0は単なる整数リテラルだからint型と決まっている。処理系の都合なんかではない。 C++で特別になったわけでもない。 0がポインタ型に変換できて、ヌルポインタになるのはCのときから変わっていない。
- 208 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 14:54:54 ]
- int *p = (1 - 2 + 1); /* ヌルポインタ */
- 209 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:06:36 ]
- そもそも、規格でのNULLの定義は、C++の場合「処理系定義の空ポインタ定数」となっている。
つまり0である必要性はなく、例えばGCCでは#define NULL __nullとなっている。 __nullはポインタ型へは暗黙の変換が可能だが、整数型へ暗黙の変換を行うと警告になる独自拡張の定数。 あと、NULLではなく0でいいだろと言っているのはBjarne。 だからC++にはNULL使わない派もそれなりにいる。どれくらいいるのかは知らないけど。 少なくとも、俺もその内の1人。
- 210 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:09:31 ]
- FAQ くらい嫁、で済む話じゃね?
ttp://www.kouno.jp/home/c_faq/c5.html#0
- 211 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:22:00 ]
- >>209
NULL使わない人もいるのか。 if(str!=NULL){ iVal = str->iHoge; } とかって場合でも使わないの? ASSERT(str!=NULL); とかも使わないの?
- 212 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:24:21 ]
- つか、もう NULL をキーワードにしてくれ。
- 213 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:28:27 ]
- >>212
つnullptr in C++/CLI
- 214 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:30:41 ]
- 俺は usertype.dat に NULL 入れてるよ
- 215 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:35:10 ]
- それ色が変わるだk(ry
- 216 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:37:23 ]
- >>213
スレ違い
- 217 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:53:32 ]
- もういい加減しょうもない議論やめろ
- 218 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 15:55:15 ]
- 誰か議論なんてしてたっけ?
- 219 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 16:09:04 ]
- A name for the null pointer: nullptr (revision 3)
www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2214.pdf
- 220 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 18:12:27 ]
- しかし久々にぬるぽ いんたーという言葉を聞いた気がする。
- 221 名前:デフォルトの名無しさん [2007/07/22(日) 20:19:03 ]
- iteratorってポインタと同じようにアドレスを表すものですか??
同じですか??
- 222 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 20:31:57 ]
- >>221
抽象度が違う。 アドレス < ポインタ < イテレータ アドレスはポインタとして使えるし、ポインタはイテレータとして使える。
- 223 名前:デフォルトの名無しさん [2007/07/22(日) 20:33:45 ]
- サンクス
- 224 名前:デフォルトの名無しさん [2007/07/22(日) 20:41:34 ]
- 同時に10個のファイルを開いて置くとして、新しいファイルに書き込む
必要が出てきたとき、もっとも使われていないものを閉じて、新しく開く というコードはどうやったらいいですかね???
- 225 名前:デフォルトの名無しさん [2007/07/22(日) 20:53:16 ]
- 1:日本赤十字に5万円振り込む
2:新潟中越沖地震の救援基金に5万円振り込む のどちらか
- 226 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 20:57:06 ]
- すっきりとは解せないけどなんとなく分かるw
- 227 名前:224 [2007/07/22(日) 21:05:28 ]
- おねがいします
使われた順に、ファイル名とポインタを整列させようとしたんですけど・・ ファイルポインタがコピー出来ません・・・
- 228 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 21:13:30 ]
- >>205
前も誰か言ってたけど、0はCの頃から整数0ですよ。 必要なときにヌルポインタに暗黙のキャストされるだけですよ。
- 229 名前:244 [2007/07/22(日) 21:14:15 ]
- コンパイラや、機種によって同時に開けるファイル数に制限があるため
ひらっきっぱなしにするとエラーになってしまいます・・・ 互換性を保つため10個までにしたいのですが・・ いい方法ないですか??
- 230 名前:デフォルトの名無しさん [2007/07/22(日) 21:26:42 ]
- class A{ A(); };
A::A(){ char *i = new char ; } int main(){ A a* = new A; delete a ; return 0 ; } こういった場合でもメモリは開放されるのでしょうか?
- 231 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 21:29:55 ]
- されない。
i が行方不明になってメモリリークが発生する。 これは静的に A のインスタンスを作っていたとしても変わらない。 A のデストラクタの中で delete を呼び出すべき。
- 232 名前:230 [2007/07/22(日) 21:33:21 ]
- ありがとうございました。
- 233 名前:デフォルトの名無しさん [2007/07/22(日) 21:33:47 ]
- 現在時刻をミリ秒単位で取得する、移植性の高い方法ってありますか?
- 234 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 21:36:01 ]
- >>224
>ファイルポインタがコピー出来ません 詳しく書いてみ?
- 235 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 21:36:10 ]
- ない
- 236 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:19:29 ]
- >>228
0はCの頃からヌルポインタ定数ですよ。
- 237 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:21:24 ]
- 0は0だろ
- 238 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:24:15 ]
- >>236
0はヌルポインタ定数に変換できるというだけだろ。>>210
- 239 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:31:09 ]
- >>238
その言い方はおかしい。 0 を含めて整数の 0 と評価される定数式(C 限定で、それを void* にキャストしたもの含む)が ヌルポインタ定数。ヌルポインタ定数はポインタとして使われた場合にヌルポインタに変換される。
- 240 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:36:09 ]
- pow(2,2)
とかをコンパイル時に計算して、4をコードに埋め込んでしまうコンパイラも あるが、こういうのって定数式なのかしら?
- 241 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:40:01 ]
- 少なくともCとC++の構文上は定数式ではない。
- 242 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:41:47 ]
- Cで正規表現などをもちいて文字列を置換したりするときに、
文字列を細切れにぶったぎって それを再び結合したりするわけですが しばしばその文字列はもとより長くなったりしますので マジメにやろうとするとメモリ管理だの何だのが とてもめんどうくさく、しかも適当にやると ヘタをするとPerlのほうが速かったりするかと思います 効率よく楽なほうほうは何かありますか ロープというデータ構造は結合が鬼のように早いと聞きますが ロープに対して使える正規表現ライブラリなど寡聞にして知りません え?C++を使え?実におっしゃるとおりですね
- 243 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 22:42:33 ]
- >>241
ありがとう ということは、そのようなものがコンパイラの最適化によってゼロに 化ける場合は、ヌルポ定数とは扱われない ということかしら
- 244 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 23:01:22 ]
- >>243
関数呼び出しは定数式に含まれないことになってる。
- 245 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 00:00:41 ]
- >>236
じゃあ、引数不定個の関数で、0がintとして渡されるのは なんででしょうねえ。 printf("%d %d %s", 0, 0, 0) 64bit環境向けにコンパイルすると 全部intの0として扱われてることが明白ですよ。 何か変ですか?それともあなたが変ですか?
- 246 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 00:09:04 ]
- www.kouno.jp/home/c_faq/c5.html#2
- 247 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 00:55:18 ]
- いつまでゴチャゴチャ言いあってんだよ。
- 248 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 01:03:41 ]
- >>245 ポインタとして使われてないから。
- 249 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 01:38:56 ]
- またこの宗教論争やってんのかよwwww
- 250 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 01:43:25 ]
- 規格に照らして正しさが確かめられるんなら、宗教論争とは言わんだろ。
マクロ NULL を使うべきかどうかってんなら間違いなく宗教論争だけど。
- 251 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 02:06:46 ]
- 初心者の人、ちゃんとついてこれてます?
- 252 名前:205 mailto:sage [2007/07/23(月) 03:55:59 ]
- >>228 が正しいんだからもう終わりにしようぜ。
俺も言い方が悪かった。
- 253 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 13:48:26 ]
- ヌルポインタを使ってメンバ関数を呼ぶとどうなるかは未定義と聞いたことがあります。
でも、規格票を読んでもこのことがどこに書いてあるのか見つかりません。 どこに書いてあるのかご存知の方はいますか?
- 254 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 13:55:25 ]
- 未定義って意味知ってるか
- 255 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 13:56:11 ]
- ワラタ
- 256 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 14:02:02 ]
- 規格票に全く書いてない事か、あるいは規格票に未定義と明記されている仕様の事。
- 257 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 16:07:43 ]
- 居ないなら居ないと返事しろ
- 258 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 16:28:49 ]
- 規格票読んだ事ないのか?
「〜は未定義である」って書いてあることもあるんだぞ?
- 259 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 16:38:21 ]
- 規格票(?)もいいけど、>>256も読もうな
- 260 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 17:18:48 ]
- 規格票にちゃんと書いてるかもしれないってことだろ。
- 261 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 17:24:04 ]
- だったら>>253に場所を教えてやれよ。
>>253は未定義も全部書いてあると思ってるみたいだし。
- 262 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 17:36:19 ]
- 場所知らんもんよ。
- 263 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 17:45:20 ]
- 居ないなら居ないと返事しろ
- 264 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 18:02:16 ]
- 規格書を見てみたがたしかにヌルポインタの使用については見当たらないな。
一番関係ありそうなのが、3.8 オブジェクトの生存期間。 3節目の「この規格全体を通じて、オブジェクトの特性についての規定は、 生存期間中のオブジェクトに対してだけ適用される。」という一文を見付けたので精一杯。
- 265 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 18:09:07 ]
- 今はこれが精一杯
- 266 名前:デフォルトの名無しさん [2007/07/23(月) 18:44:02 ]
- 日本語コードを判別して一行よみたいんですけど
UTFがよめないです なぜか全角と機械語みたいなのが入ります どうすればいいんでしょうか 英数字のみのテキストなんですが
- 267 名前:デフォルトの名無しさん [2007/07/23(月) 18:47:51 ]
- 英数字のみでも、UTFとそうでないコードで、文字種が変化するでしょうか??
- 268 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 18:48:08 ]
- どんなデータをどんなソースで読んだんだ
- 269 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 18:49:23 ]
- UTFだけ書かれても、その後ろに数字が続いてるし、それが何種類もあるんだぜ
- 270 名前:266 [2007/07/23(月) 18:58:11 ]
- kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4725.txt
これなんですが UTF16でないと読めません
- 271 名前:266 [2007/07/23(月) 19:00:01 ]
- 一行目の先頭に機械語みたいのが入っています・・・UTF16の特徴なんですか?
- 272 名前:デフォルトの名無しさん [2007/07/23(月) 19:04:21 ]
- もしくは、ファイルの文字種を判別して、例えばシフトJISに変換する
DLLやSTLなどありませんか???
- 273 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 19:05:58 ]
- >>271
見てないけどBOMじゃないかな?
- 274 名前:デフォルトの名無しさん [2007/07/23(月) 19:08:05 ]
- 自己解決しました
nkf32.dllを通す事にしました www.vector.co.jp/soft/win95/util/se295331.html
- 275 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 19:11:31 ]
- ICUとか
- 276 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 19:13:51 ]
- WinでいいんならMultiByteToWideCharとか
WTL使っていいんならCA2Wに渡すだけでおk
- 277 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 19:15:29 ]
- >>264
なるほど・・・。 ヌルポインタを使った場合はオブジェクトが存在しないから、 メンバ関数呼び出しに関する規定はヌルポインタを使った場合には適用されない・・・と。 確かにそう考えることもできそうな感じではありますね。
- 278 名前:デフォルトの名無しさん [2007/07/23(月) 19:21:10 ]
- >>276
汎用性が良くなるため、MultiByteToWideCharでいきます サンクス!
- 279 名前:デフォルトの名無しさん [2007/07/23(月) 21:05:00 ]
- socketを使用してのUDP通信で
自分で定義した構造体を送受信したいのですが sendto()/recvfrom()関数はchar配列を送受信するための引数を持っています どうすればできるのでしょうか
- 280 名前:デフォルトの名無しさん [2007/07/23(月) 21:06:29 ]
- socketを使用してのUDP通信で
自分で定義した構造体を送受信したいのですが sendto()/recvfrom()関数はchar配列を送受信するための引数を持っています どうすればできるのでしょうか
- 281 名前:デフォルトの名無しさん [2007/07/23(月) 21:07:45 ]
- 2連投稿すいません。エラーですorz
- 282 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 21:59:54 ]
- >>253
www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#232
- 283 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 22:15:28 ]
- >>280
何でそういう質問をするのか、まずはっきりさせましょう。 キャストを使ってダメだったということ? それとも(char *)型に直す方法が分からなかったってこと?つまり、キャストを知らなかったということ? それとも(char *)に直せたけど、受け取り側で値が変になったということ?
- 284 名前:wolf ◆8VH3XAqjlU mailto:sage [2007/07/23(月) 23:07:57 ]
- >>224
>>229 LRUのサンプル ↓ blogs.yahoo.co.jp/mocchi_2003/34182175.html
- 285 名前:デフォルトの名無しさん [2007/07/23(月) 23:26:11 ]
- キャストすることで送信することはできましたが、
受信するときに実行時にエラーがでます。 受信するとき、受信されたデータはchar[]に入るようになっています。 char recvdata[1024]; recvfrom(socket, recvdata, sizeof(recvdata), 0, ......); char*で宣言すると、実行時にエラーがでます。
- 286 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 23:29:41 ]
- >>285
送信してから受信するまでの間に領域が開放されたりしてない?
- 287 名前:デフォルトの名無しさん [2007/07/23(月) 23:43:12 ]
- >>286
それはどういう意味ですか??
- 288 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 23:48:11 ]
- >>280=285
まず、構造体のアライメントを調べたか? 送信側のマシン・・・アライメント4byte struct X { char a; // 1byte + 3byte(4byteになるよう調整) long b; // 4byte } x; sizeof(x) = 8 受信側のマシン・・・アライメント2byte struct X { char a; // 1byte + 1byte long b; // 4byte } x; sizeof(x) = 6 これでは受信側は混乱する。 (char *)で宣言するのは全く問題ない。malloc等でメモリを確保していれば。
- 289 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 23:51:07 ]
- >>287
>>288が詳しそうなんでそっちにまかせた! socketってのを使ったことがないんで憶測ですまん。 構造体をローカルのchar配列に入れてsendto呼んで、 送信関数終了時にchar配列が開放されて受信側があぼーん。 とかなのかな?って思ったんだが、sendtoの仕様次第じゃ問題ないな。
- 290 名前:デフォルトの名無しさん [2007/07/24(火) 00:08:25 ]
- >>285
構造体の大きさは同じでした。 mallocしたことでエラーはでなくなりましたが、値が変わってしまいます。 struct Test{ int a; char c; }; で、aに0をいれて送信すると、受信後は3801416となってしまいます
- 291 名前:デフォルトの名無しさん [2007/07/24(火) 00:20:47 ]
- sendto(SOCKET s, const char *buf, int len, int flags, const sockaddr *to, int tolen);
で、第三引数にstrlen(data)を渡してたのが問題だったみたいです。 sizeof(Test)にしたら問題なく送信できました。 が、受信したあと、char*型に入ってる受信データをTest型の変数に代入できません。 dataがchar*型で、 ((Test*)data)->a とするとちゃんと値を得ることができます。 Test t = (Test)*data;とすると、charをTestに変換できないとエラーがでます。 Test *buf = (Test*)data; Test t = *buf; とすると、tの値が狂います
- 292 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 00:25:41 ]
- memcpyでいいんじゃまいか?
|

|