- 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
- 357 名前:デフォルトの名無しさん [2008/02/23(土) 16:52:12 ]
- これで正解でしょうか?
#include <string.h> #include <stdio.h> typedef struct STRDATA{ char **start; char **end;}strdata; f(strdata x){ delete *(x.start); *(x.start) = new char [20]; strcpy(*(x.start),"++++++++++++++"); } main(){ char *ch=NULL; strdata x; x.start=&ch; f(x); printf("%s",ch);}
- 358 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 16:52:50 ]
- 図を描こうぜ。図を。
ch, x, そして動的に確保されたメモリが 実際にメモリ上でどう置かれていてどう参照していて 何を実行するとどう変化するか。
- 359 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 16:54:53 ]
- >>357
それでとりあえずまともに動くね。 推奨されるコードかと言うとまたそれは別だが。 new 使ってるから C++ なんでしょ? コンテナ使えば楽だぜ。
- 360 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 16:58:05 ]
- 横から質問で申し訳ないんだけど、
・>357のfに渡す前に、xはいつnewされてるの? ・関数の一行目がdeleteって、ものすごく気持ち悪いんだけど、よくつかう手法なの?
- 361 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:00:09 ]
- >>360
deleteにNULLを渡しても何も起こらないことになっているから、 最初にnewされていないというのは大丈夫。エラーにはならない。 最初にdeleteというのは必要に応じて使えばいいと思うけど、 俺も書いた覚えない(clear()とかいかにもそれだけを行う関数というのでもない限り)。
- 362 名前:デフォルトの名無しさん [2008/02/23(土) 17:03:44 ]
- サンクス たびたびどうもありがとうございます
- 363 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:04:30 ]
- 俺も横レスだけど、配列なのに delete [] にしてないのは問題ないのか?
- 364 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:04:41 ]
- >>363
大問題。
- 365 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:05:56 ]
- だからコンテナを使おうぜと言ってるのに。
- 366 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:06:16 ]
- いろいろな意味で気持ち悪い。というか何をしたいのかよくわからない。
- 367 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:07:46 ]
- >361
>deleteにNULLを渡しても何も起こらないことになっているから、 >最初にnewされていないというのは大丈夫。エラーにはならない。 なるほど、どうもです。 >最初にdeleteというのは必要に応じて使えばいいと思うけど、 >俺も書いた覚えない(clear()とかいかにもそれだけを行う関数というのでもない限り)。 なるほど。 よく考えたらC++になってからnewなんてほとんど使ったこと無かった気がします。 動的な配列が必要になったらだいたいvectorにつっこんでた。
- 368 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:10:42 ]
- clear はメモリが解放される訳じゃないんだよな。
std::vector<int>().swap(v); みたいにしないとメモリは解放できない。 解放した方がいいかどうかは状況次第だが。
- 369 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:32:26 ]
- >>364
大問題ってことで軽くググってみたら、 ・配列に対して、delete [] としなかった場合、1個目の要素のみデストラクタが走り、残りの要素は走らない ・確保された領域(配列)は一応開放される(デストラクタで開放されるべき領域は除く)が、 要素数保持のための隠れた確保領域は開放されずに残る ってな、感じかな
- 370 名前:デフォルトの名無しさん [2008/02/23(土) 17:37:02 ]
- 勘違いしてないか?タスクマネージャで確認してみ
#include <stdio.h> main(){ char *ch=new char[200*1024*1024]; getchar(); printf("delete 実行\n"); delete ch; getchar();}
- 371 名前:デフォルトの名無しさん [2008/02/23(土) 17:40:15 ]
- これでも解放するし
#include <stdio.h> main(){ int n; char **ch=new char*[200]; for(n=0;n<200;n++)ch[n]=new char [1024*1024]; getchar(); printf("delete 実行\n"); for(n=0;n<200;n++)delete ch[n]; getchar();}
- 372 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:42:39 ]
- >>331
strch_idx関数に渡すためのcを、main関数のほうで作っておかないとだめかなと考えまして >>332 あまり理解できませんが、なるべくforを使うようにします >>333 消し忘れです ご指摘ありがとうございます >>334 理屈を丁寧に解説していただきありがとうございました >>336を参考にやってみて、できました >>336 ご丁寧にありがとうございました その指針でできました 最後にご丁寧に、教えるのもわずらわしいような初歩的な愚問に答えていただき、ありがとうございました
- 373 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:44:35 ]
- これが初心者歓迎スレの良心。
- 374 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:47:40 ]
- >>370
>>371 特に勘違いしてるところはないと思うが・・・ 要素数を保持する領域はないってことを言いたいのか? 組み込み型にはないけど、クラスにはあるみたいなことが書いてあったんだが
- 375 名前:デフォルトの名無しさん [2008/02/23(土) 17:49:37 ]
- これだと解放しないけど・・・ *xと定義されているなら、deleteを使うのでは? []は**xを解放する場合でしょ
#include <stdio.h> main(){ char **ch=new char*[200]; for(int n=0;n<200;n++)ch[n]=new char [1024*1024]; getchar(); printf("delete 実行\n"); delete[] ch; // delete ch; getchar();}
- 376 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:50:41 ]
- >>369
そもそもnew[]したものをdeleteするとどうなるかは未定義。 そういう挙動になったという話は、たまたまその実装ではそうだったということでしかない。
- 377 名前:231 mailto:sage [2008/02/23(土) 17:51:43 ]
- 今更ですが>>231のようなことをした時に
MyArrayの方はデフォルトコンストラクタか引数を省略できるコンストラクタを 呼んでいるようなのですが、これのタイミングが分かりません。 コンストラクタを通過するそぶりもないし、一応初期化はされてるっぽいし・・・ 特にデストラクタのタイミングも分からないのが心配です。 いつ開放されるんでしょうか?
- 378 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:54:33 ]
- >>377
どこかでnew[]やdelete[]しているだろ?そのときだ。
- 379 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 18:04:57 ]
- >>375
newで割り当てたものはdelete、new[]で割り当てたものはdelete[]で解放します。参照の深さは関係ありません。
- 380 名前:デフォルトの名無しさん [2008/02/23(土) 18:12:04 ]
- 終端をセットしたいのですがどうやったらいいですか? コンパイルが通りません
main(){ char *ch=new char [50]; char **start, **end; start=&ch; //これは成功します end=&&ch[20]; // end=&(ch+20); }
- 381 名前:デフォルトの名無しさん [2008/02/23(土) 18:24:57 ]
- ch と &ch[0]は同じアドレスを表しますよね 20個目のアドレスは、&ch[20]ですよね
それを参照渡ししようとしたら&&ch[20]のはず・・・
- 382 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 18:26:38 ]
- char * chend = &ch[20];
end = &chend;
- 383 名前:デフォルトの名無しさん [2008/02/23(土) 18:33:33 ]
- >>382
コンパイルはできましたが、startと動作が違うようです main(){ char *ch=new char [50]; strcpy(ch,"abcdef"); char **start, **end; start=&ch; char * chend = &ch[20]; end = &chend; printf("%c\n", ((*start+1)[2]) ); printf("%c\n", ((*end-5)[2]) ); }
- 384 名前:デフォルトの名無しさん [2008/02/23(土) 18:34:48 ]
- 間違えました 20個を定義していませんでした
これだとうまくいきました サンクス char * chend = &ch[6]; end = &chend; printf("%c\n", ((*start+1)[2]) ); printf("%c\n", ((*end-5)[2]) );
- 385 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 18:38:15 ]
- なぜ「end = &&ch[20];」というか「end = &(&ch[20]);」ができないかは理解しておいてね。
- 386 名前:デフォルトの名無しさん [2008/02/23(土) 18:41:41 ]
- 再使用できるように動的確保したら複雑になってきました・・・
main(){ char *ch=new char [50]; strcpy(ch,"abcdef"); char **start, **end; start=&ch; char **chend =new char *; *chend=&ch[6]; end = &(*chend); printf("%c\n", ((*end-5)[2]) ); }
- 387 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 18:43:04 ]
- 先ずお前はnewを使うのをやめろ。話はそれからだ。
- 388 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 19:53:27 ]
- これはひどい
- 389 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:04:00 ]
- 何がしたのか全然わからない
- 390 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:04:21 ]
- 何度基礎をやり直せと言ったことか
- 391 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:26:55 ]
- なぜ、再使用しようとすると動的確保することになるのかもわからない。
文章で理由を説明してほしい。
- 392 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:36:55 ]
- なるほど、stringが出来るわけだ
- 393 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:53:56 ]
- おまえらほんと我慢強いよな。感心するよ
俺は>>386と同レベルのコードを保守する羽目になって殺意を覚えた。
- 394 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:00:35 ]
- 我慢強いというか、読んでない
- 395 名前:デフォルトの名無しさん [2008/02/23(土) 21:02:02 ]
- C++の授業で先生が、
int main() { int i; cin>>i; double a[i]; ... というコードはC++では出来ない(やりたいならnewでやるべき)と言われたのですが、 g++とiccではできました。これってだめだけど、gccやiccの拡張機能によって できているのでしょうか?
- 396 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:04:05 ]
- >>395
C++ が変化し続けているだけの話
- 397 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:09:33 ]
- >>395
現状のC++標準規格じゃ無理。C99は可能。 C99サポートしてるコンパイラなら期待してもいい。
- 398 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:11:02 ]
- newも使うべきではないよな。いやnew[]ではなくてstd::vector。
- 399 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:13:17 ]
- C99は正直あんまやらないでほしい
- 400 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:18:40 ]
- 可変引数マクロはマジホシス
- 401 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:24:18 ]
- 0xでおk
- 402 名前:デフォルトの名無しさん [2008/02/23(土) 21:35:03 ]
- おしえてください 下から2行目を動かすとデータが壊れるのですが原因がわかりません
#include <string.h> #include <stdio.h> #include <stdlib.h> typedef struct STRDATA{ char **st; char **end; }strdata; f(strdata x){ printf("%s",*(x.st)); } strconv(strdata *q, char **p){ char **chend =(char **)malloc(sizeof(char **)); q->st=p; *chend=&(*p)[strlen(*p)]; q->end = &(*chend);} strconstconv(strdata *q, char *p){ int n=strlen(p); char *ch=(char *) malloc(n+1); strcpy(ch,p); q->st=&ch; char **chen =(char **)malloc(sizeof(char **)); *chen=&(ch[n]); q->end = &(*chen);} main(){ strdata str; #define STR "abcdefgh" strconstconv(&str, STR); //ここをコメントアウトして一つ下を動かしても平気です //char *ch=new char [50]; strcpy(ch,STR); strconv(&str,&ch); //char *x=new char [1]; ここを動かすとおかしくなります f(str); }
- 403 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:37:15 ]
- もうお前いい加減諦めたら。
ローカル変数のアドレスを関数外に持ち出すな。
- 404 名前:デフォルトの名無しさん [2008/02/23(土) 21:39:05 ]
- char *x=new char [1]; が、なぜstrdata strを書き換えられるんでしょうか?
- 405 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:39:21 ]
- なんかまぁ・・・・・・いろいろとおつかれさん
- 406 名前:402 [2008/02/23(土) 21:45:20 ]
- おなじやつですが短くしました 下から2行目を動かすと壊れるのはなぜでしょうか
#include <string.h> #include <stdio.h> #include <stdlib.h> typedef struct STRDATA{ char **st; char **end; }strdata; f(strdata zzz){ printf("%s",*(zzz.st)); } strconstconv(strdata *q, char *p){ int n=strlen(p); char *ch=(char *) malloc(n+1); char **chen =(char **)malloc(sizeof(char **)); strcpy(ch,p); q->st=&ch; *chen=&(ch[n]); q->end = &(*chen);} main(){ strdata str; strconstconv(&str, "abcdefgh"); // char *test=new char [1]; f(str); }
- 407 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:46:36 ]
- まず変数のスコープを勉強しよう
- 408 名前:402 [2008/02/23(土) 21:48:09 ]
- なぜコメントアウトを外すとデータがこわれますか?
- 409 名前:デフォルトの名無しさん [2008/02/23(土) 21:53:31 ]
- newやmallocの確保は、解放しない限り残るんですよね そのアドレスは参照で受け取っているので問題ないと思うのですが
参照渡しにしてもだめです f(strdata *zzz){ printf("%s",*(zzz->st)); } main(){ strdata str; strconstconv(&str, "abcdefgh"); f(&str); }
- 410 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:54:33 ]
- 基礎からやりなおせよ
- 411 名前:デフォルトの名無しさん [2008/02/23(土) 21:56:58 ]
- ヒントください
- 412 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:57:01 ]
- いいから基礎からやりなおせって。スタックとヒープの概念すら分かってないだろ。
- 413 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:57:11 ]
- >>409
トリップをつけてくれるとあぼーんしやすいのですがいかがでしょうか
- 414 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:00:25 ]
- スタックとかヒープとか、この際関係ないレベルじゃん
- 415 名前:デフォルトの名無しさん [2008/02/23(土) 22:02:39 ]
- より短くしました これでも外すと壊れます なぜですか?
#include <string.h> #include <stdio.h> #include <stdlib.h> typedef struct { char **st; char **end; }strdata; f(strdata *q){ char *ch=(char *) malloc(10); strcpy(ch,"abcdef"); q->st=&ch; } g(strdata *zzz){ printf("%s",*(zzz->st)); } main(){ strdata str; f(&str); //char *test=new char [1]; g(&str); }
- 416 名前:デフォルトの名無しさん [2008/02/23(土) 22:03:36 ]
- >>409
多少手を入れて(int mainとするとか)こっちで動かしてみましたが、ちゃんとabcdefghと表示されました。 でも、newだけc++の機能をつかってるけど、あとは全部(結構年季が入った感じの)cだし、 c++のコンパイラなら、関数の戻り値を指定しないのはダメだと思うし、 mallocとnew は併用したらダメだってどこかで聞いたけどな。 いまいちやろうとしていることの意図がつかめません。 (mallocとnewを併用して、どういう状況でまずいのかしらべようとしているのか) もしc++を勉強しようとしているなら、なにか適当な本とかで勉強するのを勧めます。 Cを上記くらいご存知なら、すぐにC++も使えるようになりますよ。
- 417 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:03:53 ]
- ヒントもなにも>>403がずばり回答してるんだが。
これでもわからないなら、なんでもいいからポインタの無い言語に行ってくれ。 そして帰ってくんな。
- 418 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:08:06 ]
- >>415
なんでお前は答えを貰っても全くレスポンスを返さずに、 そんなヘドロみたいなコードを貼り続けるんだ。 頭沸いてるのか
- 419 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:08:35 ]
- >>415
これなら動く。 #include <string.h> #include <stdio.h> #include <stdlib.h> typedef struct { char *st; char *end; } strdata; void f(strdata *q) { char *ch=(char *)malloc(10); strcpy(ch,"abcdef"); q->st = ch; } void g(strdata *zzz) { printf("%s", zzz->st)); } int main() { strdata str; f(&str); g(&str); return 0; }
- 420 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:11:12 ]
- >>419
おまいやさしいな
- 421 名前:デフォルトの名無しさん [2008/02/23(土) 22:14:15 ]
- >>419
それだと、ポインタは値渡しのため、strに渡した文字列が書き換えられなくなります 削ったのですがこれでも原因が不明です コンパイラはBCC5.5です #include <stdio.h> #include <stdlib.h> typedef struct { char **st; }strdata; f(strdata *q){ char *ch=(char *) malloc(10); ch[0]='X';ch[1]='Y';ch[2]='Z';ch[3]=0; q->st=&ch; } main(){ strdata str; f(&str); //char *test=(char *) malloc(1); printf("%s",*(str.st));}
- 422 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:17:54 ]
- >それだと、ポインタは値渡しのため、strに渡した文字列が書き換えられなくなります
( ゚д゚) ・・・ (つд⊂)ゴシゴシ (;゚д゚) ・・・ (つд⊂)ゴシゴシゴシ _, ._ (;゚ Д゚) …!?
- 423 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:17:55 ]
- 419でどこの文字列がどう書き換えられないっていうんだ言ってみろ
- 424 名前:デフォルトの名無しさん [2008/02/23(土) 22:20:55 ]
- VCCやGCCやDMCでも実行中にエラーになります
#include <stdio.h> #include <stdlib.h> typedef struct { char **st; }strdata; void f(strdata *q){ char *ch=(char *) malloc(10); ch[0]='X';ch[1]='Y';ch[2]='Z';ch[3]=0; q->st=&ch; } int main(){ strdata str; char *test; f(&str); test=(char *)malloc(1); printf("%s",*(str.st)); getchar(); return 0;}
- 425 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:21:34 ]
- >>421
>それだと、ポインタは値渡しのため、strに渡した文字列が書き換えられなくなります wwwwwwwwwwwwwwwwwwwwwww >>419よ、これが現実だwwwwwアホは相手にするなwwwwww
- 426 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:22:15 ]
- ぶっちゃけポインタ全く理解してないだろ。
- 427 名前:421 [2008/02/23(土) 22:26:27 ]
- 誤解していましたすみません
- 428 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:28:05 ]
- さすがに・・・
初心者を抜け出した程度の俺でも酷いと思うw
- 429 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:28:08 ]
- >>424
変数testの用途が不明だったので、削除させてもらった。 #include <stdio.h> #include <stdlib.h> typedef struct { char *st; }strdata; void f(strdata *q) { char *ch = (char *)malloc(10); ch[0] = 'X'; ch[1] = 'Y'; ch[2] = 'Z'; ch[3] = '\0'; //まあ0のままでもいいんだけど q->st = ch; } int main() { strdata str; f(&str); printf("%s", str.st); getchar(); free(str.st); return 0; }
- 430 名前:421 [2008/02/23(土) 22:28:56 ]
- すみません 誤解していませんでした 書き換えられません
#include <string.h> #include <stdio.h> typedef struct { char *st; }strdata; f(strdata *x){ delete x->st; x->st = new char [9]; strcpy(x->st,"++++++"); } main(){ char *ch=NULL; strdata x; x.st=ch; f(&x); printf("%s",ch);}
- 431 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:34:49 ]
- >>430
お前が421や424で書いたコードは >printf("%s",*(str.st)); だったのになぜ >printf("%s",ch); になってるんだ?納得のいく説明を聞こうか?
- 432 名前:デフォルトの名無しさん [2008/02/23(土) 22:34:55 ]
- >>429
int main() { strdata str; f(&str); ←ここで初期化された文字列の内容、長さを変更したいんです あと変数testほ確保しても落ちないようにしたいんです printf("%s", str.st); みなさんは、>>424はまともに動きますか?
- 433 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:37:26 ]
- >>432
動かすまでもなく、まともに動かないのは分かる
- 434 名前:430 [2008/02/23(土) 22:37:28 ]
- >>335>>343>>348>>351がもともとの質問でこれを実現したいんです
- 435 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:37:36 ]
- >>430
printf("%s",ch);をprintf("%s",x.st);とすればいい。 嫌か? じゃあこれでどうだ。 #include <string.h> #include <stdio.h> typedef struct { char *st; } strdata; void f(strdata *x) { delete x->st; x->st = new char[9]; strcpy(x->st,"++++++"); } int main() { char *ch = NULL; strdata x; x.st = ch; f(&x); ch = x.st; printf("%s",ch); delete[] ch; return 0; }
- 436 名前:デフォルトの名無しさん [2008/02/23(土) 22:39:36 ]
- >>433
test=(char *)malloc(1);をはずすと上手くいきます なぜですか
- 437 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:40:58 ]
- >>436
それは上手く動いてるんじゃなくて、たまたま動いてるだけ
- 438 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:41:46 ]
- >>335
をチラ見しかしてないけどそれが動くことがとても不思議。 とりあえず期待する動作はなんなのかを日本語で書いてください。
- 439 名前:デフォルトの名無しさん [2008/02/23(土) 22:42:06 ]
- >>435
それだと始めにchが巨大に確保されていたらメモリーリークになると思うのですが
- 440 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:43:20 ]
- >>436
偶然。 あのコードでは、すでになくなったローカル変数を読み取ろうとしている。 運良くメモリ上に残っていれば、一見正しく動いているように見える。 そのtestの行は、残っていた変数の値を破壊する決定打になったのだろう。
- 441 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:43:21 ]
- >>439
思うだけだ
- 442 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:44:24 ]
- 見る気もしない。
高速スクロールで華麗にスルー。 違うお題ないの?
- 443 名前:デフォルトの名無しさん [2008/02/23(土) 22:46:11 ]
- Perlで言うところの
use LWP::Simple; sub foo{ return get('ttp://hoge.com/fuga.zip'); } これをVC++で極力シンプルにやるにはどうすればいいでしょうか? 環境は以下のとおりです。 VisualC++.net2003 Standard managedC++不使用 MFC不使用 ATL/WTL使用 STL/Boost使用
- 444 名前:デフォルトの名無しさん [2008/02/23(土) 22:46:57 ]
- >>438
バイナリ文字列 (\0を含む) の初めと終わりを構造体で関数に渡して、バイナリ文字列の内容、長さを書き換えたいんです
- 445 名前:444 [2008/02/23(土) 22:48:45 ]
- 純粋なC言語だけでそれを実現したいんです
- 446 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:49:59 ]
- >>445
… 一般的に知られている C言語の定義とは違うものを扱ってらっしゃるのですね
- 447 名前:デフォルトの名無しさん [2008/02/23(土) 22:50:53 ]
- 最終的には、C言語のみにしますけど今は実験段階なので・・・
- 448 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:52:02 ]
- >>444
なんでchとかtestとか別の変数が出てくるの? 構造体のまま扱い続ければいいでしょ。
- 449 名前:443 mailto:sage [2008/02/23(土) 22:54:26 ]
- >>443
単純にC++でネット上のものをダウンロードさせるには どうすればいいですか?って聞くべきだった orz
- 450 名前:デフォルトの名無しさん [2008/02/23(土) 22:55:14 ]
- chは現物の文字列です この初めと終わりのアドレスを構造体で渡して変化させるようにしたいんです
- 451 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:55:32 ]
- 本でも読んで出直してこいよ
本格的に他人に頼りたいなら金でも払え
- 452 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 22:59:15 ]
- 現物の文字列ってなんだよ
ただのポインタだろ str.st と等価だ
- 453 名前:デフォルトの名無しさん [2008/02/23(土) 23:01:55 ]
- たとえば、
char *ch=new char [100]; strcpy(ch, "---------"); という文字列に対して、その先頭と後方のアドレスを関数に渡して、関数側で書き換えられるようにしたいんです
- 454 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:04:50 ]
- 何にそんなもんをつかうんかわからんが
とりあえずそんなことを考える前に 入門書なりきちんと読め。 たのむから
- 455 名前:デフォルトの名無しさん [2008/02/23(土) 23:09:26 ]
- 初めの文字列が200M程度確保されていたとして作業領域も200M使うとします
このとき初めの文字列を解放するか、上書きすれば最高でも400Mしかメモリを使いません しかし、それができずに返却すると最大 200M + 200M + 200M必要になります
- 456 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:11:03 ]
- >>449
ソケット使ってカリカリやるしか思いつかん
- 457 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:11:12 ]
- >>443
手軽さならWinInet 真剣にやるならWinsock
|

|