すみません。 また教えて欲しいのですが、これは、Cの質問だと思うのですが、 もしかすると、関数自体が間違っているのかもしれないので、 どうか、教えてください。 下記のような関数を使いたいのです。 int write_sock( int sockfd, char *str ) { int write_len = 0; int count = 0; size_t bytes_sent = 0; char *buf; char str_buff[1024]; sprintf( str_buff, "\r%s", str ); count = strlen( str_buff ); if( count <= 0 ){ return( NG ); } buf = str_buff; while( bytes_sent < count ){ do{ write_len = write( sockfd, buf, count - bytes_sent ); } while( ( write_len < 0 ) && ( errno == EINTR ) ); if( write_len <= 0 ){ return( NG ); } bytes_sent += write_len; buf += write_len; } return( OK ); } この関数を呼び出して使うと、 write_sock( sd, "test strings.\n" ); これはうまくいきました。 だから、ちゃんと動く関数かなと思っていました。 でも、こういう構造体を作って、 struct test_s { unsigned long test1; unsigned short test2; unsigned short test3; unsigned short test4; unsigned short test5; } tes_s; このようにデータをいれました。 tes_s.test_1 = Data_1; tes_s.test_2 = Data_2; tes_s.test_3 = Data_3; tes_s.test_4 = Data_4; tes_s.test_5 = Data_5; データはちゃんと入っているのを、printf()で確認しました。 この後、 write_sock( sd, tes_s ); のように呼び出してみましたが、うまくいきませんでした。 char型のデータでないとソケットでは送れないので、なんとか 文字列にしようとしてみたのですが、文字列の連結として 構造体の各データをつなげる方法がうまくいきません。 memcpy( tes_s, tes_s.test_1, sizeof(tes_s.test_1) ); memcpy( &tes_s[4], tes_s.test_2, sizeof(tes_s.test_2) ); のようにやっても、tes_sの文字列に入っていないし、 sprintf( tes_s[0], "%04d", tes_s.test_1 ); とやると、coreを出してとまってしまいました。 正しいやり方というのはあるのですか? それとも、やっぱり関数が間違っているんですか? どうかよろしくお願いします。 |