トップページ⇒tech
909コメント312KB

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001C言語ハッカー Kusakabe YouichiNGNG
おれは21才、9年間プログラムを一生懸命作ってきた。
あちこちの言語に手を出したが結局極めたのは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言語なら、オレに聞け! <8>
http://pc.2ch.net/test/read.cgi/tech/1005811510/l50
0809デフォルトの名無しさんNGNG
おい、ここで相手するなって >反応してる人 (いや真面目な話)
0810Kusakabe YouichiNGNG
In article >>806, デフォルトの名無しさん/806 wrote:

> kusakabeはむかつくことを言うときに使用する共用ハンドルですか?

っていうかわたしはごく普通のことしか言ってないのですが、
何が気になるんですか?
0811Kusakabe YouichiNGNG
In article >>808, デフォルトの名無しさん/sage/808 wrote:

> >>806
> そのとおり、本物はどうでもいい昔話が好きなちょっとウザイおじいちゃんです。

ということにしたいのですね? :)
0812デフォルトの名無しさんNGNG
どうでも良いけど、文字化けうざいよ。
折角でしゃばって名前入れてもらったんだから
NKF32使えば? って又雑談ごめんなさい→他の人
0813デフォルトの名無しさんNGNG
糞壁キモイ!!
0814Kusakabe YouichiNGNG
In article >>812, デフォルトの名無しさん/sage/812 wrote:
> って又雑談ごめんなさい→他の人

本気でそう思っているなら、えらそうに書かなきゃいいのに
(実際には思ってもいないことを書いたのだろうけど)
0815Kusakabe YouichiNGNG
In article >>812, デフォルトの名無しさん/sage/812 wrote:
> って又雑談ごめんなさい→他の人

本気でそう思っているなら、えらそうに書かなきゃいいのに
(実際には思ってもいないことを書いたのだろうけど)
0816デフォルトの名無しさんNGNG
@echo off
0817 NGNG
eの値を小数点以下100桁まで求めるプログラムと
πの値を小数点以下100桁まで求めるプログラムを教えてください。
0818デフォルトの名無しさん NGNG
( ´,_ゝ`) アッソー
0819デフォルトの名無しさんNGNG
>>791
> VC++で
> D:\VisualStudio6.0\VC98\make\Text.cpp(13) : error C2065: 'exit' : 定義されていない識別子です。
> と言われているんですが…これでは証明になりませんか?
Text.cppをText.cにファイル名を変更してからコンパイルしてみろ

ちなみにbcc32だと警告はでるがコンパイルはできる
C:\temp>bcc32 text.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
text.c:
警告 W8065 text.c 3: プロトタイプ宣言のない関数 'exit' の呼び出し(関数 main )
警告 W8070 text.c 4: 関数は値を返すべき(関数 main )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

また、上記ソースを-Pオプションをつけ、
C++としてコンパイルするとエラーとなる
C:\temp>bcc32 -P text.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
text.c:
エラー E2268 text.c 3: 未定義の関数 'exit' を呼び出した(関数 main() )
*** 1 errors in Compile ***

結論:CとC++は微妙に違う
0820(・∀・)イイNGNG
厨房ですいません。

#define NDEBUG
の
NDEBUGは何をするものなんでしょうか?
0821デフォルトの名無しさんNGNG
>>820
なにもしないよ
0822デフォルトの名無しさんNGNG
>>820
デバッグ用のマクロを無効にするやつ。
詳しくは検索してちょ。
0823デフォルトの名無しさんNGNG
>>821
するだろ。

>>820
assert() を検索。
0824(・∀・)イイNGNG
つまりasssert()を無効にするってことなんですね。
わかりました。ありがとうございます。 m(_ _)m
0825教えてくんNGNG
2つ質問があります。
1.実行ファイルのあるディレクトリの取得方法
2.隠しファイルの作り方
OSはUNIX系です。
0826デフォルトの名無しさんNGNG
>>825
移植性のある方法はない。
0827教えてくんNGNG
じゃあLinuxに限った方法でいいです。
0828デフォルトの名無しさんNGNG
>>826

条件付きコンパイルでいいじゃん。
0829デフォルトの名無しさんNGNG
>>825
> 1.実行ファイルのあるディレクトリの取得方法
一般的にはargv[0]をみてPATHを検索するとかくらいしかないが、不確実。

> 2.隠しファイルの作り方
ファイル名の先頭に.(ピリオド)をつける
0830Kusakabe YouichiNGNG
In article >>825, 教えてくん/825 wrote:

> 1. 実行ファイルのあるディレクトリの取得方法

man sh

> 2. 隠しファイルの作り方

man chmod

manの使い方がわからないなら、

man man
0831Kusakabe YouichiNGNG
In article >>829, デフォルトの名無しさん/sage/829 wrote:
> > 1. 実行ファイルのあるディレクトリの取得方法
> 一般的にはargv[0]をみてPATHを検索するとかくらいしかないが、不確実。

「実行ファイルのある」をその意味にとりましたか...。
っていうかunixだったら、そこには入ってないのでは?
0832教えてくんNGNG
>>829
ありがとうございました。
なるほど、設定ファイルの最初に.が付くのはそのためですか。

>>830
シェルではなく、C言語でコーディングする方法はありませんか?
0833デフォルトの名無しさんNGNG
>>832

system関数じゃだめなのか?
0834デフォルトの名無しさんNGNG
>>825
> 1. 実行ファイルのあるディレクトリの取得方法
man which
0835教えてくんNGNG
PATHを検索しても、シンボリックリンクの場合はだめですよね。
0836Kusakabe YouichiNGNG
In article >>832, 教えてくん/832 wrote:
> シェルではなく、C言語でコーディングする方法はありませんか?

man fchmod

Cの入門書の1つぐらい買いましょう。
0837教えてくんNGNG
>>836
入門書も持ってますけど、標準関数を網羅したのは高いので…。
リファレンスとして、LSI-Cのマニュアルを使っています。
だからUNIXだとわからないことが多いんですよ。
0838デフォルトの名無しさんNGNG
>>837

なら素直に従ったら?
0839デフォルトの名無しさんNGNG
>>831
> 「実行ファイルのある」をその意味にとりましたか...。

あぁ、自分自身じゃなくてか。

> っていうかunixだったら、そこには入ってないのでは?

だから不確実だって。
Linux限定なら

readlink("/prco/self/exe", buf, sizeof(buf))

で自分自身のパスも取れるけどね。
0840デフォルトの名無しさんNGNG
>>836
> man fchmod
>
> Cの入門書の1つぐらい買いましょう。
Unixの入門書じゃなくて?
0841Kusakabe YouichiNGNG
In article >>837, 教えてくん/837 wrote:
> 入門書も持ってますけど、標準関数を網羅したのは高いので…。

標準ともかぎりませんよ。
それに「高い」って、いくらぐらいまでなら買えるのですか?

> リファレンスとして、LSI-Cのマニュアルを使っています。
> だからUNIXだとわからないことが多いんですよ。

manならタダじゃん。
0842Kusakabe YouichiNGNG
In article >>839, デフォルトの名無しさん/sage/839 wrote:

> >>831
> > 「実行ファイルのある」をその意味にとりましたか...。
>
> あぁ、自分自身じゃなくてか。

いや、どっちの意味かわたしもわからないです。
わたしはたぶんそっちじゃないと思う。
0843Kusakabe YouichiNGNG
In article >>840, デフォルトの名無しさん/sage/840 wrote:

> >>836
> > man fchmod
> >
> > Cの入門書の1つぐらい買いましょう。
> Unixの入門書じゃなくて?

そっちはmanでいいのでは?

お金ないみたいだし。
0844デフォルトの名無しさんNGNG
Kusakabe氏はchmod系列の関数を出してるけど、Linuxって「隠しファイル」
という属性があるの?
0845デフォルトの名無しさんNGNG
ファイル名が . で始まるファイルはドットファイルといわれ、
DOS でいうところの隠しファイル扱い。
0846839NGNG
> readlink("/prco/self/exe", buf, sizeof(buf))
readlink("/proc/self/exe", buf, sizeof(buf))

欝山車
0847Kusakabe YouichiNGNG
In article >>844, デフォルトの名無しさん/sage/844 wrote:

> Kusakabe氏はchmod系列の関数を出してるけど、Linuxって「隠しファイル」
> という属性があるの?

...
そのファイルの属するディレクトリーのrとxで隠すっていう意味じゃなく?
0848デフォルトの名無しさん NGNG
ヴぁーカそりゃディレクトリの属性だろが
お前の生まれた皮革産業地域以外では
UNIXの隠しファイルはドットファイルの事指すんだよ
役立たずはとっとと消えろ、四足が
0849Kusakabe YouichiNGNG
In article >>848, デフォルトの名無しさん /sage/848 wrote:

> ヴぁーカそりゃディレクトリの属性だろが

そうですよ。-rのときと-xのときの違いはわかってますよね? (わかってないのかな?)

> UNIXの隠しファイルはドットファイルの事指すんだよ

はつみみです。それは隠しファイルとは呼ばないような.。
0850デフォルトの名無しさんNGNG
すごい言われようだ (^−^;
0851Kusakabe YouichiNGNG
In article >>850, デフォルトの名無しさん/sage/850 wrote:

> すごい言われようだ (^−^;

ですね。でも結局は自分が恥をかくだけ...っていうか
言えばいうほどあとで恥ずかしいだけでしょうけど、
でもまあ匿名ですからね。
0852デフォルトの名無しさんNGNG
825への回答としては「Linuxには(Windowsで言うような)隠しファイルは無い」
が正解なんじゃないかなあ。
0853Kusakabe YouichiNGNG
>>851
Kusakabe Youichiで間違った事書いても、所詮、偽者だって言えば済む事ですしね。
0854デフォルトの名無しさんNGNG
IRCやNetNewsでは日下部先生に太刀打ちできないカスどもが必死だな(笑)
0855デフォルトの名無しさん NGNG
お前素人だろ、糞壁通の俺から言わせてもらえばコイツが潜在能力の全てを発揮するのは
NetNewsに於いてのみだよ。
ここだと常識を超える質と量の厨房に圧倒されて中々力を発揮出来ないと思ってるね。
後コイツは頭の回転が悪いからIRCだと駄目なんだよ、実際この粘着レス考えるのにも
ある程度考える時間が居るってのが痛いね。まあその点では善人って訳よ(アヒャ
まあ俺みたいな先天的ムカツキ発言野郎にはRCじゃ遠く及ばんわけよ OK?
0856デフォルトの名無しさんNGNG
>>855
おまえはKusakabe玄人。それでいいよ。
0857デフォルトの名無しさんNGNG
kusakabe原人
0858Kusakabe YouichiNGNG
In article >>853, Kusakabe Youichi/853 <[email protected]> wrote:

> >>851
> Kusakabe Youichiで間違った事書いても、所詮、偽者だって言えば済む事ですしね。

っていうか、とくに間違ったこと書いてないからもんだいないですね。

#「事」はひらがな。
0859Kusakabe YouichiNGNG
In article >>855, デフォルトの名無しさん /sage/855 wrote:

> お前素人だろ、糞壁通の俺から言わせてもらえばコイツが潜在能力のすべてを
> 発揮するのはNetNewsに於いてのみだよ。

そう自分に言い聞かせると安心できるのですね :)

> ここだと常識を超える質と量の厨房に圧倒されて中々力を発揮出来ないと思ってるね。

それは「希望」ですか? :)

> 後コイツは頭の回転が悪いからIRCだと駄目なんだよ、

はつみみです ;)
0860デフォルトの名無しさんNGNG
もうここではC言語の質問を出来そうにないな…。
初心者の漏れにとっては、すごくいいスレだったのだが。

「彼のいない」C言語質問スレってある?
もしあるならそこへ行って質問したいんだけど。
0861デフォルトの名無しさん NGNG
>>860
お前がここで聞いて、誰かが答えた時点でその板はもう
「彼のいない」C言語質問スレではない。
徹底的に無視して聞くか、だめなら2ちゃんでは聞くな。
0862デフォルトの名無しさんNGNG
>>860
ホットゾヌを入れて NG ワードに Kusakabe Youichi と指定しろ(メニューバーから [ツール]
- [NGワード設定])。これでヤツの発言は自動的に透明あぼーんされる。
0863Kusakabe YouichiNGNG
In article >>860, デフォルトの名無しさん/860 wrote:

> もうここではC言語の質問を出来そうにないな…。

ということにしたいのですね?
0864デフォルトの名無しさんNGNG
>>863

:)←これはどうした?
0865Kusakabe YouichiNGNG
In article >>864, デフォルトの名無しさん/864 wrote:
>:)←これはどうした?

ということにしたいのですね? :)
0866デフォルトの名無しさんNGNG
>>863
そうです。そうしたいです。
それ以外にどの様に読めますか?
0867デフォルトの名無しさんNGNG
標準入力から英文を読み込んでファイルに保存したいのですが、
scanf("%s")でfputs関数を使うのと、scanf("%c")でfputchar関数を使うのはどちらがいいですか。
0868デフォルトの名無しさんNGNG
かゎぃぃ
0869デフォルトの名無しさんNGNG
>>867
どっちでもいいよ。
scanf()は使わないにこしたことはないけどね。
0870デフォルトの名無しさんNGNG
>>867
getchar(), putc()
そもそもCにはfputcharという標準関数は存在しないし、
putcharは標準出力に出力する。

# その機能はcatでもできるような気がするが(゚ε゚)キニシナイ
0871867NGNG
>>870
ごめんなさいです。fputc使おうと思ってました。
どっちでもいいのはわかるんですが、一般的にどちらが使われているのか
知りたくて質問しました。
あと、もしstrという配列(バッファというやつですか?)を使ってファイルに書き出そうとしたら、
要素数はどのくらいがいいんでしょうか。
やっぱりstr[256]とか2の倍数がよいのでしょうか?理由は知りませんが…。
0872デフォルトの名無しさんNGNG
糞壁が煮詰まった時に連発する

ということにしたいのですね? :)

ってサッパリ意味がわからん。
何これ、キティ語なの?
0873デフォルトの名無しさんNGNG
>>872
その質問はスレ違い。
マ板の該当スレで聞け。
0874デフォルトの名無しさんNGNG
>>871
どこくらいのバッファがいいかは、実際に動かす環境で
実験してみるしかないね。
標準入出力関数を使えば、一応バッファリングはしてくれるから、
そんなにせいいっぱいの性能を求めるんじゃなかったら、
一文字ずつ処理してもいいよ。
0875デフォルトの名無しさんNGNG
>>871
最近のマシンなら、1メガくらいとってみるとか。>バッファ
0876867NGNG
>>874
ありがとうございます。
レスを読むと、どうも文単位で読み込むのが常識みたいですね。
とりあえずscanf("%s")→putsで作成してみます。
0877デフォルトの名無しさんNGNG
>>871 最高速を狙うなら fread/fwrite を使うべし。
バッファサイズは BUFSIZ を使うのが普通かもね。

だが、普通は getc()/putc()マクロを使えば十分速いです。
fgetc()/fputc() はたぶん一番遅いっす。
0878デフォルトの名無しさんNGNG
>>872

866 に返事を書けないことでわかるが、無意味な言葉。
「ぼく、降参」程度に受け止めておけばよい。
0879デフォルトの名無しさんNGNG
>>876
scanf("%s") 使うぐらいなら、fgets() 使えって。
キケンでなおかつ遅くて良いことないよ。
0880デフォルトの名無しさんNGNG
>>876
> とりあえずscanf("%s")→putsで作成してみます。
scanfでファイルの終わりをどうやって検出しようと思っているのか
小一時間問いつめたい
# まぁ無理すればできなくはないが...
0881デフォルトの名無しさんNGNG
>>876
scanfを使うと、シロウトあつかいされますよ。
0882デフォルトの名無しさんNGNG
>>880
戻り値見ろよボケ。
0883867NGNG
>>880
ファイルの終わりはctrl+Dで出力します。(UNIX環境です)
学校の自習問題の一部ですので…。

fgets()ならEOFの時NULLが返るので扱いやすいのでしょうか。
でも、これだと先ほどのstr[256]とかしたときに256文字を越える行が
出て来ると処理できないのかと思うのですが。
たとえば260字の行が出てきたら、最後4文字が読み込めないのではないですか?
これが気になってscanfを使おうと思っていたのです。
無知でスミマセン。
0884867NGNG
>>881
ほんと素人なので、右も左もわかんないんです。
なぜscanfを使うべきではないのか、理由を教えてもらえないでしょうか?(煽りではなく、マジ質問です)
0885デフォルトの名無しさんNGNG
>>882
それでもバッファオーバランを防止できないんですよ
そこでまたブチギレですよ。
0886デフォルトの名無しさんNGNG
>>884
> でも、これだと先ほどのstr[256]とかしたときに256文字を越える行が
>出て来ると処理できないのかと思うのですが。
fgetsは2回に分けて読めばいいのですが、
scanf, getsだと256文字を越える行が出て来ると
何が起こるかわかりません。
0887867NGNG
>>886
あ、二回に分けて読むことができるんですね。
それだとどんな長い文がきても安心できます。

ありがとうございます。
fgets→fputsでやってみることにします。
0888デフォルトの名無しさんNGNG
>>884
getchar(),fputc()で一文字ずつ処理したほうが簡単かも。
0889デフォルトの名無しさんNGNG
>>888
ヤーヤーヤー
0890867NGNG
ごめんなさい、もうひとつ質問させてください。
標準入力からファイルに書き出す時は、ファイルオープン、ファイルクローズをしなくてもよいのでしょうか?
0891デフォルトの名無しさんNGNG
>>890
> 標準入力からファイルに書き出す時は、ファイルオープン、ファイルクローズをしなくてもよいのでしょうか?
標準入力、標準出力、標準エラー出力は最初からopenされていて、
プログラム終了時にcloseされていることは保証されている。
だから(゚ε゚)キニシナイ
0892867NGNG
あ、うまくできました。
レス下さった皆さん、本当にありがとうございました!
0893デフォルトの名無しさんNGNG
bankers algorithmの日本語解説があるとこって知りませんか?
0894デフォルトの名無しさんNGNG
>>885
バッファサイズ指定しろあゴルァ
0895デフォルトの名無しさんNGNG
fgetsを使ってファイルポインターを次の行の先頭に持っていっている私は阿呆ですか?
0896デフォルトの名無しさんNGNG
K&Rの演習問題解けた人は
アンサーブックの通りになっていたのですか。

いや簡単なやつなら全く同じになりますが
複雑な方はちょっと
0897Kusakabe YouichiNGNG
In article >>880, デフォルトの名無しさん/sage/880 wrote:
> > とりあえずscanf("%s")→putsで作成してみます。
> scanfでファイルの終わりをどうやって検出しようと思っているのか
> 小一時間問いつめたい
> # まぁ無理すればできなくはないが...

そう「無理」はしなくてもいいでは?
0898Kusakabe YouichiNGNG
In article >>883, 867/883 wrote:
> ファイルの終わりはctrl+Dで出力します。(UNIX環境です)
> 学校の自習問題の一部ですので…。

その授業ではどんな教科書を使っているのですか?
0899Kusakabe YouichiNGNG
In article >>884, 867/884 wrote:

> >>881
> ほんと素人なので、右も左もわかんないんです。

<--こっちが右 こっちが左です-->

# 信用するかな?

> なぜscanfを使うべきではないのか、理由を教えてもらえないでしょうか?

教科書にそんなことも書いてないのですか?
0900!f84%3dm2NGNG
> 教科書にそんなことも書いてないのですか?

書いてない教科書多いと思うけど。
0901Kusakabe YouichiNGNG
In article >>900, !f84%3dm2/sage/900 wrote:

> > 教科書にそんなことも書いてないのですか?
>
> 書いてない教科書多いと思うけど。

いい教科書を選びましょうね。
0902igNGNG
早速ですが、質問があります。
c言語のキャストについての質問です。
環境は、Solaris2.6&SUNのccコンパイラです。

(intを返す関数へのポインタ)を(longを返す関数へのポインタ)型に
キャストするにはどのようにコードを書けばよいのでしょうか?
---以下、詳しい説明
(longを返す関数へのポインタ)をメンバ変数に持つ構造体
を宣言しました。
仮にこの構造体を
typedef struct {
long (*function)();
} sa;
とtypedefするとします。
その後、.cファイルの中で
sa va[]={{a},{b},{c}}
てな感じで宣言したいのです。
ただし、a(),b(),c()は、intを返す関数として定義してしまって
るんですよね…
だからキャストして{警告: 初期値設定の型が一致していません}
ってな警告を黙らせたいなと思ってます。
0903デフォルトの名無しさんNGNG
>>902
typedef int (*int_func)();
sa va[]={{(int_func)a},{(int_func)b},{(int_func)c}}

動作確認してないけど、こんな感じかな?
0904igNGNG
>>903
>>デフォルトの名無しさん
ありがとうございます。

このやり方でコンパイラは黙ってくれました。
ただ、
typedef long (*long_func)();
でしたけども。
0905デフォルトの名無しさんNGNG
>>904
>typedef long (*long_func)();

だね。スマソ。
0906デフォルトの名無しさんNGNG
ていうか、日下部がいようといまいと、2chで質問しなきゃ前に進めな
いような奴は最初から見込みないと思う(ゲラ
0907デフォルトの名無しさんNGNG
>>906
話が見えませんが…
0908Kusakabe YouichiNGNG
In article >>902, ig/902 wrote:
> ただし、a(),b(),c()は、intを返す関数として定義してしまってるんですよね…
> だからキャストして{警告: 初期値設定の型が一致していません}ってな警告を黙らせ

喇叭を使う :-P
レス数が900を超えています。1000を超えると表示できなくなるよ。