- 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
- 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
- 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 ]
- ポインタ変数が消滅するのはわかります
関数での、初期化と書き換えをする方法がわかりたいです
|

|