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

C言語なら俺に聞け! Part 112

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/08/08(月) 01:32:01
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

C言語なら俺に聞け! Part 111
http://pc8.2ch.net/test/read.cgi/tech/1121657911/

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0085デフォルトの名無しさん2005/08/09(火) 00:53:24
MSHTMLでも使えってことですね
0086デフォルトの名無しさん2005/08/09(火) 02:06:31
>>77
void main(void) {
printf("ガンガレ!\n");
}
0087デフォルトの名無しさん2005/08/09(火) 02:19:01
http://freshmeat.net/projects/htmlcxx/
http://freshmeat.net/projects/libhtmlparse/
0088デフォルトの名無しさん2005/08/09(火) 04:11:10
htmlcxx ってC++じゃなかったか?
0089デフォルトの名無しさん2005/08/09(火) 07:14:03
char *ishref(char *str)
{
  char target[] = "href=\"";
  char *ret;
  int targetlen = strlen(target);
  int len = strlen(str);
  int i, j, k;
  j=0;
for(k=0;k+targetlen<len;){
  for(i=0;i<targetlen;){
   while(isspace(str[j])){j++;k++;}
   if(str[j]==target[i]){
    i++;
   }else{
    break;
   }
  }
}
  if(i==targetlen){
   ret = str + j + 1;
  }else{
   ret = NULL;
  }
}

こうかー
0090デフォルトの名無しさん2005/08/09(火) 08:57:16
完全な初心者です。
C言語を覚えたいのですが、環境を整える段階で早くも詰まっています。
Visual C++、gcc、LSI C-68等のコンパイラでオススメの物を教えて下さい。
当方、windousXPです。
0091デフォルトの名無しさん2005/08/09(火) 09:11:38
>>90
スレ違い。VCでもgccでもいいけど、整備の仕方が判らないなら該当スレへどうぞ。
LSI-Cは無条件に薦めない。
0092902005/08/09(火) 09:30:58
>>91
ここかと思っていました、すみません。
スレ違いなのに答えてくださってありがとうございます。
0093デフォルトの名無しさん2005/08/09(火) 20:06:26
質問です。
int unko(int a, int* b, int c) {
 return a+*b+c;
}

int (*ok)(int a, void* b, int c);
ok = unko;

としてもコンパイルエラーにはならないのですが、(gccだとデフォで警告orz)
これは一般的なテクニックとして利用しても大丈夫なのでしょうか?
0094デフォルトの名無しさん2005/08/09(火) 20:08:29
すみません、void* をプロトタイプに持つ関数のポインタに、
その位置にvoid* 以外の型のポインタ変数を持つ場合でも、
コンパイルエラーにならないってことです。
0095デフォルトの名無しさん2005/08/09(火) 20:11:19
一般的なテクニックだあぁ?
おまえのオナニーテクニックだろ
unkoの型をvoid*に合わせて演算するところでintにキャストせぇよ
なにがやりたいんだかわからん
0096デフォルトの名無しさん2005/08/09(火) 20:15:59
いや、何がやりたいかは別に分かってもらわなくても良いのですが、
この様な使い方(プロトタイプに合ってない関数をキャストなしで代入)は
すべきじゃないかを問いかけただけです。

>unkoの型をvoid*に合わせて演算するところでintにキャストせぇよ
すみません。例が意味不明でした^^
これはあくまで単なる例なので、気にしないでください。
0097デフォルトの名無しさん2005/08/09(火) 20:16:59
for(〜〜){
  if(〜〜){
    if(〜〜){
      break;
    }
  }
  hoge++;
}

これでbreakが実行されるとforから抜けることになるんですか?
それとも外側のifを抜けてforのhoge++が実行されるのでしょうか?
0098デフォルトの名無しさん2005/08/09(火) 20:19:34
errnoでセットされた値はプログラマが明示的に
クリヤーする必要があるんですか?
0099デフォルトの名無しさん2005/08/09(火) 20:23:07
>>97
まずはおまえ自身でやってみろよ
なんだかもう・・・
0100デフォルトの名無しさん2005/08/09(火) 20:25:11
すいません。友人の家でふと疑問に思ったのです。
書き込みも友人のPCなのでコンパイラをインストできないんです。
今日は泊まりなので家にも帰れませんし。。
0101デフォルトの名無しさん2005/08/09(火) 20:26:25
>>100=>>97です
0102デフォルトの名無しさん2005/08/09(火) 20:28:50
べつに急ぎじゃないんだろ?
帰ってから思う存分やれ
0103デフォルトの名無しさん2005/08/09(火) 20:31:10
>>98
1.errnoは、エラーになったときだけセットされる
2.errnoは、エラーになったときだけ参照する

1.2.より、通常は明示的にクリアする必要は無い
0104デフォルトの名無しさん2005/08/09(火) 20:33:27
>>101
調べると「ループやスイッチ」が対象みたいなのでforから抜けるみたいですね。
どうもでした
0105デフォルトの名無しさん2005/08/09(火) 20:37:20
ところでさ、なんで break の対象は ループや「スイッチ」 なんだろうね。
switch文を抜けるのまで 同じ「break」 である必要はあったのかね・・・
sbreak とか、別ものにして欲しかったと思うことは無いか?

答えろ! >>107!
0106デフォルトの名無しさん2005/08/09(火) 20:39:42
>105
厨房は黙ってろよ
0107デフォルトの名無しさん2005/08/09(火) 21:05:27
>>105
黙ってろ
0108デフォルトの名無しさん2005/08/09(火) 21:09:33
>別ものにして欲しかったと思うことは
ないな。以上
0109デフォルトの名無しさん2005/08/09(火) 21:14:51
>>105
ない。あとおまえは黙ってろ
0110デフォルトの名無しさん2005/08/09(火) 21:16:40
breakじゃなくてgotoにしてほしかった。
0111デフォルトの名無しさん2005/08/09(火) 21:18:34
>>93
一般的なテクニックではないな。
Cはそういうところのチェックが甘いし。
0112デフォルトの名無しさん2005/08/09(火) 21:23:21
>>107
ひどいじゃん
0113デフォルトの名無しさん2005/08/09(火) 21:24:24
>>106
forやwhileの中で、switch文の中からbreakしたくなったことは
一度も無いのか?
0114デフォルトの名無しさん2005/08/09(火) 21:25:41
goto
0115デフォルトの名無しさん2005/08/09(火) 21:26:20
>>93
テクニックというには、使いどころが無さ杉な気がする。
0116デフォルトの名無しさん2005/08/09(火) 21:26:47
breakなんswitch以外で使わなければいい
俺は全部gotoにしてる
0117デフォルトの名無しさん2005/08/09(火) 21:27:54
で、うじうじそんなことを考えてどうするつもりかね。
0118デフォルトの名無しさん2005/08/09(火) 21:30:39
>>111
やはりそうですか。ありがとうございました。

>>115
ポインタをコールバックで渡すとき、
呼ばれた側だけが型の情報を知っている場合に、
別の変数にキャストしなくてもいいので便利かな、と思いまして。
0119デフォルトの名無しさん2005/08/09(火) 21:32:33
>>117
ストールマンとコンパやって、やつが酔っ払ってる隙に
gccのソースを直す。
0120デフォルトの名無しさん2005/08/09(火) 21:35:38
>>116
俺は極力goto使わないようにしてる
「gotoレスプログラミング」っていうぐらいだし
0121デフォルトの名無しさん2005/08/09(火) 21:41:11
俺は極力 後藤 使わないようにしてる
「後藤カスプログラミング」っていうぐらいだし
0122デフォルトの名無しさん2005/08/09(火) 21:48:59
でも多重breakしたいときには仕方がないから使う。
0123デフォルトの名無しさん2005/08/09(火) 22:02:24
gotoレスくらい、ほとんどの人が分かり切ったこととしてるはずじゃないのかいな。

多重ループを脱出するときは、「仕方がない」という意識ではなく、ここぞ使う場面だ
と思って使うが。
01241222005/08/09(火) 22:11:06
>>123
JavaとかDにはラベル付breakなるものがあるらしい。これなら多重breakにgotoを使う必要がなくなる。
これがないCでは「仕方なく」gotoを使うことになる。もちろんラベル付breakをCに導入しろとは全然思っていない。
俺はJavaもDも使ったことがないけど。
0125デフォルトの名無しさん2005/08/09(火) 22:11:47
>>123
そういう場面になったら俺の場合、gotoを使わなくてすむようにロジック組みなおす。
まあ仕事でやってる人はそういうわけにもいかないんだろうけど
0126デフォルトの名無しさん2005/08/09(火) 22:29:02
いや、ほんとくだらねぇんですけど。

「引数」と「値を返す」
の基本的な二つの語句の意味がいまいち理解しきれません。
イメージとしては掴みかけているような感じはするんですけど。。。
0127デフォルトの名無しさん2005/08/09(火) 22:30:01
>>124
>もちろんラベル付breakをCに導入しろとは全然思っていない
俺はぜひ導入してほすぃと思うが。害はないだろ?
0128デフォルトの名無しさん2005/08/09(火) 22:32:00
イメージとしては

       ↓引数
   ← foo(a)
値を返す
0129デフォルトの名無しさん2005/08/09(火) 22:33:41
故後藤先生は、なぜgotoが不当に迫害されなればならないのかと悩んでおられた。
0130デフォルトの名無しさん2005/08/09(火) 22:34:46
gotoを使う奴は強盗
0131デフォルトの名無しさん2005/08/09(火) 22:35:17
近藤さんは毎晩悩んでおられた。
0132デフォルトの名無しさん2005/08/09(火) 22:35:48
>>129
s/悩んで/悲しんで/
0133デフォルトの名無しさん2005/08/09(火) 22:37:59
おまえら本当は、
「gotoを使っちゃダメ」ってエライ学者さんが言ったから使ってはいけない、
程度にしか理解してないのだろ?
0134デフォルトの名無しさん2005/08/09(火) 22:38:57
ごめんなさい先輩風吹かしたいだけです
0135デフォルトの名無しさん2005/08/09(火) 23:02:23
ダイクストラがgoto(゚д゚)マズーって言ったころには、
まだC言語もおまえらも存在していなかったわけだがな。
ttp://www.acm.org/classics/oct95/
0136デフォルトの名無しさん2005/08/09(火) 23:11:15
>>127
反対する気はないが、今さら導入したところで、あまり意味がないよな。
0137デフォルトの名無しさん2005/08/09(火) 23:17:03
>>126
学校でy=f(x)とか習ったかい?
0138デフォルトの名無しさん2005/08/09(火) 23:20:11
gotoを使わないことが自己目的化して関数分割しすぎて
可読性損ねる馬鹿プログラマには参る
0139デフォルトの名無しさん2005/08/09(火) 23:37:24
ダイクストラは、羮に懲りて膾を吹くという感じでgotoを全面否定することはないだろうにな。
0140デフォルトの名無しさん2005/08/09(火) 23:40:00
>137
習いました
0141デフォルトの名無しさん2005/08/09(火) 23:41:29
>羮に懲りて膾を吹く
読み方プリーズ
しつけにこりてろをふく?
0142デフォルトの名無しさん2005/08/09(火) 23:44:10
>>141
あつ‐もの【▼羹】〘名〙
野菜や魚肉を熱く煮立てた汁物料理。◇「熱いもの」の意。
羹(あつもの)に懲こりて膾(なます)を吹く失敗にこりて、必要以上に用心深くなる。◇熱かった羹にこりて膾のような冷たい料理も吹いて冷ます意からいう。
0143デフォルトの名無しさん2005/08/09(火) 23:44:52
あつものにこりてなますをふく

熱いものをはふはふして食べたあとに、冷たい副菜を思わずふーふーしてしまう様から、
ひどい目にあって、同じ目を二度と見ないように、過剰な反応をするの意。
0144デフォルトの名無しさん2005/08/09(火) 23:51:55
あつものにしこりてなますをふく
0145デフォルトの名無しさん2005/08/10(水) 00:01:00
>>140
お前見込みないわ…コミュニケーション能力が…
0146デフォルトの名無しさん2005/08/10(水) 00:03:49
習ったけど、理解はしてないよ
ということでしょう
0147デフォルトの名無しさん2005/08/10(水) 00:04:54
どっちにせよ見込みないわ
0148デフォルトの名無しさん2005/08/10(水) 00:10:57
142を直す
>羹(あつもの)に懲こりて膾(なます)を吹く失敗にこりて、必要以上に用心深くなる。
羹(あつもの)に懲(こ)りて膾(なます)を吹く 失敗にこりて、必要以上に用心深くなる。

>>144
ネタか?
0149デフォルトの名無しさん2005/08/10(水) 00:54:51
にしこり
0150データボックス2005/08/10(水) 01:11:28
できるだけ配列をポインタ扱いでコーディングするように努めてるが、構造体へのポインタの
2次元配列を、それぞれの次元のインデックスや、1次元目の要素数からアドレス計算をしながら
ポインタ扱いして、更にchar * のメンバ変数で文字列を扱ったり、関数の引数にアドレスを渡し
て、関数の中では、もう一段階進んだポインタを扱うことになったりして、苦心惨憺してしまうのお。
関数ポインタの配列も必要だし。
そういうことで悩んでしまうが、どうしようかいな。
0151デフォルトの名無しさん2005/08/10(水) 01:16:38
っ[C++]
0152デフォルトの名無しさんNGNG
>>150
変に工夫しないで素直に組めば?
0153デフォルトの名無しさん2005/08/10(水) 01:37:30
そういうことで悩むならC++使った方がマシ
0154デフォルトの名無しさん2005/08/10(水) 01:40:09
だからC++が使えない開発環境なんだよ!
0155データボックス2005/08/10(水) 01:44:21
いや、今はC++ BuilderでWindowsプログラムのイベントハンドラにC言語のコードを差し込んでるんだけどな。
0156デフォルトの名無しさん2005/08/10(水) 01:59:06
>>できるだけ配列をポインタ扱いでコーディングするように努めてるが
(バッサリ略)
センスの悪い奴がわかってるつもりでへんに頭をひねったつもりになっても、
ちぃ〜ともなぁ〜んの解決にもならん、というだけの話かと。
0157デフォルトの名無しさん2005/08/10(水) 02:16:53
>>156
何だ、半人前のCプログラマの分際で何を言ってるんだ。
0158デフォルトの名無しさん2005/08/10(水) 02:30:46
コピペしてはりまくってください。
9/11選挙では 最高裁裁判官の国民審査もあります。下記2人にはご注意を。
「外国人参政権反対」という主張の人は下の二人(賛成派)を落とすべきです。

[裁判官 滝井繁男の反対意見]
・外国人の地方選挙権を付与することを禁止しているものではないのである(スゲー!)
・日本人に限られるのは地方公共団体の長だけでいい。(スゲー!)

[裁判官 泉�コ治の反対意見]
・地方公共団体は,国が日本における在留を認めた外国人について,当該地方公共団体内における活動
を自由に制限できるものではない。(スゲー!)
・特別永住者が地方公共団体の職員になることを禁止する法はない。
・地方公共団体でトップ、警察、消防、以外なら、外国人を任用してもいい。(スゲー!)
0159デフォルトの名無しさん2005/08/10(水) 09:13:00
可読性を高めるのに配列形式の方が良いとなれば
当然そうするし、ポインタの方が良いとなれば当然
0160デフォルトの名無しさん2005/08/10(水) 09:36:17
>>159
どちらが可読性が高いのか
を決めるは当然、開発担当者?
0161デフォルトの名無しさん2005/08/10(水) 11:15:38
>>156
お前は何の応用力もなく、進歩できないからといって負け惜しみを言ってるだけだよな。
>ちぃ〜ともなぁ〜んの解決にもならん、というだけの話かと。
お前よりは多くの問題解決の実績があるはずだな。
0162デフォルトの名無しさんNGNG
>>150 がどういう状況でどういうコードを書いているか分からんし。
0163データボックス2005/08/10(水) 13:40:38
そうか、Cを完璧にしないうちにC++に進んでもいいのかいな。
0164デフォルトの名無しさん2005/08/10(水) 14:27:00
>>163
Cを完璧?
完璧の定義は?
負け惜しみにもほどがあるな
0165デフォルトの名無しさん2005/08/10(水) 14:33:13
>>164
粘着乙
0166デフォルトの名無しさん2005/08/10(水) 14:52:02
>>165
キモイヨおまえ
0167デフォルトの名無しさん2005/08/10(水) 15:35:53
「C も使えん香具師にはC++は無理」
「藻前に Cは無理、C++でも使っとけ」

どちらの発言にも一面の真理が含まれている。
0168データボックス2005/08/10(水) 15:56:02
高級アセンブリ言語Cを究めなくてどうするんだろうな。
0169デフォルトの名無しさん2005/08/10(水) 15:58:06
究めてから言えや
0170デフォルトの名無しさん2005/08/10(水) 19:12:47
こんばんは、よろしくお願いします。
char 型の配列を一度初期化して、
もう一度値を入れて生きたいのですが、
どうすればよいのでしょうか。
char a[100];
a = "ああ";
a = NULL;のようなこと死体のですが、これではむりです。
a = "いいいい";
0171デフォルトの名無しさん2005/08/10(水) 19:16:21
>>170
入門書くらいは読んでください。
0172デフォルトの名無しさん2005/08/10(水) 19:25:25
char *a;
a = "ああ";
a = NULL;
a = "いいいい";
0173デフォルトの名無しさん2005/08/10(水) 19:56:00
>>171
そうですねすみませんでした。
>>172
ありがとうございます。
できました。
0174データボックス2005/08/10(水) 20:07:00
>>173
char a[100];
strcpy(a, "ああ"); /* #include <string.h> */
*a = '\0';
strcpy(a, "いいいい");
0175デフォルトの名無しさん2005/08/10(水) 20:59:12
関数の引数に hoge(&a)
みたいにアドレスを渡す時って、関数の仮引数に int hoge(*aa)
と書くことが多いだろ?
本で読んだときからずっとハテナだったが、a=10 で &a=FFFFFF(仮に)
だったとき明らかに値がずれてないか?そういう約束なのか?
0176デフォルトの名無しさん2005/08/10(水) 21:02:17
char *a;
a = "ああ";
a = NULL;
a = "いいいい";
strcpy(a, "うううう");
0177デフォルトの名無しさん2005/08/10(水) 21:02:56
>>175
質問は日本語で書いてください
0178デフォルトの名無しさん2005/08/10(水) 21:04:05
>>175
悪いことは言わない。
ポインタのない言語に乗り換えてくれ。
0179デフォルトの名無しさん2005/08/10(水) 21:07:23
>>175
なぜa=10 で &a=FFFFFFだと値がずれるんだ?
0180デフォルトの名無しさん2005/08/10(水) 21:11:02
>>173
別に 172が間違いなわけじゃないが、あきらかに勉強不足なんだから、
文字の配列と文字列定数へのポインタとを混同すんじゃないよ。
174の strcpy()等も調べとく。
0181データボックス2005/08/10(水) 21:12:06
>>176
strcpyはネタだよな。
0182156はこれと156だけ2005/08/10(水) 21:52:49
>>150 って、163,168 同様、厨ネタにしかならんのよ。
そんな不細工なソースを人に受け渡しするなら殴ってもいい。
(C++以前にデータや論理の抽象化云々…)
実際、157,160,161 あたりが、
>>できるだけ配列をポインタ扱いでコーディングするように努めてるが、
に何の意味があるか解説すると、もっと面白くなるかもしれないが。
0183デフォルトの名無しさん2005/08/10(水) 21:56:05
>>181
考えが浅いな
0184デフォルトの名無しさん2005/08/10(水) 22:34:16
156が何言ってるのかわからないのは俺だけですか
0185デフォルトの名無しさん2005/08/10(水) 22:52:26
>>183
詳しく
■ このスレッドは過去ログ倉庫に格納されています