C言語なら、俺に聞け! <9>
■ このスレッドは過去ログ倉庫に格納されています
0001C言語ハッカー Kusakabe Youichi
NGNGあちこちの言語に手を出したが結局極めたのは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
0685デフォルトの名無しさん
NGNG0.1*10;
0686デフォルトの名無しさん
NGNG深入りしたくない場合、
予め計算機で計算して即値で 1 と書いておきます。
言語によっては、RationalとかRatio aとかのクラスか型が
有るので、それを使います。
0687686
NGNG0688デフォルトの名無しさん
NGNGそれって数学的に正しい答えが出るって保証されてるの?
0689デフォルトの名無しさん
NGNGint main(void)
って書いてあるけど、これって正しいの?
int main()
のほうがいいんじゃないの?
0690デフォルトの名無しさん
NGNGANSI C準拠のコンパイラならどちらでもいいと思うけど。
0691デフォルトの名無しさん
NGNGmain(void)の方が良いだろう。
0692デフォルトの名無しさん
NGNGあんさん、それプロトタイプ宣言の時だけですぜ。
最後にセミコロンが無いから、689は関数定義の話をしていると思われ。
0693デフォルトの名無しさん
NGNGint main(void);
で、関数の時は
int main()
でいいんですね?
0694デフォルトの名無しさん
NGNGchar 型の範囲が、0 〜 255
のものって生き残ってるの?
0695デフォルトの名無しさん
NGNG0696デフォルトの名無しさん
NGNG0697デフォルトの名無しさん
NGNGchar が signed ではなく unsigned のものがあるか、って話?
0698デフォルトの名無しさん
NGNGそう。
getchar()をcharで受けてはいけない。int で受けなさい、という説明で、
現在のコンパイラーでは、charは -125〜126 だけど、古いコンパイラーでは
0 〜 255 だから、EOFで-1を返すgetchar()を受けるときは、安全性を考慮してintで宣言する、という
説明を読んで、そんな古いコンパイラーいまだに使ってるところあるのかよ。と思ったのです。
あと、ANSI的にはどっちが正しいの?
0699デフォルトの名無しさん
NGNG>ANSI的にはどっちが正しいの?
char が符号付か符号無しかは、処理系によって違う。
あたらしい、古いの問題じゃなくて。
0700デフォルトの名無しさん
NGNGgetchar()で返すのはEOFと0〜UCHAR_MAXのUCHAR_MAX+1通り。
(charが8bitの場合は-1〜255の257通りね。)
signed charでもunsigned charでも足りんと思わんか?
0701デフォルトの名無しさん
NGNG/J default char type is unsigned
ちなみに -125〜126 ってのはいったいどこから出てきた数字?
-127〜127 または -128〜127 ならわかるが。
0702デフォルトの名無しさん
NGNG> -127〜127 または -128〜127 ならわかるが。
-127〜127ってのはいったいどこから出てきた数字?
-128〜127 ならわかるが。
0703701
NGNG<limits.h> SCHAR_MIN/MAXの最小値は -127,+127 と規定されとる
世の中「2の補数系」ばかりじゃないからな
0704デフォルトの名無しさん
NGNG> -127〜127ってのはいったいどこから出てきた数字?
1 の補数表現でしょ。
0705Kusakabe Youichi
NGNG> 入門書を見ると
> int main(void)
> って書いてあるけど、これって正しいの?
どの入門書ですか?
0706Kusakabe Youichi
NGNG> >>697
> そう。
> getchar()をcharで受けてはいけない。int で受けなさい、という説明で、
> 現在のコンパイラーでは、charは -125〜126 だけど、古いコンパイラーでは
> 0 〜 255 だから、EOFで-1を返すgetchar()を受けるときは、安全性を考慮してintで宣言する、という
> 説明を読んで、
そりゃ説明が間違っているって。
べつにunsignedのがあるからintになっているわけじゃあない。
いったいどこにそんなウソの説明が書いてあったんだ。
0707デフォルトの名無しさん
NGNG0708デフォルトの名無しさん
NGNGhttp://www.bell-labs.com/
0709
NGNG0710デフォルトの名無しさん
NGNGってどんなんだ?
sigaction()の使い方、とかだったらUnix系のフリーソフトのソース
見るんじゃ駄目なのか?
0711デフォルトの名無しさん
NGNGプログラミング止めた方がいいよ
0712デフォルトの名無しさん
NGNG呼び出す前に調べる方法無いですかね?
0713Kusakabe Youichi
NGNG> sprintfが出力する文字数を、
> 呼び出す前に調べる方法無いですかね?
sprintfをエミュレイトする関数をつくればいい:)
0714デフォルトの名無しさん
NGNGfprintf, vfprint で /dev/null (\\.\null) に書き出して、戻り値をチェック。
0715デフォルトの名無しさん
NGNGそれが面倒なので…
>>714
winの場合は"\\.\null"のファイル開いてそこに書き出すってことですよね。
ありがとうございます。
0716デフォルトの名無しさん
NGNG0717デフォルトの名無しさん
NGNG> winの場合は"\\.\null"のファイル開いてそこに書き出すってことですよね。
Yes
ただファイル名は \\.\nul が正解 (l は1つ)ね。すまん。
0718デフォルトの名無しさん
NGNG簡単な奴ご存知でしょうか?
あとひらがなをかたかなに変換する関数とかあったら
お願いします。
0719雪江
NGNG簡単に実装するには、ひらがなデータベースをつくって
全文字比較 ・・・でしょうね。
変換もまた同じです。
文字コード関係は煩雑だから適当なライブラリを拾うといいと思いますよ
がんばって
0720デフォルトの名無しさん
NGNGどうもありがとう! 頑張ります。
0721デフォルトの名無しさん
NGNG0723デフォルトの名無しさん
NGNG突っ込まなくてもいいのですか?
文字コードがどうのとか言わなくていいのですか?
0724さんばー
NGNGでデータを送信するプログラムをC+winsockでを書いているのですが、
closesocketするか、プログラムを終了させないとデータが届きません。
おそらくどこかにバッファされてしまっているのでは、
と思っているのですが、どのようにするとすぐにsendした内容が
届くように出来るのでしょうか。
0725デフォルトの名無しさん
NGNGバンド外データとして送信したいのか?
winsock.h
#define MSG_OOB 0x1 /* process out-of-band data */
つーか、スレ違いだけどな。
0726さんばー
NGNGすみません単に間違えました。フラグは0にしています。
perlだと $|=1;してストリームをフラッシュしますよね。
このような動作が必要なのではと思っているのですが・・・
0727デフォルトの名無しさん
NGNG0728味噌醤油醸造株式会社
NGNGint n = 1000000;
puts((const char*)&n);
0729デフォルトの名無しさん
NGNGおいおい、ネタか?
'\0'が見つからなくて暴走する可能性があるぞ。
>>727
> puts() って数字は出力できないの?
できん。文字列に変換しろ。
char buf[100]; // バッファサイズは適当
sprintf(buf, "%d", n);
puts(buf);
0730デフォルトの名無しさん
NGNGしばらく時間がたつと送信されると思うけど
バッファしてほしくないときはsetsockoptでTCP_NODELAYを指定する。
0731デフォルトの名無しさん
NGNGsscanf(line,"%s %s...", data1,data2,...)としたいのですが、
フォーマットの形式が極端に長い場合、これを使うと書くのに時間が
かかるのですが、これ以外の方法はないのでしょうか?
0732デフォルトの名無しさん
NGNGエディタにコピーの機能はないのでしょうか?
0733Kusakabe Youichi
NGNG> sscanf(line,"%s %s...", data1,data2,...)としたいのですが、
> フォーマットの形式が極端に長い場合、これを使うと書くのに時間が
> かかるのですが、これ以外の方法はないのでしょうか?
そんなにかかりませんよ。
全部%sばかりで同じ繰り返しならば、
少しは速くする方法はありますが、まあそれでも3倍速くなるわけではないですが。
0734デフォルトの名無しさん
NGNGEmacs Lisp でマクロを組む。
0735まあ
NGNGこんなのはどう?
0736そもさん
NGNGマルチスレッド化するとき
スレッドセーフでないかもしれない
malloc/free(new/delete)を遣うときは
クリティカルセクションでくるむべきでしょうか?
0737デフォルトの名無しさん
NGNG間に1つクッションいれた設計にしたらどーかしら?
poolアロケーターとか、GCつかうこと考えてもいいんじゃない?
www.annexia.orgにある、c2libってなかなかいいよ。
0738デフォルトの名無しさん
NGNGどうやってつくるんだ?
0739デフォルトの名無しさん
NGNG0740736
NGNGありがとうございます。
メモリ管理を集中的に行うオブジェクトを導入して
オブジェクトのミューテックスにするという理解で良いでしょうか。
なるほど・・綺麗です。
>www.annexia.orgにある、c2libってなかなかいいよ。
ありがとうございます、見てきます〜。
0741デフォルトの名無しさん
NGNG何に使うんだ?
0742デフォルトの名無しさん
NGNG何なのか教えてください。
c2libはこの前つかったんですがUNIX系な環境でCでサーバー
書く目的には便利ですよ。Apacheのpoolベースの文字列、
各種コンテナ関数が独立したライブラリになったようなかんじです。
0743736
NGNG>スレッドセーフじゃないかもしんない環境って
古い libc や DOS+gcc や組み込み系のオールドな環境です
今日びスレッドセーフでない環境のほうが珍しいと思われます。(^^;
0744デフォルトの名無しさん
NGNGunsigned char array[128/8][5];
int a120 = ((array[120/8][0]>>(120%8)) << 0)
| ((array[120/8][1]>>(120%8)) << 1)
| ((array[120/8][2]>>(120%8)) << 2)
| ((array[120/8][3]>>(120%8)) << 3)
| ((array[120/8][4]>>(120%8)) << 4);
0745デフォルトの名無しさん
NGNGそうでしたか。Thanksです。気を使うことが多くて大変そうですね。
パズルといてるみたいで面白いかも?
処理効率の面で許されるならなるたけ「富豪的」にGCやプールで
ラクしたいですね。Bohem GCやc2libは使えるかどうか不明ですが、
参考にはなりそうですね。
0746736
NGNG>処理効率の面で許されるならなるたけ「富豪的」にGCやプールで
>ラクしたいですね。
はい。スレッド消滅時にはアロケートしたメモリは解決する必要が
あるのでGCに処理してもらえると楽になります。メモリ管理だけでも
(私にとって)奥深いです。
0747デフォルトの名無しさん
NGNGえっと話かわりますが、Hoardっつーのを思い出しました。
dosとか古いlibc向け用途にはダメですが、なかなか
ぐっとくる宣伝文句ですよ。
http://www.cs.utexas.edu/users/emery/hoard/
0749雪江
NGNGhttp://3.141592653589793238462643383279502884197169399375105820974944592.jp/
円周率です。どうぞ。
0750デフォルトの名無しさん
NGNGconst char *PI =
"3.14159265358979323846264338327950288419716939937510"
"58209749445923078164062862089986280348253421170679";
int main()
{
puts(PI);
return 0;
}
0751デフォルトの名無しさん
NGNGグローバルで、
struct _data{
int id;
char szdata[32];
}data[16]:
とかやって、
void func1(){
........
........
strcpy(data[1].szdata,"hogehoge");
printf("%s\n",data[1].szdata);
return;
}
とやると、ここでのprintfではきちんと参照できるのですが、
別関数で、
void func2(){
printf("%s\n",data[1].szdata);return;}
とやると、data[1].szdataには何にも格納されていないのですが、
なにか根本的に間違ってますか?
0752デフォルトの名無しさん
NGNG間違ってるようにま見えません。
なにか他のことが原因になってるのでは?
0753デフォルトの名無しさん
NGNGほかの参考書などをみるに、ほとんどが
void main()内で、
struct _data data[16]などと
やっているものが多く、グローバルなデータベースとして
扱っているものが見当たらず、できないのかとも思ってしまいました
・・・・なんででしょ(・・・少しいらいらします)
0754デフォルトの名無しさん
NGNG的外れかもしれませんがvolatile宣言をつけてみてはどうでしょうか?
0755Kusakabe Youichi
NGNG> >>752
> ほかの参考書などをみるに、ほとんどが
> void main()内で、
> struct _data data[16]などと
どんな本を読んでいるのでしょうか?
0756Kusakabe Youichi
NGNG> 構造体のところではまっているのですが、
> グローバルで、
(中略)
> なにか根本的に間違ってますか?
(1)「グローバルで」といいつつ関数定義のスコープ内で行っている。
(2)「別関数」といいつつ実はそれはべつのコンパイル単位にある。
(3)「値が格納されていない」ってのは実はコンパイルエラーがでてる。
(4) func1を呼び出す前にfunc2を呼び出していた。
(5) 実はfunc1は呼び出されていなかった。
(6) 1のつもりでlと書いていた
...
なんてことがないことを示すために
ソースをそのまま書いた方が早いと思うが。
0757731
NGNGレスありがとうございます。
楽せずにコピペを繰り返すことにしました。
0758人間のくず
NGNGという問題教えてくれませんか?
if構文の問題なんですがelse if などがよく分かりません
0759初心者
NGNGファイルから文字列を読み込み表示してそれをタイプ
するんですがどうしてもgets()関数を実行してくれません。
どうしてですか?
void num(){
int n=100,i;
FILE *fp;
char honbun[10],fname[5],type_moji[10];
scanf("%s",fname);
fp1=fopen(fname,"r");
if(fp1==NULL)
exit(-1);
do{
printf("%s", fgets(honbun,n,fp1));
gets(type_moji);
}
while(!strcmp(honbun,type_moji));
fclose(fp1);
}
0760初心者
NGNG0761デフォルトの名無しさん
NGNGうるう年の計算方法はわかりますか?
0762デフォルトの名無しさん
NGNG>char honbun[10],fname[5],type_moji[10];
いろいろあるけど、とりあえず、こうしてください。
char honbun[1024],fname[256],type_moji[1024];
0763初心者
NGNGやっぱり出来ませんです。
0764HELP!!
NGNG↑
966-967
0765デフォルトの名無しさん
NGNGファイルのオープンは成功してますか?
0766758
NGNGそれくらいは分かります。
月が2・4・6・9・11月でないときは31日。
月が4・6・9・11月のときは30日。
月が2のとき
西暦が100の倍数のとき400の倍数のときはうるう年で29日
そうでない場合は28日
西暦が100の倍数ではないが4の倍数のときうるう年で29日
そうでないときは28日
これをどう書いたらいいのかよく分からないんです。
0767?Sメ
NGNGファイルはオープンできてます。
読み込んだ文字列を表示して終ってしまいます。
0768Kusakabe Youichi
NGNG> 西暦が100の倍数のとき400の倍数のときはうるう年で29日
> そうでない場合は28日
> 西暦が100の倍数ではないが4の倍数のときうるう年で29日
> そうでないときは28日
2行めと4行めは同じ場合では?
あと「4の倍数じゃないとき」を忘れてますね。
> これをどう書いたらいいのかよく分からないんです。
ちゃんとした入門書でも買ったらどうでしょう?
0769初心者
NGNG<<759
お願いします。
0770デフォルトの名無しさん
NGNGもっと簡単に、
西暦が400の倍数のとき、29日
!(西暦が100の倍数) && (西暦が4の倍数)、29日
その他、28日
とすれば。
0771名無し
NGNG0772デフォルトの名無しさん
NGNGhttp://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/
これでいけるかな?
ちいうか検索くらいしれ。
0773名無し
NGNG西暦が400の倍数のとき、29日
西暦が100の倍数のとき、28日
西暦が4の倍数のとき、29日
その他、28日
の方が素直な感じがするけどな。
0774Kusakabe Youichi
NGNG> Kusakabe Youichi さん
> <<759
> お願いします。
ん? それは何ですか?
0775デフォルトの名無しさん
NGNGまっ、それでもいいけど(W
0776初心者
NGNG出来ました。ありがとうございました。
>> Kusakabe Youichi
759をやってもらいたかったのです。
でも出来ました。また宜しくお願いします。
0777初心者
NGNGことによって終った場合 改行文字が含まれていますよね。
それを消す方法はないんですか?
0778名無し
NGNG0779デフォルトの名無しさん
NGNGこれはstdio.hには入っていない関数なんですか?
そんなもの定義されていないってエラーくらいました…。
どの本見ても他のヘッダファイルをインクルードしていないのに
この関数が当たり前のように使われているんですが。(カニチャーハンですら)
なにか私の知らないインクルード技術を使っているっていうことなんでしょうか?
0780名無し
NGNG0781Kusakabe Youichi
NGNG> 出来ました。ありがとうございました。
> >> Kusakabe Youichi
> 759をやってもらいたかったのです。
なんだろう?
0782初心者
NGNG0783Kusakabe Youichi
NGNG> fgetsでとってきた文字配列には改行を読み込む
> ことによって終った場合 改行文字が含まれていますよね。
> それを消す方法はないんですか?
Do you have a rubber? (英)
Do you have an eraser? (米)
172ペイジに書いてありますよ > それを消す方法は
■ このスレッドは過去ログ倉庫に格納されています