トップページ⇒tech
957コメント294KB

C言語なら、俺に聞け! <11>

■ このスレッドは過去ログ倉庫に格納されています
0001スーパーハッカー 日下部陽一NGNG
おれは42才、24年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならぜんてわかるから、疑問な点があったらオレに聞け。

だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。

・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

Cプログラマならこれを買っとけ。
・プログラミング言語C(K&Rと呼べば通のようだぞ)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/yfcbookshelf-22/250-3950205-1475419

K&Rで挫折するようなヤツはこれでも買え。
これでわからない、救いがたいヤツはあきらめろ。
・作ってわかるCプログラミング(アヒル本と呼べば通のようだぞ)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/qid%3D1005618315/250-3950205-1475419

・前スレ C言語なら、オレに聞け! <10>
http://pc.2ch.net/test/read.cgi/tech/1008300863/l50
0153できた!NGNG
>>152
アヒル本つかってます。
クソの役にもたちません。
0154Kusakabe YouichiNGNG
In article >>153, できた!/153 wrote:
> アヒル本つかってます。
> クソの役にもたちません。

と、いうことにしてみたいが、実際には買っていないので、
こじつけができない :)

# こわらがずに買えばいいのにー:)
0155デフォルトの名無しさんNGNG
こわいから買いません。
0156できた!NGNG
153は偽者です
0157153NGNG
ばれたか。
すまん >156
0158できた!NGNG
うっせ!!氏ね!!
0159できた!NGNG
また真似るしw
止めれ
0160デフォルトの名無しさんNGNG
linux,gccでのfork()関数は、windowsのVCでは何の関数にあたるのでしょうか?
0161デフォルトの名無しさんNGNG
CreateProcess
0162デフォルトの名無しさんNGNG
void *(vector_alloc)(size_t size, long nl, long nh)
{
  void *v = malloc(size*(nh-nl+1+NR_COMPATIBLE));
  if (!v)
    return NULL;
  else
    return v - size*(nl-NR_COMPATIBLE);
}
これさっぱりわからないんです。具体的にこれの返り値ってなに?
あとvoidって返り値無しってことじゃないの?
0163デフォルトの名無しさんNGNG
>>162

void *は型の決まっていない汎用ポインタ
0164デフォルトの名無しさんNGNG
汎用ポインタだから型変換せず何にでも入れられる
0165デフォルトの名無しさんNGNG
2002年か・・・
0166デフォルトの名無しさんNGNG
ありがとう、知らなかった。
void 辞書で引いたら空虚って事だった
なぜ空虚なものへのポインタが型の決まってないものへの
ポインタなのか考えるとミラクルなので
考えない事にします。
0167デフォルトの名無しさんNGNG
みんなおめでとー
新年だよー(・∀・)ノ
0168デフォルトの名無しさんNGNG
float a(int a){}
の関数はreturnで値を返すと
最初の無名float型の変数に代入されて
呼び出し側で使われる、、
らしい。
0169Kusakabe YouichiNGNG
In article >>155, デフォルトの名無しさん/sage/155 wrote:

> こわいから買いません。

こわがりすぎー
0170Kusakabe YouichiNGNG
In article >>162, デフォルトの名無しさん/162 wrote:
> これさっぱりわからないんです。具体的にこれの返り値ってなに?
> あとvoidって返り値無しってことじゃないの?

「かえりち」って読むんですか? :)
0171デフォルトの名無しさんNGNG
そう返り血だ。
0172Kusakabe Youichi NGNG
>そう返り血だ

ということにしたい?
0173デフォルトの名無しさんNGNG
草、こわいょぅ>(;´д`)⊃   (^-^;)<こわがりすぎー
0174Kusakabe YouichiNGNG
In article >>172, Kusakabe Youichi /sage/172 wrote:

> >そう返り血だ
>
> ということにしたい?

引用の仕方がちがうって。
0175Kusakabe YouichiNGNG
In article >>173, デフォルトの名無しさん/sage/173 wrote:

> 草、こわいょぅ > (;´д`)⊃   (^-^;)<こわがりすぎー

元来のこわがりすぎ体質なんですか?
017617歳NGNG
おい、糞壁1月1日だぞ
お年玉よこせやゴルァ!
パパ、お願い(はぁと)
0177テレホマンNGNG
C系のスレが欲しいテレホタイムこのごろです。
0178162NGNG
char *(testc)(void){
   char *c=malloc(sizeof(char)*5);
   return ++c;
}
void *(testv)(void){
   void *v=malloc(sizeof(char)*5);
   return ++v;
}
void *(testcv)(void){
   void *v=malloc(sizeof(char)*5);
   return ++((char*)v);
}
gccとbcc32でコンパイルしてみたら、gccでは全部問題ないのに
bccでは真中のは
エラー E2453 pointerinc.c 12: 'void' 型のサイズは未知あるいはゼロ(関数 testv )になるのは何でだろ
bccでは一番下のと入れ替えてもだいたい意味は一緒ですか?
0179デフォルトの名無しさんNGNG
void型はサイズを求める事が出来ないのでポインタ演算も出来ない
void * に対して演算ができるのはgccの拡張仕様
0180デフォルトの名無しさんNGNG
void *p;
p++;
の結果はどうなるの?
0181デフォルトの名無しさんNGNG
Size of the type 'void' is unknown or zero
サイズがわかんねーのにどうやって進めるってんだよ
0182デフォルトの名無しさんNGNG
gccだと sizeof(void)は1だけど、オプションでエラーに出来たかも。
0183デフォルトの名無しさんNGNG
以前、fj.comp.lang.cあたりを読んでいたら、
「C言語を勉強しているのですが、ポインタがよくわかりません。教えてください」
みたいなポストがあって、ま、fjみたいな場所に、こんな書き込みをする方もする方だと思いますけれどもそれは取り敢えず置いとくとして、それに対するフォローアップが、

「コンピュータのメモリとアドレスの概念について勉強するのがいいですよ」
とか、

「先にアセンブラを勉強したらどうでしょうか」
みたいな調子だったのを見て、ちょっと暗澹たる気持ちになりました。
0184Kusakabe YouichiNGNG
In article >>183, デフォルトの名無しさん/183 wrote:
> 「コンピュータのメモリとアドレスの概念について勉強するのがいいですよ」
> とか、
>
> 「先にアセンブラを勉強したらどうでしょうか」
> みたいな調子だったのを見て、ちょっと暗澹たる気持ちになりました。

ごくふつうの反応では?
0185じゃあNGNG
前橋対日下部?
0186Kusakabe YouichiNGNG
In article >>185, じゃあ/185 wrote:

> 前橋対日下部?

それはだれですか?
0187デフォルトの名無しさんNGNG
>>182
-Wpointer-arithですかね
0188_NGNG
前橋和弥?
0189デフォルトの名無しさんNGNG
ansiでmktempやgetenvで帰ってきたポインタってfree()する必要あるんですか?
それともしちゃいけないんですか?
0190デフォルトの名無しさんNGNG
お前はfreeに付いて何も分かって無い
kusakabe先生に教えてもらえ w
0191デフォルトの名無しさんNGNG
Cプログラムを書くのにお勧めのエディタってありますか?
メモ帳だといくらなんでもキツイので。
できればフリーのエディタがいいです。
0192デフォルトの名無しさんNGNG
この下の「書き込む」って言う所で開発してるよ
超おすすめ
0193Kusakabe YouichiNGNG
In article >>190, デフォルトの名無しさん/190 wrote:

> お前はfreeに付いて何も分かって無い
> kusakabe先生に教えてもらえ

とかけばそう思うひとがいるかもしれないという効果を狙って書いたのでしょうか? :)

# 無駄なような。
0194Kusakabe YouichiNGNG
In article >>191, デフォルトの名無しさん/191 wrote:

> Cプログラムを書くのにお勧めのエディタってありますか?

viは?

> メモ帳だといくらなんでもキツイので

エディターのせいにしないように
0195189NGNG
んで、結局どうなの?
0196デフォルトの名無しさんNGNG
>>195
だめ
0197デフォルトの名無しさんNGNG
理論OR演算子が表示できません
どうすりゃいいんですか?
0198デフォルトの名無しさんNGNG
|||||||||||||||||||||||||||||||||||||||

>>197
どう?
0199Kusakabe YouichiNGNG
In article >>197, デフォルトの名無しさん/197 wrote:

> 理論OR演算子が表示できません
> どうすりゃいいんですか?

どんな環境を使っているんだろう。
0200デフォルトの名無しさんNGNG
フリーのコンパイラーつかってんだけど
ちゃんとした奴じゃないとダメなのかな?
因みにこれなんだけど
ttp://homepage1.nifty.com/kentake/
0201デフォルトの名無しさんNGNG
>>198
どうだすの?
0202デフォルトの名無しさんNGNG
シフトキーを押しながら\キーを押せば出るよ。
0203Kusakabe YouichiNGNG
In article >>200, デフォルトの名無しさん/200 wrote:

> フリーのコンパイラーつかってんだけど
> ちゃんとした奴じゃないとダメなのかな?
> 因みにこれなんだけど
> ttp://homepage1.nifty.com/kentake/

そんなゴミで遊んで時間つぶしている暇があるなら、
ふつうにCの勉強でもすればいいのでは?
0204デフォルトの名無しさんNGNG
ゴミはお前だし
普通じゃないのはお前の出た大学だけどね  ぷ
0205デフォルトの名無しさんNGNG
>>200
bccでも使えば?
0206Kusakabe YouichiNGNG
In article >>204, デフォルトの名無しさん/sage/204 wrote:

> ゴミはお前だし

とか意味のない反応してみたところでも無駄でしょう :)

すくなくとも
http://homepage1.nifty.com/kentake/
これはゴミでしょうね。そんなので無駄な時間使う暇があるなら、
ふつうのコンパイラーでも無料なのはいくらでもあるんだから、
それを使えばいいのでは?
0207デフォルトの名無しさんNGNG
たまにはまともな事も言うみたいだね
YahooBBSで教えてもらったのかな?
0208デフォルトの名無しさんNGNG
>>206
こいつ>>204に反応しないなんて大人ですな
0209デフォルトの名無しさんNGNG

    /⌒彡
   /冫、 )
   / `  ∩
  (つ  丿
  ( ヽノ
  し(_)
0210デフォルトの名無しさんNGNG
>>202>>203>>205>>206
センクス
0211ひしたぶNGNG
age
0212ヴォイドだこの野郎NGNG
>>206

と思いたいんだろてめー:)
0213デフォルトの名無しさんNGNG
質問です。

char a[] = { 65, 10, 0};
と
char a[] = { 65, 10, '\0');

は同じと考えてよいのでしょうか。バイナリのdiffを取ると同じになったのですが・・・
0214デフォルトの名無しさんNGNG
>>213
同じです。
0215デフォルトの名無しさんNGNG
(下段の閉じ括弧を除いて)
0216213NGNG
ああ、閉じカッコは間違いでした。
どうもありがとうございました>>214 >>215
0217問題NGNG
1.「プログラムを実行したときに」ディスプレイ上に自分の 学生証番号、氏名、住所 を表示するプログラムのソースを作成すること。

2.キーボードから入力された学生証番号、氏名、住所をディスプレイに表示するプログラム(このとき実行した人がキーボードから入力した学生証番号などが表示されるようにする)

3.ディスプレイに 整数nを入力するように表示し、0 からキーボードから入力された n 以下の偶数の和を求めその結果をディスプレイに表示するプログラム(2づつ数を増やすには +=2 を用いる)

4.ディスプレイに和を求める 番号 n を入力するように表示し、1,6,11...のような 5飛びの数の1から入力された番号nまでの和を求めてディスプレイに表示するプログラム(注意。k番目の数は 1+5*(k-1) で与えられる。)

5.10人の身長のデーターをキーボードから入力して、その平均をディスプレイに表示するプログラム(繰り返し文を使用すればよい)

6.ディスプレイに二つの 実数を入力するように表示して、キーボードから入力された二つの実数の 和、差、積、商(始めに入力された数割る二番目に入力された数)をそれぞれディスプレイに表示するプログラム

7.優、良、可にする最低点を実行時初めに設定できるようにし、その後キーボードから入力された学生の点数によって成績を優、良、可に振り分けるプログラム

8.キーボードから二つの実数を入力するように表示し、入力された二つの数を大きい順に並べて表示するプログラム

9.個人情報として、 氏名、年齢、住所、電話番号、趣味 を含んだ構造体を用いて、個人情報を入力できるプログラム

10.乱数を用いて 丁半 を表示するプログラム


解ける人は全て解いてみてください。…というよりお願いします(涙) 
0218デフォルトの名無しさんNGNG
>>217
マルチポストするなよ。
以後この件は宿題スレで。

宿題みてあげるっ
http://pc.2ch.net/test/read.cgi/tech/1007902384/
0219デフォルトの名無しさんNGNG
>>217
それくらい頑張って自分で解け
0220デフォルトの名無しさんNGNG
stat("foo", & statbuf);
chmod("foo", (statbuf.st_mode & S_IXGRP) | S_ISGID);

とあった時S_ISGIDビットがオンになりS_IXGRPがオフになると
詳細UNIXプログラミングのP82に書いてあるのですが
これではS_ISGIDビットだけが立つのではないのですか?

要するに
chmod("foo",S_ISGID);と同じ意味なのではないでしょうか?

間違っているのでしょうか?お願いします。
0221デフォルトの名無しさんNGNG
>>220
~S_IXGRP の間違いじゃない?
0222デフォルトの名無しさんNGNG
だよねぇ。
こんなバイブルと呼ばれている本にも誤植があるのかしら?
0223デフォルトの名無しさんNGNG
そりゃあります。どんな本にも間違いはあります。
読者から指摘を受けて、ちょっとづつ修正しながら10年くらいかけて100%に近づいていくのです。
たまに絶対に間違いを認めない人もいますが。
0224デフォルトの名無しさんNGNG
>>222

K&Rの第二版なら303ページに明らかな間違いが(笑)
0225デフォルトの名無しさんNGNG
正誤表
http://isweb22.infoseek.co.jp/play/haya_01/
0226長くてすみません・・・。NGNG
CreateProcess() 関数をつかって、子プロセスで実行されたプログラムへ
親プロセスからそのプログラムの標準入力へ文字を送り、その文字を加工して標準出力へ
文字を送ってそれを親プロセスから取得するプログラムを作成中なのですが、
うまくいきません・・・。 子プロセスに gets(buffer); printf("TEST[%s]",buffer);と
あるのですが、getsを待たずに、printfへ飛んでしまいます・・・。 親プロセスから得られる出力は、
TEST[] となってしまいます・・・。 どうやったら、子プロセスで実行されるプログラムのgets関数は、
標準入力に親プロセスから送られてくる文字を待ってくれるのでしょうか?
それぞれのコードは、次のメッセージにコピペします。
0227長くてすみません・・・。NGNG
コードが長すぎてここにコピペできなかったので、速攻でジオにページ作りました・・・。
メインのコードが
http://www.geocities.com/foobar_54321/main_code.html
です。

子プロセスで呼ばれるコードが
http://www.geocities.com/foobar_54321/test9.html
です。

よろしくお願い致します。
0228Kusakabe YouichiNGNG
In article >>224, デフォルトの名無しさん/224 wrote:

> K&Rの第二版なら303ページに明らかな間違いが

あの訳本なら誤植・誤訳だらけなのは有名ですが、
原書の話ですか? > 303
0229デフォルトの名無しさんNGNG
#include<stdio.h>
int main(void)
{
int u=0;
int x;
int y;
int z;
printf("足したい整数の数を入力して下さい:");
scanf("%d",&x);
for(y=1;y<=x;y++)
{
printf("No.%d:",y);
scanf("%d",&z);
u+=z;
}
printf("%d\n",u);
return(0);
}

これでいんだよね?
でも参考書には

#include<stdio.h>
int main(void)
{
int u=0;
int x;
int y;
int z;
printf("足したい整数の数を入力して下さい:");
scanf("%d",&x);
for(y=1;y<=x;y++)
{
printf("No.%d:",y+1);
scanf("%d",&z);
u+=z;
}
printf("%d\n",u);
return(0);
}

とか書いてあるからわけわからん??
0230デフォルトの名無しさんNGNG
>>229

変数宣言はまとめたら?
0231デフォルトの名無しさんNGNG
>>230
今度からまとめることにします
初期化はまとめとめない方がいいよね?
int x,y,z,u=0;
とか
0232デフォルトの名無しさんNGNG
>>231
まとめたって別にいいじゃん?
漏れは、この例みたいな一文字変数ならば>>231みたいにまとめちゃう。
視認性が気になるならば一文字変数はなるべく使わない。
0233デフォルトの名無しさんNGNG
>>232
なるほど
thx
0234デフォルトの名無しさんNGNG
Windowsで
画面に複数コントロールを置いたとして
C++などではクラス型にしてサブクラス化すればいいんだろうけれど
Cの場合はどうすればよいんですか?
例えばstatictextの背景色変えたりするのは
設計時に一つ一つのコントロールのwndprocを全部記述しないといけない?
うまい方法があれば教えてください。

最悪の方法はIf文でhandle比較だろうけれど
0235 ◆woDeLPHI NGNG
>234
 なんか
http://pc.2ch.net/test/read.cgi/tech/1009190994/337
http://pc.2ch.net/test/read.cgi/tech/1009071535/183
と同じ種類の質問かな?
0236 ◆woDeLPHI NGNG
だとすれば、
一番簡単なのは
1)SetWindowLongで GWL_USERDATA に背景色を埋め込む
2)WM_CTLCOLORSTATIC でコントロールハンドルから
 GetWindowLongして もう判るよね

事で、背景色だけじゃないなら構造体のポインタを渡してやればいいんじゃないの?
0237デフォルトの名無しさんNGNG
>>235 >>235 SetWindowLonf & GetWindowLongですね、
ようはsetwindowLongでHandleに構造体のポインターを読ませるということですね。

大体見えてきました。ありがとうございます。
0238 NGNG
非常にアホな質問だけど、 返り値ってintとbool(BOOL)どっち使うべきなの?
intはエラー値が返せるつーのはあるんだろうけど、mfcはBOOLだよねぇ
統一できねぇ〜〜

boolの存在意味がわからん。エラー値不要の部分に使うにしてもtrue/falseが逆で混乱の元
一体なんに使うの?
0239デフォルトの名無しさんNGNG
>>238
統一しなくていいから、
関数の前に引数と戻り値の説明を
コメントでつけとけ。
0240デフォルトの名無しさんNGNG
>boolの存在意味がわからん。

1bitで表現できるから、メモリの節約になるんだよ。
(と言ってる人がいたら要注意)
0241デフォルトの名無しさんNGNG
>>1
Cで書いたプログラムの一部を、アセンブリ言語で書く方法を
教えろよ。 
0242デフォルトの名無しさんNGNG
>>241
そういう態度なら一生教えません。
0243デフォルトの名無しさんNGNG
>>242
なんで? おしえてよ、知りたいんだよ。
0244デフォルトの名無しさんNGNG
>>241
処理系依存。
0245デフォルトの名無しさんNGNG
>>241
unsigned char asmcode[]にアセンブラコードぶち込んで
そこめがけてジャンプすりゃいいんだよ。
0246デフォルトの名無しさんNGNG
>>241
例えば、DOSのCの関数をASMで書くときは、その関数の名前の先頭に
アンダーラインを足した名前のプロシージャを書くだろ? そして、関数を
呼び出すと、関数の引数が右から順にスタックに積まれて、関数の実体
である、ASMで書いたコードがcall命令で呼び出されるって寸法じゃん。
 けど、これって、Windowsでも通用するやり方なんかな。 
0247デフォルトの名無しさんNGNG
>241
 貴方の命題は自己矛盾しており実現不可能です

お使いのコンパイラをご指示頂ければ回答可能な質問としては

1)Cのソースがあり、コンパイル出力の一部をアセンブリソース形式で出力したい
2)Cのソースの一部をアセンブリ言語で書き直したい
3)Cのソースの一部にアセンブリ言語を埋め込みたい

があります。
0248デフォルトの名無しさんNGNG
>>246
もちろん通用する。
0249241NGNG
>>247
けっこう難しい日本語だね。 2と3の違いがけっこう微妙で分かりに
くいよ。 まあ、要は、cの関数をアセンブラのコードで直接書くって
やり方だよ。
0250デフォルトの名無しさんNGNG
>>241
ホントにむかつく態度だな。

Cの関数内にアセンブラコードを埋め込む(インラインアセンブラ)のと
アセンブラで書いてアセンブルしたオブジェクトをリンクするのでは
やり方が違う。

おまえは前者でもやってろよ。
0251デフォルトの名無しさんNGNG
たぶん>>241はチョンブラなんだよ。
暴力的なことが男らしいと痛い勘違いをしてるんだよ。
0252241NGNG
>>250
まあ、まあ、そんなにプンスカすんなよ。又ー利いこうよ、又ー利と
 インラインアセンブラ使ったら、擬似命令つかえねーじゃん。
オレが言ってるのは、それぞれ別々に、コンパイルとアセンブルして
オブジェクトを結合するやり方なんだよ。 
■ このスレッドは過去ログ倉庫に格納されています