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


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

C言語なら俺に聞け(入門篇) Part 17



1 名前:デフォルトの名無しさん mailto:age [2007/07/24(火) 23:17:11 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 16
pc11.2ch.net/test/read.cgi/tech/1184003625/

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 93代目
pc11.2ch.net/test/read.cgi/tech/1184506311/

129 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 00:56:30 ]
>>127
普通のコンパイラを普通に使えば
コンパイラの拡張機能として省略可能にしてあることが多いから
問題が起こることは無いんだろう。

130 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 01:01:36 ]
>>129
いや、拡張機能じゃないでしょ。
ansi互換のオプションとかでコンパイルできるし。



131 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 01:04:10 ]
>>129
>コンパイラの拡張機能として省略可能にしてあることが多いから 

どこのコンパイラ?


132 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 01:34:27 ]
>>96
ありがとうございます。

なぜか自分の方だけはいつまでもできなくて
今まで唸っていたのですが、iとjが同じになっていていました。

133 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 01:57:05 ]
ていてい!

134 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 02:16:45 ]
>>127
つまりプログラム自体は未定義でないということでは?

135 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 08:41:33 ]
>>130
戻り値が 0 になるとは限らないけどな。

136 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 08:45:55 ]
まとめ

1. main 関数で return を省略する事は可能。しかし、コンパイラによっては警告が出る可能性はある。
2. しかし、C89 の場合は戻り値未定義であり、0 が返るとは限らない。この意味で、return 0; の省略は不可能と言える。
3. C99 や C++ でなら 0 が返る事が保証される。つまり、return 0; の省略は可能である。

137 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:15:13 ]
もう一つ。
関数の戻り値の型はcでは省略可能。その場合、intと仮定される。
main()に関しては、void(=戻り値なし)としている例が散見されるが厳密には処理系依存。
大抵の処理系で許容されているが、その場合コマンドインタプリタへの引渡し値が0になる保障は無い。



138 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:25:02 ]
>>137
C99では、関数宣言で戻り値の型の省略ができなくなったはず。

139 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:27:45 ]
>>138
>cでは

140 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:44:20 ]
C99 が C ではないという口ぶりネ。
そう言いたくなる気持ちは分かるけど。

141 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:50:20 ]
C99なんてCじゃないやい!
とか、余計な方向へ持っていこうとするテスト(って懐かしいなぉぃ)


142 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:58:04 ]
コマンドインタプリタなんて概念は C にはないということもつっこんでいいのかな。

143 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 12:49:21 ]
>>136
> 2. しかし、C89 の場合は戻り値未定義であり、0 が返るとは限らない。この意味で、return 0; の省略は不可能と言える。 

動作が未定義じゃなくて、リターン値が未定義なだけだから、省略は可能。




144 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 12:51:03 ]
>>143
もっと読解力をつけた方がいい。

145 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 12:54:21 ]
>>144
>>143の理解でまったく問題ありません。

146 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 13:02:56 ]
uploader.fam.cx/img/u13877.png

147 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 13:05:23 ]
>>146
それが何か?



148 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 13:38:29 ]
>>145
return 0; を期待して return を省略する事はできない、と言ってるんだよ。

149 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 13:39:53 ]
main が未定義値を返した時の動作が未定義なら、
return を省略する事はできないと言える。
で、どうなんだ?

150 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 13:55:00 ]
>>148
かなり前から、リターン値は未定という前提で、話は進んでます。

>>149
リターン値は未定義でも、動作は未定義じゃないよ。

151 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 15:51:08 ]
どうせこうなるんならめんどくても書いたほうがいいと思う初心者だが、
プロはやっぱり出来る限り省略しないといけないぐらい(納期とか)厳しいんだろうか

152 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 15:54:16 ]
逆だな、普通に書いておくもんだ。

153 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 16:09:10 ]
return 0;
を書くことで時間が足りなくなることなんてまずないだろw

154 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 16:37:20 ]
>>150
> 2. しかし、C89 の場合は戻り値未定義であり、0 が返るとは限らない。この意味で、return 0; の省略は不可能と言える。

> return 0; を期待して return を省略する事はできない、と言ってるんだよ。
ということ。
リターン値が未定だからこそ、そうなる。

155 名前:151 mailto:sage [2007/07/28(土) 16:38:56 ]
いやでもほら、プロの悲惨な現場、って感じの読み物とか時々読んで鬱になるわけだけど、
そこで数万行のコードの話とか出るじゃん
チリも積もれば山となるのかなーと

どちらにせよ初心者が省略なんて覚えたらロクなことにならなそうなんでちゃんと書こうと思った

156 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 16:41:44 ]
ソースコードが何万行もあってもmain関数が何万個もあるわけじゃないだろw

157 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 16:43:29 ]
いやだって、プログラム単体ならmain()なんて一個しかないわけだし、
複数プログラムを連携させるようなアプリケーションなら戻り値は必要になるし、
どっちにしても省略するメリットなんて無いよ。
#行単価なんてしょうもない契約だったら尚更省略しないだろうし。



158 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 16:45:26 ]
そういえばmain関数の話だった
俺アホス

159 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 17:06:30 ]
return 0; なんて1秒もかからんちん

160 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 18:07:53 ]
return 0 つー、正常終了なら0を返すという決まりは
UNIXLinuxシステムの依存ものだから
exit(EXIT_SUCCESS); を薦めておく

161 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 18:09:50 ]
EXIT_SUCCESSが0であることも規格で決まってなかったっけ?

162 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 20:27:13 ]
決まってる。
main 関数の戻り値は 0 は正常終了、1 は異常終了、
その他は処理系定義という形で規定されている。

163 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 20:37:44 ]
main の戻り値 = プログラムがその呼び出し元にどういう値を返すか ではないからな。

環境依存の部分は main から戻ったあとで処理系が勝手にやってくれる。

164 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 20:48:04 ]
C99を使えばmainのreturn 0;は省略できるのに。

165 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 20:57:21 ]
無限ループに突入したところに恐縮ながら質問するぜ

while( !feof(fp) ) {
 fgetc(fp);
 byte++;
}

で何バイトか計算するんだけど、実際より1バイト大きくなるのはなんでだぜ?
と書いてて気付いたが前判定だから最後のインクリメントが一回分余計なのかな?

166 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 21:08:26 ]
>>165
fgetc(fp); で最後の一文字を読み込んとすると今はEOFの場所にあるわけだが
その状態でfeof(fp)を呼び出してもEOFを検出しない
現在EOFにある状態でfgetc(fp);を呼び出して初めてfeof(fp)は0以外を返す

while( fgetc(fp)!=EOF ) {
 byte++;
}
にすればよいかと

167 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 21:09:12 ]
>>165
feofはファイルの最後に来たら0返すんじゃなくて
ファイルの最後(EOF)の読み込み終わったら0返すんじゃなかったっけ?
あとfseekとftell使ってないのはループの仮定でなんか処理入れてるから?



168 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 21:21:53 ]
>>151
仕事のときには書いたほうがいいよ。
>>96みたいなコードに、return省略するなってツッコミ入れるやつって、
単に揚げ足とりたいだけなんだよ。
returnとfclose()の省略はめっちゃ釣れる書き方だな。
べつに釣ろうと思って書いてるわけじゃないけど。


169 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 21:23:28 ]
>>166-167
なるほど…
うーん難しい

170 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 21:30:11 ]
>>167
追記
その二つを使っていないのはとても簡単な理由
まだ知らないからだ

開く・閉じる・EOF検知・エラー検知の関数の解説が終わって練習問題にあった

171 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 21:39:57 ]
ということは、

/* f1の内容をtempにコピー */

while( !feof(f1) ) {
ch = fgetc(f1);
if( !feof(f1) ) fputc(ch, temp);
}

で判定が重複してるのも同じ理由?
ものすごく使いづらい気がするんですが…

172 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 21:41:46 ]
そもそもファイルの終端を検出するのに
feofはあまり使わない気がするんだが。
普通入出力関数の戻り値で判定できるし。

173 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 21:44:43 ]
feofなんて知らなかった

174 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 21:46:41 ]
>>171
こういうふうに書いてみるとか。

while (1) {
  ch = fgetc(f1);
  if (feof(f1))
    break;
  fputc(ch, temp);
}

ループに突入する前にf1のリードが入ってると、>>171と動作がちがっちゃうけど。

175 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 21:50:44 ]
ちょっと調べてみるとやっぱり他の処理と組み合わせるなら>>165のようにしたほうがいいって書いてあるな…

しかも解答はあくまでコードだけで説明ないからわからん
危うく\(^o^)/オテアゲ

回答者感謝

176 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 21:53:31 ]
fgetc()は、エラーとファイル終わりでEOFを返すとあるけど、
feof()はferror()と別関数になってるね。
fgetc()がエラーで、EOFを返すような場合、feof()でループの終了判定してると、
無限ループになったりしないのだろうか。

177 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 22:13:05 ]
しないだろ。



178 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 22:20:44 ]
でも可能性は低いだろうけど
while(!feof(fp))
{
ch=fgetc(fp);
if(ch!=EOF) fputc(ch,fp);
}
ってコードがあったとして fgetc()がエラーでEOF返し続けるといつまでたっても !feof(fp) が偽にならず
無限ループになるんじゃない?

179 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 22:23:25 ]
よく見たらアンカおかしかった

>>175
× >>165
○ >>166

おかげでようやく次に進めました
改めて感謝

180 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 22:28:02 ]
>>177
ためしてみたら、なった。

181 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 01:01:02 ]
教科書でfgets()を使ってstr[]にテキストファイルから文字を格納する、ってところで

FILE *fp;
char str[80];

fgets(str, 79, fp);

のように79になってるのはなんでだろう

・str[80]は0-80で(ヌル入れて)81字
・fgets()は指定された数-1まで読み込んで最後にヌルと改行文字をつける

だったらfgets()で80を指定すれば
79字まで読み込み→最後にヌルと改行文字→81字
でstr[80]にぴったりだと思うんだけど…

なんか後半に進んでいくにつれて説明がはしょられるようになってわからないところが多くなってきた…

182 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 01:05:14 ]
>>181
間違いだらけ。
・先ずその糞本を晒せ。
・char str[80]は80要素、つまり0-79しかない。
・fgets()のパラメータは、そのような使い方の場合fgets(str, sizeof(str), fp)とするのが常道。
・マニュアルページを読めば判るように、fgets()はそれで巧くやってくれる。

183 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 01:05:44 ]
・str[80]は0-79で(ヌル入れて)80字

だったらfgets()で79を指定すれば
79字まで読み込み→最後にヌルと改行文字→80字
でstr[80]にぴったりだと思うんだけど…

184 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 01:06:38 ]
fgetsの第二引数はターミネータを含めた長さ
規格嫁やボケ

185 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 01:07:31 ]
>>183
>182をよく読め。

186 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 01:08:35 ]
その教科書書いた奴が無知だっただけ。
80でおk。

187 名前:だからと言って、79なんてもっと書くな mailto:sage [2007/07/29(日) 01:12:29 ]
だから80なんて書くなって。



188 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 01:18:51 ]
教科書がウンコってのはわかるけど、>>181が攻められすぎだろ。

189 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 01:21:45 ]
自分で調べもせずにぞっき本を盲信してうだうだ言うからだろ

190 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 01:22:48 ]
すまん、俺が勝手に勘違いして覚えてる可能性が存分にあるので本叩きは待ってくれ
っていうかむしろまず間違いなく俺が原因だ

何をトチ狂ったか

・str[80]は0-80で(ヌル入れて)81字

なんて書いたが、落ち着いて考えてみたら0-79+ヌルで80になるってのは理解してた
暑さとよくわからん解説でダレてボケたとしかいいようがない…

ということは1字ズレるということもなくしっかり収まるのかな?
自分に呆れてしまう…本当に申し訳ない

191 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 01:27:09 ]
>>190
もういい、一晩寝てから改めてレスをよく読め。

192 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 01:27:47 ]
>>190
まだまちがっとる。
0-78+NUL(79) で 80だよ。

193 名前:181.190 mailto:sage [2007/07/29(日) 01:31:04 ]
どうやらもう本格的にダメらしい

落ち着いて考えてきます
恥ずかしすぎる

194 名前:181.190 mailto:sage [2007/07/29(日) 01:50:55 ]
・[80]は要素の数だからそもそも[0]-[79]までしか存在しない
・文字列の場合さらにヌルが入るから[78]までしか使えない
・だからfgets()で79を指定するのは当然、-1なのも当然

これでいいんだよな…いいんだよな?
結局回答をトレースしただけだけど…
説明不足扱いしてごめんなさい教科書

何を質問したか忘れてしまいたいほどに恥をかいたがこれで今後間違えることはないはず
超くだらない質問にマジレスしてくれて本当にありがとう

195 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 01:55:32 ]
だから、その教科書がおかしいってみんな言ってるだろ。

196 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 02:12:11 ]
>>194
・だからfgets()で79を指定するのは当然、-1なのも当然
fgetsの第2引数はナルターミネータを含んだ長さ(即ち80)だと何度言えばわかってくれるんだ

197 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 02:22:44 ]
>>196
80を指定したら79まで(-1された数まで)文字が入るのはつまりそういうことだよね

ここがみんなの言ってた本の悪いところか…
それすらわかってなかった俺お先真っ暗

ちなみに本は「独習C 第3版」です
この本がやるからにはなにかあると思ったんだけど過信しすぎだったか



198 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 02:23:01 ]
すみません 質問をしたいのですが
コマンドラインから
「読込ファイル名」「出力ファイル名」を入力し
読込ファイル名は「絶対パス」「相対パス」「ファイル名」の3つを入力をします
「絶対パス」「相対パス」の中で
ディレクトリの読込権限 または
ファイルの読込権限がなかった場合を判定したいです。
access関数の使用をしているのですが
ディレクトリの読込権限をどのように判定すれば良いのか
どなたかご教授あ願い致します。


199 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 02:53:19 ]
>>198
access()はディレクトリにも使えるよ。

200 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 03:27:18 ]
>>198
ありがとうございます
ただ僕が悩んでいる所は
if(access(Yname ,R_OK)==0){
printf("読込可能ファイルアクセス権限があります");
}
if(access(Yname ,R_OK)!=0){    //←この部分の判断です
printf(""); //ここのメッセージは2つの可能性があります 
}

2度目の判断文で
ディレクトリでエラーが発生した場合は
「ディレクトリのアクセス権限がありません」と表示し
ファイルが存在したがアクセス権限がなかった場合は
「ファイルのアクセス権限がありません」
と表示したいです

読込エラー発生時に「ディレクトリ」で発生したのか
「ファイル読込」で発生したのかを判断したいのですが
どうにもうまく思いつきません。
もう少しヒントをお願い致します。




201 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 03:39:39 ]
>>200
www.linux.or.jp/JM/html/LDP_man-pages/man2/stat.2.html
ディレクトリかどうかは、statで判定できるよ。

202 名前:198 mailto:sage [2007/07/29(日) 07:13:13 ]
>>201

ありがとうございます
ただ statを使って2つのエラーメッセージを使い分ける
方法がちょっと見えて来ないんですが
少し詳しくご教授お願い致します。

203 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 07:18:08 ]
>>202
ディレクトリとファイル名に分割してディレクトリを調べてみるしかないんじゃね?
#つーか、errnoじゃだめなんか?

204 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 07:36:49 ]
>>202
こんな感じかね。

if(access(Yname ,R_OK)!=0){
    struct stat sb;
    if (stat(Yname, &sb) == 0) {
        if (sb.st_mode & S_IFMT == S_IFDIR)
            puts("ディレクトリのアクセス権限がありません");
        else
            puts("ファイルのアクセス権限がありません");
    }



205 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 08:35:08 ]
>>203
>>204
ありがとうございます
「ファイル読込に失敗した時に」
「ファイルが存在する場合」 までは理解できたのですが
if (sb.st_mode & S_IFMT == S_IFDIR)
この部分がちょっと自身がないのですがこういった意味なのですか?
「ファイルの種類がディレクトリならば」と言う意味で

絶対パスでこのように指定した場合(erroeがアクセス権限なしのディレクトリ)
[ c:/dir/dir2/error/hoge.txt ]
[ c: ]にアクセス権限があるか?
[ dir ]にアクセス権限があるか?
[ dir2 ]にアクセス権限があるか?
[ error ]にアクセス権限があるか?
を if (sb.st_mode & S_IFMT == S_IFDIR)  の一文で調べ
[ error ]にアクセス権限がなかったため
puts("ディレクトリのアクセス権限がありません");
と表示されると言う事ですか?


206 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 08:57:52 ]
>>203

後 errno についても調べてみたのですが
機能としては  if(access(Yname ,R_OK)==0) などで
失敗をした場合にどんなエラーが発生をしたかを返す と言う事ですか?
C言語は始めたばかりでerrnoの存在を知らずに居たので
使えるかどうかはちょっと分からないです・・・

207 名前:名無しさん@そうだ選挙に行こう [2007/07/29(日) 14:09:38 ]
すみません質問です。
static void test( lpfunc func )
{
(void) func;
}
のように関数のアドレスを受け取り、
代入も何もせずvoidにキャストしているだけ(?)の場合
どういう意味があるのか教えてください。





208 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 16:48:47 ]
>>207
それだけ見る限り、何の意味もなさそうだ。
func()としていればその関数を呼ぶことになるわけだが。

209 名前:207 mailto:sage [2007/07/29(日) 17:32:15 ]
>>208 
すみません情報が足りませんでした。

元のソースは以下になります。(nasm091)
static void bin_init (FILE *afp, efunc errfunc, ldfunc ldef)
{
fp = afp;

error = errfunc;
(void) ldef; /* placate optimisers */

start_point = 0; /* default */
textsect.contents = saa_init(1L);
datasect.contents = saa_init(1L);
textsect.length = datasect.length = 0;
textsect.index = seg_alloc();
datasect.index = seg_alloc();
bsslen = 0;
bssindex = seg_alloc();
relocs = NULL;
reloctail = &relocs;
}


210 名前:エスパー mailto:sage [2007/07/29(日) 17:39:11 ]
>>209
関数を改良してたらその引数は使わなくなった

でも、よそから使われてるから、いまさらインターフェイス変えられない

残してると、引数が使われてないとコンパイラが警告を出す

無意味に使ってやるか…


211 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:46:01 ]
placate optimisers って書いてあるから、コンパイラが出す「変数つかってねーぞ」っていう
ワーニングを抑制するための参照だろう。

212 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 17:48:32 ]
リロード(T=T)

213 名前:名無しさん@そうだ選挙に行こう [2007/07/29(日) 17:51:41 ]
質問なのですが。
構造体の中の構造体の中にポインタの構造体を宣言しているのですが、
最下層であるポインタの構造体のメンバを出力させてたいのですが、..->ではないのでしょうか?
これだと何故かエラーになり...で出力できます。

214 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 17:55:33 ]
何言ってるか分からんが、言ってる通りなら -> だ
とりあえずソース貼れ

215 名前:207 mailto:sage [2007/07/29(日) 17:55:35 ]
>>210
>>211
よく分かりました。ありがとうございます。



216 名前:名無しさん@そうだ選挙に行こう [2007/07/29(日) 19:06:35 ]
struct C{
int num5;
char str6;
char str7[20];
};

struct B{
int num3;
int num4;
srtuct C *c;
}

struct A {
int num1;
int num2;
struct B b;
}

これでC構造体のメンバを全て出力させてさせたいのですが、..−>では
エラーになり...でstr7などが何故か出力されます。

217 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 20:04:58 ]
何がいいたいのかわからんが

A a;
a.b.c->num5;
a.b.c->str6;
a.b.c->str7;

でよくね



218 名前:198 mailto:sage [2007/07/29(日) 20:34:19 ]
アロー演算子で出力出来なくて
ドット演算子で出力できる理由をしりたいのかな?



219 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 21:31:52 ]
構造体からはドット演算子、構造体のポインタからはアロー演算子。

220 名前:デフォルトの名無しさん [2007/07/29(日) 22:06:57 ]
ご丁寧に有難う御座います、しかし、...で出力されてアローがエラーになる理由がわかりません。
218さんわかりますでしょうか?


221 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 22:12:33 ]
再現する最低限の、確実にコンパイルできるソースを晒せ。

222 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 22:31:36 ]
>>53->>56
回答求む

223 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 22:34:23 ]
宿題スレ行け

224 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 22:34:51 ]
>>220
なりません。
だからとっととソースを晒せと

225 名前:デフォルトの名無しさん [2007/07/29(日) 22:50:36 ]
質問です。
4元1次連立方程式のデータはcとcheckの2つの配列に入力されますが、何故でしょうか?
また、1つの配列に入力して済ませる方法はありますか?宜しくお願いします。

void inputdata(double c[4][5],double check[4][5])
int ie ,ic;


226 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 22:55:01 ]
>>225
その質問に答えられるってどんなエスパーですかw

227 名前:デフォルトの名無しさん [2007/07/29(日) 22:58:25 ]
4元1次連立方程式ってなに?
調べるのめんどいからおせーて



228 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:04:38 0]
>>225
そんなんで分かるわけねーだろwww

229 名前:225 [2007/07/29(日) 23:09:32 0]
>>226
ゴメンなさいww何処まで書けばいいのやらで(汗

>>227
変数が四つ入ってる式のこと・・・だと思います。
例として・・・w+x+y+z=20 3w+x+y+5z=18 (w,x,y,zは全て変数)







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

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

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