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


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

C言語なら俺に聞け(入門編)Part 95



1 名前:デフォルトの名無しさん [2012/01/13(金) 22:05:06.14 ]
C言語の*入門者*向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 94
toro.2ch.net/test/read.cgi/tech/1324648274/
★過去スレ
makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 155代目
toro.2ch.net/test/read.cgi/tech/1325685876/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
codepad.org/

2 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 23:59:58.19 ]
野田改造内閣に早速疑惑浮上

@aritayoshifu 有田芳生
捜査当局が内偵を続けている農水疑惑。詳細な怪文書まで出回っている。3億円の
行方はどこに?

@minorucchu ジャーナリスト 田中稔
野田改造内閣を揺るがす、農水省3億円スキャンダルの怪文書。二人の議員名が浮上。
34分前 webから
https://twitter.com/#!/minorucchu/status/157687110562881537

鹿野と筒井らしい
自公は問責も視野に調査開始だって

3 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 00:01:34.02 ]
オイ俺のコピペ脳!まで読んだ。

4 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 10:53:25.48 ]

int main() {
 char* str1[10];   //定義しただけで初期化していない。つまり文字列は格納されていない。

 func1( &str );
}


void func1( char* str ) {
 char* inStr;

 str = "test data";
 return ;
}
 

質問なんだが。
なぜ、きちんとstrに文字データが格納されるんだろうか?



5 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 11:01:18.98 ]
タブスペースで書き込んじまった

int main() {
 char* str1[10];   //定義しただけで初期化していない。つまり文字列は格納されていない。

 func1( &str );
}


void func1( char* str ) {
 char* inStr = "test";
 inStr = anotherFunc() ;
 str = inStr + 1 ;
 return ;
}
 

質問なんだが。
なぜ、きちんとstrに文字データが格納されるんだろうか?

main 関数でstr のポインタ領域は確保されているが、その参照先の文字列領域は未確保。
func1にとんだ先では、自動変数inStr に文字列が格納されており、そのポインタを渡すことでstrの中身に具体的なポインタが入る。
func1内では、str のポインタの指し示す先は自動変数inStrと同じポインタであり、参照できて当然。

ところが、return すると、自動変数inStr の内容はスタックを戻すことにより開放されている。
return された後にmainにてstrを参照しても全く問題ないし、キチンと値が格納されている。

値が参照できるのは、たまたまナノか?
この操作は問題ない?



6 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 11:03:11.76 ]
まずはコンパイルが通るか自分で確認してから書き込め

7 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 11:10:20.15 ]
最初のスタックへのアドレスがまずさ迷い人に成って5ではfunc1のリテラルも全く無意味になって更にアナザの返値の先頭バイトまで無意味に成ってる。

8 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 11:16:53.05 ]
>>6
あいよ。

int main(){
 char* str[10];   //定義しただけで初期化していない。つまり文字列は格納されていない。

 func1( str );
}



void func1(char* str[] ) {
 char* inStr;
 inStr = anotherFunc() ;
 str[1] = inStr + 1 ;
 return ;
}

char* anotherFunc(){
 return (char*)"test";
}


9 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 11:17:18.80 ]
>int main() {
> char* str1[10];   //定義しただけで初期化していない。つまり文字列は格納されていない。
>
> func1( &str );
>}
変数名ちゃうやん。

>void func1( char* str ) {

型ちゃうやん。(char ** → char *)



10 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 11:18:37.34 ]
>>7
>更にアナザの返値の先頭バイトまで無意味に成ってる
戻り値として、「est」が欲しいのでそうなってる。



11 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 11:19:33.12 ]
str[1]="test"+1;

12 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 11:27:47.89 ]
>>11
anotherFunc の return は、例えば「Content-Type: application/x-javascript」

その中で「application/x-javascript」を取り出したい。

13 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 11:34:46.94 ]
char* anotherFunc(){
 return (char*)"test";
}

がもし、

char* anotherFunc(){
 return (const static char*)"test";
}

なら、BSSなり、テキスト領域なりに格納されると思う。
テキスト領域かな?

でも

char* anotherFunc(){
 ・・・
 何がし処理
 ・・・
 return buf ; //bufには「Content-Type: application/x-javascript」文字列が格納
}
であるならコンパイルエラー(local address云々)

ここまでなら分かる。


14 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 11:59:47.56 ]
"test"はプログラムをメモリ上に読み込んだ時点で確保されてる。
開放されるのはプログラム終了時。

return (char*)"test";

char *inStr = "test";
return inStr;
も、書き込みをしなければ問題ない。

但し
char inStr[] = "test";
return inStr;
は駄目。


15 名前:o mailto:sage [2012/01/14(土) 12:00:08.37 ]
ところが、>>8 における inStr はfunc1のスタックに積まれる。

いくら、str[1]にポインタを代入したところで、参照しているのはfunc1のスタック上にあるinStrのアドレスである。
func1がリターンしてしまうと、スタックは破棄( ただ単にゼロクリアしていないだけ)な気がする。

結局うまく言っているように見えるのはスタックが破壊されていないから?かな、と。

16 名前:o mailto:sage [2012/01/14(土) 12:05:30.40 ]
>>14
返信ありがと。

str[1]に書き込んでmainで参照するにはどうするのが良い?

17 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 12:08:12.05 ]
ならないよ。
>8 の inStrはいわばメモ書き。
"test"の場所が書かれてるだけ。
str[1]に内容をコピー(1足してるけど)した後に消える。


住所書かれてるメモ紙を捨てたらその住所が消滅するわけじゃあるまい?

18 名前:o mailto:sage [2012/01/14(土) 12:10:32.04 ]
あ、
念のため・・・

char* str[10] は、10個の不定長の文字列を格納する10個のポインタです。
最終目的は、sub関数から不定長の文字列を設定したい、と言うことです。

19 名前:o mailto:sage [2012/01/14(土) 12:14:47.41 ]
>>17
最終的に聞きたいのは、スタティックなリテラル値ではなく、ダイナミックな変数の値です。

つまり、
inStrの具体的な値を、str[1]に入れ込むためにはどうしたらよいのか?と言うことです。

20 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 12:14:47.84 ]
【話題】女子にイラッとされる「理系男子特有の話し方」9パターン★2

【1】「要するに」と他人の話もまとめてしまう
【2】「違う」と小さな間違いでもいちいち訂正する
【3】「化学反応だから」などロマンチックなことにも根拠を述べる
【4】「仮に」など自分の専門分野でたとえたがる
【5】「具体的には?」と曖昧な表現でなく数字を知りたがる
【6】「データがあるから」と他人の意見を受け入れない
【7】「わかる?」と難しい説明の後で上から目線の確認をする
【8】「ありえない」など決めつけて断言する
【9】「だから?」とオチを先に聞きたがる


要するに馬鹿しか女子とはお話出来ないということだな



21 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 12:27:51.39 ]
1, 2, 7, 8は理系文系関係なく糞爺にも当てはまるw

22 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 12:35:19.42 ]
>19

>8 の
>str[1] = inStr + 1 ;
でいいんじゃないの?


23 名前:o mailto:sage [2012/01/14(土) 12:40:46.42 ]
>>22
うむむ。

分からないのは、

「inStr+1」で指定されたアドレスは、func1がreturnされると開放されるメモリアドレスじゃないですか?
そうすると、そのアドレスを入れ込んだstr[1]の内容(=アドレス)も開放されてしかるべきアドレスじゃないかと?

24 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 12:43:49.29 ]
17を100回読め

25 名前:o mailto:sage [2012/01/14(土) 12:43:50.36 ]
コンパイルエラーでできないんだけれども、こんなことをやりたいんだと言うことです。

*( str[1] ) = *( inStr + 1) ;

26 名前:o mailto:sage [2012/01/14(土) 12:46:49.28 ]
>>24
20回読みましたデス。足りないかな?

スタティックなリテラル値の話ではなく、自動変数に格納されている値を戻したいと言うことですが・・・
戻すとき、リターン値はエラーコードで使用されていますのでリターンで戻すのは不可です。

なのでfunc1にポインタで渡して、その内容を更新したい、ということです。
もう20回読んでみます。

27 名前:o mailto:sage [2012/01/14(土) 12:51:23.74 ]
後だしと言われるのを避けるために、実際のコードの説明をしますが、

実際にはfunc1 には構造体を渡しています。
正確には構造体のアドレスを渡してます。

構造体は

typedef struct s{
char* field[MaxHeaderNum];
char* attrib[MaxHeaderNum];
}S;

28 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 12:53:18.74 ]
こうか?
str[1] = (char *)malloc(strlen(inStr + 1)+1) ;
if(!str[1]){
/*エラー処理*/
}
strcpy( str[1] , inStr + 1);

29 名前:o mailto:sage [2012/01/14(土) 13:01:30.86 ]
>>28
すんばらしい。
そういうことです。

はじめはそのように書いていたのですが、
非常に頻繁に呼ばれることと、
mainのなかでいつfreeすればよいのかが不定であることや、
関数を変にまたがってしまう、

などなどの複雑な問題により諦めてしまいました。
で、コードをシンプルにする方法でのアプローチでコーディングしなおしてます。

ヒープを使わなければ無利なのでしょうか?

30 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 13:05:33.73 ]
とりあえず
char* str[10]
をゼロクリアしてから使え。

あとは終了時とmallocする前にNULLで無ければfreeするような処理書いとけばいいんじゃね?



31 名前:o mailto:sage [2012/01/14(土) 13:16:46.64 ]
>>30
だんけ

ってことは、>>8はたまたまうまく行っているだけってことかな?

32 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 13:48:33.33 ]
長引いてるな…

>スタティックなリテラル値の話ではなく、自動変数に格納されている値を戻したいと言うことですが・・・

自動変数に〜というなら、malloc でヒープに領域を確保して、外部で解放するしかない。
自動で解放して欲しいのなら、C++ に行ってデストラクタなり std::string なりに頼る。
>>8 はスタティックなリテラルのポインタを返してるので、たまたまではなく正常に動作する。ただし貴方の求めているものではない。

33 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 14:04:28.58 ]
メールとかの通信関係の処理か?
クラス化の設計とか楽しそうだなぁ。

34 名前:o mailto:sage [2012/01/14(土) 16:19:51.99 ]
>>32
ありがと。
参考になります。

>>33
bingo
HTTPだけど。


移植性を考えてて、ANSI-Cベースで書いているところが、またそれはそれで、制限が多いw

35 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 16:39:47.31 ]
>>15
> 参照しているのはfunc1のスタック上にあるinStrのアドレスである。
これが間違えていることには気づいているのだろうか
inStrのアドレスは&inStrな。

36 名前:o mailto:sage [2012/01/14(土) 16:41:00.07 ]
>>35
宣言が、

char* inStr だけれども?

37 名前:デフォルトの名無しさん [2012/01/14(土) 16:44:53.84 ]

反日ネット工作員
朝日新聞社→社員約300人
民主党とその取り巻きの資金が入った反日工作会社→数社約450人

朝日新聞の社員は捕まった49歳の編集者を含め新聞記事を書く合間に2chを荒らしている程度とみられているが
民主党が用意した反日工作会社はほぼ24時間体制で工作を行っている
工作範囲は民主党が予め工作費を流している2ch、ニコニコ動画を中心にyoutube、個人のブログなどである。



38 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 17:33:17.30 ]
>19
>inStrの具体的な値を、str[1]に入れ込むためにはどうしたらよいのか?と言うことです。

「inStrの具体的な値」と言ったらinStrに代入されてる"test"のアドレス値のことだろ。
それが
>28
が正解というなら
「inStrのポインタが示す先の文字列をコピーして、str[1]に入れ込むためにはどうしたらよいのか?」
と言うべきだろ。

まぁ、そう言えるぐらい理解できてるなら質問もしてこないだろうが。

39 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 17:53:22.36 ]
>>36
だから?

40 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 18:06:19.42 ]
sizeof(char *) == sizeof(int)
なら

void func1(char* str[] ) {
 int inStr;
 inStr = (int)anotherFunc() ;
 str[1] = (char *)(inStr + sizeof(char)) ;
 return ;
}
としても同じ結果なんだよ。



41 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 18:29:39.07 ]
intptr_t 使えよ

42 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 18:47:25.84 ]
>>40
日記ならチラシに

43 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 19:56:46.82 ]
別名便所の壁の2chがチラシより上とな!?

44 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 00:10:00.07 ]
便所の壁はみんなの目に触れるからな

45 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 00:33:43.37 ]
都内じゃ1500枚ほどチラシが貼られたらしいな。

46 名前:o mailto:sage [2012/01/15(日) 07:51:27.88 ]
>>38
>「inStrのポインタが示す先の文字列をコピーして、str[1]に入れ込むためにはどうしたらよいのか?」
コピーして
の部分が全く違う。

コピーしてよいのなら、解決法はいくつでもある。


47 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 10:35:38.71 ]
>46

>28
>strcpy( str[1] , inStr + 1);
コピーしてるやん。
違うというなら正しいソース書いてみてよ。

48 名前:o mailto:sage [2012/01/15(日) 11:21:44.71 ]
>>47
多分、言いたいことの1/1000も伝わっていないんだと思う。

バッファから下ろしてきたデータは一時的にしかるべき場所に「コピーして」配置される。


俺の言っているのは、
そのしかるべき場所のポインタを渡すだけにしたいんだが、何とかならんのんかの?
という質問だが、

君は「さらに」、コピーしたらええやん、

と言っている。

49 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 11:29:50.94 ]
その「しかるべき場所」はグローバルか何かで確保されてたり消える心配がないのであれば
そのポインタを渡すだけでいいじゃん

50 名前:o mailto:sage [2012/01/15(日) 11:33:02.67 ]
ところで、そもそも、コピーができるのか?という問題も、ある。

構造体は

typedef struct s{
 char* field[MaxHeaderNum];
 char* attrib[MaxHeaderNum];
}S;

ストリームデータがこのようになっているとき、(¥区切り文字)

aaaaaaa\bbbbbbbbbb\cccc\dd\eeeeeeeeeee\
     ↑       ↑  ↑ ↑        ↑
attrib[1] attrib[2] attrib[3] attrib[4] attrib[5]
のポインタが入る。

コピーできるん?????
コピーじゃなくて、もう一度strstrあたりできりなおさんとまずくない?????

ま、さくっとコピーできるんだったら、謝る



51 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 11:35:48.32 ]
何を何にコピーすることを言ってるのか?
区切り文字が'\'というのは例として挙げただけ?

52 名前:o mailto:sage [2012/01/15(日) 11:38:53.01 ]
>>49
コーディング規約により、グローバル宣言ができないんですヨ

・局所的にしか利用されず
・他スレッドからの参照に問題あり
・アクセスコントロールに関与する
・マルチスレッド対応の場合
などなど。

53 名前:o mailto:sage [2012/01/15(日) 11:39:23.14 ]
>>51
そ。

\r\n = ¥
としただけ

54 名前:デフォルトの名無しさん [2012/01/15(日) 12:12:25.05 ]
仕事上のコーディング方法を2chで質問かよwww

55 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 12:26:55.36 ]
みんなすげーな
オレには何を言いたいのか全然分からん

56 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 12:28:45.50 ]
民主党が惨敗した参院選直前の政党支持率(2010年7月11日投票)

FNN 2010年7月4日
民主党 29.9% 自民党 16.3%
ttp://sankei.jp.msn.com/politics/policy/100706/plc1007060530003-n1.htm
ttp://www.fnn-news.com/archives/yoron/inquiry100705.html

マスコミに、ダマされるなよ。



57 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 12:30:22.44 ]
この子の関わったソフトが載った製品は買いたくないと思ってしまうな
@>何を何にコピーすることを言ってるのか? への回答は?
A「しかるべき領域」はスタック上?ヒープ上?それ以外?スタック上ならほぼコピーするしかない
B「しかるべき領域」は書き換えてもよい?書き換えたらダメなのであればさらにコピーするしかない

58 名前:o mailto:sage [2012/01/15(日) 12:30:27.97 ]
>>54
チートツールなんだが、なぜに仕事だと思うのかなぁwww

59 名前:o mailto:sage [2012/01/15(日) 12:34:36.28 ]
>>57
>この子の関わったソフトが載った製品は買いたくないと思ってしまうな
売り出されたら驚いちゃうんちゃう?

>@>何を何にコピーすることを言ってるのか? への回答は?
機種依存文字はどうかと思うけど。
コピーと言われたから、それを使っただけ。

>A「しかるべき領域」はスタック上?ヒープ上?それ以外?スタック上ならほぼコピーするしかない
スタック上。
main関数のスタックに積んでいればOKでしょ?
違うの???

>B「しかるべき領域」は書き換えてもよい?書き換えたらダメなのであればさらにコピーするしかない
書き換えても良いの意味が分からん。
書き換えたらダメってことは、参照もダメってこと???
意味が不明です。

60 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 12:35:48.48 ]
>>59
お前が意味不明だな。

手繰るの面倒だからここでもう一度整理して新規に質問しなおせ。



61 名前:o mailto:sage [2012/01/15(日) 12:50:30.70 ]
>>60
君のおかげで整理できたよ。


聞きたい内容は、

呼び出し先の呼び出し先から、大元のスタックにある文字列を直接変更できるか?

ってこったな。
孫関数には、ポインタのポインタなら渡せる、と言う条件でな。

62 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 12:52:31.54 ]
>>61
その質問の答えは、できる、だ。

63 名前:o mailto:sage [2012/01/15(日) 12:53:35.05 ]
細かい条件を列挙する。


・データはストリームで落とされる。
・孫関数にはポインタのポインタが渡される
・文字列の長さは不定長
・区切り文字がある文字列
・ストリームは、孫関数で処理される

この条件で親のスタックに詰まれた文字列を孫から操作できるかどうか?

んだな。

64 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 12:54:05.71 ]
ちゃんと質問できるようになるまで何年もかかりそうだな
義務教育の間何やってたんだか

65 名前:o mailto:sage [2012/01/15(日) 12:55:10.92 ]
おっと。
追加があった

・データはストリームで落とされる。
・孫関数にはポインタのポインタが渡される
・文字列の長さは不定長
・区切り文字がある文字列
・ストリームは、孫関数で処理される
・staticは使えない

66 名前:o mailto:sage [2012/01/15(日) 12:56:52.04 ]
>>64
まあ、そんなことより、

>>52が仕事上のタスクだと思う方が驚きだけど。
指示されないと何もできないんかなぁ。
もしくは何でもグローバル宣言すりゃいいと思っているのかなぁ。

普通に個人のコーディング規約に含まれる常識的な内容だと思っていたんだが、これも違うのか?

67 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:00:25.15 ]
>>66
>>65 を読む限りお前の考えたものではないだろうし
バカみたいな社内用語?で伝わると思ってるのがおかしい

68 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:00:50.73 ]
>>65
わけのわからない条件は関係なく、元のスタック上の文字列のポインタが
わかるなら当然できるだろ。
なんでできないとか思うんだろ。
ちなみに、スタックとかストリームとか、Cには関係ないから。

69 名前:o mailto:sage [2012/01/15(日) 13:12:04.29 ]
>>68
ストリームデータは軽く64kを超えるんだが、

mainで

char streamData[131072]

とか宣言しちゃうの?
スマートじゃない気がするけどw
後々func1がスレッドで動くようになるんだし、mainがdllmainになるんだが、
どう見てもそりゃスマートとは言いがたいと思うんだけど、どうだろうか?

70 名前:o mailto:sage [2012/01/15(日) 13:13:45.46 ]
>>67
こちとら、素人だし、
チートツールの作成を企業が許可するとも思えんし、

>普通に個人のコーディング規約に含まれる常識的な内容
だと思うんだけど、違うのか?



71 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:16:07.60 ]
整理して質問しろと言っただろ。
> 呼び出し先の呼び出し先から、大元のスタックにある文字列を直接変更できるか?
できる。

もう一度だけチャンスをやる。
整理して1レスで質問しろ。

72 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:16:59.99 ]
>>61できたよcodepad.org/Q33HWUEa

73 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:18:36.84 ]
>>70
チートツール作るなんてことを言ってるバカに協力しねーよ

74 名前:o mailto:sage [2012/01/15(日) 13:19:03.47 ]
>>71
>できる。

こういうことだろ?
>>69


75 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:20:06.56 ]
どういうことだよ。
お前、頭腐ってるわ。

76 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:21:02.62 ]
o君の考えるスタックとは何を指しているのかね?

77 名前:o mailto:sage [2012/01/15(日) 13:21:07.96 ]
>>72
f2を実行しないと、str[]の大きさが分からないんだけど、それでも大丈夫ってこと?
少なくとも512byteは確実に超えるんだけど。

78 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:22:09.28 ]
ここまで日本語が通じないのも珍しいな。
いや、そうでもないか。

79 名前:o mailto:sage [2012/01/15(日) 13:22:30.21 ]
>>75

>>69以外に方法があるなら、丁重に謝るよ。

80 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:24:14.16 ]
>>79
お前の思い込みなんて人にはわからないんだよ。
だからお前のことを何も知らない普通の人間にわかるように整理して
1レスにまとめて質問してみろよ。



81 名前:o mailto:sage [2012/01/15(日) 13:24:59.66 ]
>>76
関数が呼び出されたことにより確保される、SP、ReturnAddressと自動変数のかまたり

82 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:26:10.30 ]
スタックのサイズが心配ならスタックを拡張するなりヒープを使うなり
すればいいだけだろ。

83 名前:o mailto:sage [2012/01/15(日) 13:27:07.83 ]
>>80

あいよ。

聞きたい内容は、

呼び出し先の呼び出し先から、大元のスタックにある文字列を直接変更できるか?
条件は次の通り
・データはストリームで落とされる。
・孫関数にはポインタのポインタが渡される
・文字列の長さは不定長
・区切り文字がある文字列
・ストリームは、孫関数で処理される
・staticは使えない



84 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:28:38.77 ]
だから、ストリームて何だよ。
思い込みハゲしいなまったく。

85 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:29:17.88 ]
文字列を直接変更できるかどうかに長さや区切り文字は関係ないだろ。

86 名前:o mailto:sage [2012/01/15(日) 13:31:05.93 ]
>>84
不定長のデータ、でよいよ。

87 名前:o mailto:sage [2012/01/15(日) 13:32:15.62 ]
>>85

>>72のコードで、512byteのデータをどうやって変更するの?

88 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:33:29.91 ]
またか。
その512byteのデータと>>72がどう関係するんだよ。

89 名前:o mailto:sage [2012/01/15(日) 13:36:36.09 ]
>>88
void f2(char* str){
str[500]='\r';
str[501]='\n';
}

ができるんだったら、何も言わんよ

90 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:37:19.50 ]
>>89
じゃぁ何も言うな。



91 名前:o mailto:sage [2012/01/15(日) 13:38:41.03 ]
ああ、

void f2(char* str){
str[131070]='\r';
str[131071]='\n';
}

ができるんだったら何も言わんよwww

92 名前:o mailto:sage [2012/01/15(日) 13:38:58.70 ]
>>90
エラーが出るんですけどwww

93 名前:o mailto:sage [2012/01/15(日) 13:40:11.55 ]
そりゃそうだわな。

str[10] と宣言しているのに、
str[131070]にアクセスしているんだもんね。

>>90は、そんなことも分からないの?

94 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:42:43.17 ]
何も言うなと言ってるだろ。

95 名前:o mailto:sage [2012/01/15(日) 13:47:33.40 ]
>>94
君は、回答する前に、こっちを読んで勉強した方が良いと思うよ。
www.kumei.ne.jp/c_lang/intro/no_07.htm

宣言した数より大きな領域にアクセスさせるのは危険だよ。
書き込みなんかしたら、スタック壊しちゃうからね。
気をつけたほうが良いよ。

96 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:48:48.34 ]
また、えらく拗らせちゃってるんだね。
スタックのサイズが心配なら512KBをヒープに確保してそれを渡せばいいだけだろ。
まわりの人も大変だろうな。

97 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:49:32.86 ]
無能な働き者ってこの質問主の様な奴の事なんだろうな。

98 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:50:59.22 ]
>>95
>宣言した数より大きな領域にアクセスさせるのは危険だよ。

常識で分かることは言う必要がない。

99 名前:デフォルトの名無しさん [2012/01/15(日) 13:53:40.36 ]
無能な働き者。これは処刑するしかない。


100 名前:デフォルトの名無しさん mailto:sage [2012/01/15(日) 13:56:50.88 ]
ちょっとよくわからないのが
大元がmainだとして
「大元のスタックにある文字列」って
>mainで
>char streamData[131072]
以外にどうやって定義するの?








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

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

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