- 1 :デフォルトの名無しさん:2011/08/10(水) 06:44:47.34
- C言語の*入門者*向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 87
http://hibari.2ch.net/test/read.cgi/tech/1311026419/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 152代目
http://hibari.2ch.net/test/read.cgi/tech/1312201995/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
★ぬるぽ。
長くなりそうなコードはcodepadに貼り付けてもいいでしょう
http://codepad.org/ - 35 :デフォルトの名無しさん:2011/08/10(水) 20:49:41.87
- ファイル内の文字列を高速に検索する関数ってCの標準ライブラリで提供されてるんでしょうか?
自分で作るとしたらfgetsで読み込んでstrcmpするぐらいしか思いつかないんですがいい方法ありますか? - 46 :デフォルトの名無しさん:2011/08/10(水) 21:20:24.66
- 100万個の文字列から任意の一つを一瞬で検索したいです。
配列以外で何かいい方法ありますか? - 101 :デフォルトの名無しさん:2011/08/11(木) 20:31:43.92
- 漢字ってC言語はサポートしてるんですか?
- 103 :デフォルトの名無しさん:2011/08/11(木) 20:44:50.08
- C言語が漢字をサポートしてるのか、コンパイラが漢字をサポートしてるのか
どっちですか? - 104 :デフォルトの名無しさん:2011/08/11(木) 20:46:43.26
- >>103
まず「サポートする」ってどういう意味だ? - 109 :デフォルトの名無しさん:2011/08/11(木) 20:52:27.64
- >>104
だってC言語が開発されたのって50年以上も前だし海外によるもんでしょ?
a,b,cみたいなレギュラー26と('&%$みたいな特殊記号と同じように常用漢字
も使えるんですか? - 112 :デフォルトの名無しさん:2011/08/11(木) 20:57:45.73
- >>109
だから、まず「サポートする」ってどういう意味だって訊いてるだろ? - 115 :デフォルトの名無しさん:2011/08/11(木) 21:02:10.90
- >>112
すいません。
元々のデフォルトで存在するという意味です。
だからa,b,c,dと一緒です。
だから変数設定するときに
int 山田;
とかは何故できないのか不思議でたまりません。 - 123 :デフォルトの名無しさん:2011/08/11(木) 21:27:29.36
- よく読め。
>>101 は漢字がC言語をサポートしているかを聞いているんだよ。 - 147 :デフォルトの名無しさん:2011/08/11(木) 22:46:11.00
- 「C言語が漢字をサポートしてるのか?」を
「漢字1文字をアルファベットA-Zの様に1文字として認識する標準関数が用意されているか?」
という意味に解釈すると、サポートしていない。
Javaはマルチバイト文字をサポートするクラスがあるけどね。 - 148 :デフォルトの名無しさん:2011/08/11(木) 22:52:15.34
- >>147
一応C99でも定義されてるんだし、その認識は古いと思うんだ… - 188 :デフォルトの名無しさん:2011/08/12(金) 02:45:41.42
- 三項演算子なんて使うと、ホワイトボックステストしずらいから、現場では禁止です。
趣味のプログラミングでどうぞ。 - 190 :デフォルトの名無しさん:2011/08/12(金) 03:08:46.17
- >>188
なるほど。
プロフェッショナルの方々は、色々と大変なんですね。
ところで、どうやったらプロになれますか?
時々どこかのスレで募集しているという噂は聞くのですが・・・ - 194 :デフォルトの名無しさん:2011/08/12(金) 11:25:17.37
- >>190
自分は職業プログラマであるってことだけ根拠に「プロ」だとかスキルがあるような
口ぶりのやついるけど、日本の職業プログラマ60万人のうち、6,7割は
ちょっとできる趣味プログラマに負けてるレベルだから、まに受けないほうがいいよ。 - 224 :デフォルトの名無しさん:2011/08/12(金) 14:59:03.64
- {
char *crash = getenv ("CRASH");
if (crash){
if (!strtol (crash, NULL, 10))
++*(int *) 8;
assert (false);
abort ();
}
}
上のコードで ++*(int *)8 ってどういう意味?
一体何をしてるのかさっぱり分からん。
変数名からして、わざとクラッシュ発生させるようにしてるのかな? - 238 :デフォルトの名無しさん:2011/08/12(金) 15:41:12.07
- だからマジックナンバーを使うなとあれほど言っているのに
- 241 :デフォルトの名無しさん:2011/08/12(金) 16:01:29.14
- >>238,240
会社で読まされてる昔のコードにこの記述があった。
簡単なマクロプロセッサ。
コメントを見るとm4というunixの古いツールのソースコードからパクッたようだ(これって駄目だよねw)
さっきGNUからソース取ってきてgrepしてみたら全く同じコードがあった
#ifdef DEBUG_STKOVF
/* Make it easier to test our fault handlers. Exporting M4_CRASH=0
attempts a SIGSEGV, exporting it as 1 attempts an assertion
failure with a fallback to abort. */
{
char *crash = getenv ("M4_CRASH");
if (crash)
{
if (!strtol (crash, NULL, 10))
++*(int *) 8;
assert (false);
abort ();
}
}
#endif /* DEBUG_STKOVF */ - 246 :デフォルトの名無しさん:2011/08/12(金) 18:03:20.92
- 普通はマクロ定義するでしょ。
書き捨てコード以外で直値は少なくともうちではありえない。 - 247 :デフォルトの名無しさん:2011/08/12(金) 18:14:05.44
- >>246
>書き捨てコード以外で直値は少なくともうちではありえない。
よくそういう事を自慢げに書き込む奴がいるけどさ・・・
学校の偏差値と校則の厳しさが逆相関の関係にあったように、
それは決して自慢できることではないと思うよ。 - 314 :デフォルトの名無しさん:2011/08/14(日) 00:24:37.82
- 自分も K&R で入門した
K&R が入門書として適切なのかは分からんけど、
一通り読んで理解したら入門は出来ると思う
実は K&R の前にも別の入門書を一冊買ってたんだけど、
数学の教科書みたいに理屈の為の理屈を並べた感じで、
実用的な話が皆無だったので捨てた - 317 :デフォルトの名無しさん:2011/08/14(日) 01:36:14.21
- K&Rって実用的だったか?
- 319 :デフォルトの名無しさん:2011/08/14(日) 01:49:29.47
- >>317
だれも K&R が実用的とは言ってないぞ。 - 321 :デフォルトの名無しさん:2011/08/14(日) 02:00:58.26
- >>319
>>314が、別の入門書を実用的じゃないという理由で捨てたと発言した
という事は、暗にK&Rが実用的だったと言った事になるだろ - 324 :デフォルトの名無しさん:2011/08/14(日) 03:17:42.08
- >>321
すげーな、そんな考え方でプログラマやってて大丈夫? - 328 :デフォルトの名無しさん:2011/08/14(日) 04:28:21.34
- >>324
ふつうに行間を読めば>>321のようになると思うが。 - 329 :デフォルトの名無しさん:2011/08/14(日) 04:38:38.97
- 別の本は「実用的な話が皆無だったので捨てた」
K&Rは「実用的な話が皆無ではなかったので捨てなかった」
と、解釈できるな。
だから、「実用的な話が皆無ではない本」が「実用的な本」なのか?
という問題だな。 - 330 :デフォルトの名無しさん:2011/08/14(日) 08:25:16.80
- >>328
そんな変な行間読む力いらないから。
ネタで言っていると信じたいが、マジで言ってるならそんな仮定を勝手に置くのは、プログラマと
してかなり致命的だと思う。
>>329
> K&Rは「実用的な話が皆無ではなかったので捨てなかった」
捨てない理由は実用的な話の有無以外にもあるだろうし、そもそも K&R の本を捨てていない
とは書いてないよ。 - 367 :デフォルトの名無しさん:2011/08/15(月) 03:15:54.14
- 392 :デフォルトの名無しさん:2011/08/15(月) 14:58:41.44
- 暗号ってどうやって破るんですか?破られない暗号をつくるために知りたいです。
- 402 :392:2011/08/15(月) 20:03:31.49
- どうやって破るかを聞いているであって、どうすれば破られないかなんて聞いてないんですけど?
- 450 :デフォルトの名無しさん:2011/08/16(火) 13:18:09.32
- なにをもって翻訳と言うのかわからんが
実行前にあらかじめ機械語にするのがコンパイラで
実行時に逐次機械語に置き換えるのがインタプリタ - 561 :デフォルトの名無しさん:2011/08/18(木) 16:42:51.29
- C言語を子供に教えようとVisual Studio 2010 Ultimateを買ったんですが、
どうやってC言語のプログラミングを開始するのかわかりません。
プロジェクトを新規作成→Visual C#→Windowsフォームアプリケーション→ でてきたForm1ウインドウのコードを表示すると、
いろいろわけのわからないコードが書いてあるのですが、ここにそのまま
#include <stdio.h>
int main(void)
{
printf("今日はよい天気です.\n");
return 0;
}
と書けばいいのでしょうか?
馬鹿みたいな質問ですが本当にわかりません。よろしくおねがいします。 - 624 :デフォルトの名無しさん:2011/08/19(金) 10:46:26.31
- int (*m)[2];
って宣言するとどんな型になるの?
ちょっと試してみたけど何入れても不正な代入って警告されてよくわからない - 637 :デフォルトの名無しさん:2011/08/19(金) 16:51:13.62
- て言うか、C言語で飯喰ってるなら >>624 ぐらいは読めないと駄目だろ。
- 643 :デフォルトの名無しさん:2011/08/19(金) 18:36:49.37
- >637
それが原因のバグが発生したときに監督者、チームリーダーが責任とるならな。
部下持ってみろ、出来て(やって)当たり前と思ってることが出来ない、やらない連中なんて山ほどいる。
それでも使っていかなきゃならんのが会社だよ。そういうリスクを少しでも減らすのがリーダー、上司の役目だ。 - 660 :デフォルトの名無しさん:2011/08/19(金) 19:40:15.77
- 卒業研究でパケットモニターの作成を予定していますが、資料があまりなく困っています。
具体的にはTCPパケットのARP番号を比較して輻輳を検出する物です。
WinPcapライブラリを使用した先輩のソースはありますがコメント・処理系がわからないため実行出来ません。
もしパケットモニター作成を解説するようなWebページや書籍があれば教えてください。
あと、こういったパケットモニターはSocketAPIを利用して作成するものなんでしょうか。
よろしくお願いします。 - 775 :デフォルトの名無しさん:2011/08/24(水) 06:06:14.03
- 途中抜粋ですが、こんな感じの関数で
・呼ばれたら、aaaが4になるまで無限ループ
・4になったら関数kansuuの呼び元にaaaを返す
という処理なんですが、これでaaaが「1」で返ってくる可能性なんてありますでしょうか?
悩んでいます…。気になるのは、無限ループ内のswitch文の「break」ですが
これって無限ループまで抜けませんよね?(case 1~3間のbreak文は意図的に抜いてます)
回答をお願いします。
int kansuu(void)
{
while(1)
{
aaa = get_aaa();←aaaの値を取得してくる関数
switch(aaa)
{
case 1:
case 2:
case 3:
break;
case 4:
return aaa;
break;
default:
break;
}
}
} - 777 :デフォルトの名無しさん:2011/08/24(水) 07:34:30.44
- >>775
linux の gccの場合だと
int f(void) {return 1;}
int g(void) { }
main()
{
f();
printf("%d\n", g());
}
これで、なぜか1と表示される。(g()は何もreturnしてないのに)
これは、
f()のリターン値である1がスタックに残ってて、
それをg()が戻り値不定のために、g()の戻り値として1が設定されたと判断してしまい、けっか、printf() で1が表示されてしまうのだと思います。
aaa = get_aaa()
が、0を返した場合、戻り値が不定で kansuu() を抜けると思う。 while(aaa) は while(aaa != 0) なので。 aaa == 0 の場合は、ループが一回も実行されない。
こうして、return aaa; 意外の場所から、リターン値が不定のまま関数を抜けた場合、f(), g() のケースのように、なんらかの形で kansuu() が1を返す場合もあるかもしれません。 - 800 :デフォルトの名無しさん:2011/08/25(木) 14:26:15.40
- 質問があります.
unsignedとsigned型は上位の1ビットを符号と見なすかどうかの違いと理解しています.
上位一ビットを符号と見なすかどうかはどこで管理しているのでしょうか? - 808 :デフォルトの名無しさん:2011/08/26(金) 14:05:25.94
- 正規表現を格納するバッファにNULLを設定して、なにをどう評価しようってんだ?
- 814 :デフォルトの名無しさん:2011/08/26(金) 14:51:55.47
- >>808
re_compile_patternの資料が余りないので、古いtexinfoを読んでみると
http://www.cs.utah.edu/dept/old/texinfo/regex/regex.html#SEC46
buffer
allocated
If you want re_compile_pattern to allocate memory for the compiled pattern, set both of these to zero.
If you have an existing block of memory (allocated with malloc) you want Regex to use, set buffer to its address and allocated to its size (in bytes).
re_compile_pattern uses realloc to extend the space for the compiled pattern as necessary.
re_compile_patternに勝手にメモリ割付けさせたいならこの両方の値に0を入れろという事なので0(NULL)を入れました。
試しに
buf.buffer = malloc(256);
buf.allocated = 0;
としても結果は同じでした。 - 833 :デフォルトの名無しさん:2011/08/26(金) 21:46:24.81
- 教えて下さい!
Cでもいくつかバージョンがありますよね?
バージョンによって速度は結構変わったりするのでしょうか?
複素数を扱う必要があるので,<complex.h> を使おうかと思っているのですが,
それによって速度が結構変わるようならば、
他の方法を考えた方がいいかと思いまして… - 868 :デフォルトの名無しさん:2011/08/27(土) 16:58:37.25
- printfのダブルクオーテーションの中でマクロ展開したいけど絶対にできないんですか?
http://hibari.2ch.net/test/read.cgi/tech/1312926287/l50人気ブログランキングへ