トップページ⇒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/
0243デフォルトの名無しさんNGNG
昔は、if(hoge == FALSE)なんて書いたらアホコード吐いたんだよ。あほ。
0244デフォルトの名無しさんNGNG
あと、
return(x);
みたいに書くやつ。
関数と文の区別がついてないんじゃないか?
0245若造NGNG
>>243
どんな?
0246デフォルトの名無しさんNGNG
すべて1が悪い。
0247デフォルトの名無しさんNGNG
ダメだこりゃ
024832NGNG
>> 237 これの、どこが世の中に人々のスタイルなわけ。
 >>32
int main( void ) {
int i;
puts ( "好きな所で止めろ" );
getchar();
for ( i = 1; ; i++ ) printf ( "%d\n", i );
return 0;
}
0249デフォルトの名無しさんNGNG
>>248
もう黙れよJPS
0250デフォルトの名無しさんNGNG
>>248
お前、>>1が気に入らないからこのスレをつぶそうとしているだけだろ?
0251デフォルトの名無しさんNGNG
ishoge系はこう書く。
if(isalpha(c)){
} else if (isdigit(c)){
}
あるものの否定を考えるよりも何かに合致してるかどうかを考える方が安易。
!をやたら使いたがる奴はDQN。
0252デフォルトの名無しさんNGNG
>>32
なんか読みにくかったから、手を入れてみた。
  int m = 3;
  int n = 4;
  int **str;
  int i, j;

  if ((str = (int**)malloc(sizeof(int*) * m)) == NULL) {
    printf("メモリー確保の失敗:1");
    exit(1);
  }
  for (i = 0; i < m; i++) {
    if((str[i] = (int*)malloc(sizeof(int) * n)) == NULL) {
      printf("メモリー確保の失敗:2");
      exit(1);
    }
  }

  for(i = 0; i < m; i++){
    putchar('\n');
    for(j = 0; j < n; j++){
      str[i][j] = 'A' + i * n + j;
      printf("%c", str[i][j]);
    }
  }
  putchar('\n');
  for(i = 0; i < m; i++){
    putchar('\n');
    for(j = 0; j < n; j++) {
      printf("%3d",str[i][j]);
    }
  }
0253252NGNG
表示結果
ABCD
EFGH
IJKL

65 66 67 68
69 70 71 72
73 74 75 76
0254デフォルトの名無しさんNGNG
スタイル厨必死だな
025532NGNG
 ああ・・・。 だったら、これ答えてよ
i2=3;
j2=4;
ij=i2*j2;
if((str1=(int**)malloc(sizeof(int*)*i2))==NULL){
printf("メモリー確保の失敗:1");
exit(1);
}
for(i1=0;i1<i2;i1++)
if((str1[i1]=(int*)malloc(sizeof(int)*j2))==NULL){
printf("メモリー確保の失敗:2");
exit(1);
}


for(i1=0;i1<ij;i1+=j2){
putchar('\n');
for(j1=0;j1<j2;j1++){
printf("%c",str1[i1/j2][(len++)%i2]=('A'+i1+j1));
}
}
putchar('\n');
for(i1=0;i1<i2;i1++){
putchar('\n');
for(j1=0;j1<j2;j1++)
printf("%3c",str1[i1][j1]);
}

return 0;
}
0256デフォルトの名無しさんNGNG
脳障害の>>242が何か言ってるな。
0257デフォルトの名無しさんNGNG
>>252
if ((str = (int**)malloc(sizeof(int*) * m)) == NULL) {
じゃなくて
if (!(str = (int**)malloc(sizeof(int*) * m))) {
にしろって。話聞いてなかったのか?

0258252NGNG
>>32
で、どうすりゃいいわけ?
0259デフォルトの名無しさんNGNG
{x^(-2/3)}・{(1-x)^(-1/3)} ← これを表わすのに、
pow(x, -2/3)*pow(1-x, -1/3) ← この書き方で合ってますか?
0260デフォルトの名無しさんNGNG
>>251
へえ。じゃあ「アルファベット以外」ってどう書くのさ。
「アルファベットでも数字でもない」ってのは?
0261252NGNG
>>257
聞いてなかった。
026232NGNG
>>252 まあ、大分内容は変わってるが参考にはなりそうだ。
0263デフォルトの名無しさんNGNG
整数/整数って浮動少数で評価されたっけ?
0264デフォルトの名無しさんNGNG
>>259
合ってません。整数/整数は切り捨てて整数になります。
0265デフォルトの名無しさんNGNG
>>263
されないけど、powに渡せば結果がdoubleになるだろ?
0266デフォルトの名無しさんNGNG
>>264
あの、>259のような場合どういう書き方をしたら良いですか?
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
大多数の人間の主観=客観
■ このスレッドは過去ログ倉庫に格納されています