[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/31 10:23 / Filesize : 243 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.49【環境依存OK】



1 名前:デフォルトの名無しさん [2008/02/20(水) 12:33:41 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.48【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1202141921/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

457 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:11:12 ]
>>443
手軽さならWinInet
真剣にやるならWinsock

458 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:13:38 ]
>>450
435みたいに、構造体で渡した後、元の変数に代入し直せばいい。

459 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:15:30 ]
もはやポインタいらんがなw

460 名前:デフォルトの名無しさん [2008/02/23(土) 23:19:19 ]
文字列ではなく、1byte変数の配列を可変長で扱いたいと。
だったら、
typedef struct {
char *baka;
size_t length;
} aho;

とでもして、構造体をやり取りすればいいだろ。
C++だったら、vector<char>、deque<char>でも使えや。

461 名前:443 mailto:sage [2008/02/23(土) 23:20:13 ]
WinInetででググったらいっぱい出てきたんで調べてみる。
サンクス

462 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:20:26 ]
>>443
URLDownloadToFile

463 名前:デフォルトの名無しさん [2008/02/23(土) 23:26:44 ]
>>458
なぜ直接書き換えられないのかわかりません

464 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:29:10 ]
>>463
こっちからしてみたら、なんで構造体を使いたくないのかわからない。

465 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:29:25 ]
>>463
もっと勉強してから出直せ



466 名前:デフォルトの名無しさん [2008/02/23(土) 23:40:17 ]
もともと構造体は使っていますよ あとC言語のみで動かせるようにしたいんです
開始のアドレスと長さを渡しても上と同じだと思います

467 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:41:34 ]
あぼーんしたいからトリップつけてくれ

468 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:44:18 ]
たぶんトリのつけ方を知らない。
「名前欄にレス番つけること」すら今日知ったっぽい

469 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:44:39 ]
釣りだろう

470 名前:デフォルトの名無しさん [2008/02/23(土) 23:46:32 ]
文字列を入力して、
表示するとき右から3文字ごとにコンマをつける方法ってどうすれば?
(例:入力>>344fru38fh4tgiur
   出力>>3,44f,ru3,8fh,4tg,iur)
この続きお願いします・・
#include <iostream.h>
main()
{
char a[50] ;
cout <<"aに文字を入力してください>>" ;
cin.getline(a, 50) ;

int a_count = 0 ;
while( a[a_count] != '\0'){
a_count++ ;
}

cout <<"aを表示します→" ;
for(int i=0 ; i<a_count ; i++){
cout << a[i] ;
}
}


471 名前:デフォルトの名無しさん [2008/02/23(土) 23:48:55 ]
これがたまたまうまく動いたりしますが、実際は間違っているから困っているんです

#include <stdio.h>
#include <string.h>
typedef struct { char *start ; char *end; } bin;

void f(bin *x) {
delete x->start;
x->start = new char [3];
strcpy(x->start,"aa"); }

main() {
char *ch = new char [2];
strcpy(ch,"a");
bin x;
x.start=ch; x.end=ch+strlen(ch);
f(&x);
printf("%s",ch);
}

472 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:50:11 ]
>>470
www.google.co.jp/search?q=C%2B%2B+3%E6%A1%81+%E3%82%B3%E3%83%B3%E3%83%9E&btnG=%E6%A4%9C%E7%B4%A2&lr=

473 名前:デフォルトの名無しさん [2008/02/23(土) 23:53:13 ]
x.start=ch; とした時点で、数値がコピーされるだけになり、文字列を書き換えられなくなります
だから x.start=&ch;と参照渡しをするために
構造体を { char **start ; char **end; }に変更します
そうすると上記のような現象が出ます

474 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:53:48 ]
>>471
f(&x);
ch=x.start;
printf("%s",ch);
でいいだろ
って・・・釣られちまったよ〜〜〜〜ん

475 名前:デフォルトの名無しさん [2008/02/23(土) 23:56:53 ]
>>473
fを呼んだあとのchが指す先はfの中でdeleteされていることに気づいているか?



476 名前:475 [2008/02/23(土) 23:57:42 ]
×>>473
>>471

477 名前:デフォルトの名無しさん [2008/02/24(日) 00:03:07 ]
>>475
>>471ではdeleteやnewが効かない場合があるんです これはちゃんと表示されますか?

#include <stdio.h>
#include <string.h>
typedef struct { char *start ; char *end; } bin;

void f(bin *x) {
delete x->start;
x->start = new char [3];
strcpy(x->start,"aa"); }

main() {
char *ch = NULL;
bin x;
x.start=ch;
f(&x);
printf("%s",ch);}

478 名前:デフォルトの名無しさん [2008/02/24(日) 00:06:58 ]
Cで動くようにしたいとかホザいておきながら、new や deleteを使うバカ
しかも、

baka = new aho[shine];

としたら

delete []baka;

とすることしら知らないバカ。
マニュアルでも読め

479 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:07:28 ]
>>477
じゃあもういいから、こうしとけ
#include <stdio.h> 
#include <string.h> 
typedef struct { char **start ; char **end; } bin; 

void f(bin *x) { 
delete[] *x->start; 
*x->start = new char [3]; 
strcpy(*x->start,"aa"); } 

void g(bin *x) {
delete[] *x->start; 
*x->start = new char [3]; 
strcpy(*x->start,"bb"); } 

main() { 
char *ch = NULL; 
bin x; 
x.start=&ch; 
f(&x); 
printf("%s",ch);
g(&x); 
printf("%s",ch);
}
これで終了、もう来るな

480 名前:デフォルトの名無しさん [2008/02/24(日) 00:08:23 ]
>>477
deleteもnewも効いているはずだよ?

・chが指す先をdeleteしようが、x->start=new・・・をしようが、chの中身は変わらない。
・deleteしても絶対に書き込めなくなるとは限らない。

これらは理解している?

481 名前:not 477 [2008/02/24(日) 00:10:08 ]
>>478
あ・・・そういえばdelete []baka;としないといけなかったんだ・・・・
C厨ですまん。

482 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:15:24 ]
構造体はCでないというつもりか?

483 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:17:32 ]
>>477
main関数内、chだけに注目すれば、
chはNULLで初期化された後、一切変更を受けないだろ。
printfにNULLを渡しているので、未定義。

484 名前:デフォルトの名無しさん [2008/02/24(日) 00:18:48 ]
>>479
それだと、 bin x;を初期化する関数と、適当な配列を入れるとバグるんです なんでうごかないんですか

#include <stdio.h>
#include <string.h>
typedef struct { char **start ; char **end; } bin;

void f(bin *x) {
delete[] *x->start;
*x->start = new char [3];
strcpy(*x->start,"aa"); }

void h(bin *x){
char *ch=new char [3];
ch[0]='X';ch[1]=0;
x->start=&ch; }

main() {
bin x;
h(&x);
f(&x);
char *test=new char [1];
printf("%s",*(x.start));
}

485 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:23:27 ]
バグるじゃ分らんだろ。



486 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:24:02 ]
>>484
h内のローカル変数chのアドレスをx->startに格納しているが、
chはhを抜けると無くなるので、x->startは存在しない場所を指している。

487 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:24:26 ]
>>484
じゃあこれでいいだろう
#include <stdio.h> 
#include <string.h> 
typedef struct { char **start ; char **end; } bin; 

void f(bin *x) { 
delete[] *x->start; 
*x->start = new char [3]; 
strcpy(*x->start,"aa"); } 

char *ch;
void h(bin *x){ 
ch=new char [3]; 
ch[0]='X';ch[1]=0; 
x->start=&ch; } 

main() { 
bin x; 
h(&x); 
f(&x); 
char *test=new char [1]; 
printf("%s",*(x.start)); 
}

488 名前:デフォルトの名無しさん [2008/02/24(日) 00:25:03 ]
char *test=new char [1];をのぞくと、bcc5.5では動作します
ほかのコンパイラでは、入れなくても実行時に落ちます 原因は何ですか?

489 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:25:46 ]
いいように使われてるぞ、デバッグ隊w

490 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:27:01 ]
>>488
原因はchがローカル変数だからだ

491 名前:デフォルトの名無しさん [2008/02/24(日) 00:27:09 ]
>>488
OSが落ちろ!!って指令を下すからじゃないかな?

492 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:27:09 ]
おまいらまだ付き合ってやってんのか
こいつ分かってるけど、分からないフリしてるだけだろ

493 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:28:09 ]
>>492
こっちも暇だからね

494 名前:デフォルトの名無しさん [2008/02/24(日) 00:28:54 ]
バカは放置汁。
最初の例から考えると、文字列定数や、文字配列をもdeleteしようとしてるんだから。


495 名前:デフォルトの名無しさん [2008/02/24(日) 00:30:19 ]
>>486>>487
しかし、これはどのコンパイラでも正常に動きませんか? C++ですが

#include <stdio.h>
#include <string.h>

void h(char *&x){
char *ch=new char [11];
strcpy(ch,"ABCDEFGHIJ");
x=ch; }

main() {
char *x;
h(x); printf("%s",x); }



496 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:31:31 ]
>>495
それが動くのはchar*&だからだ

497 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:32:23 ]
>>495
うん。それはローカル変数アドレスを取る(ポインタを取る、参照を取る)
ということをやっていないから問題ない。

498 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:33:28 ]
>>495
そのhは、chの「値」をコピーしているので、
chが無くなっても値はxに格納されているから動く。
>>484はchの「アドレス」を格納しているだけ。

499 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:33:34 ]
>>488
プログラミングは諦めたほうがいい
1.簡単な事をややこしくして
2.バグを入れて
3.聞きまくることで他人の邪魔をする

別の仕事探せ

少なくともオレはそれを勉強熱心とはいえない

500 名前:デフォルトの名無しさん [2008/02/24(日) 00:41:03 ]
だから、バカは放置だって。
手段に固執して、何の目的でそのイミフな手段をとろうとしているのか自分でわかってない。


501 名前:デフォルトの名無しさん [2008/02/24(日) 00:41:58 ]
確認したいのですが、newは、deleteするかプログラムが終了するまで解放されないはずですよね?
タスクマネージャで確認するとf()を抜けてもメモリはそのままです

#include <stdio.h>

f(){
char *x=new char [200*1024*1024]; }


main() {
f();
getchar();
}

502 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:42:13 ]
>>495
ちなみに、それをポインタを使って書き直すとこうなる。
#include <stdio.h>
#include <string.h>

void h(char **x) {
    char *ch = new char[11];
    strcpy(ch, "ABCDEFGHIJ");
    *x = ch;
}

int main() {
    char *x;
    h(&x);
    printf("%s",x);

    return 0;
}

503 名前:デフォルトの名無しさん [2008/02/24(日) 00:43:28 ]
だからローカルで定義された変数や配列でも、そのアドレスが判明していれば、main()などで操ったり解放できますよね

504 名前:デフォルトの名無しさん [2008/02/24(日) 00:46:04 ]
>>503
マニュアル嫁
ヒープの意味を理解してからnew や delete を使え。
変数の記憶クラスを理解しろ


505 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:47:43 ]
ローカル定義は外に抜けたら、内容が残っている保証はない
allocしたなら残っているけど



506 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:48:18 ]
>>503
だからの前後が繋がってないぞ
newした領域がdeleteされるまで解放されなかったら
なぜローカルで定義された変数や配列をmainから操れることになるんだ

507 名前:デフォルトの名無しさん [2008/02/24(日) 00:49:11 ]
なぜですか? 間違っていないと思いますよ これはmain()側で解放してます

#include <stdio.h>
#include <string.h>

void h(char **x) {
char *ch = new char[200*1024*1024];
*x = ch; }

main() {
char *x;
h(&x);
getchar();
delete x;
getchar();}

508 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:52:46 ]
>>507
それはhのローカルで定義された変数chをmainから操ってるわけではないな
単にnewした領域へのポインタchをmainのxにコピーして渡してるだけだ

509 名前:デフォルトの名無しさん [2008/02/24(日) 00:54:23 ]
一度目のキー入力で、200M分メモリを解放しますよ タスクマネージャみてください

510 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:54:39 ]
伸びがいいから何かと思ったら未だ相手にしてたのか。

511 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:55:37 ]
>>507
newで確保したメモリへのポインタをmainに連れて行っているだけ。
newやmallocで確保したメモリはソース上のスコープに縛られずに使える。

一方、>>484では、x->start=&ch;というように、
ローカル変数へのポインタをmainへ持って行っている。
しかし、mainに戻ったときには既に変数chそのものが居なくなっているのでうまくいかない。

512 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:56:05 ]
見事な無自覚の自己中心主義だな、早く治せよ

>>507
なにしてるかわかってるならいいけど、ポインタ一回お浚いしたら?

513 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 00:56:26 ]
>>507
あんたはnewで確保した領域と、それを指すポインタ変数を、同一のものであると勘違いしてないか?
>>507のコードでも、ポインタ変数chはhを抜ける時に消滅するのは分かるか?

514 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:00:53 ]
まずchar *x の xは、int xや float xと同じで、ただのローカル変数であることを覚えとけ

515 名前:デフォルトの名無しさん [2008/02/24(日) 01:04:18 ]
しかしこれは動きません

#include <stdio.h>
#include <string.h>
typedef struct { char **start ; char **end; } bin;

void h(bin *x){
char *ch = new char[11];
strcpy(ch, "ABCDEFGHIJ");
*(x->start)=ch; }

main() {
bin x;
h(&x);
printf("%s",*(x.start));
}



516 名前:デフォルトの名無しさん [2008/02/24(日) 01:04:59 ]
>

517 名前:デフォルトの名無しさん [2008/02/24(日) 01:05:04 ]
free(p)ってやるとpがNULLになるとか思っちゃう人なのかな。

518 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:05:45 ]
お前らバカの相手すんなって。つけあがるから。

519 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:06:51 ]
>>515
x->startをまったく初期化しないまま、*(x->start)なんかに代入しているのが間違い。
>>513に答えろ

520 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:08:18 ]
俺結構ポインタの理解があやふやで、だからなるべくポインタのややこしい部分には触れないプログラム今までしてきたんだけど、
このスレ読んだらなんとなく理解できてきた気がする。
C言語でnewとdeleteを使い続けてる人ありがとう!
あと、もちろん解説してくれてるみんなもありがとう!
明日からもstringばりばり使っていこうと思います。

521 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:09:24 ]
>>515
そうだね、それは動かないね
だから?
何を聞きたいのか明確に

522 名前:デフォルトの名無しさん [2008/02/24(日) 01:09:53 ]
ポインタ変数が消滅するのはわかります
関数での、初期化と書き換えをする方法がわかりたいです

523 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:10:25 ]
>>515
#include <stdio.h>
#include <string.h>
typedef struct { char **start ; char **end; } bin;

void h(bin *x) {
char *ch = new char[11];
strcpy(ch, "ABCDEFGHIJ");
*(x->start)=ch; }

int main() {
bin x;
char *p;
x.start = &p;
h(&x);
printf("%s", p);
delete[] p;
}


524 名前:デフォルトの名無しさん [2008/02/24(日) 01:10:30 ]
new/deleteを使うということは当然C++だよな?
じゃあ、なんでメモリ操作を隠蔽するクラスを作ろうとしないの?
IQ低いから?

525 名前:デフォルトの名無しさん [2008/02/24(日) 01:10:53 ]
>>522
みんなが何回も例を出しているのに・・・(T_T)



526 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:12:15 ]
>>524
上のほうで最終的にCで書くと言っていたはず。
俺にはなんで今はnew[]使ってC++にするのか理解できないけど。

527 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:12:50 ]
>>522
おまいがポインタについて知っている知識をすべて述べよ

528 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:12:53 ]
>>522
何度か出てる正しく動く例が気に入らない理由はなぜかね

529 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:18:03 ]
仮に、彼へC言語ポインタ完全制覇を与えたとしても、
それでわかってくれるかどうか不安になる。

530 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:19:41 ]
>>522
皆が何言ってるかほとんど分からないC++素人だけど
一日ぐらい気分変えて犬の散歩にでも行ったら?
まあ、犬のウンコの処理しながら考えたりさ
その後で、また一から作ってみる
以外とできるかもよ

531 名前:デフォルトの名無しさん [2008/02/24(日) 01:21:40 ]
>>523
それだとうごきました サンクス

x.start = &p;
h(&x);
printf("%s", *x.start);

初めにメモリ上にchar*型が確保されないと受け取れないって事か

532 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:23:55 ]
>>530
犬のウンコの処理を考えたり に見えて
delete unko;とか脳内で実行しそうになった

533 名前:デフォルトの名無しさん [2008/02/24(日) 01:28:09 ]
>>523
pを確保しなくても、これでもいいはずですよね

int main() {
bin x;
x.start = new char *;
h(&x);
printf("%s", *x.start);
}

534 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:28:52 ]
newしたらdeleteしとけよ

535 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:35:57 ]
>>533
newしたものはdeleteしないといけないのが面倒だから、
使わずに済むなら避けるべき。



536 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:48:50 ]
だから、newを捨てるところからはじめろって。

537 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:53:19 ]
C及びC++を使いゲームを作成された方へ質問です。

再帰関数って便利ですか?
もしよろしければ、メリットとデメリットを教えていただけないでしょうか?

自分の考えでは、 goto と同じ用に無理に使う必要はない機能だと思ってます。

538 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:54:37 ]
再帰関数については色々思うところがあるのだが、ゲームを作っているわけではないからなぁ。

539 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:58:18 ]
無理に使う必要は無いなぁ
メリットデメリットという問題でもない気がする

540 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 01:58:23 ]
>>537
ポリゴン(ボーン)の操作で便利
でも、無理して使わなくてもおk

541 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 02:03:16 ]
ボーン操作ってことは、データの読み込み時に便利ってことでしょうか?

542 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 02:09:18 ]
【環境】 MS WinXP/gcc 3.4.4 on cygwin
【ソース】 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6079.txt
【用途】 IRCクライアント(bot)
【起動方法】 $ ./a irc.tokyo.wide.ad.jp 6664
【動作の現状】
 1.コマンドラインからサーバ名とポートを受け取り、ソケット作成、コネクション確立
 2.サーバからのコネクションメッセージ受け取り
 3.USER/NICKコマンドの送信
 4.ウェルカムメッセージ、MOTDの受け取り
 5.半角英数のチャンネル名へのJOIN ←ここで停止する
【質問】
 ・Telnetで同じように接続すると問題なく接続→終了することができる(ISO-2022-JPだから文字化けするが正常)
 ・送受信周りがかなりいい加減なのでJOIN出来ないのはそこに問題があるのではないか?

イレギュラーなことをやってますが、IRC板orスレというよりCネットワークプログラミング自体の問題かと考え
こちらに質問させていただきました。よろしくお願いいたします。

543 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 02:13:01 ]
>>541
typedef struct _D3DXFRAME {
LPSTR Name;
D3DXMATRIX TransformationMatrix;
LPD3DXMESHCONTAINER pMeshContainer;
struct _D3DXFRAME *pFrameSibling;
struct _D3DXFRAME *pFrameFirstChild;
} D3DXFRAME, *LPD3DXFRAME;

座標系の上に座標系があって、
さらにその座標系の上に座標系が…
と繰り返すので、スタックを自前で管理するより
再帰処理にしたほうが楽というだけ
(体-上腕-腕-手-指 のように繋がっていくので)

544 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 02:17:35 ]
>>542
カンなので外してたら無視してくれ
>for(i=0;i<=strlen(p);i++){
\0も送信してるが、いいのか?
i<strlen(p) なんじゃない?

545 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 02:37:36 ]
>>543
for分で体のパーツ数回してデータを読み取ってるんですが、
今は無理してそれを崩してまで使う機能ではないってことですね。

よく機能を理解して使えば楽になる物、ということですね。
答えてくれた方ありがとうございました。



546 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 03:26:15 ]
>>542
メッセージの終わりを\n → \r\n に変えてみたらいけるかも

547 名前:デフォルトの名無しさん [2008/02/24(日) 03:33:50 ]
>>530
俺はオナニーして発射した後、ティッシュで拭いてる時にコードが閃くよ。

548 名前:546 mailto:sage [2008/02/24(日) 03:56:01 ]
あと、>>544と同じく\0の送信は不味いんでは?
\nでメッセージの終わりを判断してるとすると、サーバは次のメッセージの受信で
先頭に\0が入ってしまうんではないかと思う
(2回目のメッセージが、"\0JOIN #ircclidev\n"になるんじゃないかな)

549 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 04:06:10 ]
>>544,>>548
i<strlen(p)で解決しました。初歩的ミスもいいところだ・・・。

もう一つ質問があるのですが、(どちらかというとこちらが本題ですが)
ISO-2022-JP(いわゆるJISコード)とShiftJISを相互変換するライブラリorサンプルを探しています。
検索してもなかなかしっくり来るものがなく、nkf経由だと上手くISO-2022-JPの制御コード
(KI/KO=0x1B 0x24 0x42/0x1B 0x28 0x42)を取ることが出来ません。

RFCには、特にマルチバイト環境の規定は定められていませんが、日本語IRCサーバは
ISO-2022-JPを使っているところが主流のようです。

550 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 04:12:53 ]
>>542の修正版ソースです。一応日本語以外はちゃんと動く・・・はず
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6082.txt

551 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 05:11:02 ]
>>549
iconvじゃだめかい?

552 名前:デフォルトの名無しさん [2008/02/24(日) 05:52:14 ]
すんません。
VC++6.0からVisualStudio2008に移ったんですが、外観が変わりすぎててチンプンカンプン・・・
どこかVisualStudio2008 Exp の解説やってるページとかありませんか?

dllすら読み込めぬ・・・。orz


553 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 06:11:51 ]
Visual Studio2008スレにGO

554 名前:デフォルトの名無しさん [2008/02/24(日) 10:24:08 ]
自分でクラスを定義するときに、ポインタに対する演算は、定義しなくてもよいのでしょうか?
つまり、ポインタでも、int*とか、char*とかの型がありますが、例えば
myclass*==int*
とかやるとコンパイルエラーになります。でも、myclass1*==myclass2*は、==演算子も
定義してないのに、コンパイルできるし、ちゃんと動きます。
これは、どういう理由でできるんですか?というか、ポインタの比較をする演算子って
どこで定義してるんでしょうか?

変な質問ですいません。


555 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 10:27:06 ]
継承関係があるんじゃない?



556 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 10:54:10 ]
>554
規格上で「できる」と決められている処理ははコンパイラが勝手に処理してくれる、というだけ。
myclass1*==myclass2* は >555 の言うとおり myclass1 と myclass2 に継承関係があるんだろう。
この場合、暗黙の型変換が発生して同じ型になり比較できる、と決まっている。

で、規格で決められている以上のポインタに対する演算を、自前で定義する必要があるケースはまずない。

557 名前:デフォルトの名無しさん [2008/02/24(日) 10:55:39 ]
>>554
違う型のポインタの比較はダメ
int* a;
double* b;
a == b
をやってみれば意味がわかるんじゃないかな?







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<243KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef