トップページ⇒tech
1001コメント240KB

C言語の質問スレッド<42>

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
C言語に関する質問はここでしてください。

問題をちゃんと切り分けて、Cの話かそうでないか洗ってから質問してくれ。
というより、聞く前に一応 Web で検索しろ。
コンパイラを探してるなら >>2 を見ろ。
過去ログ(DAT落ちあり)なら>>3-100あたりにあるかも。

GUIとか、C標準でできない事の質問は使ってる開発環境のスレに逝ってくれ。
ソース丸投げ、宿題、書籍 は専門の別スレがあるからそこへ逝ってくれ。

未定義・処理系依存ネタはご遠慮ください。
誰かが(故意にではなく)それらの書き込みをしても、いちいち突っ込まないでください。
規格オタクはこのスレッドには必要ありません。論争したかったら独自にスレッドを立ててそこでやってください。


C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/


前スレ <41>
http://pc3.2ch.net/test/read.cgi/tech/1036876790/
0267デフォルトの名無しさんNGNG
>>265
渡す前に切り捨てられちゃうって…
0268デフォルトの名無しさんNGNG
str = (int**)malloc(sizeof(int*) * m);
if (!str) {
0269265NGNG
あー、この場合はわり算をするときにdoubleでやらないといけないのか。
.0をつければOKだよね
0270デフォルトの名無しさんNGNG
pow(x, -2.0/3)*pow(1-x, -1.0/3)
0271デフォルトの名無しさんNGNG
>>266
分母の前にでも (double) 入れろ
0272デフォルトの名無しさんNGNG
>>260
人に聞く前にコード書いてみたらどうかな、お馬鹿さん。
0273デフォルトの名無しさんNGNG
{x^(-2/3)}・{(1-x)^(-1/3)}
pow(x, -2.0 / 3.0) * pow(1.0 - x, -1.0 / 3.0)
0274デフォルトの名無しさんNGNG
>>268
なんでわざわざ二つに分けるんだ? 一行でいいだろ。
027532NGNG
>>252 と>>32は、別人なのでは・・・
0276デフォルトの名無しさんNGNG
>>274
そんな簡単に釣られるなよ(w
0277デフォルトの名無しさんNGNG
>>272
if(isalnum(c)){
/* なにもしない */
}
else{
/* ここでなにかする */
}

これくらいしか思いつかない・・・・
0278デフォルトの名無しさんNGNG
>>277
んなことするやつぁ超DQNの馬鹿
0279デフォルトの名無しさんNGNG
>>278
だって!を使ってはならないって言うし!
0280デフォルトの名無しさんNGNG
if (!(str = (int**)malloc(sizeof(int*) * m))) {
なんて書く奴はDQN

0281デフォルトの名無しさんNGNG
>>274
何でもかんでも一行で書かないとダメな人?
0282デフォルトの名無しさんNGNG
>>272
ん? おれは「!マンセー」派だもの。
読みやす〜く
if (!isalpha(c))
if (!isalnum(c))
と書くわさ。

あんたは!使わずにどう書くんだい?
0283デフォルトの名無しさんNGNG
>>280
禿同!!
0284デフォルトの名無しさんNGNG
if ((str = (int**)malloc(sizeof(int*) * m))==NULL) {
の方が見やすいと思うが。
0285デフォルトの名無しさんNGNG
>>279
!を使わないやつはDQN
真似するとDQNが移る。
0286デフォルトの名無しさんNGNG
>>284
おまいの感覚を疑う
0287268NGNG
>>274
while では一行でかくこともある。
でも if では必要ない。
0288デフォルトの名無しさんNGNG
>>286
世の中の教科書もFAQも規格も全部こうだゴラァ
疑うなら自分の感覚だろ。
0289デフォルトの名無しさんNGNG
>>284
str = (int**)malloc(sizeof(int*) * m)
if (str == NULL) {
の方が一番イイ!
0290デフォルトの名無しさんNGNG
>>288
>>世の中の教科書もFAQも規格も全部こうだゴラァ
知障か?
0291デフォルトの名無しさんNGNG
>>287

else ifだとどうなるんだ?
0292デフォルトの名無しさんNGNG
>>288
ウソツキ。
0293デフォルトの名無しさんNGNG
fopenも

fp=fopen("32.aho","r");
if(fp==NULL){
}

こう書くかな。
if(!(fp=fopen("32.aho","r"))){ } とかくこともあるけど。
0294デフォルトの名無しさんNGNG
>>287
whileならいいのにifはダメかよ。
なんちゅー一貫性のなさだ。
0295デフォルトの名無しさんNGNG
else {
str = ...
if (str)...
}
029632NGNG
  >>252 恩に着る アフォに汚染されるところだった。
0297252NGNG
もしかしてこんな関数を作りたかったのか?
void count(int **str, int m, int n, int base)
{
  int i, j;
  for(i = 0; i < m; i++){
    for(j = 0; j < n; j++){
      str[i][j] = base + i * n + j;
    }
  }
}

使い方
count(str, m, n, 'A');
0298デフォルトの名無しさんNGNG
>>294
あふぉか?
while はどうしても2行にわけられないときがある
if は必ずわけれる
0299デフォルトの名無しさんNGNG
>>298
else if の中だとどうするんだ?
030032NGNG
 >>297助かります。ガンガン持ってきて。
0301一番叩かれる意見NGNG
mallocなんて戻り値チェックしなくていいよ。
0302デフォルトの名無しさんNGNG
>>299
>>295
0303デフォルトの名無しさんNGNG
分けられんわけじゃないがカッコ悪い。
for (;;) {
str = ...
if (str) break;
}
0304デフォルトの名無しさんNGNG
>>298
どういうときですか?
0305デフォルトの名無しさんNGNG
>>277=279頭が固い人?「使うな」なんて一言も言ってないが。何もしないら、if(!isalnum(c))って書くに決まてるだろ。アホか(藁
0306デフォルトの名無しさんNGNG
>>301
mallocが失敗するような状態で、そのあとどうするの?
テヌキアプリならセグフォルで落しちゃった方がよくない?

というのは、ありえるかも。
0307デフォルトの名無しさんNGNG
>>303
慣れの問題。
0308デフォルトの名無しさんNGNG
>>305
必死に反論考えて
辿り着いた答えがそれですか?(W
0309デフォルトの名無しさんNGNG
>>298
whileでやってよい書き方が、
なぜifではダメなんだ?

whileでも、同じコードを2回書けば
必ず分けられるじゃないか。
条件の中で (変数=値)== 値
が汚いというなら、徹底しろよ。
まったく不統一な頭したやつだな。
0310デフォルトの名無しさんNGNG
>>305
素直に「降参」って言えば良いのに。
0311一番叩かれる意見NGNG
>>306
てぬきというか、自分だけしか使わないようなものなら多分失敗しない。
0312デフォルトの名無しさんNGNG
>>309
同じコードを2回書くのは悪いプログラミングの例だが?
0313デフォルトの名無しさんNGNG
>>308
必死に反論考えて
辿り着いた答えがそれですか(W
0314デフォルトの名無しさんNGNG
変数=値
変数 == 値
でいいだろが。
0315デフォルトの名無しさんNGNG
>>302
else {
 if ...
 else {
  if ...
とネストを深くしていくのかよ。
変わってるねー。
0316デフォルトの名無しさんNGNG
そういえば、いままでmallocがNULL返してきたことないな。
チェックしてても落ちる。
0317デフォルトの名無しさんNGNG
>>306
mallocが失敗してもすぐ落ちるわけじゃないし、ある程度不正な状態で
コードが進んで何か悪さをするより自分で落としたほうがいい。
0318デフォルトの名無しさんNGNG
>>315
てかそんな状況ないし
0319デフォルトの名無しさんNGNG
>>317
mallocしたらすぐにその領域を使わない?
NULLにアクセスしたら落ちることが多いと思うけど
0320デフォルトの名無しさんNGNG
glib の malloc
(g_malloc()だっけ?)
は malloc に失敗したら abort するようになってるよね。確か。
0321デフォルトの名無しさんNGNG
>>318
argc>2ならエラー
==2なら、argv[1]をファイル名としてファイルを開く。
開けなければ"default.txt"を開く。
開けなければエラー。

って、あんたのやり方だとどんどんネストが深くなるが?
0322デフォルトの名無しさんNGNG
>>319
たまーに、仮想アドレス0x0周辺を書き換えておいてノホホーンと
さきにいくような処理系とOSが…あるのかな?
0323デフォルトの名無しさんNGNG
>>320
mallocがそんなことしちゃったら規格はずれになっちゃうよ。
g_mallocだと思う。そんな関数しらないけど。
0324デフォルトの名無しさんNGNG
>>322
DOSとか。
0325デフォルトの名無しさんNGNG
>>323
glibc じゃないよ。glib ね。Gtk+ に使われてるやつ
0326デフォルトの名無しさんNGNG
getsもあんな危険な関数だけど、標準ライブラリ関数だから仕様を勝手に変えたりライブラリから外すわけにはゆかないんだよね。
0327デフォルトの名無しさんNGNG
>>325
じゃあ多分g_mallocだと思うよ。
標準のmallocとかぶっちゃうし。
0328デフォルトの名無しさんNGNG
>>322
AIXとか。
0329デフォルトの名無しさんNGNG
しかしmallocがNULLを返したからと言って大した対処もできないならg_mallocのようにするのも良いかと思う。
0330デフォルトの名無しさんNGNG
>>321
たかだかネスト2つだと思うんだけど、どういうやり方してんの?
0331デフォルトの名無しさんNGNG
>>330
脳内ネストの事だろ、きっと。
0332319NGNG
結構あるんだな・・・
まあ自分専用のプログラムでもないかぎりは、mallocの戻り値チェックは鉄則だと思うけどね。
0333デフォルトの名無しさんNGNG
>>329
よく「mallocできないと落ちる」ラッパー作るよね。
「mallocできないとエラーハンドラ呼び出す。
ハンドラは変えられる。デフォルトはabort。」
としてくれると良いかも。
0334デフォルトの名無しさんNGNG
>>330
んで、そもそもなんで2つに分けたいか聞きたいんだけど。
単に「わかりにくい」とかいう主観的なのは却下ね。
033532NGNG
See you again!!
0336デフォルトの名無しさんNGNG
わかりにくい以外に理由がいるか?
0337デフォルトの名無しさんNGNG
>>333
#include <stdlib.h>
void *g_malloc(size_t size)
{
void *p;
p=malloc(size);
if(!p) abort();
return p;
}

こんな感じ?
0338デフォルトの名無しさんNGNG
>>329
たいした対処できないって言ってもメモリがありませんぐらいは言えるだろうから、
だまって落ちるよりはいいと思うぞ。
0339デフォルトの名無しさんNGNG
>>334
ネタですか?主観以外の何物でも無いと思うが。
0340デフォルトの名無しさんNGNG
>>334
分かりにくくてもいいなら全部一行で書けよ。
0341337NGNG
stddef.hも必要か・・・
0342デフォルトの名無しさんNGNG
>>334
大多数の人間の主観=客観
0343デフォルトの名無しさんNGNG
>>337
エラーメッセージくらいは......
まメモリ不足でメッセージ出力すらできないかもしんないけど
0344デフォルトの名無しさんNGNG
どう分りにくいわけ?
条件の中の副作用というのがダメなら
if (fgets(...) != NULL)
もダメだろ?

というか、そもそもfopen自体が副作用そのものだよな?
0345デフォルトの名無しさんNGNG
>>344
お、おまい
if (fgets(...) != NULL)
こんなことしてんのか?おもしろすぎ(W
0346デフォルトの名無しさんNGNG
君らは
while ((c = getchar() != EOF)
も「分りにくいけどしょうがないなあ…」
としぶしぶ書いてるわけ?
0347デフォルトの名無しさんNGNG
main関数にいる時にエラーメッセージを出力して終了する場合、
return fprintf(stderr,"エラーです。\n");
と書くのはアフォ?fprintfがint返すからこう書いているんだけど・・・
やっぱり1を返すべき?
0348デフォルトの名無しさんNGNG
>>346
わかりにくい。
実際におまいが間違えてる(w
0349デフォルトの名無しさんNGNG
>>345
え、EOFだとNULLが返るだろ?
(つか、それ以外にEOFの判別はできないはずだが)
0350252NGNG
結局 32 が何をしたかったのかわからなかった…
0351デフォルトの名無しさんNGNG
g_mallocの一部

p = (gpointer) malloc (size);
if (!p)
g_error ("could not allocate %ld bytes", size);

ちゃんとメッセージは返すらしい。

0352デフォルトの名無しさんNGNG
NULL = FALSE = '\0' = 0
故に
p=malloc(size)
if(!p) = if(p == FALSE) = if(p == '\0')
0353デフォルトの名無しさんNGNG
>>348
ははあ。
そんな我慢していやいや使うくらいなら
はじめからC使うなよ(w
0354デフォルトの名無しさんNGNG
>>353
間違っているのは確かだろ(笑)
0355デフォルトの名無しさんNGNG
>>353
便利だと思ってるし、好きだよ。
でも if まですることはない。
0356デフォルトの名無しさんNGNG
>>352
いや、まあ、それはそうだが。
だから何?
0357デフォルトの名無しさんNGNG
>>353
わかりにくいから細心の注意を払ってコーディングしなければ
おまいのような誤ちを犯すことになる
0358デフォルトの名無しさんNGNG
>>355
矛盾しまくってるジャン(w
0359デフォルトの名無しさんNGNG
>>345
だ〜か〜ら、もうネタはいいって言ってるだろうが!
0360デフォルトの名無しさんNGNG
>>356
オイオイ、FAQ嫁。
0361デフォルトの名無しさんNGNG
>>359
は?なんでオレなの?もしかしておまいも
if (fgets(...) != NULL)
とかしてんじゃねーだろーな?(w
0362デフォルトの名無しさんNGNG
>>357
意味不明
結局「しぶしぶ使う」わけ?
じゃあやめれば?
0363デフォルトの名無しさんNGNG
シンプル伊豆ベスト。

シンプルとは一行で書くことじゃない。
0364デフォルトの名無しさんNGNG
>>347は放置・・・問題外ってことか。
素直に
fprintf(stderr,"エラー\n");
return 1;
としよう。
0365デフォルトの名無しさんNGNG
>>361
貴方はどうするんでつか?
0366デフォルトの名無しさんNGNG
>>362
は?おまいは自分でわかりにくくないと主張しておきながら
間違えたんだろ?何?負け惜しみか?
■ このスレッドは過去ログ倉庫に格納されています