トップページ⇒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/
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
詳しく
0186デフォルトの名無しさん2005/08/10(水) 23:12:15
>>185
>>1
0187デフォルトの名無しさん2005/08/10(水) 23:14:03
>>186
ウザス
0188デフォルトの名無しさん2005/08/10(水) 23:15:12
>>186
氏ね世
0189デフォルトの名無しさん2005/08/11(木) 01:09:39
コマンドプロンプトで、コマンドライン引数を使ってプログラムを動かす
のですが、コマンドライン引数の最大長はどのくらいまでですか?
引数の文字列を5000byteくらい使いたいのですが、そんな長さでも正常に
プログラムに引数が渡りますか?
試したら渡ったようなのですが、毎回渡りますか?
0190デフォルトの名無しさん2005/08/11(木) 01:11:16
環境依存
0191デフォルトの名無しさん2005/08/11(木) 01:12:20
int i;
char c;
c = 0xff;
i = c << 24;

これ、gcc3でコンパイルするとi==0xff000000になりますが、
この結果は規格で保証されてますか?
0192デフォルトの名無しさん2005/08/11(木) 01:14:00
>>190
環境依存とはどういうことですか?
0193デフォルトの名無しさん2005/08/11(木) 01:14:11
保証されてないんじゃないの?
0194デフォルトの名無しさん2005/08/11(木) 01:17:27
>>193
windows のコマンドプロンプトでしてますが、それ以外だとできないかも
ということですか。
0195デフォルトの名無しさん2005/08/11(木) 01:23:50
日本語書いてるんだから
日本語を読んで理解できるだろ?

> 環境依存
環境に依存

わかる?
0196デフォルトの名無しさん2005/08/11(木) 01:29:59
たとえばスタック容量不足で変数が消えるとか。賢くないコンパイラではへんなことになる。
0197デフォルトの名無しさん2005/08/11(木) 01:31:16
>>194
Microsoftが仕様として明文化していなければ、同じマシンでも動いたり
動かなかったりするかもしれない。
Posixでは4096バイトまでは大丈夫なはずだが、コマンドプロンプトが
Posixに準拠しているかどうかは知らない。
0198デフォルトの名無しさん2005/08/11(木) 01:31:37
>>191
int型が32ビットとは限らないんじゃないか?
0199デフォルトの名無しさん2005/08/11(木) 01:32:18
>>195
コミュニケーション能力ありますか?
0200デフォルトの名無しさん2005/08/11(木) 01:33:21
>>195が一番適切なレスだと思うんだが
0201デフォルトの名無しさん2005/08/11(木) 01:35:22
>>200
自演か以前自分がそういう感じで答えられて腹立ってんでしょ
0202デフォルトの名無しさん2005/08/11(木) 01:37:24
>>197
レスありがとうです。
さっきwindows 98で試してみましたが、116文字まででした。
windows xpだと4096バイトで試してもうまくいきました。
0203デフォルトの名無しさん2005/08/11(木) 01:39:06
心配するくらいならファイルに記録したものを読み込ませればいいのに。
リダイレクトやパイプが使えるのならそれ使ってもいいし。
0204デフォルトの名無しさん2005/08/11(木) 01:40:28
>>203
ファイルに記録してそれから読ませるようにしてみます。
0205デフォルトの名無しさん2005/08/11(木) 01:44:14
Win98だと116文字か…MAX_PATH以下ってどうなんだろ…
0206デフォルトの名無しさん2005/08/11(木) 01:44:17
>>198
すみません、こうでした。

long l;
char c;
c = 0xff;
l = c << 24;

<< 演算子の左オペランド c は char ですが、
この場合演算前に c が long に promote されることが
保証されているか、が気になっています。
0207デフォルトの名無しさん2005/08/11(木) 01:44:25
staticしる
0208デフォルトの名無しさん2005/08/11(木) 01:50:27
規格上保障されるかどうかより、現実の実装で確実性の高い手法を使うべし。

もちろん後から読んだときに誰でもわかるように、明示的にキャストしてやったほうがいい。
0209デフォルトの名無しさん2005/08/11(木) 02:05:59
>>206
int型以下のサイズの整数演算は、すべてint型で行われる
「格上げ」あたりのキーワードでぐぐるといいかも

intのサイズは処理系依存。
intのビット幅以上のビットシフトの結果も処理系依存。
0210デフォルトの名無しさん2005/08/11(木) 02:22:31
>>205
'FILENAME.EXT' (8 + 1 + 3 = 12)
116 + 12 = 128
0211デフォルトの名無しさん2005/08/11(木) 02:33:14
PSPの制限が由来だな。
doskeyか何かとconfig.sysの設定で
2倍程度までは増やせた気もするが。
0212デフォルトの名無しさん2005/08/11(木) 03:13:39
>>209
なるほど。この場合、intが16bitだとcharの24bit shift結果は
規格上ロストする可能性があるということになりますね。
>>208
そうですね。キャストすることにします。
0213デフォルトの名無しさん2005/08/11(木) 11:05:42
>>182
何がどう厨ネタなのかわからんのだが。
心配するな、お前には受け渡ししないから。
そして、仕事しなくていいから。
>そんな不細工なソースを人に受け渡しするなら殴ってもいい。
それは自分自身のことにならないように気をつけることだな。
0214デフォルトの名無しさん2005/08/11(木) 11:51:07
>に何の意味があるか解説すると、もっと面白くなるかもしれないが。
それを言うなら、何がどう厨ネタなのか「解説すると、もっと面白くなるかもしれないが。」
0215デフォルトの名無しさん2005/08/11(木) 12:10:34
>>208
>規格上保障されるかどうかより、現実の実装で確実性の高い手法を使うべし。
規格上保証されているわけではないが、現実の実装で確実性が高いからその手法でも
まあいい、というのはわかるが、規格が保証されているものよりもあえて、規格は保証
されないが、現実の実装で確実性が高いものを推奨するという意味なのかな。
0216デフォルトの名無しさん2005/08/11(木) 14:17:24
こんにちは

Win32には、::IsDBCSLeadByte(char byte)という、マルチバイト文字かどうかを確かめるAPIがあるのですが、
ANSIライブラリにこのAPIと同様の機能をするものがありますか?
Googleで調べたのですが、どうもHitしませんでした。

教えていただけると助かります。

よろしくお願いします。
0217デフォルトの名無しさん2005/08/11(木) 14:47:35
ありません。
0218デフォルトの名無しさん2005/08/11(木) 16:14:52
linux板の方がいいのかな。

gccなんですが、/usr/include/linuxの下のヘッダではなくて、
/home/hoge/work/include/linuxの下にあるヘッダを読ませたい
んですけど、どうすればいいんでしょう。C_INCLUDE_PATHを

/home/hoge/work/include:/usr/include

と設定してるんだけど、どうしても標準インクルードの方が
優先されちゃうみたいで。
0219デフォルトの名無しさん2005/08/11(木) 16:20:41
素直に -I 使えよ
検索順序としては
-I > C_INCLUDE_PATHのような環境変数 > 標準ヘッダ
0220デフォルトの名無しさん2005/08/11(木) 16:34:30
> 素直に -I 使えよ

-Iは複雑なMakefileの中なんで。環境変数指定の方が優先
されると俺も思ってるんだけどなあ。/usr/includeとかの
クリティカルなパスは特別扱いされてるとか。その辺の事情
知らない?


0221sage2005/08/11(木) 16:41:54
>219
モノを頼んで悪いんだけどさ、今手元に環境あるんなら、

/home/hoge/work/include/linux/config.h:
#error "local"

main.c:
#include <linux/config.h>
main(){}

C_INCLUDE_PATH=/home/hoge/work/include gcc -c main.c

って試してみてくんない?
俺が阿呆なのかgccのblack magicに引っかかってるのか
切り分けたいんで。
0222デフォルトの名無しさん2005/08/11(木) 16:47:35
お前らスレ違い過ぎですよ。
処で、-Iは複数指定できるんでないかい?
0223デフォルトの名無しさん2005/08/11(木) 16:51:51
#include "lunix/config.h"
0224デフォルトの名無しさん2005/08/11(木) 16:53:18
-nostdinc してみるとか
0225sage2005/08/11(木) 17:37:02
やっぱスレ違いかの。だって「俺に聞け」って言うからさ。
ム板はめったに来ないので勝手が分からんでの。

> -nostdinc

なるほど、と試してみた。明示的に標準パスを付加してるはず
なんだけどなーんか微妙にエラーが出るんだよなー・・




ん?てことは/home/.../includeの方を読んでるってことかー?
てことは、阿呆なのはgccではなくやはり俺だったということかー?
0226デフォルトの名無しさん2005/08/11(木) 17:40:16
ていうかよく見たらあげてるな、俺。
0227デフォルトの名無しさん2005/08/11(木) 17:42:04
このスレでは、C言語自体の話題をするのであって、
Cコンパイラの実装の話は他のスレでやってくれ的なんだ
0228デフォルトの名無しさん2005/08/11(木) 17:45:23
Cursesとかで現在カーソルのある座標を取得する関数とかありませんか?調べていますがなかなか見つからない
0229デフォルトの名無しさん2005/08/11(木) 17:51:55
/home/の下読んでた。阿呆なのは俺だった。お騒がせ。
0230デフォルトの名無しさん2005/08/11(木) 17:52:18
>>228
あんたもスレ違いですから。
cursesは専用スレがないから環境依存OKスレかUnixプログラミングスレ辺りかな。
0231デフォルトの名無しさん2005/08/11(木) 17:58:52
>>230
スマソ、スレ違いでした。
CursesにはこだわっていないのですがC言語の標準関数では無理なんでしょうか?
0232デフォルトの名無しさん2005/08/11(木) 18:00:41
>>231
しつこいぞボケ
0233デフォルトの名無しさん2005/08/11(木) 18:04:58
>>231
誘導したんだから……
標準関数に座標を云々する関数がないことくらいすぐ判るだろ。
0234デフォルトの名無しさん2005/08/11(木) 18:12:32
>>213,214
ふうむ、スレ違い相当の低脳厨がはりついてるのだけはよくわかった。
0235デフォルトの名無しさん2005/08/11(木) 20:16:06
はいはい埋め埋め
0236デフォルトの名無しさん2005/08/11(木) 22:10:54
C言語に限らないんだけど質問させて

テストの時、トレースするのめんどいからprintf文で値確かめようとしたら
ソースが汚くなるからやめろっていわれた。テスト終わったら消すっていったんだけど
めんどくさがらないでトレースしろ、といわれたんだけどこれって普通?

知りたい値が最初から決まってるんだからprintfでいいと思ったんだけど
わざわざデバッガでトレースするのめんどくせーし
0237デフォルトの名無しさん2005/08/11(木) 22:18:36
>>236
GUIプログラムとかprintfで出力する先がないときもあるし。
0238デフォルトの名無しさん2005/08/11(木) 22:23:13
>>236
たんなるprintfじゃ、確かに見難くなるかもな。
デバッグ出力用の専用ライブラリを使うなり作るなりしろ。
DBG_PRINT() とか DBG_MSG() みたいな用途がハッキリ分かるマクロなら、そんなに可読性を損なうこともない。
リリース時にはマクロでブランクに置換。
0239デフォルトの名無しさん2005/08/11(木) 22:27:24
デバッガ用のマクロ/スクリプトを書くのが良い方法
と思ったが、その種の機能は使っているデバッガに有りや無しや
0240データボックス2005/08/12(金) 00:25:34
 int n1;

 n1 = 1 //* */ 2
  ;
 
 if (n1)
 printf("何で 0 にならないんだ?\n");
0241デフォルトの名無しさん2005/08/12(金) 00:33:47
>>240
最近のCコンパイラはC++ コメントを理解するから //
以降がコメントとされて消えたと思われ。
0242デフォルトの名無しさん2005/08/12(金) 00:35:22
なんでマジレス?
0243デフォルトの名無しさん2005/08/12(金) 00:58:36
>>236
そもそも、テストの時始めからデバッガ使うなんて横着。
0244デフォルトの名無しさん2005/08/12(金) 01:03:33
全関数全分岐、ステップ実行で目視確認するのかね。
近寄りたくないチームだ。
0245デフォルトの名無しさん2005/08/12(金) 01:16:04
>>236
debugはマクロ使うな。
テスト後にデバック用printfの削除だと
消し忘れが発生するかもしれない。

出荷やソースコードのcvs管理等をやってない、
どーでも良いプログラムならprintfでも有りだけど。
0246デフォルトの名無しさん2005/08/12(金) 01:19:32
マクロの消し忘れと、cvsの関係が分からん。
0247デフォルトの名無しさん2005/08/12(金) 01:21:04
単に最初の一行はその後の文章と何の関係もない文章なのか?
下手だな。日本語。
0248デフォルトの名無しさん2005/08/12(金) 01:24:07
消すのはもったいないなぁ。
起動パラメタなどでデバッグレベル調節できるようにすればリリースバージョンでも
デバッグメッセージ消さなくても済む。
0249デフォルトの名無しさん2005/08/12(金) 01:31:43
まぁ、ASSERTとかTRACEとかのマクロ使うよな、大抵。
0250デフォルトの名無しさん2005/08/12(金) 01:37:05
>debugはマクロ使うな。
この文は「俺はマクロを使うよ。」、「お前らはマクロを使ったらダメだ。」のどちらにも取れる。
>>245は、前者の意味で書いたと思うが、>>246- は、後者の意味で読んでいると思われ。

>>247の2行目に同意。
0251デフォルトの名無しさん2005/08/12(金) 16:02:12
えーと、いまソケット通信を行うプログラムを作っています。
送受信ともにselect()を使って待機させているんですが、
CPU使用率が99%とかいってしまいます。

OSはRedHat9 2.4.20-6です。
0252デフォルトの名無しさん2005/08/12(金) 16:09:21
で?
0253デフォルトの名無しさん2005/08/12(金) 16:09:27
>>251
独り言ですか。邪魔です。
0254デフォルトの名無しさん2005/08/12(金) 16:12:25
>>251
タイムアウト時間をきちんと設定してください。迷惑です。
0255デフォルトの名無しさん2005/08/12(金) 16:15:54
selectの使い方を間違ってるんじゃないの?
selectから読み書き可能だと通知されたファイルを放置してるとか。
02562562005/08/12(金) 16:21:04
 
■ このスレッドは過去ログ倉庫に格納されています