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
0655デフォルトの名無しさん
NGNG0656Kusakabe Youichi
NGNG> どうせKusakabeが変なソフト使ってるんでしょ。
私のは問題ないですね。
0657デフォルトの名無しさん
NGNGJIS X 0201仮名が化けたり、JIS X 0208の英数字をISO 8859-1に変換したり
するのは、少なくとも2chの閲覧に限っては問題あると思います。
閲覧するだけならどうでもいい話ですが、引用時にそれを行うのは著作者人格権の
同一性保持権を侵害していることになります。
0658Kusakabe Youichi
NGNG> JIS X 0201仮名が化けたり、JIS X 0208の英数字をISO 8859-1に変換したり
はつみみです。
0659デフォルトの名無しさん
NGNGstrcmpで文字列でなく (見た目上)文字を比較する方法を編み出したよ!
やり方は簡単さ!
int a = 'a';
int b = 'b';
if( strcmp(&a,&b) )printf("chigau\n");
ほら、これなら 文字を比較 してるように見えるだりろぉ?
あー石投げるな〜機種依存〜
0660デフォルトの名無しさん
NGNG変数名、引数名が適当すぎる。
それじゃ添削以前に、やってることが理解できないから
読む気がしない。
もっと意味のある変数名にするか、コメントで説明をつけてくれ。
変数名がちゃんとしていれば、コメントは最小限で済む。
0661デフォルトの名無しさん
NGNGif ( a < b ) kill(>>659);
0662Kusakabe Youichi
NGNG> つまらない。
> if ( a < b ) kill(>>659);
2項演算子ですね。
0663デフォルトの名無しさん
NGNG0664Kusakabe Youichi
NGNG> 下位7ビットでasciiをサブセットに持っていない文字コードは何があるの?
いくらでもあるとおもうが。
0665デフォルトの名無しさん
NGNGつまらない、って一刀両断することも無いだろ。
どうして特定の環境で>>659のコードが正しく動いてしまうのか
ということを考えてみた方が面白くはないか?
少なくとも俺が昔このコードを読ん
0666デフォルトの名無しさん
NGNG具体的に教えて。
そしてその文字コードを使うOSも教えろゴラア。
0667デフォルトの名無しさん
NGNG読ん?続きないの?
0668デフォルトの名無しさん
NGNG> 少なくとも俺が昔このコードを読んだときには一目で動く理由がわかったぞ
0669デフォルトの名無しさん
NGNG> 少なくとも俺が昔このコードを読んだら一目で恋に落ちたぞ
0670デフォルトの名無しさん
NGNG0671デフォルトの名無しさん
NGNGRS232Cシリアルポートの送受信ってどするのでしょう?
0672デフォルトの名無しさん
NGNG0673デフォルトの名無しさん
NGNGI/Oポートに直接ガンガン書けばいいんじゃない?
0674デフォルトの名無しさん
NGNG0675デフォルトの名無しさん
NGNG割り込みつかうのは邪道?
0676デフォルトの名無しさん
NGNGだいたいOSの上からは割り込みなんて使えんだろ。
0677デフォルトの名無しさん
NGNGリトルエンディアンでも、plain charがsigned charの処理系で
'\377'とかと比較したら面白いことになるな。
0678デフォルトの名無しさん
NGNGえーとレスつくようなのでもう少し説明。
環境 Win98でVC
状況
ぶっちゃけて言うと手付かずです。とりあえずどっかのサンプル見て
勉強してから質問しようと思ったんですけど、それすら見つからなかった。
局地的なプログラムならちらほらあったけど、よくわかるのはなし。
で、参考文献とかでもいいので教えてもらいたい。
目的
とりあえず、受信と送信を確立したい。
たぶんオレはすごく間抜けな質問してるんだろうな・・・みなさん大目にみてください。
ちなみにCの経験は大学の授業レベルです。
(つまりポートやタイマなんて関係のないプログラムしか作ったことないんです)
0679デフォルトの名無しさん
NGNGあとはファイルのリードライトと同じ要領。
ハンドシェイクやプロトコルは適当に自分で考えろ。
ってゆーかVC++関連スレのほうが良いのでは?
0680名無し
NGNGで、news<->2ch Converterの仕様か、iso-2022-jpの仕様かは
知らんが、UNICODE文字が、すべてはmapされない。
だから、Halfwidth Katakanaとかハングルとか、見えなくなってしまう
文字の出てくる可能性だって、あるわけ。
だれが悪いのか、って言えば‥‥‥文化摩擦としか。
#Halfwidth Katakana領域を正しく変換しないコンバータが責任かも
個人的には、UNICODE実体参照とかをどう処理するかも気になるが。
0681デフォルトの名無しさん
NGNG0682デフォルトの名無しさん
NGNGこんなのあったけど、どうか。
ttp://www.vector.co.jp/soft/win95/prog/se173131.html
0683681を全角に復元してみました
NGNG> クソカベニ ヨメナイヨウニ ハンカクカナ デカキコモウ 。。。 シネ クソカベ!!!
0684デフォルトの名無しさん
NGNG0685デフォルトの名無しさん
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宣言をつけてみてはどうでしょうか?
■ このスレッドは過去ログ倉庫に格納されています