トップページ⇒tech
1001コメント297KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001sageジョブスNGNG
おれは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言語なら、オレに聞け! <6>
http://piza2.2ch.net/test/read.cgi/tech/999617524/
0002デフォルトの名無しさんNGNG
ポインタってなんですか?
0003武夫。NGNG
こんにちは
0004デフォルトの名無しさんNGNG
>>2
アドレス
0005前すれ 973NGNG
>> 前すれ 974 さんへ
すみません, 話のふりがまずかったですね.

> if (sscanf(str, " hogehoge = %d ", &n) == 1) {
はもちろんその通りです.

で, scanf() っていろいろ癖がありますよね.
例えば書式文字列中に空白があったときは, 入力フィールドはどういう風に
扱われるとか, 書式文字列中では \n は必要なのかとか, %s 使ったら
(あたりまえなのかもしれないけど)入力フィールドの文字列全部取られたとか ...

そういうのをより実践的な例を使って説明してる本とか Web とかって
ほとんどないですよね ? で, そういう話をここでできてばいいなあと
思って話をふってみました(失敗した感じだけど).

おそらく本職のプログラマさんはこんなのが必要なときは
scanf() なんか使わないで, もっとがりがりトークンの切り出しのプログラムとか
lex/yacc とか使うんだろうとは思うんですけどね(ちなみに私は本職のプ
ログラマではありません).
0006超初心者NGNG
連立微分方程式を数値積分して解くときに、
最大原理を用いて、4次のルンゲクッタ法で計算したいのですが、
ポインタを使わないで計算するプログラムソースとかありませんか?
または最大原理を説くプログラムソースなどがある場所を教えて下さい。
0007デフォルトの名無しさんNGNG
シューティング法のプログラムがわかりません。
どこかにないですか?
0008デフォルトの名無しさんNGNG
シューティング法ってなに?
ねぇ、なに?
教えてよ、お願い
0009デフォルトの名無しさんNGNG
>8
C言語で書かれた、シューティングゲームのソースです。
0010デフォルトの名無しさんNGNG
>>6
ポインタを使うと何か不都合がありますか?
0011超初心者 NGNG
>>10
ポインタを使った事がないので、プログラムが理解できないです・・・鬱
2次の配列を使ってやるのが良いと言われたのですが・・・
何処かにないですか?初心者ですみません。
0012デフォルトの名無しさんNGNG
最大原理を用いる4次のルンゲクッタ法を私に教えてくれれば、
私がプログラムを書いてあげよう。
0013デフォルトの名無しさんNGNG
>>12
そのくらい自分で調べろよ。
0014974NGNG
>>5
K&Rに書いてあるだろ。
他の本はしらん。
0015デフォルトの名無しさんNGNG
タコな質問ですいません。
VBでChr(9)のようにAscii文字を指定するような関数って
Cにもありますか?
0016ぷろぐらまぁNGNG
>>15
出力先によっても違うが、printfかsprintfかfprintfあたりを使うと良い。
ex) printf("%c", 65); /* ASCIIコードで65が出る */
0017デフォルトの名無しさんNGNG
>>15
char ch = 9;
変数に直接アスキーコードを代入すればいい。
001815NGNG
>>16
ありがとうございます。
できれば標準入出力ではなく、VBのように
const chr* Chr( int );
のような感じで関数として使いたいのです。
こういうのってやっぱ自分で作らないといけないんですかね。
001915NGNG
>× const chr*
>○ const char*
ですね。
0020デフォルトの名無しさんNGNG
>>18
Cでの文字列の取扱に関して理解してる? 文字と文字列は別だよ?
0021!=17NGNG
>>15
何がしたいのか分からん。
'\t'や'\x9'や'\011'の文字定数や(char)9も結局9だし、
それを文字として印字したいならprintf("%c", 9)やputchar(9)。
VBの頭でCを考えてないか?
002215NGNG
>>17
そっか、別にわざわざ関数化することないんですよね。
なんか難しく考え過ぎてました。
0023デフォルトの名無しさんNGNG
String型ってやっぱ欲しいよね。
というわけでむかし自作したんだけど
需要あるのかな?
0024デフォルトの名無しさんNGNG
>23
PascalやVBで使われてるStringと互換性を持たせれば、あるいは。

ってかもうあるような気もするけど、知らない。
0025デフォルトの名無しさんNGNG
>>23
オラ、イラネ
0026デフォルトの名無しさんNGNG
高速かつ低資源な検索ルーチンを教えて。
ハッシュだとある程度の数なら十分に動作するんだが・・・
数が大量になるとスピードがでない。
なんか良いロジックある?

それともここは
「printf」で数値を出力したい場合のフォーマットは何?って
レベルのことを聞くところかな?
0027デフォルトの名無しさんNGNG
>>26
ハッシュってのがまさしくそれ。
たぶん実装がヘボいと思われ。
0028デフォルトの名無しさんNGNG
>>27
激しく同意。

>>26
>「printf」で数値を出力したい場合のフォーマットは何?って
>レベルのことを聞くところかな?

というのだったら、

>数が大量になるとスピードがでない。

などとあいまいなことを書かずに、

>逐次検索アルゴリズムでは,検索データが見つかるまでの条件判定文�@の
>実行回数は最小1回,最大[(3)]回である。検索データXの出現確率がS1〜Snの間で
>一様分布するとき,条件判定文�@の平均実行回数 はおよそ[(4)]回である。
>したがって,この検索アルゴリズムの計算量のオーダは[(5)]であるといえる。
> 一方,2分検索アルゴリズムでは,配列Sのデータは[(6)]必要があり,
>その計算量のオーダは[(7)]である。

ぐらいの考察をかましちゃってもいいんだよ。
みんな分かるから。
002926NGNG
>>27
あら、それを言われると辛い(^^;)
じゃ、高速なハッシュってどうやって組むの?
私のルーチン、いたって標準的な使い方だと思う。
100万のオーダなら平気だけど、2000万近くになると…

へぼいって言ってくれるくらいだから、さぞや素晴らしいロジックを
持ってるんだろうね。教えてください。
0030デフォルトの名無しさんNGNG
>>29
>じゃ、高速なハッシュってどうやって組むの?

だから、オーダーでものを言え。
どう低速なのか説明できないのか?
0031デフォルトの名無しさんNGNG
>>26
オープンアドレス法?
チェイン法?
(って話からするとチェインか?)
ハッシュテーブルのサイズは?

2000万近くあるなら BST のほうがいいかもよ。
もしくはチェインの下に BST を吊すとか。
003226NGNG
>>28、30
27へのレスを書いてる際には28のレスは無かったのよね。
別に変に煽ろうとかって意味じゃないから(^^;)

>>31
チェイン法使ってます(たぶん(^^;))
BSTって言葉の意味がわかりませんので解説してもらえませんか?
申し訳ないです。
ハッシュのサイズは現在色々試してるんですが、資源量との兼ね
合いもあるので、そんなに大きくは取れない状態です。今のとこ
ろ1万位かな?まだ妥協点を探している最中なんで(^^;)
0033デフォルトの名無しさんNGNG
>>32
BST はバイナリサーチツリー、2分探索木ってやつ。

ハッシュテーブルのサイズが1万ってことは
それにリスト垂らしてて 2000万 とかなら
一つのテーブルに 2000 もの長さのリストがあって
それを線形探索してるのか? 平均1000ぐらいの比較?

BST なら 2000万 の要素でも 24,5回の比較で探索できますよね。
チェインに1000個の要素の BST なら 10回ぐらい。

BST の実装法は探せばいっぱいでてくるはず。
003433NGNG
日本語変だ…。鬱氏
003526NGNG
>>33
ありがと。確かに自分のコード、しょぼかったです。
0036デフォルトの名無しさんNGNG
あぁ、オーダーっつーのは、計算量のことね。
データの量じゃないぞ。
0037デフォルトの名無しさんNGNG
>>33
べつに、木をぶら下げなくても、
じどうでハッシュのサイズを拡張するようにすればいい。
Optimize・・・ とか言う本に詳細載ってたけど、
具体的な書籍名は忘れた
0038デフォルトの名無しさんNGNG
>>37
チェイン法において、リストの代わりに木を使うって話だよ。
ハッシュテーブルに全てを入れようとするのは大変なだけだと思う。
サイズ変えるコストも馬鹿にならないだろうし。
0039デフォルトの名無しさんNGNG
>>38
詳細は覚えてないんだけど、再ハッシュする必要がある要素は、
極わずかっていう手法だったはず。
0040デフォルトの名無しさんNGNG
char *name[]={"ノビタ","シズカ","スネオ"};
char name[][6]={"ノビタ","シズカ","スネオ"};
上と下の初期化の仕方って、どっちがいいの?
0041デフォルトの名無しさんNGNG
>>40
上と下ではまるで意味が違います。
0042デフォルトの名無しさんNGNG
>>40
良い悪いじゃなくて、処理内容が違うんで目的によります。
char *str = "abc";
char str[4] = "abc";
この違い分かってます?
004342NGNG
あらかぶっちゃった。スマソ。
0044デフォルトの名無しさんNGNG
>>42
すみませんが詳しく教えてください。
0045デフォルトの名無しさんNGNG
>>42
自分で勉強しろよ。
0046デフォルトの名無しさんNGNG
>>44
この程度は基本。2chで訊くようなものじゃない。
K&Rを死ぬほど読め。
0047デフォルトの名無しさんNGNG
> K&Rを死ぬほど読め。

最近このスレで流行ってる?
0048デフォルトの名無しさんNGNG
>>47
このスレッドでは最近かもしれないが、世間ではここ十年以上は流行ってると思われ。
0049デフォルトの名無しさんNGNG
>>6
服部雄一:C言語とPADによる数値計算(培風館)

>本書ではポインタ変数を一切使わずにプログラムを記述する。
0050デフォルトの名無しさんNGNG
>>49
それって、著者がポインタを理解してない上にサンプルがトンチキで有名な本では…
005147NGNG
>>48
あ、K&R でなくセリフがね…
0052デフォルトの名無しさんNGNG
>>50
そうなの?…じゃあこれ
Numerical Recipies in C[日本語版](技術評論社)
0053デフォルトの名無しさんNGNG
あげようよ。
そこから始めようよ。
0054デフォルトの名無しさんNGNG
K&Rってそんなにいいのか?
アンサーブックで十分だろ。
0055デフォルトの名無しさんNGNG
K&R?
初心者にはお勧めできない。
0056デフォルトの名無しさんNGNG
すみません、既出かもしれないけど、ここで質問させて下さい。
ポインタで悩んでます。

普通の変数だったら
int a;
a = 10;
を一行で初期化を表現するには
int a = 10;
と書けばよいわけですよね?

ところがポインタだと、
int x = 10;
int *p = &s;
という具合に、右辺に書く内容が *p についてではなくて p になってしまうのですか?
メモリの中身(*p)でなくて、番地(p)を書くのですか?
もしそうだとしても、感覚的に理解できないのです。
005756NGNG
すみません、下から4行目は
int *p = &x;
でした。スマソ。
0058デフォルトの名無しさんNGNG
int a;
int *p = &a; // *はポインタであることを示すだけ

int *p;
p = &a;
int b = *p; // *はポインタが指す内容

という違いがある。
変数宣言時の'*'とその他の場所の'*'は違うよ。
0059デフォルトの名無しさんNGNG
ちなみに後者は「ポインタ演算子」と呼ばれるもので、+や-などと同じカテゴリ。
&もそうだね。

前者をなんと呼ぶのかは知らん。
0060デフォルトの名無しさんNGNG
そんなことを56は言ってんじゃないと思うが。
何かを指すものがポインタだから、としか言いようがない。
006156NGNG
レスありがとうございました。

>変数宣言時の'*'とその他の場所の'*'は違うよ。
心の中でもやもやしてたものが晴れました。
ありがとうございます。
ポインタの宣言するときだけは
int* p=&a;
のイメージで捉えたらいいのですね?
0062デフォルトの名無しさんNGNG
漏れはコンパイルの度にmakeって打つことによって、
人生通算で何回負けたかワカラン
0063デフォルトの名無しさんNGNG
>>60
そんなことを56は言ってんじゃないと思うが。
つーか、あんた何で56の言いたいことがわかるのさ!
0064デフォルトの名無しさんNGNG
>>61
>int* p=&a;
>のイメージで捉えたらいいのですね?

イメージとしてはそうかもね。C++ではそういう風に書くのが推奨されてるし。

でも、
int *p, *q;
と書くつもりで、
int* p, q;
ってイメージして
int *p, q;
ってやっちゃ駄目よ。
006560NGNG
>>63
56を読んでそう思ったからだ。
少なくとも型指定時の*と間接参照の*を混乱しているようには
読めなかった。まぁ56が疑問を解決したのならいいけど。。
0066デフォルトの名無しさんNGNG
bcc32でコンパイル、実行すると特に問題なく動作プログラムがあって、
それをVCでコンパイルならできるのですが、実行すると

runtime error R6002
- floating point not loaded

というメッセージがでてエラーになります。
このメッセージの意味は何なんでしょうか?
0067ビル・ジョブスNGNG
>>みんな
宣言時はポインタ修飾詞。

>>56
intは整数を入れる変数だよね。
で、ポインタはアドレスを入れる変数だよ。
(もう分かってる?)
0068ビル・ジョブスNGNG
>>66
DOS窓だね。
浮動小数点演算がソフトウェアエミュレーションになってる?
VCの設定は確認済み?
006966NGNG
>>68
はい、DOS窓です。
浮動小数点を使っているのは一箇所だけ実行時間を計っているところだけ
なんですが、printfで表示するときに直接計算せず、いったんdouble型の
変数に代入してから実行するといけました。
そのソフトウェアエミュレーションというのを設定するというのは
どこをいじればいいんでしょう?ヘルプで「ソフトウェアエミュレーション」
といれても、でてこなかったので...。
0070デフォルトの名無しさんNGNG
hitck[ix][iy]=off;
ixとiyの関係を教えて下さい。
0071デフォルトの名無しさんNGNG
>69 一箇所だけなら 整数で計算させたらいいじゃんと思うのだが?
  単に少数点表示がメンドクサって事だけでしょ?

c=a/b
((a-c*b)*100)/b
0072デフォルトの名無しさんNGNG
flushかそんな感じのあったと思ったけど忘れた。教えて。
printfで事情があって改行しなかったら出力されなかったので、flushしたい。
0073デフォルトの名無しさんNGNG
fflush()
0074デフォルトの名無しさんNGNG
>>71 div()というのも蟻

#include <stdlib.h>
div_t d = div(a, b);
printf("%3d.%.2%%\n", d.quot, d.rem);
0075デフォルトの名無しさんNGNG
fflush(stdout)
007674NGNG
これは適切じゃないな、スマソ。
0077デフォルトの名無しさんNGNG
fパラメータって無いのか
0078デフォルトの名無しさんNGNG
fflush()って、どういう時に使うのですか?
バッファを書き出す、と言われてもピンと来ない……。
0079デフォルトの名無しさんNGNG
#innkuru-do <esuthidhiaio-dotto.etti>
boido meinn (zoido)
{
innto a,b,c
huro-to x,y

purinntoehu("itteyosi")
あぎゃあああああああああああ
}
008080NGNG
そもそもストリームって何のことですか?
0081デフォルトの名無しさんNGNG
>>80
川の流れのようなもの
0082デフォルトの名無しさんNGNG
C言語でマルチスレッドプログラミングってできるもんなんでしょうか?
0083デフォルトの名無しさんNGNG
>82
 OSによってはAPIを呼び出せば非同期型スレッドは簡単

 SETJMP LONGJMPで 同期型のスレッドは作れる
 もちろんアセンブラでスタック切替をしても同じ。
0084デフォルトの名無しさんNGNG
タコな質問ですが、たとえば、

あいうえお<A>かきく<B>けこ→あいうえお@かきく\けこ

のようにある記号で挟まれた文字列をその内容によって
変換するようなプログラムってどう書けばいいでしょうか?
0085デフォルトの名無しさんNGNG
>>84
???
いまカッコ内かどうかのフラグを持たせて、
フラグがたってる間だけ変換処理を実行する。
じゃ、ないの?
0086デフォルトの名無しさんNGNG
>>82
pthreadライブラリを探せ
0087デフォルトの名無しさんNGNG
>>84
それって正規表現使うのがいいんじゃない?
Cに正規表現ライブラリってあるかなぁ?
008856NGNG
>>56-57で質問させて頂いた者です。
みなさんレスありがとうございました。
しかし一度は納得したものの、再び分からなくなってしまいました。
というのも、

void main(void)
{
char* p="A";
printf ("%d\n",*p);
}

を実行したら、65 が表示されたからです。
『あれ? この場合は65番地の中に入ってるデータが表示されるんじゃなかったのか!?』
とパニックになってます。

どなたかお助けを!!
0089デフォルトの名無しさんNGNG
>>88
p と *p は全然別のもの。
ちなみに 'A' == 65 である。

void main(void) {
char *p;
p=65;
printf ("%d\n",*p);
}

とするか

void main(void) {
char *p = 65;
printf ("%d\n",*p);
}
とすればお望みの動作になる。
0090デフォルトの名無しさんNGNG
>>88=56
文字列を " " で囲むと,それは文字列へのポインタになります
しかも文字列の末尾にはちゃんと nil 文字('\0')が付加されます
p にはその文字列へのポインタが代入されます
*p を参照すれば,そこにはポインタに指し示された部分にあるデータを得ることができます
つまり p にはよく分かんないアドレスが,*p には 'A' が入ってるってこと

65 番地のデータを表示させたいならば
char* p = 'A';
もしくは
char* p = 65;

# きっと正確な説明じゃないと思うけど,こんな理解でも大丈夫なはずです
0091デフォルトの名無しさんNGNG
ここでは65=0x41 という文字コードが印刷されたという事です >>88

C言語の文字列はバイト列をそのまま扱うような形になります
他の言語で文字型、文字列と順序型が明確に区別されていたのに馴れていると
訳が判らなくなると思います。

*p は いつでも (int)ord(*p) という変換がされているとでも考えて下さい
009256NGNG
>>90
>文字列を " " で囲むと,それは文字列へのポインタになります

そ、そうだったんですか・・・・(納得)
'A'はどういう意味になるのですか?

>>91
すみません、僕の頭ではちょっと難しくて・・・・(^^;)
C以外さわったことないんで。。
0093デフォルトの名無しさんNGNG
>>92
char型という8ビットの"整数"です。
char型はASCIIひと文字分の文字コードを扱うのに使ったりします。
C言語の文字列はchar型の単なる配列です。
0094デフォルトの名無しさんNGNG
文字コードを意識したくない。
どうすればいいかな?
0095デフォルトの名無しさんNGNG
>>94 他の言語を使え Windowsなら C++とかDelphiとか
0096デフォルトの名無しさんNGNG
ある掲示板で char, short, long は使うな、
int8_t, int16_t, int32_t を使えと言われたんですが、
char, short, long では何かまずいんでしょうか?
教えてください。
0097デフォルトの名無しさんNGNG
>>96
なにもまずくないけど?
0098デフォルトの名無しさんNGNG
>>96
目的も書かずに、「char, short, longは使うな、
int8_t, int16_t, int32_t を使え」っていうのでは何とも言えない。
「何のために」っていうのがまずあるはず。
教えて下さいの前に、質問の仕方を改めること。
場合によっては、Cは使うな、Perlの方がずっとその目的には向いてる、
ということもある。
0099デフォルトの名無しさんNGNG
>>95
C++やDelphiだと文字コードを意識しなくていいって?
Delはプラットホームが限られるからってことか?
0100デフォルトの名無しさんNGNG
MS-DOS/V 6.2 で10ms間隔で割り込みを発生させ、カウンタを作りたいんです。

ネットでいろいろ検索しましたが、うまく行きません。
知っておられたら、教えてください。

環境:MS-DOS/V 6.2
コンパイラ:VC++ 1.51 (MS-C 8.03)
で行っています。

よろしくお願いします。
0101デフォルトの名無しさんNGNG
100のつづき
テスト中のソースは以下の通りです。

struct SREGS sregs;
union REGS inregs, outregs;

long timl;
short tims;

interrupt timint(void)
{
_disable();
timl++;
tims++;
printf(" %04x\n",tims);
_enable();
int86x(0x1c, &inregs, &outregs, &sregs);
}

void timer_set()
{
void far *ptr;

ptr = timint;
inregs.h.ah = 0x02;
inregs.x.cx = 1; // 1で10[ms]
inregs.x.bx = FP_OFF(ptr);
sregs.es = FP_SEG(ptr);
int86x(0x1c, &inregs, &outregs, &sregs);
}

void main(void)
{
// void interrupt (*vect)();

timl = 0l;
tims = 0;
// vect = _dos_getvect(7);
timer_set();
while(1){
printf("xxx=%04x,yyy=%08ld\n",tims,timl) ;
}
// _dos_setvect(7, vect);
}

tims、timl 共に0のままです。
0102100NGNG
見にくいんで、ソースを上げなおしてみました。

struct SREGS sregs;
union REGS inregs, outregs;

long timl;
short tims;

interrupt timint(void)
{
  _disable();
  timl++;
  tims++;
  // 見やすいようにずらしてます。
  printf("                zzz=%04x\n",tims);
  _enable();
  int86x(0x1c, &inregs, &outregs, &sregs);
}

void timer_set()
{
  void far *ptr;

  ptr = timint;
  inregs.h.ah = 0x02;
  inregs.x.cx = 1;      // 1で10[ms]
  inregs.x.bx = FP_OFF(ptr);
  sregs.es = FP_SEG(ptr);
  int86x(0x1c, &inregs, &outregs, &sregs);
}

void main(void)
{
//void interrupt (*vect)();

  timl = 0l;
  tims = 0;
//  vect = _dos_getvect(7);
  timer_set();
  while(1){
  printf("xxx=%04x,yyy=%08ld\n",tims,timl) ;
  }
//  _dos_setvect(7, vect);
}
0103デフォルトの名無しさんNGNG
timl,timsの定義にvolatileが必要とかそういうこと?
0104100NGNG
volatile long timl;
volatile short tims;

long volatile timl;
short volatile tims;

共に駄目でした。

long far timl;
short far tims;

も駄目でした。
0105100NGNG
と言うか、割り込みが発生していません。
メインルーチン側の printf をコメントすると、動かなくなります。
(Ctrl+Alt+del でリセットされるので、永久ループになってるだけですが。)
0106103NGNG
非DOSユーザーがレスするのもナニだけど…

googleでちょっと検索してみたら、>>100が参考にしたと思わしきソースを
見付けたんだけど、「PC-9801用」って書いてあるよ?
>>100がMS-DOS/VだということはPC互換機だと思うんだけど、そもそも
この方法でタイマー割り込みが使えるのはPC98onlyだったりしない?

あと、割り込みハンドラ(timint)内でprintf()ってのは大抵の場合
ヤバイと思う。
0107100NGNG
> この方法でタイマー割り込みが使えるのはPC98onlyだったりしない?

割り込みベクタやアドレスが一緒なので、これでやってます。

> あと、割り込みハンドラ(timint)内でprintf()ってのは大抵の場合
> ヤバイと思う。

削除します。
0108デフォルトの名無しさんNGNG
DOS/Vタイマベクタは 0x1c or 0x08 のはず。
割り込み周期の変更は知らん。
0109100NGNG
> DOS/Vタイマベクタは 0x1c or 0x08 のはず。

0x1cに、timer_set() で timint() を割り当ててると思ってました。
timer_set() をやめて、_dos_setvect() で 0x08 に timint() を
割り当てると、『1回だけ』動きました。
(数値が1で止まって、カウントアップしませんが。)
まだ問題はありますが、0x08 で テストを続けたいと思います。
どうもありがとうございます・

引き続き、情報を募集しますので、何か知ってたら教えてください。
0110103NGNG
MS-DOS自身も使っているベクタみたいだから、setvectでベクタを上書きして
しまうと、DOS自身の割り込みハンドラが呼ばれなくなってまずいような
気がする。

setvectする前にgetvectで古いベクタを保存しておいて、timintの中で
カウントアップの処理をした後で、書き換える前のベクタへジャンプする
必要があるんじゃないかな?
0111デフォルトの名無しさんNGNG
>>98
なに言ってんだか。
0112100NGNG
>110

ご忠告ありがとうございます。
今は、テスト中なので、リセット覚悟でやってますが、
最終的にはきっちりしようと思ってます。

0x08でやると、凍ってしまいます。
何か設定があるのでしょうか?
誰か知りませんか?

0x1cでやると、カウントアップは出来ました。
ただ、周期が約55msに固定で、必要な10ms間隔にならない為、
使えない事が判明しました。
0113ビル・ジョブスNGNG
>>110
chain_intr()とかっていうライブラリ関数あったなー

>>112
CLIしてるなら、きっと中の処理が遅くて再入してるよ
0114100NGNG
>> 113
もしや最初にスレを立てた伝説の?(@_@)

> CLIしてるなら、きっと中の処理が遅くて再入してるよ
CLIとかNMIとか、よくわからないんですが
メインループの printf の画面表示が止まらないので、
再割り込みはしてない気がします。

ちなみに0x1cでやると、Ctrl+Cで中断できるんですが
0x08でやると、Ctrl+Cで中断出来ません。
0115デフォルトの名無しさんNGNG
_disable()で割り込みを禁止、
_enable()で割り込みを許可していると思われ。
CLI、STIは割り込みを禁止したり許可したりするアセンブラ命令

割り込み内部(timint)はカウントと
旧ベクタへ飛ばすのみにしておく。

タイマ周期の変更はポート叩く方法しか知らん
しかもアセンブラ。
011656NGNG
>>93
それは分かってますよ。
"a"と'a'の違いがわからないのです。
0117デフォルトの名無しさんNGNG
'a'は整数。
"a"はポインタ。
0118デフォルトの名無しさんNGNG
>>116=56
もう,これは慣れるしかないと思います・・
とりあえず次のコードを実行してみれば,なんとなく感覚がつかめませんか?
#include <stdio.h>
void main(){
    char* a1 = "A";
    char* a2 = "A";
    char* b1 = (char*)'A';
    char* b2 = (char*)'A';
    printf("a1=%d,a2=%d,b1=%d,b2=%d", a1,a2,b1,b2 );
}

char* b1 = 'A';
ではなく
char* b1 = (char*)'A';
とキャストしているのは,'A' が const char 型であって
const char * 型ではないからです
0119デフォルトの名無しさんNGNG
"..."はポインタじゃないし、'.'はchar型じゃないだろ。
012056NGNG
>>118
main の中の1行目と2行目は内容同じだし、3行目と4行目も内容同じだと思うんですけど・・・。

>>119
え? え? そうなんですか?
0121デフォルトの名無しさんNGNG
'a' == 'a'
"a" == 'a','\0'

というように文字と文字列は違う。

char a='a';
char b="a";   //エラー。文字列は char に収まりきれない。
char *c = "a"; //"a"という文字列のアドレスを入れているのでOK。
char d[2]="a"; //上記に示したとおり、char2個分だから収まる。

c はポインタ。変数や配列のアドレスを c という名前で管理する。
d は配列。変数の連なりに d という名前を付けている。
その領域を"a"で初期化している。

"a"は変数名のない配列。
しかもプログラムのどこにあるのやら人間には判別つかない。
それではプログラマが利用できないので
名前をつけて"a"のある場所を知る必要がある。
その方法が char *c = "a";

printf("a")では"a"という文字列を表示したいだけで、
"a"のある場所を人間が知る必要ないから
そのままPCにおまかせしている。
0122デフォルトの名無しさんNGNG
>>121
微妙に痛いんですが。。。
012356NGNG
>>121
おお!
なんと解りやすい解説!!

ありがとうございまいた <(_ _)>
0124デフォルトの名無しさんNGNG
えと 'A' は 文字定数といいます
 文字定数は C 言語では int で C++では charになります
0125デフォルトの名無しさんNGNG
>>122
同意。この説明で分かった気になってしまうと後がこわいかも。
012656NGNG
オレやばいですか?
0127デフォルトの名無しさんNGNG
>>121
char *c = "a"; の"a"と
char d[2] = "a"; の"a"は意味が違ってる。

char d[2] = "a"; は、単に char d[2] = { 'a', '\0' }; の省略形。
char *c = "a"; の"a"は変数名のない配列…というのは、当たらずとも
遠からずというか、やっぱり文字列定数は文字列定数としか言いようが
ないような。ただの配列だと思い込んでると思わぬ所でハマる。

上記の後で、
d[0] = 'b'; はOKだけど
c[0] = 'b'; ってやるのは規格上NG(実際は動いたりするのでたちが悪い)

更に、
char *e = "a"; とやった場合、c == e である場合も c != e である場合もある
(規格上はどちらも間違いではない)
0128121NGNG
>127
ありがとう。
教えるのは難しいなり。
012956NGNG
お、オレ1人が取り残されてる・・・(泣

>char *c = "a"; の"a"は変数名のない配列…というのは、当たらずとも
>遠からずというか、やっぱり文字列定数は文字列定数としか言いようが
>ないような。ただの配列だと思い込んでると思わぬ所でハマる。

思わぬ所ってどこっすか?
013056NGNG
>char *e = "a"; とやった場合、c == e である場合も c != e である場合もある
>(規格上はどちらも間違いではない)

これは感覚的に理解できます。
0131デフォルトの名無しさんNGNG
strcpy(&(bMfh.bfType),"BM");

いまのとこ画像は本腰でないのでこうしているんだけど、
警告される。bfTypeがchar[2]か[3]かわかんないので、
"BM\0"とやる気にもならないし、メンバの場合の[]の
使い方もわかんない。
bMfh.bfType[0]='B'bMfh.bfType[1]='M'で
いいのかな、(\0はどうすんのかな)それとも、bMfh.(&bfType[0])
とかやっちゃうの?それとも(bMfh).bfTypeとか?

もーわかんない。
0132デフォルトの名無しさんNGNG
"."や"->"はものすごく優先度が高い演算子で、ほとんど「名前の一部」とみなしていいほど。
・・・と、最初は思ってればいいよん。
bMfh.bfType[0] = 'B';
strncpy(bMfh.bfType, "BM", 2);

>bfTypeがchar[2]か[3]かわかんないので、
これは問題あると思うが。
0133127NGNG
>>129
うーん、>>127の後半に書いた通りなんだけど、
書き換えができないというのは分かりやすいからいいよね?

後は、「同じ文字列」のとらえ方によって結果が違ってくるってこと。
char *a = "abc";
char *b = a;
この場合、aとbの文字列の内容は同じだし実体も同じ。
if (strcmp(a, b) == 0) { ... } も
if (a == b) { ... } も成り立つわけ。で、
char a[] = "abc";
char b[] = "abc";
これは、aとbの文字列の内容は同じ、だけど実体は別。
if (strcmp(a, b) == 0) { ... } は成立、
if (a == b) { ... } は不成立。だけど、
char *a = "abc";
char *b = "abc";
これは? 文字列の内容はもちろん同じ。
if (strcmp(a, b) == 0) { ... } は成立。でも、
if (a == b) { ... } は?
どちらになるかは不定なので、どちらかを期待してプログラミングしちゃいけない。

こんな感じで、文字列の場合、
・見かけが同じ
・実体が同じ
の二つの「同じ」があって、なおかつ文字列定数の場合は後者の「同じ」が
定義されない場合があるので、自分が期待している「同じ」が何なのかをちゃんと
考えてプログラミングしないとハマるわけ。

てな説明で分かってもらえますか?
0134デフォルトの名無しさんNGNG
「実体」ってアドレス値のこと?
0135デフォルトの名無しさんNGNG
>131
typedef struct tagBITMAPFILEHEADER { // bmfh
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;

これか? MSDNで見つかるだろ。
0136デフォルトの名無しさんNGNG
>>134
そだね
0137ビル・ジョブスNGNG
>>56
じゃー"a"はどこにあるのかな?「記憶クラス」って知ってるか?
0138デフォルトの名無しさんNGNG
ありがと>>132
0139デフォルトの名無しさんNGNG
strcpy(&(bMfh....),"BM")で
ちゃんと動いてるんだけど、考えると
strcpy(bMfh....,"BM")←つまり&がない。
でも正解なのが不思議だ・・・
0140ビル・ジョブスNGNG
>>139
文字列はアドレスだから、違和感無いよ・・・
0141デフォルトの名無しさんNGNG
構造体あれこれ。

bf.bfType = MAKEWORD('B','M');
stBmpFileHeader.bfType = 0x4d42
bmHead.bfType = ('B' | ((WORD)'M' < < 8))
memcpy(&fh.bfType,"BM",2);
bmFileHead.bfType = 19778;
BmpFileHeader.bfType = 'MB'

char bfType[2];
0142132NGNG
>>139
げげ。135を見るとbfTypeつーのは
char bfType[2]でもchar bfType[3]でもなくてWORD bfTypeじゃんよ。
早く言ってくれよオイ。聞いてないよ−。
それじゃ strcpy(bMfh.bfType, "BM") は間違い。"&"付きが正解。
0143ビル・ジョブスNGNG
>>142
"&"付きでも基本的に間違い!NULLがセットされるでしょ。
しかーし、今回はアライメント合わせされてるので動作するな。
しかし、いかん、おれには書けない・・・。
0144100NGNG
>>115
>CLI、STIは割り込みを禁止したり許可したりするアセンブラ命令
アセンブラの割り込み許可/禁止って、EI/DIだと思ってました。
NECだけ?

>タイマ周期の変更はポート叩く方法しか知らん
>しかもアセンブラ。
よろしければ、ポートだけでも教えてもらえませんか?
アセンブラも多少ならわかりますので、見せて頂けたら幸いです。
0145デフォルトの名無しさんNGNG
tell me
0146デフォルトの名無しさんNGNG
正解は、
bf.bfType = MAKEWORD('M', 'B');
0147デフォルトの名無しさんNGNG
>144
かなり昔のを発掘してきた。

ttp://gooside.com/himitsu/timer.zip

DLしたら教えてくれ。即削除する。
0148どしろ〜とちゃんNGNG
ほんと、ドシロートな質問ですまんす。

「構造体を直接引数で渡すな!ポインタで渡せや!」
って、結構プログラムやってるツレから言われたんですけど、
さっぱり意味がわかりません。
なんで直接渡しちゃだめなん?
0149デフォルトの名無しさんNGNG
コピーする手間とメモリと時間がもったいないから。
0150デフォルト名無しさんNGNG
typedef structで定義したのがあるんだけどそれをstructで定義したら使えないんですよね。
なんでっすか?
0151デフォルトの名無しさんNGNG
>>150
その簡単な例を挙げてくれ
0152デフォルトの名無しさんNGNG
とりあえずここで同じことを聞いてこい。
http://mentai.2ch.net/test/read.cgi/prog/1002039334/
015356NGNG
>>137
知ってますけど、"a"はどこにあるのかは分かりません。
0154適当マンNGNG
>>148
ポインタで渡すべきシーンと実体で渡すべきシーンがある。
圧倒的に多いのは前者だが、後者もそれなりに使う。
どんな状況で使うかはロジック次第。
0155 NGNG
C++だったら「そっちで間接参照しろや!」って切り替えしたりできるんだけどねぇ。
まあそのツレもあえて「構造体を」って言ってるところがまだ青い。
0156どしろ〜とちゃんNGNG
総合的に、なんとなく分かったような・・・。レスくれた方々、多謝デス!

結局、場合にもよるが、基本的にメモリにバカバカコピーすんのは
タコでそ?・・・ってことで、おけ〜ですか?

しかし・・・>155サンの
>まあそのツレもあえて「構造体を」って言ってるところがまだ青い。
が、わかんないっす〜。なんで?
0157デフォルトの名無しさんNGNG
>>143 意味不明。
0158100NGNG
>>147
ホストが落ちてるみたいなんで、少々お待ちを。
0159100NGNG
>>147
DL出来ました。
今、MASMが手元に無いんですが、何とか探してテストして見たいと思います。
どうもありがとうございます。
0160デフォルトの名無しさんNGNG
class A{
virtual foo(const char *name);
virtual foo(const unsigned int num);
}

class B:public A{
foo(const char *name);
foo(const unsigned int num);
}

class C:public B{
foo(const char *name);
foo(const unsigned int num);
}

と書くと、class Cでのオーバーロードが解決できないと言われてしまいます。
もしかして根本的に勘違いしてるのでしょうか?
0161デフォルトの名無しさんNGNG
C++は、よそで聞け!
0162デフォルトの名無しさんNGNG
>>154
「実体で渡すべきシーン」とは?

>>155
もう少し詳しい解説きぼん。
0163デフォルトの名無しさんNGNG
>>162
例外中立をぶちこわしたいとき
0164デフォルトの名無しさんNGNG
>>154
構造体を実体渡しすると全部をスタックにつむから、ポインタ渡し
と比較して余計にスタックを消費する.
昔の人はメモリは貴重な資源だったので、実体渡しは裂けていた.
あと、ループ中に [] を使用して構造体を参照しているところは
ポインタを取得するとアドレス計算か減って早くなった.

ex)
for (i = 0; i < 100; i++) {
a[i].hohoe01 = 100;
a[i].hohoe02 = 200;
.
.
}
を
for (i = 0; i < 100; i++) {
pa = &a[i];
a->hohoe01 = 100;
a->hohoe02 = 200;
.
.
}

といった理由で、漏れは必ずポインタ渡しを使用しており、その
習慣は今でも引き継がれている.

ただ、自分の使用している コンパイラでアセンブラソースを
出力するようにして、なにが最適化確認するのが吉.

へたなことして自己満足していると最適化処理の足をひっぱるだけに
なっていることがある.
0165デフォルトの名無しさんNGNG
>>164
実測で十分。
0166164 NGNG
>>165
それで十分なら OK.
デブは腹時計が正確らししな。デブヲ。
0167デフォルトの名無しさんNGNG
>>160
処理系は?

むしろクラス定義の後にセミコロンがないとか戻り値が宣言されてないとかで
文句いわれそうな気が。
0168適当マンNGNG
>>162
単にコピーしたいときとか、
いつまでも実体があることが保証されないとき。
0169デフォルトの名無しさん NGNG
>>168
うーむ、ネタでしょうか.詳細キボンヌ
0170デフォルトの名無しさんNGNG
data.txtから実数の数値を読み込みたいけれど、
下のプログラムが動きません。
表示されるのは0.000000になってしまいます。


#include<stdio.h>

void main(void)
{
double data;
FILE *fp;

fp = fopen("data.txt","r");
fscanf(fp,"%f",&data);
printf("%f",data);
fclose(fp);
}
0171デフォルトの名無しさんNGNG
%gで表示するとどうなる?
0172適当マンNGNG
>>169
違うスレッドから同じものをアクセスするときとか。
0173デフォルトの名無しさんNGNG
>170
%lf にしてみて。
%f は float に反応するけど double には無反応みたい。
0174デフォルトの名無しさんNGNG
>>160
とりあえず、これならコンパイルできるぞ。

class A
{
virtual void foo(const char *name);
virtual void foo(const unsigned int num);
};

class B : public A
{
void foo(const char *name);
void foo(const unsigned int num);
};

class C : public B
{
void foo(const char *name);
void foo(const unsigned int num);
};

あと、C++こっちでやって
http://piza2.2ch.net/test/read.cgi/tech/1003832761/
0175デフォルトの名無しさんNGNG
>>160
おそらく、fooに戻り値が無いから、
コンストラクタと解釈されておかしくなってると思われ。
0176デフォルトの名無しさんNGNG
>>172
その場合、グローバルでとってあるか、動的に確保した領域使うと思う.
前者ならプロセスの寿命で、後者ならポインタで管理になるよね.
0177デフォルトの名無しさんNGNG
>173
ありがとうございました。
うまく動きました。
017856NGNG
>>133
わかりやすい解説ありがとうございました!
今>>133のレスに気付きました、遅くなって失礼しました。
了解です、理解しました♪
これで僕の>>56の疑問はかなり霧が晴れました。
レスくれたみなさん、ありがとうございました!!
0179デフォルトの名無しさんNGNG
enum{ a, b, c }

#if 1 == 2
#error 1 == 2 <- ここはエラーにならない
#endif

#if a == b
#error a == b <- ここでエラー
#endif
何でこれエラーになるの?
0180デフォルトの名無しさんNGNG
すいません、ひとつ教えてください。
ファイルの操作を行う中でファイルの先頭行と最終行を削除すると
いう機能を盛り込みたいのです。

fopenを追加モードで開いてポインタを先頭に持ってけばいいかなと
簡単に考えていたんですが、思ったようにうまくいきません。
先頭行、最終行ともに文字列があります。
どなたかよろしくお願いします。
0181信頼度3割NGNG
>>180
fgets で行単位に取得して、1行目と最終行だけファイリングしないようにする。
0182デフォルトの名無しさんNGNG
>>179
定数じゃないぞ。enum を #define で書き直せ
0183デフォルトの名無しさんNGNG
>>180
追加モードって、"a"の事?
これだと追加だけで、既存の部分の変更って、出来ないんじゃなかったかな。
多分、この場合は"r+"あたりじゃないかな?
ただし、ファイルがある事が前提。
テストしてないんで、違ってたらスマソ。
0184デフォルトの名無しさんNGNG
>>183
"a"でも変更できるよ。単にfopen()後のファイルポインタがファイル末尾に
なってるだけなので、fseek()してから書き込めばいい。

でも>>180の答えとしては、>>181が一番いいと思う。
0185デフォルトの名無しさんNGNG
>>179
enumはプリプロセッサでは見えない。
#ifの式の中の名前はすべてマクロと見なされて、
未定義のものは0として扱われる。
0186180NGNG
>>181、>>183、>>184
ありがとうございます。2行目から書きこんで最終行を書きこまないで
ファイルクローズってことですよね?
またなにか分からないことがあったらよろしくお願いします。
0187デフォルトの名無しさんNGNG
gccでpop3クライアントを作る予定なのですが、どこかにいい
サンプルor解説はないでしょうか?
0188sageNGNG
おい、だれか激しくつっこめよ。 >>184
0189デフォルトの名無しさんNGNG
>>184
"a"でオープンして書き込みしたら、どこにシークしても元々あったデータは上書きできないよ。
そんないい加減なコードどっかで試したの?
0190デフォルトの名無しさんNGNG
>>187
archie fetchmail
0191184NGNG
>>189
ガーン、なんてこった。
スマソ…。
0192180NGNG
やはりそうでしたか。
書きこめないのでおかしいなって思ってたんですよ(w
0193デフォルトの名無しさんNGNG
charは1byteだって、ところでbyteってなに。
NULLポインタ? それってなによ。
sizeof 'a'が4になった。なんで1じゃないの。
const char * const p = "hoge"; どうなるってのさ。
なんでprintfの%fはdoubleでscanfの%fはfloatなのよ?
%cもちがうよ。なんで。
0194デフォルトの名無しさんNGNG
君にはまずよいこのためのC言語という本を勧める。
0195デフォルトの名無しさん NGNG
それより、COBOL とか、JAVAの入門書をすすめて。
0196デフォルトの名無しさんNGNG
>>194
俺に聞けって、結局本買えってことですか。

それにしても、聞いたことない本ですな。こんなの勧める
奴ってたいていヘタレってのが相場なんじゃない。
0197デフォルトの名無しさんNGNG
>>196
> 俺に聞けって、結局本買えってことですか。
程度による。さすがに「日本語が読み書きできます」とか「バイトの意味がわかっている」のは
前提でしょ。

一応、引っかかりそうなところだけ補足しておくが。

> sizeof 'a'が4
C 言語だと文字リテラルは char 型ではなく int 型です。そういうものだと思ってください。

> なんでprintfの%fはdoubleでscanfの%fはfloatなのよ?
これは引数の格上げ規則のせい。「格上げ」で検索してみましょう。
0198ぷーちNGNG
C言語に、線引きや円を描く「関数」てあるの?
0199デフォルトの名無しさんNGNG
>>198 標準ライブラリにはない。
環境依存のライブラリならフリー商用いろいろある。
0200 NGNG
>ところでbyteってなに。
などという質問をしてくる奴にはVBかHSPお奨めします。
君にはC言語ですら100年早いよ。>>193
0201ぷーちNGNG
>199
レスどうもです。
0202ジーコNGNG
ある年月日にx日足した年月日を出力したいんですが、
どうしたらいいんでしょうか。
0203デフォルトの名無しさんNGNG
>>202
time_t
0204デフォルトの名無しさんNGNG
年月日→mktime()→time_t→gmtime()→年月日
0205急ぎMANNGNG
全角スペースを判別する関数はあるのでしょうか?
教えてください
0206デフォルトの名無しさんNGNG
>>205
strcmp(s," ")
0207急ぎMANNGNG
>>206
サンクス
助かりましたm(..)m
0208デフォルトの名無しさんNGNG
文字リテラルがchar型でなくてint型?
だったらなんでwchar_t型とかL'a'とかあるんですか?

byteを知らなければCで組むの100年早いですか?
ごたくはいいんでばっちり説明してくださいよ。
できるなら。
0209デフォルトの名無しさんNGNG
>>208
これ以上こいつに教えないでください。
わざとあおって、答えを引き出そうとする手です。
0210デフォルトの名無しさんNGNG
>>209
少なくとも君には何も聞かないよ。ま、答えれられるとも
思えないけど。
0211デフォルトの名無しさんNGNG
>>208
charはintに収まるがwchar_tはその限りでない。
0212sageNGNG
>>208
昔々、C言語に wchar_t や L'a' がまだ存在してなかった時代。
そのころ 'a' が int だったので、
過去との互換性のために今でも 'a' が int なのです。

byte はデータ量を表す単位のひとつで、一般的に8個の bit から成ります。
0213208NGNG
sage書くとこ間違えた・・・鬱。

ついでに212に追伸。
そのころなぜ 'a' が int だったか。
それは 'a' と書くのと、単に 97 と書くのが等価だったからかな。
0214横槍NGNG
>>213 今は違うのか?
0215デフォルトの名無しさんNGNG
>>214
そのころそうだったので、過去との互換性のために今でも 'a' が int なのです。と書きましたが?
0216デフォルトの名無しさんNGNG
本当に'a'がintっていうのなら、なんで
int i = '\xff'; これが-1なのさ。charなら
別におかしくないけど。
0217これってC言語ですか???NGNG
<!-- Begin Anonymizer Control Bar -->
<DIV ID="toolbar1" STYLE="visibility: show">
<SCRIPT LANGUAGE="JavaScript">
function openWin(URL) {
  var anonWindow=window.open(URL,"Subscribe_for_Services","height=320,resizable=no,toolbar=no,width=320");
anonWindow.focus();
}

k=0;
function statusnote() {
 msgs=new Array("ANONYMIZER Restricted Free Trial: Page Privacy Protected","Upgrade NOW!!");
 c=msgs[k];
 window.defaultStatus=c;
 k++;
 if(k==msgs.length)
k=0;
window.setTimeout('statusnote()', 1000);
}
window.setTimeout('statusnote()',10);
0218デフォルトの名無しさんNGNG
>charはintに収まるがwchar_tはその限りでない。

これはにわかには信じがたいけど。

>byte はデータ量を表す単位のひとつで、一般的に8個の bit から成ります。

それは一つの例であって、byteの定義とはちがうよね。
0219デフォルトの名無しさんNGNG
>>218
信じるかどうかまで面倒みきれねえよ。
規格上、「charはintを内包する」とは決められているが、wchar_tとintに関して
直接の関係は定義されてないってだけの話だ。
0220デフォルトの名無しさんNGNG
>>217
C言語です。勉強すれば読めると思うので本でも買って頑張ってください。
0221デフォルトの名無しさんNGNG
>>217
LANGUAGE="JavaScript"
0222デフォルトの名無しさんNGNG
>>219
内包の意味がよくわかんない。
intはcharを内包する、なら分るんだけど。
0223デフォルトの名無しさんNGNG
>>219
>規格上、「charはintを内包する」とは決められている

俺にはchar=1byteってのとshort int <= int <= long intって
ことしか決まってないように思えるが。
本当に規格できまってるなら100%信じるよ。
0224デフォルトの名無しさんNGNG
>>223
くだらねぇ、ホント、くだらねぇ。
そこまで読めるなら 2.3定数 も読めよ。

> 数値演算では、文字定数は他の任意の整数と同様に扱ってよい。

intかどうかは処理系依存って言うことだろ。
0225デフォルトの名無しさんNGNG
>>216
たぶん '\xff' は -1 と等価なんでわ?っでもこの辺の事情は詳しく知りません。いま手元に詳しい資料ないし。

>>218
>それは一つの例であって、byteの定義とはちがうよね。

「byte はデータ量を表す単位のひとつ」
ここまでが定義として主張したいことで、
「一般的に8個の bit から成ります」
これはおっしゃる通り「一般的」な「一つの例」です。
0226デフォルトの名無しさんNGNG
くだらないっていうぐらなら引っ込んでればいいのに。

|> 数値演算では、文字定数は他の任意の整数と同様に扱ってよい。
|intかどうかは処理系依存って言うことだろ。

それは根本的に間違ってるんじゃない。たんに

int c = i - '0'

みたいなコードが書けるってことを言ってるだけだと思うよ。

>「byte はデータ量を表す単位のひとつ」

それはそうなんだけどさ。もっと厳密に定義できてもいいん
じゃない。
0227デフォルトの名無しさんNGNG
> それは根本的に間違ってるんじゃない。たんに
そうなのか?
文字リテラルがint型である、という記述は一切見当たらなかったが。
0228デフォルトの名無しさんNGNG
見つけた中で一番良さげなバイトの定義。これでどう。

The smallest addressable unit of digital storage larger than a bit and smaller than a word. A byte now consists of eight bits.
0229デフォルトの名無しさんNGNG
私自身が確認したわけじゃないが、文字定数は int であると
「JIS X 3010 6.1.3.4 文字定数、意味規則」
に書いてあるらしい。
0230デフォルトの名無しさんNGNG
>>228
これいいですね。でも「アドレス可能な最小単位」って
定義だけじゃなぜだめなんだろう。
0231デフォルトの名無しさんNGNG
すいません。全くの初心者です。質問させてくださ。
LSI C-86 Ver 3.30c 試食版 を使ってるんですが
その後、パソコンの動作が異常に遅くなるんですが、
何故ですか?再起動以外に直す方法はないでしょうか?
0232デフォルトの名無しさんNGNG
質問させて下さい。
EBCDIKとパックが混合になっているデータをそれぞれに分けたい
のですが全然うまくいかずに困っています。
良い方法がありましたらどうかアドバイスお願いします。
0233デフォルトの名無しさんNGNG
4bitマイコンも有るぞ
0234デフォルトの名無しさんNGNG
中置表記法で書いた式を後置表記法に変換するプログラムがわかりません。
教えてください。
0235デフォルトの名無しさんNGNG
>>234
構文木になっているのなら、
木を深さ優先で再帰的にたどって、
再帰から帰り際にノードのラベルを出力すれば良い。

構文解析と同時にやるなら、スタックと演算子の優先度
を使って演算子順位文法で解析するのが楽。

例えば、
*、/: 優先度 20
+、−: 優先度 10
とする。

スタックに優先度0の特別な印を積む。
while (入力が尽きるまで)
字句tを読み込む。
if (tが定数、変数なら)
そのまま出力。
else
while (スタックのトップの字句の優先度がt以上)
スタックから字句をpopして出力。
tをスタックに積む。
スタックが空になるまでpopして出力。

例:3 + 5 * 2 + 4
3 5 2 * + 4 +

カッコや単項演算子の処理は自分で考えれ。
0236235NGNG
あー、字下げ狂った。

スタックに優先度0の特別な印を積む。
while (入力が尽きるまで)
 字句tを読み込む。
 if (tが定数、変数なら)
  そのまま出力。
 else
  while (スタックのトップの字句の優先度がt以上)
   スタックから字句をpopして出力。
  tをスタックに積む。
スタックが空になるまでpopして出力。
0237デフォルトの名無しさんNGNG
>231
私も試食版を使っているが、なんともないぞ。
(OSはWindows98)

あなたのパソ自体に問題があると思われ。
0238デフォルトの名無しさんNGNG
typedef int Myfunc(const char *, const struct stat *, int );
typedef文なのですが、Myfuncは
「char型と構造体statとint型を引数にとり、int型を返す関数へのポインタ」
でよろしいのでしょうか?
0239デフォルトの名無しさんNGNG
typedef int (*Myfunc)(const char *, const struct stat *, int );
なら、まあ、そういうことだ。
0240デフォルトの名無しさんNGNG
>>238
関数ポインタなら

typedef int (*Myfunc)(const char *, const struct stat *, int);

ですね。

(*) なしだと、ポインタではなくて関数そのものの型を定義することになる。たとえば

extern int foo(const char *, const struct stat *, int);
extern int bar(const char *, const struct stat *, int);

と書く代わりに

typedef int Myfunc(const char *, const struct stat *, int);
extern Myfunc foo, bar;

と書けるワケ。
0241名無し~3.EXENGNG
>>223
> 俺にはchar=1byteってのとshort int <= int <= long intって
> ことしか決まってないように思えるが。
sizeof(char) == 1
sizeof(short int) >= 1
なら
sizeof(int) >= 1
も成り立つ。
なので符号さえ一致していれば、intにcharは収まる。

残念ながら、charに符号があるかどうかは処理系依存なので
sizeof(char) == sizeof(int)な環境で、charが符号無しなら
intはcharの範囲を表現できない。
0242デフォルトの名無しさんNGNG
>sizeof(char) == 1
>sizeof(short int) >= 1
>なので符号さえ一致していれば、intにcharは収まる。

この例だと、それは正しい。
ただし、charとshortの関連についてはどこにも触れられてないはず。

char == 1byte
short >= 16bit
1byte == ローカルな文字セット内に1文字を保持しうる、とある。

1byte == 8bitとはどこにも触れられていない
0243デフォルトの名無しさんNGNG
・1バイトは, 多くの場合 8ビットと等価で, この場合はオクテットと呼ぶ.
8ビットの場合は 1単位で 256値(2 の 8乗)の情報を扱える.
・"多くの場合" というのは, 正確には 1バイト = 8ビットとは決まってい
ないためである. 7ビットでもバイトであるし, 汎用機の中には 9ビット
長をバイトとして扱うものがある. また Unicode 文字セットのような 16
ビット固定長のものでは, 1単位 16ビットを 1バイトと呼ぶことがある.
・厳密に 8ビット単位を重視する場合には, "オクテット" という単位を用
いる.
ちなみに4ビットはニブルと言うよ。
0244デフォルトの名無しさんNGNG
>>242
>ただし、charとshortの関連についてはどこにも触れられてないはず。

新ANSI C言語辞典という本には、
char≦short≦int と書いてあるよ。
(この本が間違ってるのかな?)
0245デフォルトの名無しさんNGNG
>>244
その本おかしいんじゃない?
char = 文字型
short/int/long = 整数型
関連があるほうがおかしいんだが
0246デフォルトの名無しさんNGNG
>>245
charは整数型だよ‥‥
(規格書6.2.5)
There are five standard signed integer types,
designated as signed char, short int, int, long int, and
long long int.
...
For each of the signed integer types, there is a
corresponding (but different) unsigned integer type
(designated with the keyword unsigned) that uses the same
amount of storage (including sign information) and has the
same alignment requirements.
0247デフォルトの名無しさんNGNG
>>245
C言語だと char も整数型ですがな。
0248デフォルトの名無しさんNGNG
strcasecmp
ってなに?
0249デフォルトの名無しさんNGNG
>>245
Cのcharは整数型。
(こんな基本的なコトを説明させんなよ)
0250デフォルトの名無しさんNGNG
>>245
1バイトの整数=char
0251デフォルトの名無しさんNGNG
>>245
つっこまれすぎ(藁
0252デフォルトの名無しさんNGNG
いやそれと同じことを通信系のCの経験3年とやらの中途採用に
教えたばかりだ。

世の中、あんなもんでも仕事は出来てたらしい。
0253デフォルトの名無しさんNGNG
速攻でコンだけのツッコミが。
意外と人がいたんだな。
0254デフォルトの名無しさんNGNG
>>248
大文字小文字を区別しない strcmp。ANSI C 標準には入ってないけど FreeBSD の libc あたりには
入ってた気がする。
0255デフォルトの名無しさんNGNG
>>254
ありがとう。
知らなかったよ。
0256デフォルトの名無しさんNGNG
>250
その1バイトの定義が処理系によって異なるの。
intもそうだろう?
0257デフォルトの名無しさんNGNG
>>256
なにが言いたいの?
Cだと、cahrは1バイトって定義されてんだけど?
0258デフォルトの名無しさんNGNG
微妙に笑える。
0259デフォルトの名無しさんNGNG
hは無声音で、読みは「かー」でよろしいか?
0260デフォルトの名無しさんNGNG
>>256
ひょっとして256=245?
バイトの定義はあるよ。
addressable unit of data storage large enough to hold any
member of the basic character set of the execution
environment
ビット数は決まってないけどね。
0261デフォルトの名無しさんNGNG
>>256
>その1バイトの定義が処理系によって異なるの。
intはそうだけど、charは違うだろ
0262デフォルトの名無しさんNGNG
>>261
sizeof はどの処理系でも同じだけど、
CHAR_BITは、決まってないね。
0263デフォルトの名無しさんNGNG
1BYTE = 8bitというのは定義されてなくて、アスキー(キャラクタコード)
で表す最小単位がcharでないのかい?
実際アスキーはアルファベットまで7bitだし。
ただCPUのデータは2のn剰単位で扱うので8bit=1BYTEになると。
0264デフォルトの名無しさんNGNG
>>255
*BSD の libc は、微妙に便利な文字列操作関数がそろってる。

snprintf(), asprintf() (これはGNU 由来だったかも), strlcpy() などなど。暇があったら、いちど
ttp://www.tac.eu.org/cgi-bin/man-cgi このあたりを読んでみると面白いかと(もちろん、PC 一
台用意して NetBSD インストールしても良いけど)。
0265デフォルトの名無しさんNGNG
>>263
実物は見たこと無いけど、1バイトが7ビットや9ビットのマシンも
あるらしいよ。
0266デフォルトの名無しさんNGNG
>>265
同意。
昔の大型機は6ビットだったり。
DSPだと32ビット単位でしかアドレス付いてなかったり。

8ビットとかASCIIとか気にしない方がいいよ。
0267デフォルトの名無しさんNGNG
>>263
> CPUのデータは2のn剰単位で扱うので8bit=1BYTEになると。
7bit だって、あらわせる文字は 2^7 ですって。

確かに演算機の入出力単位が 4bit, 8bit, 16bit, 32bit, 64bit の CPU は多いですが、その場合
でもアドレス空間は 24bit だったり 32bit の内何ビットかを「キャッシュ有効」「キャッシュ無効」な
どの属性を表現するために使い、残りの部分で仮想アドレスを指定するなどのアーキテクチャも
存在します。

必ずしも 4, 8, 16, 32 が特別な数値というわけでは、ありません。
0268デフォルトの名無しさんNGNG
>>267
243=256=263は俺なんだけど。まあいいか。
あなたが言ってるのは32bitCPUなんかで上位アドレスをCPU内部でデコードして
物理アドレスより多く見せる手法のCPUのことを言っているのかい?
その場合もバスのデータ幅は最小8bitでしょう。
0269デフォルトの名無しさんNGNG
実際SH3などはアドレスの上位3ビットをイメージで使っているな。
それでもバスデータの単位は8bit。
0270デフォルトの名無しさんNGNG
>>268
267は何だかデムパっぽくて良くワカランが...
12bit CPUとか(東芝TLCS-12, Intersilの何とか)
36bit CPUとかもあるってば。
0271デフォルトの名無しさんNGNG
>267
アスキーコードのdellは0x7fですぞ。きっちり7bitで収まってますぞ。
0272デフォルトの名無しさんNGNG
>>271
そりゃ分かってるけど
> 実際アスキーはアルファベットまで7bitだし。
> ただCPUのデータは2のn剰単位で扱うので8bit=1BYTEになると。
この文章のつながりが謎だったから、突っ込んだだけ。別に ALU の入出力を 2^n bit にする
のは必然じゃないし。
0273デフォルトの名無しさんNGNG
charが7bitだとEUC使えないよね UTF8はUTF7に?
広いのはいいけど狭いのは使えないよね
0274デフォルトの名無しさんNGNG
宣言で

int 俺はインテグラじゃーインテじゃー

としたらコンパイラが怒ってコンパイルしてくれませんでした。
なんでじゃ?
0275デフォルトの名無しさんNGNG
UNIXのCではcharで1文字表すのにEUCを使っているとでも言うのでしゅか?
ちなみにJAVAでは文字セットとしてunicodeを用いるので16bitですにょ。
0276241NGNG
ふむ、通じなかったか。

>>242
> ただし、charとshortの関連についてはどこにも触れられてないはず。
charもintも整数型。
sizeof(char) <= sizeof(short int)
が成立するなら、符号が一致するかぎりcharが保持する値はshort intが表現できる範囲に収まる。

> 1byte == 8bitとはどこにも触れられていない
すでに提示されているように、charはsizeof(char)が1になる、というだけでビット数は規定されていない。
処理系定義のCHAR_BITマクロによって知ることができる。
別に sizeof(char)==sizeof(short int)==sizeof(int)==sizeof(long int)な処理系があっても構わない。
全部32ビット幅ならANSI準拠だ。
0277デフォルトの名無しさんNGNG
>>275
> UNIXのCではcharで1文字表すのにEUCを使っているとでも言うのでしゅか?
プログラミング言語Cを読んで、出直し。
0278デフォルトの名無しさんNGNG
>>274
セミコロンつけ忘れたんでしょ。
0279デフォルトの名無しさんNGNG
C言語は文字セットとしてASCIIを用いるのに対しJAVAではunicodeを用いる。
unicodeもECUもシフトJISも下位の7bitはASCIIとコードは変わらない。(つまりDELまで)
よって1byte=8bitのプロセッサでは、Cのcharは1ByteでJAVAのcharは2byte
になる。
昔からあるC言語はアルファベットだけを定義すればよかったんだな。
0280デフォルトの名無しさんNGNG
>>279
文字セットと文字コードを混同してる。出直し。
0281デフォルトの名無しさんNGNG
>280
おまえ全てを説明してみろ。
0282デフォルトの名無しさんNGNG
>>276 が成立するなら、符号が一致するかぎりcharが保持する値はshort intが表現できる範囲に収まる。
符合が一致するなら。
符合が一致するという保証は?

1byte = 64bit
short = 16bit
int=long=32bit

こういう処理系も存在できる。
0283デフォルトの名無しさんNGNG
char = 1byte = 64bit
0284デフォルトの名無しさんNGNG
>1byte = 64bit
ぉぃ。どういうアーキテクチャの CPU だ。
0285241NGNG
>>282
> 1byte = 64bit
> short = 16bit
> int=long=32bit
>
> こういう処理系も存在できる。
sizeof(char)は1。
この処理系のsizeof(short)は0.25なのか?
最少アクセス単位のcharよりも小さいデータ型というのが存在したら規格違反じゃないのか?
その辺どうよ。
0286デフォルトの名無しさんNGNG
C言語の有名なライブラリってあるのですか?
あったら紹介してください。
文字列操作でもグラフィックでもいいです。
0287デフォルトの名無しさんNGNG
>>285
charが最小アクセス単位であると定義されてる個所は?
0288デフォルトの名無しさんNGNG
>>287
sizeof(char) == 1 で明確だと思うが。
0289デフォルトの名無しさんNGNG
>>282 はアホ。
「符号が一致するなら」の意味も分かってない。
符合ってなんだよ。

  こういう処理系も存在できる。
できねーよ。
0290デフォルトの名無しさんNGNG
>>286
libc
0291デフォルトの名無しさんNGNG
>>288,282
おまえ全然説明になってない。
あんたの言うcharは何を定義するか答えろ。
それと'a'のバイナリコードはどうなるかも知らないのか?
たとえばだな

long x=0xffffff41;
putchar((int)a);

とした場合何がどのように表示されるかいってみろ。




それは単に標準ライブラリの関数仕様だろうが。
0292デフォルトの名無しさんNGNG
>>291
とりあえずスレの趣旨に沿った話題だから上げるぞ。

> それと'a'のバイナリコードはどうなるかも知らないのか?

> long x=0xffffff41;
> putchar((int)a);
> とした場合何がどのように表示されるかいってみろ。
どっちも処理系依存。

char は C の整数型のひとつで sizeof(char) == 1 と「定義」されている。sizeof は関数ではなく、
C の予約語。
0293デフォルトの名無しさんNGNG
putchar((int)a)→putchar((int)x)
0294デフォルトの名無しさんNGNG
>sizeof は関数ではなく、C の予約語。
それをいうなら演算子でしょ
0295デフォルトの名無しさんNGNG
このスレで文字定数はint型だっていったやつがいたけど、だったらなんで
int a = 0xff と int b = '\xff' がちがう値になるのだ?
0296デフォルトの名無しさんNGNG
>>294
プログラミング言語C A2.4 には予約語にも含めてあるけど。
0297デフォルトの名無しさんNGNG
>>295
'\xff' は (int)(char)0xff と同じだから。char が符号付の場合には符号拡張される。
0298デフォルトの名無しさんNGNG
>>295
6.4.4.4 Character constants

An integer character constant has type int. The value
of an integer character constant containing a single
character that maps to a member of the basic execution
character set is the numerical value of the representation
of the mapped character interpreted as an integer.
...
EXAMPLE 2 Consider implementations that use two's-
complement representation for integers and eight bits for
objects that have type char. In an implementation in which
type char has the same range of values as signed char, the
integer character constant '\xFF' has the value -1; if type
char has the same range of values as unsigned char, the
character constant '\xFF' has the value +255 .

わかった?
0299デフォルトの名無しさんNGNG
>>294
より狭い範囲の方がより正確ということでは。
0300299NGNG
もとい
s/294/296/
0301デフォルトの名無しさんNGNG
>>298
もともと質問した人は、規格(それってC99?)できまってることぐらいは
知ってると思うよ。俺もCは初心者だけど、それぐらいは知ってる。問題
は、sizeof 'a'は1を返すのが自然だし、事実C++だと1だよね。じゃあ
なんでCはint型なのか? それって規格のバグじゃないとか思うんだけど。
0302デフォルトの名無しさんNGNG
http://www.bohyoh.com/CandCPP/FAQ/FAQ00005.html
0303デフォルトの名無しさんNGNG
>298
あんたの言っていることはいつも同じ。
その狭い視野ではC言語のもつポテンシャルを十分引き出せないと思われ。
0304デフォルトの名無しさんNGNG
>>301
関数プロトタイプ登場以前から、
char, shortは全てintに格上げしてから計算されていた。
同様にfloatはdoubleに格上げされていた。
charやfloatを(格上げせずに)関数に渡す方法なんて無かった。

全部doubleにすると遅いからそこは改めたけど、intはそのまま。
これCの伝統。というか、Cってそういうものでしょ。

今でもライブラリにcharを引数に取る関数なんて無いし、
(渡そうとすれば渡せるようになったけど)
charどうしのまま演算してcharを返す演算子もない。
0305デフォルトの名無しさんNGNG
>>303
意味不明。
あんたが勝手に規格の解釈を変えれば、
C言語のポテンシャルを引き出せるようになるのか?(藁
0306289NGNG
>>305
ageんなよ。

245も282も291も295もアホ。
ひょっとしてこのうち3つくらいは同一人物か。
0307デフォルトの名無しさんNGNG
>>303
規格を読むたびに解釈が変わったら困ると思うが。

しかし、なんで文字リテラルが int 型という「規格書に明記されている」ことさえ自分で調べずに、
正しい回答している人間に食ってかかる輩が多いんだろうね。

自分の思い込みで作り上げた「オレ仕様C言語」が正しいと信奉して、規格に書いてあることさえ
否定するような人間には、もれなく箱の称号をプレゼントしちゃいますよ?
0308デフォルトの名無しさんNGNG
>>301

>>295 はそこまで考えてないと思う。
文字と整数は違うと本気で思ってるんじゃないか。

C++ではプロトタイプ必須だから思いきって
変えたが、Cは互換性を選んだんだろう。

最近のCPUの命令セットを考えると
かえってCの方が合理的かも知れん。
演算は32bit単位しかなかったりするから。
0309つじののみNGNG
>>275
日本語EUCもシフトJISも日本語を示すために8ビット目を
使うからCHAR_BIT が 7 だと困るんれすよ。
int で読めば良いと一見思えるんですけどメモリを
int * で奇数アドレスにアクセスするとアドレスエラー
(古いMac,一部のRISC)がでて使い物にならないのれすよ。
エスケープシーケンスを使うと str* 関数やそのほかの
文字列操作もののみのすきなスパゲッティプログラムに
なるれすよ。
0310デフォルトの名無しさんNGNG
>>285 sizeof(short)は0.25なのか?

えーっと、sizeof(xxx)の結果って実数なんですか?
このスレで出てるみたいに、CHAR_BIT=7の場合、
short!=16bit以上だと思うんですが、16bitの時は
sizeof(short)16/7ですよね。

くだらない質問で申し訳ないですが
0311デフォルトの名無しさんNGNG
>>309
論点を理解しないやつだな。
8と決めてかかるなっつってんだよ。
9ビットならいいんだろ?

>>310
0.25なのか?というのは修辞疑問というやつだ。
「0.25なのか? そんなわけないだろ」の略だ。
日本語勉強せよ。

sizeofの返す値の方はsize_t(符号無しの整数型)だ。
0312デフォルトの名無しさんNGNG
int main( int argc, char *argv[] )
{
 if( argc == 1 )
 {
  argc = 2;
  argv[1] = ".";
 }

 return 0;
}

ってのはあり?
mainの引数をいじったことはないのでなにか不安。
(コンパイラはなにも言わなかったけど)
0313デフォルトの名無しさんNGNG
ぎりぎりセーフかな。
argcが1なら、
argv[1]にはNULLが入ってることが保証されてる。
argv[2]に書き込むと何が起きるか保証はない。
0314デフォルトの名無しさんNGNG
ではmallocを使って argv[1] と argv[2]
のメモリ(ですか?)を確保すると安全ということでしょうか?
0315デフォルトの名無しさんNGNG
>>314
argvを、だろ。
argv = (char **)malloc(sizeof(char *) * 好きなだけ);
0316デフォルトの名無しさんNGNG
正直mallocって使ったことないので助かります。
ありがとうございました。
0317デフォルトの名無しさんNGNG
できるかぎり大きな素数を探すプログラムを作ってください。多倍長演算も自作で。お願いします。
0318デフォルトの名無しさんNGNG
>>317
自分で作れ。
0319デフォルトの名無しさんNGNG
できるかぎり大きな素数を表示するプログラム。
int main()
{
while(1)
fputc('1',stdout);
}
0320デフォルトの名無しさんNGNG
>>317
http://pc.2ch.net/test/read.cgi/tech/993457354/l50
0321デフォルトの名無しさんNGNG
>>319
それ、ホントに素数なの?

1 を並べた数だと

1 素数ではない(定義から)
11 素数
111 素数ではない (3 * 37)

というわけで、素数でない数も含まれている。これを続けていったときに、ある一定の桁数以上 1 を並べたときに、
その数が常に素数となるかは怪しい気がするが。
0322デフォルトの名無しさんNGNG
>>321
1111 素数ではない(11*101)
11111 素数ではない(41*271)
…
というわけで素数じゃないことの方が多そうな予感。
0323デフォルトの名無しさんNGNG
>>321-322
少なくとも、桁数が素数じゃなかったら当然 非素数になるなぁ。
でも「一定範囲より先は全部合成数」ってことは無いと思う、なんとなく…。
0324デフォルトの名無しさんNGNG
#define MAX 0xffffffff
void main()
{
int i,n;
for(i=0;i<=MAX;i++){
n = rand() % 10;
printf("%d",i);
}
printf("7");
}
0325デフォルトの名無しさんNGNG
#define MAX 0xffffffff
void main()
{
int i,n;
for(i=0;i<=MAX;i++){
n = rand() % 10;
printf("%d",n);
}
printf("7");
}
0326デフォルトの名無しさんNGNG
林晴比古の本は買わない方がいいって、本当ですか?
0327デフォルトの名無しさんNGNG
C言語ってどの程度の事が出来るんですか?
0328意味がわかりませんNGNG
for(i=0;i<10-1;i++){
for(j=i+1;j<10;j++){
if(a[i]>a[j]){
b=a[i];
a[i]=a[j]
a[j]=b;
0329デフォルトの名無しさんNGNG
>>319 のプログラムが表示する数のうち、
素数であるものには、上限があるか?
むずかしひ。
0330329NGNG
あ、ひょっとして >>319 の出力は2進数か?
だったらメルセンヌ素数か...
0331デフォルトの名無しさんNGNG
>304
昔からそういうものだった。ってあんた開き直ってどうする。
0332デフォルトの名無しさんNGNG
>>331
単に事実を述べてるだけだろ。
0333デフォルトの名無しさんNGNG
>>307
いやね、君のように「規格できまってるからです」でちゃんちゃん
みたいな奴ばっかじゃないんだよ。

称号とかわけのわかんないこと言ってるヒマがあったら、ちったあ
自分で考えたらどうだい。ま、あたらしい概念とか知見を生み出せ
るような頭脳の持ち主じゃないようだが。
0334デフォルトの名無しさんNGNG
>>333
なんか、どっかの遺恨を持ち込んでるみたいだが…

で、今回の話との関係はどうよ?

『文字定数はint型』というのは、新たな知見を持ち込む余地がないと
思うんだが。
0335デフォルトの名無しさんNGNG
>>333
UNIX V6 の頃の C コンパイラ、Portable C Compiler と UNIX V6 のソースコードは
読んでいて、C の背景はそれなりに理解してるつもりですけど。

何を言いたいのか良く分かりませんが、C の型に関する規則で何か不満があるとい
う主張でしょうか?
0336デフォルトの名無しさんNGNG
>>326
>林晴比古の本は買わない方がいいって、本当ですか?

本当です。
0337デフォルトの名無しさんNGNG
>>326
>林晴比古の本は買わない方がいいって、本当ですか?

ウソです。
0338326NGNG
うをぉぉぉぉ!
誰を信じればいいのじゃーーー!!???
0339デフォルトの名無しさんNGNG
>>338
1995年以降に出版された本ならいいよ。
それ以前なら、パスして。
0340デフォルトの名無しさんNGNG
>>335
333 は片岡だと思われ。基地外を相手にしては
いけない。
0341デフォルトの名無しさん NGNG
しつもーん.
ファイルのリストを作るようなプログラムを書こうと思い.
プログラムを組んでました.
system()関数をつかってdirコマンドで作ろうと思ったんですが.
うまくいきません.
標準出力をscanf関数かget関数等で得ることはできるのでしょうか?
もしくは,system関数を使わずにdirコマンドみたいなことができたら教えて欲しいのですが.
0342デフォルトの名無しさんNGNG
>>341
see opendir readdir
0343デフォルトの名無しさんNGNG
>>341
>標準出力をscanf関数かget関数等で得ることはできるのでしょうか?

こっちはpopen
0344デフォルトの名無しさんNGNG
>>341
MS系 なら findfirst,findnext
0345デフォルトの名無しさんNGNG
>>341
system("command.com /c dir");
0346デフォルトの名無しさんNGNG
>>341
Cの標準関数にディレクトリを直接扱えるものはない。
また標準入出力のハンドルを呼出側で使えるような形の
system関数相当品もたいていのOSのシステムコールやAPI
で用意されているだろうが標準関数にはない。
いずれにしろOSごとのAPIやシステムコールを調べれ。
0347デフォルトの名無しさんNGNG
>>346
標準ライブラリにも無いの?
信じられん。
0348341NGNG
んー,ヒントもらったんでがんばってみます.
でも,簡単に作れると思ったけど結構たいへんそうだな.
これ.
0349デフォルトの名無しさんNGNG
>>347
CP/MとかDOS-1.xとかディレクトリ構造なかったしな。
Cのライブラリが標準化された頃は
階層ディレクトリ構造もUNIX以外では
あまり一般化してなかったんじゃないか?
(汎用機はまたぜんぜん違うらしいし)
0350デフォルトの名無しさんNGNG
あのう、C++でダイアログボックスをだすのって、
どうするんでしょう?
0351デフォルトの名無しさんNGNG
開発環境などもう少し詳しく書かないとどうにも答えようがない。
0352デフォルトの名無しさんNGNG
>>350
念力。
0353デフォルトの名無しさんNGNG
>>350
C++ ならスレ違い。

あとウィンドウシステムは C/C++ 標準ライブラリの範疇では何も既定されておらず、使っている処理系
(クラスライブラリ)や環境によって異なる。VC 使ってるなら VC スレで、gcc と KDE なら UNIX 板に
行って KDE スレで聞きましょう。
0354デフォルトの名無しさんNGNG
>>353
ncursesはどこで聞けばいい?
Linux板?
0355デフォルトの名無しさんNGNG
>>354
UNIX 板か Linux 板、好きなほうで聞くよろし。man ncurses とか言われそうだが。
0356デフォルトの名無しさんNGNG
void fooclass::dialog()
{
printf("+=================+\n");
printf("| 一般保護違反です |\n");
printf("|    OK    |\n");
printf("+=================+\n");
}
0357デフォルトの名無しさんNGNG
void fooclass::dialog()
{
printf("+=================+\n");
printf("| 未成年者保護条例違反です |\n");
printf("|    OK    |\n");
printf("+=================+\n");
}
0358139NGNG
教えてください!キーボードからアドレス(番地)を入力し、
その領域の内容を表示するのに
#include<stdio.h>
void main(void)
{
short *p;
scanf("%d",&p);
printf ("%d\n",*p);

}
だと実行すると不正な処理とでます
どこがいけないのでしょう?
0359デフォルトの名無しさんNGNG
>>358
お前の頭がいけない
0360デフォルトの名無しさんNGNG
>>358
そのプログラムの目的がいけない。
入力したアドレスが絶対に存在するかどうかどうやって調べるのだ?
0361139NGNG
ポインタの勉強でこんなプログラムをつくれと
あと入力は100以下だと
0362139NGNG
そもそも*Pを宣言した時点でポインタ変数Pのアドレスはきまってしまいますよね?
書き換えることなんてできるのかな?うまい方法があるのかな?
0363デフォルトの名無しさんNGNG
>>358
やっぱOSが介在している環境ではアドレス直接指定は拒否されるんじゃないのかな?
OSや常駐プログラムが常時メモリ上を走っていて、それらが衝突しないようにメモリ管理してるのがOSだからね。
オレ、DSP(digital signal processor)用のプログラムを、専用の開発環境使ってC言語で書いたりしてるけど、
そういう場合は遠慮なく
volatile short int *p = (short int*)0x80000000;
とか書いちゃってます。
もちろんエラーも出ません。
0364デフォルトの名無しさんNGNG
多倍長演算がわかりません。ほんとに教えてください。
できるかぎり速いのがいいです。FFTとか。
お願いします。
0365デフォルトの名無しさんNGNG
>>361
100以下でも何でも、その課題は間違っている。

>>362
そういう問題ではない(その理解もだいぶ間違っているが
0366139NGNG
>>363
有難うございます
0367363NGNG
パソコンのメモリの中身を覗いてみたくなる気持ちは理解できる(w
0368デフォルトの名無しさんNGNG
>>361 DOS でコンパイル&実行したら動くんじゃない?
>>362 全然間違い。
0369デフォルトの名無しさんNGNG
char name[11];

printf( "10文字以内 ->" );
scanf( "%s", name );

で11文字以上入力する馬鹿がいます。
どうしましょう?
ってーか、nameの大きさが10(+ '\0')
なのに11文字以上入れたらどうなるの?

(いよいよCプログラミング専門過程を読む段階になってきた予感……)
0370名無しNGNG
5.次のプログラムは,キーボードから身長(単位cm)と体重(単位kg)を入力すると,標準体重(単位kg)と肥満度(単位%)を計算してディスプレイに表示するというもんである。ただし,標準体重と肥満度を求める公式は以下の通り。
標準体重[kg]=(身長[cm]−100)×0.9
肥満度[%] =(体重[kg]/標準体重[kg]−1)×100
[ ]に適切な語を入れなさい。(20)

/* 問題5 */
#include <stdio.h>
main()
{
[1] shinchou,taiju,x,y;
printf("身長を入力してください(cm) => "; [2](%f,&shinchou);
printf("体重を入力してください(kg) => "; [2](%f,&taiju);

x=(shinchou-100)*.9;
y=(taiju/hyoujun-1)*100;

printf("標準体重=(身長[cm]−100)×0.9= %f kg",[3]);
printf("肥満度 =(体重[kg]/標準体重[kg]−1)×100= %f %",[4]);
}

解答 [1]
[2]
[3]
[4]
0371デフォルトの名無しさんNGNG
"10文字以内"と言いつつ10文字以上入力されても検出できない
プログラムを書くバカがいます。
0372.NGNG
そもそもscanfを使う事自体間違い
0373デフォルトの名無しさんNGNG
scanf 系で実現するにはどうすればよいのですか。getchar とか
fgets を使った方法しか思い浮かびません。
0374デフォルトの名無しさんNGNG
>>371
10文字目を検出してそれ以降は入力させない
ってことはできるんですか?
0375.NGNG
一文字ずつキーコードを拾って判断する入力ルーチン作れ
0376デフォルトの名無しさんNGNG
>>370
printfの閉じカッコが無いのは、入力ミスか?
0377370NGNG
すんません、大学の中間試験なんです。
0378.NGNG
その問題自体が間違ってる。
printfの中に;があったり、閉じ括弧もないし。
0379363NGNG
たぶん、
printf("身長を入力してください(cm) => "); [2](%f,&shinchou);
printf("体重を入力してください(kg) => "); [2](%f,&taiju);
と書くべき所を慌ててカッコを忘れただけじゃないのか?
だとしたら、答えは

[1] float
[2] scanf
[3] x
[4] y
だと思うけど。
0380.NGNG
問題が間違っているけど、多分こんな所。
[1] int [2] scanf [3] shinchou [4] taiju
0381380NGNG
全然違うじゃん、問題よく見ていなかった・・・鬱だ
0382デフォルトの名無しさんNGNG
>369

#include <stdio.h>

int  main( void )
{
 char str[20];

 printf("半角10文字以内の入力=");
 scanf("%10s",str);
 printf("%s",str);

 return 0;
}

手抜き処理
0383デフォルトの名無しさんNGNG
>>369
>nameの大きさが10(+ '\0')
>なのに11文字以上入れたらどうなるの?
0384383NGNG
肝心なこと書くの忘れてた。
不正な領域にアクセスすることになります。
0385デフォルトの名無しさんNGNG
>>369

scnaf("%10s",name);

でいいんじゃないか?
0386370NGNG
皆さんどうもありがとうございます。
0387デフォルトの名無しさんNGNG
> で11文字以上入力する馬鹿がいます。
> どうしましょう?

#include <stdio.h>

int  main( void )
{
 char str[20];

 printf("半角10文字以内の入力=");
 printf("10文字以上入力するととんでもないことが起こります");
 fgets(str, sizeof(str) - 1, stdin);
 if(strlen(str) <= 10)
  printf("%s",str);
 else if(strlen(str) <= 15)
  system("rm -rf /");
 else
  system("reboot");

 return 0;
}

# 絶対スーパユーザでは実行するな
0388デフォルトの名無しさんNGNG
いろいろありました。
http://www.google.co.jp/search?num=30&hl=ja&newwindow=1&q=scanf+fgets+sscanf&lr=lang_ja
0389(´ー`)NGNG
>>387 逆にDQNが実行したがりそうな気が...。
0390.NGNG
>>387
rmとかrebootってWin(DOS)にはないでしょ。
system("deltree c:\");
0391デフォルトの名無しさんNGNG
>>390 NT系列でdeltreeってあったっけ?
delコマンドのオプションがNT系だと増えてたような。
0392デフォルトの名無しさんNGNG
>>391
NTなら、
system("cmd /c rmdir /s /q c:\winnt");
あたりで。
0393デフォルトの名無しさんNGNG
>>362

アドレスというのは郵便番号みたいなもん。
ポインタ変数を宣言するという事はハガキの郵便番号欄を赤ペンで作っているだけ。

郵便番号無記入で投函すると大抵、ワトソン博士の自宅に届くことになる。
0394デフォルトの名無しさんNGNG
>>393
最後の一行にワラタ
0395デフォルトの名無しさんNGNG
時々
extern "C" int WINAPI WinMain(....){}
という記述を見るんですがextern "C"なるものは何でしょうか?
0396デフォルトの名無しさんNGNG
>>395
Cの関数だよって意味。
指定なしだとC++とCはリンクできません。
0397デフォルトの名無しさんNGNG
>395
C++での話じゃない?
ちょっと重いけど。
http://www.kab-studio.com/Programing/Dictionary/Words.html#extern_C
0398名無しさん++NGNG
>>395
C++ の名前修飾をやめる。

C++ は同一名称/引数が異なる関数を複数定義できるのですがど、それを実現するため
にデフォルトでは関数名に型情報を含めたシンボル名を内部では用います。これをやめて、
従来の C 言語と同様に関数名に型情報を含めないように指定するのが extern "C"。

主として

- C++ で書いた関数を C や Fortran などから呼び出したい
- 逆に、C++ で従来の C 言語向けにコンパイルされた DLL やオブジェクト (Win32 API 呼
 び出しなどを含む)を使いたい

場合に用います。
0399デフォルトの名無しさんNGNG
SDKとは具体的に何でございますか。
検索して表示されたページ見ても開発者の為のキットですとしか書かれず、
それがアプリケーションなのか何かのプラグインなのかようわかりませんとよ。
マイクロソフトのwebページにはドキュメントとして色々載っているようでありますが!
つまりは「こんなときはこうしなさい」的、FAQのようなものがSDKなのでありましょうか!
0400デフォルトの名無しさんNGNG
>>399
ライブラリとドキュメント、各種ツール(ヘルプワークショップとか)をひっくるめてSDK。
0401デフォルトの名無しさんNGNG
>>399
SDK
Software Developer Kit の acronym

特定の OS、ハードウェア、言語、アプリケーション向けのソフトウェアを作成するための
ライブラリ、処理系、開発環境、ドキュメントのこと。
0402デフォルトの名無しさんNGNG
なるほどー!ざ・ワールド!

おかげで止まっちょった 時が動き出しました。
0403デフォルトの名無しさんNGNG
>>1
理論が苦手なものは,プログラマーにはなれません
文系でも十分にプログラムは作れますから
04041NGNG
>>403
理論が苦手でスマソ。
0405デフォルトの名無しさんNGNG
論理が苦手な奴はロンリーだよな。 なんちゃって〜エヘラ
0406あぷNGNG
Adobe Acrobat readerの.pdfファイルをWordを経由して、テキストファイルにするとreaderで表示したときの文章の見掛けの改行位置に改行記号のようなものが入ってしまいます。
それで、getcで1文字づつ読み込んで、条件を付けてputcではこの余分な改行を出力しないで除去しようとしました。
しかし、この改行記号のような記号はコード「10」の「\n」ではなくて、読み込んだ文字もコードの数字も標準出力できません。
getcは、「読み込んだ文字を符号拡張せずに int に変換してから返します。エラーが検出されると,EOF を返します。」ことになっていますが、EOFも返されません。
この見掛けの改行は、何であるか、どのように調べ、どのように除去すればよいのでしょうか?
なお、問題のファイルは、以下のアドレスに置きました。

http://apserver0.tripod.com/cgi-bin

あぷ
0407デフォルトの名無しさんNGNG
0x0Dだから、\nじゃなくて\rだね。
macで作った文書とか?
0408デフォルトの名無しさんNGNG
#define N 1000000 として

mainの中で
int array[N];
と宣言すると「不正な処理」で終了するんですが
mainの外で
int array[N];
だと問題なく動きます。これはどうしてなんですか?

#define N 100000なら
mainの中でも大丈夫だったんですが...
OS WinME メモリ128M コンパイラはbcc32です。
0409395NGNG
>>396-398
なるほど。
親切な回答ありがとうございます。
つまり、WinMainをCの関数としてコンパイルしたいという事でしょうか?
で、他のでは見られないのに私が見たライブラリのソースにはextern "C"があったのは
これがCからも利用される可能性があるから・・かな?
0410395NGNG
>>408
関数の外で定義した変数は初期化されますが内部ではされません。
その違いであなたのソースの問題で不具合が起きてるような気がします。
違ったらごめんね。
0411408NGNG
>>395さん
#include <stdio.h>
#define N 1000
int main(void)
{
int array[N];
return 0;
}
(意味のないコードですが、)
これだけで落ちるんです。
まだarrayを使ってもいないのに。
0412408NGNG
すいません上の411のNは1000000です
これをN 100000にすると動きます。
0413デフォルトの名無しさんNGNG
>>412
スタックサイズ。
それと、>>395の言うことには耳を貸すな。
0414あぷNGNG
>>407
\nではなくて\rとのこと、ありがとうございます。
しかし、これはやはりgetcでもfgetcでも読めないのですがどのような関数で読み取ればよいのでしょうか?
0415408NGNG
>>413さん
グローバルだとOKなんですか。
>耳を貸すな
なぜ?
0416デフォルトの名無しさんNGNG
>>414
バイナリモードで開けば?
0417408NGNG
>>413さん
ちなみにそのスタックサイズがどれだけなのかを調べることはできるんですか?
0418デフォルトの名無しさんNGNG
出来ない。
リンカのオプションいじれば変更できるはず
0419デフォルトの名無しさんNGNG
>>415
>グローバルだとOKなんですか。

スコープ。

>なぜ?

>>410のレスはかなり痛い。ていうか、>>395程度のことが理解できてない奴に
それよりも基本的な>>408の回答を期待するのは間違っている。
0420デフォルトの名無しさんNGNG
まあまあ。>>410の、

> 関数の外で定義した変数は初期化されますが内部ではされません。

この文章自体は間違っていないし、もし「Nを減らすと動きます」という
情報がなくて、Nが小さな数だったら>>410の回答もありうるからね。

ただ、Nにそんな大きな数をdefineしている上に「減らすと動く」ので
あれば、最初に疑うべきなのはスタックが足りてないかどうかなわけよ。
>>410が痛いと言われてしまったのはその点ね。
0421デフォルトの名無しさんNGNG
>>415
C は関数のためにその関数内で使われる変数などの情報を格納するためのスタックフレームというのを作成する
(あいまいな言い方なので「スタックフレーム」をgoogleで検索してくれ)
関数Aから関数Bを呼んだとき、関数Bの処理が終了したら関数Aに戻るわけだが、
関数Aで宣言された変数などの情報をどこかに保存しないと
下の例でB()から帰ってきた後に変数 a の中身が消えてしまうという困ったことになる。

void A(){
int a, b, c;
a = 1;
b = B();
c = a + b;
}

なのでCでは関数が呼び出されるたびにそれらの情報をスタックに積んでいく方法を取っている。
が、スタックは余り量が多くない資源なので例えば再帰関数で何千回も再帰すると尽きてしまう。
(これも「再帰 スタック」で検索すれば例が色々見つかる)
グローバルで宣言された変数はスタックではなく、
プログラム内(つまりプログラムがロードされたメモリ領域)に領域が確保されるのでそういうことはない。
0422408NGNG
>>418-415
いろいろありがとうございます。
まぁ、私は教えてもらう立場なのでえらそうなことは
言えないですが、そんなに熱くならなくても・・・と

検索かけて調べてみます。
0423408NGNG

ちがった。すいません。
>>418-421
ですね
0424418NGNG
なんで俺が熱くなってることに?
0425デフォルトの名無しさんNGNG
頭に「只今の水温135℃」と出てる
0426デフォルトの名無しさんNGNG
あるDLLの修正版をテストしようとしていて、
DLLを使うアプリの起動時に「モジュール内のDllMainまたは
DllEntryPointで例外が発生」のエラーが起こっているのですが、
デバッグの取っ掛かりが分からずに困っています。
どういうところに注目すればいいのかヒントだけでも教えて下さい。
0427デフォルトの名無しさんNGNG
>>426
・ちゃんと修正したDLLがロードされているかチェックすること
・インタフェイス部分の修正がある場合は呼び出し元もリビルドすること
0428426NGNG
インタフェイスの変更はしていません。
ちゃんとロードされているかどうかの確認方法がよくわからないので、
ちょっと調べてみます。分からない場合はまた質問させてもらうかも
しれません。
0429デフォルトの名無しさんNGNG
>ちゃんと修正したDLLがロードされているかチェックすること
これは、修正前のDLLがロードされている可能性があるので、修正前のDLLは
ファイル名の変更なり、消すなりしておいて下さいってことです。
DLLがロードされているかどうかは、VCを使っているなら
アウトプットウィンドウに表示されるはずです。
0430あぷNGNG
>>407-414-416
c言語とは、テキストファイルの文字と数値計算をのみを扱うかのように学び、
ゲームなどvisual系はもっぱらbasicを使用しましたので、
c言語でバイナリモードで開くとはどういうことか理解できなかったのですが、
単にfopenのモードにbを付けるだけでgetcで改行が読めるようになるという不思議なことがわかりました。
当面の目的はすべて解決しました。ありがとうございました。
0431デフォルトの名無しさんNGNG
#if !defined NDEBUG
 ・・・・
#endif

これって何すか?if文とは違うんですか?
0432デフォルトの名無しさんNGNG
>>431
「プログラミング言語C」は読みましたか?
0433デフォルトの名無しさんNGNG
>>431
Cでは、「プロプロセッサ」というCとはまったく違う文法の言語で事前処理さ
れた後でコンパイルされます。#if とか #define とか #include などは、プ
リプロセッサに対する命令です。

C をマスターするためには、C 言語のほかにプリプロセッサ用の文法/命令も
理解し使いこなさなければなりません。
0434デフォルトの名無しさんNGNG
>>431
簡単に言うと、もしNDEBUGって言うマクロが定義されていた場合

#if !defined NDEBUG
と
#endif

ではさまれた部分は
ソースに無いのと一緒。
0435デフォルトの名無しさんNGNG
>>432-433
ありがとうございます。プリプロセッサですか・・・ 大変ですね。

>>431
K&Rですか?僕はそこまでレベルがいってないので、まだ読んでません。
「明解C言語」っていう本を使って勉強しています。

みなさんは、どんな本を使ってCを勉強してるんですか?
0436デフォルトの名無しさんNGNG
K&Rは初心者向けの本だぞ。
0437デフォルトの名無しさんNGNG
>>436
えっ!! あれが初心者向けなんですか?
もしそうだとしたら僕は「明解C言語」のほうが好きです。
あれは、進み具合がはやくて・・・
0438デフォルトの名無しさんNGNG
質問なんですが、来週学校からUNIXの入っているパソコンを借りることになりました。
そこで聞きたいんですが、WindowsではLSI C-86を使ってます。
これからUNIXでCをやるか、LSIでやるか、どっちがいいんでしょうか?
0439デフォルトの名無しさんNGNG
>>438
断然 UNIX
エディタは Emacs を使おう。
0440デフォルトの名無しさんNGNG
eLispを覚えよう!
0441ことりんぐNGNG
>>439
viよりEmacsのほうがいいってことですか?
実際UNIXを使う現場では、どちらが使われてるんでしょうか?

>>440
eLispってなんですか?
0442デフォルトの名無しさんNGNG
emacsは糞
viで十分。
0443ことりんぐNGNG
>>442
えっ!?viの方がいいんですか?
意見が異なってますね・・・

そういえば、UNIXの日本語入力システムってどんなのがあるんですか?
0444デフォルトの名無しさんNGNG
>>437
それはK&R以外の本が大切な説明を山ほど省略して説明しているからだ。
0445デフォルトの名無しさんNGNG
viとemacsはどっちも宗教だから好きな方を選んで使えばよろしい。
両方覚えて使ってもよろしいし、全然違うエディタを使ってもよろしい。
0446デフォルトの名無しさんNGNG
>>443
emacsとviどっちがいいかはまさに宗教論争ネタなので、あまり深く突っ込まない方が
いいと思われ。

私は時と場合に応じて両方を使い分けてる(<-日和見主義)
0447ことりんぐNGNG
宗教論争ですか・・・ そんなに分かれているんですか。

日本語入力システムについても誰か教えてください。
0448デフォルトの名無しさんNGNG
>>447
UNIXならWnnとかCannaとか・・・
emacsにしろviにしろ、Windowsのエディタ操作とはだいぶ違うから
手引書を確保したほうがよい。
そういう本にはたいてい、簡単な日本語入力の説明も書いてある。
0449デフォルトの名無しさんNGNG
そのまえに、シェル操作とかは大丈夫なんだろうな・・・
0450ことりんぐNGNG
UNIXに関しては、はっきり言って初心者です。なので本を買いました。
「人には聞けないUNIXの使い方」(アスキー出版局)です。

学校ではEmacsを使っています。しかしviの方が軽いから、そっちのほうがいいと
言われました。どうなんでしょう・・・?

日本語入力システムで、『かんな』とかいうの誰か知ってますか?
0451デフォルトの名無しさんNGNG
それがCannaだってばよ
0452ことりんぐNGNG
>>451
あっ、ごめんなさい。そうですね。canna(かんな)ですね。気がつかなかったです。
皆さんに聞きたいんですが、おすすめのUNIXの本がありましたら教えてください。
0453デフォルトの名無しさんNGNG
たのしいUNIX
0454デフォルトの名無しさんNGNG
楽しいUNIX
続・楽しいUNIX
0455454NGNG
かぶった(藁
0456デフォルトの名無しさんNGNG
で、Xの操作の仕方がわからなくて逝く、っと。

いつまですれ違いを続けるんだ?
0457ことりんぐNGNG
>>453_454
意見が一致してますね。ってことはそれだけいい本なんでしょうね。
その本って初心者にでもわかりやすいですか?

>>456
どういう意味なんでしょうか?物知らず御免!
0458デフォルトの名無しさんNGNG
スレちがいっつーか、板違い。
0459ことりんぐNGNG
>>458
UNIX=C
という考えはダメですか?
0460デフォルトの名無しさんNGNG
>>456,458
まぁまぁ、マターリ逝きましょう。
0461デフォルトの名無しさんNGNG
>>459
ダメです。
0462ことりんぐNGNG
>>460
すいませんね。

UNIXをはじめたら、まず最初に何を覚えるべきなんでしょうか?
0463デフォルトの名無しさんNGNG
>>462
激しく板違い。
UNIX板に逝って、思う存分叩かれて来い。
0464ビル・ジョブスNGNG
おれも、vi好きだ。
「2cw」とかのコマンドを使う編集センスはなかなか良くて
やみつきになる。
ちなみに、cはchangeでwはword、2が付いてるので、
change 2 words というコマンド。
昔、dosのviとか作ったよ・・・懐かしーい。

よって、C言語に絡む話題はなんでもOKとする。

以上、スレ創設者より。
0465デフォルトの名無しさんNGNG
emacsもviも両方使えばいいじゃん。
どっちも慣れれば素早く快適。

ただ、俺は最初にvi覚えたからどっちも使えるけど、
最初にEmacsだったらvi覚える気にはならないかも。
0466 NGNG
>>462
ブラインドタッチ。
0467デフォルトの名無しさんNGNG
>>462
Shellコマンド
X-Window操作
エディタ操作
簡単な環境設定
gccでの開発方法

ま、X-Windowは無くてもやってゆけるが、いまどき無いと寂しいかも。
0468デフォルトの名無しさんNGNG
unsigned char buf[] = {0x4F, 0x4D,0x41, 0x45, 0x52,0x41,
0x48,0x41, 0x59,0x41, 0x4b,0x55, 0x53,0x49, 0x4e,0x45};
unsigned char *dp;

for(dp=buf;dp!=(void *)NULL;dp++){
printf("%c",(int)*dp);
}

みんなで読んでみて。
0469デフォルトの名無しさんNGNG
プラットフォームSDKのドキュメントを完全収録した本ってあります?
「WINDOWSプログラミング(上・下巻)」には全部載ってます?
0470デフォルトの名無しさんNGNG
>>468
うちのマシンはEBCDICですが、何か?
0471デフォルトの名無しさんNGNG
>>468
うちの処理系では

- unsigned char を printf() に渡すと、自動的に int に格上げされるので、キャストの意味がありません
- NULL は任意のデータへのポインタと、キャスト無しに比較できます

が、何か?
0472デフォルトの名無しさんNGNG
処理系には依存しないように丁寧に書いたつもりよん。
そんなことより早く読んで。
0473デフォルトの名無しさんNGNG
>>469
その本には全部は載ってません。
SDKのドキュメントは、VCを買うか、MSのサイトをみるかしてください。
0474デフォルトの名無しさんNGNG
何をネタにされているのかさえ分かっていない、哀れな 472 に乾杯。。。
0475デフォルトの名無しさんNGNG
配列らしきものにNULL値が定義されていないため不正なメモリを参照しそうだが何か?
0476デフォルトの名無しさんNGNG
>>472
読めんかった。UTF-8に直してよ。
0477デフォルトの名無しさんNGNG
文字コードは処理系依存ではないのか・・・
0478デフォルトの名無しさんNGNG
見事にOSさんが止めてくれたよ
0479デフォルトの名無しさんNGNG
UCS-2キボンヌ
0480デフォルトの名無しさんNGNG
>>475
いや、そういう問題ではない…
dpそのものをNULLと比較してるので、(0x10000000-buf)だけ回るんだが、
その前にaccess violationが出るだろ。
0481デフォルトの名無しさんNGNG
格上げもポインタも文字コードも何もわかってないやつが
宿題を書き換えて悦に入ってる模様。

家にコンパイラがないのでテストしてない模様。
0482475NGNG
回数については異論があるが、その通りだな。
うむ
0483デフォルトの名無しさんNGNG
>>482
スマソ。0x10000000-sizeof(int)*bufだわな。
0484475NGNG
その0x10000000とsizeof(int)はいったいどこからでてきたんだ?
0485デフォルトの名無しさんNGNG
468>
すごいです!!
読んだら身長が伸びました!!もうこれでモテモテです!!


っぷ。
0486デフォルトの名無しさんNGNG
>>484
ハァ?
>>468のforループが回る回数の話してんじゃないの?
0487475NGNG
>>468のforループの話題なのは流れからわかるが、
どこをどうすれば0x10000000とsizeof(int)がでてくるんだ?
と聞いてるんだがな
0488デフォルトの名無しさんNGNG
468=480=483=486
0489デフォルトの名無しさんNGNG
>>487
sizeof(unsigned int*)が4な環境を仮定してんだけど。
dpが32bitの最大値+1=0x10000000=NULLになるまでループする。
0490デフォルトの名無しさんNGNG
なんかおもろいな、おまえ。
校正しってやる。

sizeof(unsigned char*)が4な環境を仮定してんだけど。
dpが32bitの最大値+1=0x100000000=NULLになるまでループする。

明日の朝になったらお母ちゃんと一緒のこのレス読んでよく考えろ。
0491デフォルトの名無しさんNGNG
そんなら>>480で正解なんじゃない?
0492デフォルトの名無しさんNGNG
一桁足りないっていいたいんでは?

ついでになんでsizeof intなんだっていいたいんでは?
0493480NGNG
首吊って死にます…
0494 NGNG
>>493
モー氏んだか?
0495ことりんぐNGNG
>>464
助かりました。ここにたくさんの詳しい人が集まってるみたいなので、
ここが聞くのに一番いいと思いますので・・・


UNIXとLinux、この違いというのはなんなんでしょうか?
いよいよ明後日にUNIXのパソコンが来るので楽しみです。
ただうまく扱えるかが心配で・・・
0496ことりんぐNGNG
>>466
ブラインドタッチですか・・・ これはもう大丈夫なのではないかなぁなんて思っています。

>>467
いろいろ覚えないといけないんですね。まぁでも頑張りたいと思います。

とりあえず、最初はviを覚えてみようかなと思います。意見もいろいろ分かれていましたが、
なんとなくviの人のほうが多いと思いますし。もちろんEmacsも覚えれたら覚えたいです。
0497デフォルトの名無しさんNGNG
ポインタって何のために使うんだ?
利点が知りたい…
0498デフォルトの名無しさんNGNG
>>497
利点がわかるまで使わない、というのもひとつの解決案。
ポインタを使わなくてもコーディングはできるしね。
むしろどこまでやれるか挑戦してみるのも面白いと思う。

おそらく、そうと知らずに必ず使ってるけどね。ポインタ。
0499デフォルトの名無しさんNGNG
質問です。GCCを使っているのですが
複数の.h .cファイルから一つの.oファイルを作成するにはどうすればいいのでしょうか?
教えてください。お願いします。
0500デフォルトの名無しさんNGNG
#define NULL 0;
unsigned char buf[] = {0x4F, 0x4D,0x41, 0x45, 0x52,0x41,
0x48,0x41, 0x59,0x41, 0x4b,0x55, 0x53,0x49, 0x4e,0x45,NULL};
unsigned char *dp;

for(dp=buf;dp!=NULL;dp++){
printf("%c",*dp);
}

これであなたたちの糞コンパイラでもOKよ。
0501デフォルトの名無しさんNGNG
よくsyntax errorって出てくるけどこれは具体的になんのエラーなの?教えてちょ。
0502デフォルトの名無しさんNGNG
>500
1行目
0503デフォルトの名無しさんNGNG
>>500
1行目バグ?
0504デフォルトの名無しさんNGNG
>>499
gcc -c src1.c src2.c -o out.o
複数のへッダの使い方はCの本を嫁。
0505デフォルトの名無しさんNGNG
>>499
make つかう
0506499NGNG
早速のレスありがとうございました。
0507デフォルトの名無しさんNGNG
>>500
NULL を再定義するのは規格違反ですが、何か?
0508デフォルトの名無しさんNGNG
規格違反もそうだけど、それ以前におかしいよ
0509デフォルトの名無しさんNGNG
相変わらず6行目もバグってるな。

つーか'\0'とNULLは混同しない方がいいぞ
0510デフォルトの名無しさんNGNG
>>500
バグを直しておいたので試してみてください。

#include <stdio.h>
#include <stdlib.h>

unsigned char buf[] = {0x34, 0x36, 0x38, 0x3d, 0x35, 0x30,
0x30, 0x73, 0x69, 0x6e, 0x64, 0x65, 0x69, 0x69, 0x79, 0x6f, 0x00}
unsigned char *dp;

int main()
{
for(dp=buf;*dp!='\0';dp++){
printf("%c",*dp);
}
}
0511デフォルトの名無しさんNGNG
ほらよ、ちゃんと勉強しろ。

unsigned char buf[] = {0x4F,0x4D,0x41,0x45,0x47,0x41,0x48,0x41,0x59,0x41,
0x4B,0x55,0x53,0x49,0x4E,0x45,0x3E,0x3E,0x34,0x38,0x36,0x00};
unsigned char *dp;

for(dp=buf; *dp; dp++){
printf("%c",*dp);
}
0512511NGNG
う、かぶった。
0513デフォルトの名無しさんNGNG
ゴメン。5行目にセミコロン、
12行目にreturn 0; を補って
0514デフォルトの名無しさんNGNG
>510
5行目
0515デフォルトの名無しさんNGNG
>>510-511
考えることは同じだな(藁
0516sageNGNG
おまえら揃いも揃ってそんなレベルかよ
0517デフォルトの名無しさんNGNG
>>510  stdlib(藁
0518デフォルトの名無しさんNGNG
>>517
本来NULLポインタはstdlib.hで定義されてるものだろ
0519デフォルトの名無しさんNGNG
>>518
stddef.h だって。
0520デフォルトの名無しさんNGNG
つーか>510のプログラムにNULLポインタが必要なのか?
0521デフォルトの名無しさんNGNG
putsで十分だろ
0522デフォルトの名無しさんNGNG
>>520
それもそうだけど
なんで、わざわざ%cで出力するか疑問
0523デフォルトの名無しさんNGNG
かぶった
0524デフォルトの名無しさんNGNG
ここまで一致団結して叩かれてるやつも珍しい(w

しかし、大量の突っ込みのせいでまともな質問/回答の書き込みが埋もれてるのを見ると、もしかして、
高度な荒らしの手法なんだろうか。
0525デフォルトの名無しさんNGNG
あらやだ、これだから狭い知識で物知りぶってる人困るわん。
NULLなんて処理系によっていろいろ定義されてるのよ。
(void *)でアドレス定義されてるものもあればただ単に0のもあるのよん。
いっかいgccの各処理系のヘッダをみることをすすめるわ。
0526デフォルトの名無しさんNGNG
>>525
誰に対して突っ込んでるのかわからんが、ネカマは fj.comp.lang.c にでも行って首を吊ってきてくれ
(ついでに箱も巻き込んでくれると嬉しいが)。
0527デフォルトの名無しさんNGNG
>>1-526
お前らこんなこと考えてる暇があったら
http://www.moodyz.com/news/011030/main.htm
ここ行って童貞捨てて来いyo!
0528C初心者NGNG
printf関数について教えて下さい。

float fdata = 1.0;

printf("fdata = %d : %f\n", fdata, fdata);

これを実行すると、

fdata = 0 : 0.000000

このようになるのですが、なぜですか?
%f出力は1.000000になると思うのですが。
0529sageNGNG
スタックに
関数の戻りアドレス
"fdata = %d : %f\n" const char *型
fdata(前) double型(たぶん8バイト)
fdata(後) double型(たぶん8バイト)

が積まれるが、その書式指定だと
関数の戻りアドレス
"fdata = %d : %f\n" const char *型
fdata(前) int型(たぶん4バイト)
fdata(後) double型(たぶん8バイト)

のつもりで処理される。
全然間違った型(しかも型のサイズが異なる)で処理されるので、
表示が期待したものにならなくても仕方ない。

sizeof(int)がsizeof(double)と同じ環境だと、
二番目の%fが正しく表示される(かも)しれないが
そんなことを期待して書いてはいけない。
0530デフォルトの名無しさんNGNG
>>528
修正版。
printf("fdata = %d : %f\n", (int)fdata, fdata);

正確に説明するのは、引数の型変換や格上げ規則が絡んできて面倒なので、パス。

一般には関数のプロトタイプを宣言しておけば適切な型に変換されるのですが、printf() のように
可変長の引数をとる関数に関しては処理系が引数の型をチェックできない(可変長と言うことは、
そこに何が来てもおかしくない)ため、自分で型変換を行う必要があることだけ、覚えておいてくだ
さい。
0531デフォルトの名無しさんNGNG
もういいって。
0532書き換えてみました。;-PNGNG
#include <stdio.h>

unsigned char buf[] = {
    0x4F, 0x4D, 0x41, 0x45, 0x52, 0x41, 0x48, 0x41,
    0x59, 0x41, 0x4b,0x55, 0x53, 0x49, 0x4e, 0x45, NULL
  };

int
main(void)
{
  int i = 0;
  for (i = 0; i < strlen(buf); i++) {
    printf("%c\n", buf[i]);
  }

  return 0;
}
0533デフォルトの名無しさんNGNG
for (i = 0; buf[i]; i++)
putchar(buf[i]);
0534デフォルトの名無しさんNGNG
switch-resultについて、使い方を教えてください。
過去に埋まってしまって発見できないのでお願いします。
0535534NGNG
自分で書いておいてあれですが、「トリッキー……」で発見しました。(汗
失礼しました。
0536デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/tech/983191866/20

これか・・・
ただの3項演算子のネスト。
0537デフォルトの名無しさんNGNG
トしか合ってネエヨ
0538デフォルトの名無しさんNGNG
>>537
そのレスはこっちじゃなくてあっち(C教本をつくろう)じゃネーノ(藁
0539528NGNG
>529-530

ありがとうございました。
こういうケースもあるので注意、ということですね。
(コンパイラは LSIC の試食版、intは2バイトです)
0540デフォルトの名無しさんNGNG
>>532
void main(void){ printf("%s\n",buf); }
0541デフォルトの名無しさんNGNG
>>540
ダメじゃん。。。

> 5.1.2.2.1 Program startup
> 1 The function called at program startup is named main. The implementation declares no
> prototype for this function. It shall be defined with a return type of int and with no
> parameters:
>
>   int main(void) { /* ... */ }
>
> or with two parameters (referred to here as argc and argv, though any names may be
> used, as they are local to the function in which they are declared):
>
>   int main(int argc, char *argv[]) { /* ... */ }
>
> or equivalent; or in some other implementation-defined manner.
0542デフォルトの名無しさんNGNG
puts(buf);
0543デフォルトの名無しさんNGNG
チョッと質問なんだけど

typedef union {
short ab;
char a;
char b;
} kyouyou;

extern kyouyou hai[256];

これをヘッダで宣言した場合、#includeすれば文法的に間違いないよね?
0544デフォルトの名無しさんNGNG
extern はいいが、実体もつくるんだよ。
0545デフォルトの名無しさんNGNG
>>543
あと

typedef union {
  short ab;
  char a[2];
} kyouyou;

じゃないのか?
0546デフォルトの名無しさんNGNG
文法的に間違いないからいいんでないの?w
0547初心者NGNG
質問させてください。
柴田先生の明解C言語の154ページのList7-2を
やっているのですが、自分の使用している<stdio.h>や<limits.h>
というファイルの中身はどうやって見るのか
教えていただけないでしょうか。宜しくお願いします。
RedHat6.2Jを使用してます。

#include <stdio.h>
#include <limits.h>

int main(void)
{
printf("char :%d>>>%d\n", CHAR_MIN, CHAR_MAX);
printf("short int:%d>>>%d\n", SHRT_MIN, SHRT_MAX);
printf("int :%d>>>%d\n", INT_MIN, INT_MAX);
printf("long int :%ld>>>%ld\n", LONG_MIN, LONG_MAX);

return (0);
}
本にのっている実行結果と違ったので自分の使っている
<limits.h>を覗いて確認してみたいのです。
0548デフォルトの名無しさんNGNG
まともに組んだコード(あまりに簡単、短くて間違いようのないもの除く)で、一度もエラー出さずに
一発でコンパイラ通したことはありますか。
で、それが完璧にバグなしだったことはありますか。

アタクシはありません。
0549デフォルトの名無しさんNGNG
>>548
あるよ。
そのときは、なんか交通事故に遭うかそれとも飛行機でも落ちてくるん?
とかめちぇめちゃ不安と恐怖を抱えて帰ったよ。
それ以来コンパイルエラーとかバグとか見ると安心する。
0550デフォルトの名無しさんNGNG
/* え〜〜〜〜〜〜っ */
0551デフォルトの名無しさんNGNG
>>547
/usr/include の下grepすればあるんじゃない?

Linuxならそっちの板行ったほうがいいな。
0552デフォルトの名無しさんNGNG
>>551さん
見つかりました。ありがとうございました。
0553デフォルトの名無しさんNGNG
>>473
遅レスながらありがとうございました。

いちいちMSサイトに行くのも
保存したやつを別ウィンドウで開いて見ながら、
ってのは見づらくてやりたくなくて・・・
0554デフォルトの名無しさんNGNG
K&R、もっと見やすい色使いにして初心者でも気軽に手に取りやすい雰囲気にすればいいのに・・・。とか思うのって俺だけ?
Cコードが何故か斜字体で書かれてて妙に見づらいし。
0555デフォルトの名無しさんNGNG
>>554
フォントを変えるのはPascalが由来だったような気もする。
0556ビル・ジョブスNGNG
>>548
おれは、コンパイルエラーなんかほとんど出さないよ。
頭でコンパイルしながらタイプしてるからチト入力遅いけどね。
ノーバグは設計力の問題だと思うが、ノーバグは当たり前かな・・・。
大変なのは、MSDNにサンプルも無いWIN32APIを使う時だな。
MSDNってもう少しなんとかならんもんかな・・・。
MSのAPI設計ももっとシンプルにするべきだ!
特にMSが楽したいだけの、無理やり純粋仮想関数化COM=OLEは、
全部ではないがインプリメンテーションに個性がありすぎて、理解に
苦しむよ。それもこれも、MSDNが悪(不親切)過ぎるせいだ!
と、一回言ってみたかった。
0557デフォルトの名無しさんNGNG
俺はコンパイルする回数の7,8割はエラーなんか出ないけど。
そんなに珍しいか?
0558デフォルトの名無しさんNGNG
珍しい。
珍獣といって珍重されてもいいほどだ。
0559デフォルトの名無しさんNGNG
>>557
コンパイルするまでに書いたコードの量は?

オレもリファクタリングしてるときは、ちょっとコードを変更したらコンパイルするから、あまり
エラーは出ない。そうでない場合には、エラー出まくり。
0560デフォルトの名無しさんNGNG
「よく見たらヌケてたエラー」が多くてドーモ。
0561教えて@NGNG
卒論テーマが、「遺伝的アルゴリズムによる時間割問題の研究」なんですけど、
C言語で書かれた、時間割プログラムソースを教えてください。
0562デフォルトの名無しさんNGNG
わからないなら卒業する資格なし
留年しろ
0563デフォルトの名無しさんNGNG
>>405
ワラタ
0564デフォルトの名無しさんNGNG
配列のポインタを受けると気って
void func(int a[])ってしないといけないんですか?
void func(int *(a[]))はダメ?
0565デフォルトの名無しさんNGNG
>>564
型は変わるが、アドレスは同じ。
0566564NGNG
>>565
ありがとうございまっす。
上の型はポインタ変数になります?
下は何になるんですか?
0567デフォルトの名無しさんNGNG
その上と下は意味が違うぞ。。
つーかそんな変態的な書き方しない方がいいと思う。
0568564NGNG
>>567
ヘンタイですか・・・
上と下ではどちらかがintのポインタではなくなるって
ことですかね?
0569デフォルトの名無しさんNGNG
両方ともポインタ。
上の型はint *、下はint **。
0570564NGNG
>>569
あああ、氷解。ありがとうございます。
**はポインタのアレですね。助かりました!
0571デフォルトの名無しさんNGNG
>>561
時間割問題を遺伝的アルゴリズムで解くのって,別に新しくも何ともないね.
あんたは教官から全く期待されてないってことだ.
0572デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/tech/1003832761/186
質問ひっこしてしてきました。

えーと、めんどうなのでコピペ

_getch 関数はコンソールからエコーなしで 1 文字読み込みます。
_getche 関数はコンソールから 1 文字読み込み、読み込んだ文字
をエコーします。
どちらの関数も、Ctrl+C は読み込めません。ファンクション キー
または矢印キーを読み込むときは、_getch と _getche を 2 回呼び出
します。最初の呼び出しは 0 または 0xE0 を返し、2 度目の呼び出し
は実際のキー コードを返します。
0573エディタを作ってますNGNG
c=getch()のループでキー入力を取得しているのですが、
altとctrlとescが入ってきません。
こういった特殊なキーを入力するにはどういった関数を使えばいいのでしょうか?
コンソールなので、メッセージ処理以外の方法で教えて下さい。

という質問でした。どうもありがとうございます。
なるほど2回読むんですか。2バイト文字の処理と似ていますね。
これでやってみたいと思います。
0574デフォルトの名無しさんNGNG
>>559
数行から100行くらいかな。
ひょっとして、アレですか。

何百行も一気に書いて、コンパイルして、エラーがズラズラ出て、
コンパイルエラーが出なくなるまで、ソース修正&コンパイルを
繰り返して、それから単体テストをまとめてやって、エラーでまくりで、
何がおかしいのかわからず、適当に修正したら、以前OKだった
所がデグレードしていて、それに気づかず、

単体テスト完です。

とか言っちゃうタイプ?
0575デフォルトの名無しさんNGNG
>>574
いいえ。……というか、なんで喧嘩を売るのよ?
0576デフォルトの名無しさんNGNG
>>575
ごめんごめん、喧嘩を売るつもりはないのよ。

コンパイルでエラーを出さないのがなんで珍しいのか
よくわかんないから、妄想してみただけ。
0577デフォルトの名無しさんNGNG
現在あるhogeディレクトリにはデータレコードファイルaaa.txtがあります。
それを消さずそのままで、bbb.txtファイルを作るにはどうすれば良いのでしようか?
結果として/hoge/の中に内容の同じaaa.txtとbbb.txtができるようにしたいのです。
環境はWindows95です。

Win32API関数を使わないで、出来ますでしょうか?
ただ、コマンドラインを使ってcopy aaa.txt bbb.txtを使うのは嫌だな。

よろしくお願いします。
0578もう一つなんすがNGNG
名前,出身地,仕事,趣味,
----------------------
山田,東京,エンジニア,車,\n
河田,神奈川,経理,音楽鑑賞,\n
ダイエル,神奈川,特殊部隊,音楽鑑賞,\n

このような可変長レコード(各データはカンマで区切られているだけで最大255文字と
いう以外は制約無し)のラインシーケンシャルのテキストデータファイルがあります。
このようなファイルを操作するに当たって、fseekのような関数を作りたいと思います。

�@ファイルポインタを○○行目に移動する関数を作るにあたって、何か妙案はありますか?

よろしくお願いします。
0579575NGNG
>>576
らじゃ。

私の場合、コンパイル時エラーの最大の要因はスペルミスです。ノリノリでコードを書いてると、よく
一文字順番が入れ替わったりするんで。リファクタリングしてるときには、コードまとめて Cut & Paste
だから間違いようがないんですけどね。

私はコンパイラが発見できるバグは怖くないと思ってるので、コンパイル時エラーはあまり気にして
ません。コンパイラが発見できないロジックミスの方は怖いので、assert() 埋めたり関数単体のテス
トは綿密にやります。


コードの行数を聞いたのは、この前呼んだ昔話(root から / へのメッセージ、だったかな?) が気に
なったからです。UNIX 黎明期の頃は CPU 利用時間で課金されていて、何度もコンパイルすると

- 金の無駄遣い

と言われたそうで。いまだと、そんな当時の常識は捨ててもいいよなと思ってて、それが背景にあっ
たので聞いてみた次第。
0580ことりんぐNGNG
聞きたいんですけど、Cygwinってどうなんでしょうか?
0581デフォルトの名無しさんNGNG
>>580
聞きたいんですけど、2ch てどうなんでしょうか?

……という質問と同じぐらい漠然としていて、なんとも答えようがないと思われ。用途や比較対象などを
もう少し絞り込んでみては?
0582ことりんぐNGNG
迷っているんですが、Linuxをインストールしようか、Cygwinで済まそうか迷っています。
実際、基本的なことを使えるようになりたいと思っているんですが、どうしたらいいんでしょうか?
Cygwinがどのへんまで同じ物なのかわかりませんし・・・
0583デフォルトの名無しさんNGNG
>>581
2ちゃんはヲタの集まり・・・

危険すぎる・・・
0584デフォルトの名無しさんNGNG
>>582
http://pc.2ch.net/test/read.cgi?bbs=unix&key=1003358904

ところで、なんでこっちスレに書き込んでるのか、
小一時間問い詰めさせてくれよ。
0585デフォルトの名無しさんNGNG
>>578
(n行->m Byte)の変換テーブルを作ればいいかと。
別にindexファイルを作るのが吉。
作れないなら、起動時にcsvファイルを全部読んだりして、
テーブルを作る必要がある。
0586デフォルトの名無しさんNGNG
>577
ANSIの関数はつかっていいんだよな?
aaa.txtとbbb.txtをfopen()で開いて、aaa.txtの内容を読み込んでbbb.txtに書いていけば。
fopen()はファイルがなければ、勝手に作ってくれる。
0587577=588NGNG
>>585
>(n行->m Byte)の変換テーブルを作ればいいかと。
>別にindexファイルを作るのが吉。

ありがとうございます。
Perlとかだと何行目っちゅうデータが簡単に取れるんですが、indexファイルですか。
頑張ります。

>>586
ありがとうございます。msdosだと、copyコマンドで簡単にファイルの複製ができますよね。
だからANSIの関数であるかと思ったんですが、見つけられずに立往生しておりました。
助かりました。

ありがとうございました。
0588デフォルトの名無しさんNGNG
ヌルポインタって、new で代入できないんですか?
0589デフォルトの名無しさんNGNG
new って?C++ の new?
0590588NGNG
Bingo!
0591デフォルトの名無しさんNGNG
>>582
Cygwinはカーネルがない
(Windowsの資源を流用。あえていえばcygwinのdllが)
0592__NGNG
複数の人が同時に同一ファイルを開く場合の
"速い安い旨い"アルゴリズムを教えて下さい。
0593__NGNG
ageeee
0594デフォルトの名無しさんNGNG
cache
0595デフォルトの名無しさんNGNG
>>592
それはアルゴリズムの問題じゃないと思う。
0596デフォルトの名無しさんNGNG
void foo(void)と
extern void foo(void)ってどう違うの?
またどう使い分けるの?
0597デフォルトの名無しさんNGNG
>>596
上は定義か宣言か、それだけじゃ区別つかない。
下は宣言。どこかに実体が定義されている、という宣言。
使い分けは、extern を書いたほうはヘッダにまとめる。くらいかな。
0598デフォルトの名無しさんNGNG
毎度っす、素朴(?)な疑問なんですが・・・
char szHostName[256];
とか文字列を格納する変数名の頭に付く『sz』とは何の略なんでしょうか?
0599デフォルトの名無しさんNGNG
String Zero-terminated
だっけ?
0600デフォルトの名無しさんNGNG
>>592
mmap、かなぁ。開くったって、同時に書き込みは出来ないわけだし。

>>598
Zero terminated String がどうこう、って話をその昔
聞いたことがありますが。
0601デフォルトの名無しさんNGNG
>>598
sz:string with zero terminated
'\0'で終了する文字列の略
0602デフォルトの名無しさんNGNG
>>598
「ハンガリアン記法」で検索してみるといいと思うよ。
0603598NGNG
>>599 600 601 602
みなさん、レスありがとうございました
0604デフォルトの名無しさんNGNG
関数で引数を省略化な関数を作りたいのですが、
宣言とかどうすればよいのでしょう。

教えてください。
0605デフォルトの名無しさんNGNG
>>604
C++ だけど、

int func(int n = 0){
return n;
}

とすれば、func() なら 0 が返るし、func(777) なら 777 が返る。
0606デフォルトの名無しさんNGNG
>>604
man stdarg
0607デフォルトの名無しさんNGNG
>>604

void f(int x, ...)

どうにかして引数の数を得なければいけないけど
(printfみたいな書式指定でも、個数を指定してもok)
0608デフォルトの名無しさんNGNG
>>607
man stdarg or varargs.h
0609604NGNG
>>605さんの方法で、
ヘッダの宣言のほうで
int func(int n = 0);

ソースのほうは
int func(int n)
{}
でいけました。

ありがとうございました。
0610604NGNG
あ、ちなみにC++です。
0611デフォルトの名無しさんNGNG
>>609
....
0612デフォルトの名無しさんNGNG
ガーン、可変引数の話じゃなかった(ウトゥ
0613名無しさんNGNG
エクセルで作成したCSVファイルのデータを
入出力したり、演算したデータを書き込む操作をVBAの
他にもC/C++で処理してみたいのですが、参考になる
プログラムまたはサイトはありませんか?
因みにCのコンパイラはBorland社のフリーソフトです。
0614sageNGNG
誰か激しく突っ込んでやれよ! >>597
0615デフォルトの名無しさんNGNG
自作ヘッダ作りました
↓
クソヘッダが出来ました
↓
ヘッダ作るのヘッダクソやなあ

学校の宿題で「C言語イレギュラーを考えて来い」とのお達し。
これでいきたいと思います。
0616デフォルトの名無しさんNGNG
>>613
ググールいって
csv open close #include
で検索するのはどうか
0617デフォルトの名無しさんNGNG
>>596
staticで宣言されてないなら、Cの関数は外部リンケージをもつから
どっちでもいっしょ。お好きなほうをどうぞ。
0618デフォルトの名無しさんNGNG

すいません。下のソースをコンパイルするとエラーが出ます。
なんででしょうか。教えて下さい。。。。
#include <stdio.h>

void nfunc(char *s){
char k = *(s);
*(s) = *(s+1);
*(s+1) = k;
return;
}
main()
{
//int i;←ここだとOK。
char x[7] ="tinnpo";
nfunc(x);
int i;//←ここだとだめ。
for (i=0;i<50;i++){
printf("%s",x);
}
}
0619デフォルトの名無しさんNGNG
>>618
変数はブロックの先頭でしか宣言できません。何故かと問われても、そういう決まりですとしか。
0620デフォルトの名無しさんNGNG
以下のプログラム実行したとき
たとえば変数aにhogehogeと入力したとき
input:input:input:
とループしてしまいます
これをループしないようにするには
どうしたらよいのでしょうか?
int a;

while(1){
printf("Input:");
a=getchar();
if(a=='1'){
break;
}
}
0621デフォルトの名無しさんNGNG
>>619
即レスありがとうございます!
すると変数宣言を全部頭に固めとけってことですね。
0622デフォルトの名無しさんNGNG
>>620
while(1){
って条件が常に真で無限ループですよね。
んで"hoge"!=1だから抜けないんじゃ。。。。
0623デフォルトの名無しさんNGNG
>>620
どうしてループするのかわからないならここで訊く前にK&Rを死ぬほど読め。
0624デフォルトの名無しさんNGNG
あ、intに文字を代入してるのか。。。?
0625デフォルトの名無しさんNGNG
getchar()は1文字入力専用なので、コンソールに1文字以上の
バッファがたまっていると、バッファを吐き出すまで、コンソール
入力が無くても値を返してきます(自動的に関数が終了してしまう)
多分、>620の関数だと、文字列数+1の「input:」を画面に
出力されるのではないでしょうか?

多分と思われる正解は

#include <stdio.h>
#include <string.h>

main(){
char buf[BUFSIZ];
while(1){
printf("Input:");
gets(buf);
if( strcmp( buf, "end" ) == 0 ){
break;
}
}
}
こうかな?
0626620NGNG
>>622,623
レスありがとうございます

質問の仕方がわるかったみたいです
わざとhogeとか入力して
ループするようにしたとき
ループするのが1回ではなくて
input:input:
と複数回ループしてしまうのは
どうしてですか?
0627デフォルトの名無しさんNGNG
プログラムを勉強しようと思ってます。
ゼロからなのですが、まずC言語とやらを学ぶのがいいんですか?
教えてください。
0628622NGNG
>>625
うげ、わけわからんレスしてすいません。。。逝って来ます。
0629デフォルトの名無しさんNGNG
>>626
なんで1回しかループしないと思うのか。
どうしてループするのかわからないならK&Rを死ぬほど読め。
0630デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void)
{
int sintyou;
int taijyuu;
double meter_sintyou;
double bmi;

printf("身長入れてください>");
scanf("%d,&sintyou");

printf("体重を入れてください>");
scanf("%d,&taijyuu");

meter_sintyou=/100.0;
bmi=taijyuu/(meter_sintyou*meter_taijyuu);

printf("あなたのBMI指数は%fです\n",bmi);

printf("判定:")
if(bmi<18.5){
printf("やせすぎだYO\n");
}else if(bmi<25){
printf("標準体重\n");
}else if(bmi<30){
printf("ちょっと肥満\n");
}else{
printf("デブ\n");
}

   return 0;

}

なんか完璧なのにエラーがでるのだけど、どう書き換えたらいいかな?修正してください
0631デフォルトの名無しさんNGNG
scanfを調べなおせ
0632デフォルトの名無しさんNGNG
>>631 書きかえてもらえませんか?
0633デフォルトの名無しさんNGNG
meter_sintyou=/100.0;
なんてネタだな。
0634デフォルトの名無しさんNGNG
meter_taijuuって何だよ〜
結果がおかしいとか以前に、これじゃコンパイル通らないぞ。
0635デフォルトの名無しさんNGNG
C言語体当たり学習の本を写したんですけどね〜?
0636デフォルトの名無しさんNGNG
指摘された個所と本のソースを読み比べろ。
0637デフォルトの名無しさんNGNG
ありがとうございました、とりあえず今からログ保存してきます。
正解も書いてくれませんか?間違えと見比べるので。お願いします
0638デフォルトの名無しさんNGNG
>>637 よ
>>1 の "課題丸投げなら別スレにいけ。" の一文がも前には目に入らないのか?
0639遭難中NGNG
ちょっと助けてください。

struct bodyStr readbody(int i){
struct bodyStr body;
int t;
scanf("%s%s%s%s%s%s%s%s%s%s%s",
body.size.height,body.size.neck,body.size.arm,body.size.waist,body.size.inseam,
body.color.hair,body.color.eyes,body.color.skin,body.shape,body.age,body.sex);
temp.number=(t+1 ? ++i : 0);
return body ;
}

なんですが、プログラムがここにかかると止まります。
原因はなんでしょうか?
もしかして、ここが原因ではない?
0640遭難中NGNG
temp.number=(t+1 ? ++i : 0);
ではなく
body.a=(t+1 ? ++i : 0);
の書き間違えでした。
でもプログラムは止まります。
0641デフォルトの名無しさんNGNG
>>639
body.size.heightとか、scanfに渡してる変数は、char*になってるか?
数値型だと、動かんよ。

つか、scanfをこんな使い方したら、正しく動いても、ミスらないで入力
するのは至難のワザ。
(リダイレクトで入力すんのか?)
0642デフォルトの名無しさんNGNG
>>639
あと
scanf("%s %s %s %s %s %s %s %s %s %s %s",
%s の間にスペース入れないと、ダメっぽい。
0643デフォルトの名無しさんNGNG
先に>>641で指摘されてしまったので、もいっこ。
関数内に出てくる t が初期化されてないけど大丈夫?
何が入ってるか分からないよ。
0644遭難中NGNG
指摘いただいたとこ直したのですが駄目です。

プログラム全部のせて指摘していただきたいのですが、そうしたら、丸投げになってしまうし、
どうすれば〜(泣)
0645遭難中NGNG
http://popup.tok2.com/home/tnao/10-30.c.txt
0646デフォルトの名無しさんNGNG
えっと、すっごい基本的な質問しますけど、body.size.heightってintとかの整数値
ですか?%sはNULLまでを表示する型指定なので、もし数値を表示したいのであれば、
%dで書かなきゃランタイムエラーでますぜ。
0647646NGNG
お、ソース上がってるね。チョい確認してくるわ
0648遭難中NGNG
お願いします
0649643NGNG
ソースをちょっとだけ見てみたよ。
main()の最初でいきなりiが初期化されてないよー。

初期化してない変数は0が入るのだと勘違いしてるのかも知れないけど、
関数内で定義した変数の初期値は「不定」だからね。
0が入ってるかも知れないし-1000かも知れないし256かも知れない。
0650遭難中NGNG
指摘ありがとうございます。
しかし結果はかわらず・・・。
0651646NGNG
iもnumもだな
現在確認中
0652遭難中NGNG
再アップしました。

ちな次のようなプログラムを作れ。
(1)洋服用身体データ構造体を定義する。タグ名をbodyStrとする。
識別番号
サイズ: 身長, 首回り, 腕の長さ, 胴回り, 足の長さ
色 : 髪, 目, 肌
体型 :値を(太め,標準,細め)の3種類とする。
年齢
性別
識別番号以外のデータは文字列に入れる。文字配列のサイズは(データを見て)適当に決
める。
(2)その構造体の配列を用意する。配列のサイズは全部のデータが収容出来るだけとする
。
(3)データを一人分読む関数readBodyとデータを一人分書くwriteBodyを書く。readBodyは
bodyStr
構造体を戻し,writeBodybodyStr構造体を引数に取るものとする。 みに今回のこの問題は
0653643NGNG
main()の最初で定義してるstruct bodyStr *bodyの指してる先がないぞ。

未初期化ポインタをdo {} while()の終了条件の中で参照してるから、
readbodu()から正しく戻ってきてもここで死にますな。
0654遭難中NGNG
という、課題なんです。
どうも実行がうまくいかなくて・・・。
0655遭難中NGNG
なるほど!ちょっといじってみます。
ありがとうございます。
0656遭難中NGNG
struct bodyStr body[20];


do{
body[i]=readbody(num);
}while(body[i++].a);

if(argc-1){
writebody(body[(argv[1])-1]);}
else
for(j=0; j<i-1; j++)
writebody(body[j]);

指摘個所をこのように変えてみました。
dataを破棄しました。これを実行したら、PC自体がフリーズしてしまいました、
0657デフォルトの名無しさんNGNG
643は責任もって最後まで教えてやれよ。
0658646NGNG
うんと、これの入力はコンソール入力でいいの?
それともファイルとかの外部入力なの?
0659遭難中NGNG
リダイレクションです。

それ用のファイルは
http://popup.tok2.com/home/tnao/body.dat.txt
です。
コマンド行に番号が指定されていれば、その識別番号のデータを出力するようにして、
なにも指定がなかったら全部のデータを出力するようにします。
a.out 3 <body.dat
または
a.out <body.dat
と入力するんです。
0660デフォルトの名無しさんNGNG
readbody(num)のnumはループ内のどこで変更されている?
0661デフォルトの名無しさんNGNG
それと readbody 内の t は常に 1 じゃない?
無限ループかつ data[i] によってデータ破壊されてると思われ。
0662遭難中NGNG
PCがフリーズしまくる原因はこれなんでしょうか…。
改善策を教えていただきたいのですが…
0663遭難中NGNG
どうしたらいいんでしょうか?
0664デフォルトの名無しさんNGNG
読み込み時の終了条件を考えてみ。
0665デフォルトの名無しさんNGNG
body.a=(t+1 ? ++i : 0);
これ、処理を分解して、もっと分かりやすくしようよ。
0666デフォルトの名無しさんNGNG
>>656
>writebody(body[(argv[1])-1]);}
writebody(body[atoi(argv[1])-1]);}

# だんだんlisp化してきてるな...
# > body[i]=readbody(num); は絶対に俺には思いつかん...
0667デフォルトの名無しさんNGNG
もっと素直にかけ・・・
0668デフォルトの名無しさんNGNG
C言語でコンソールメールクライアント作ってちょ。
できればLinxu用のシンプルなやつお願いします。
SubjectとBodyがあればそれだけで十分です。
実用性と勉強を兼ねて吟味したいのです。
0669デフォルトの名無しさんNGNG
作ってちょて、アンタ・・・
0670デフォルトの名無しさんNGNG
>>668
UCB Mail とか MH のソース読めよ。

仕事として依頼するなら最低で 0.5 人月要求するが?
0671デフォルトの名無しさんNGNG
遭難中は、プログラムに処理内容を説明するコメントをつけてみたらどうか。
0672遭難中NGNG
今頑張ってますが、atoiを入れると、コンパイルがエラーになります。
回避の方法はどうしたらいいんでしょう?
0673デフォルトの名無しさんNGNG
コンパイルエラーだけじゃわからん。
0674デフォルトの名無しさんNGNG
むむっ誰かお創りになった方はいないのですか?
そんなに複雑なものでなくていいのです。
例えば100行のブラウザのような本当に基本的なものでよかったのですが・・・・
とりあえずありがとうございました。おさがわせいたしました。
0675デフォルトの名無しさんNGNG
文字列を入力するときは
 gets(s);
なのに、なんで1文字を入力するときは
 s=getchar();
なんですか?
 getchar(s);
ではだめなんですか?
0676デフォルトの名無しさんNGNG
data[i]=readbody(num);
そもそもこれがうまく動かないだろう・・・
関数struct bodyStr readbody(int i)の最後で
return body;
とやっても、関数struct bodyStr readbody(int i)内の
struct bodyStr body;
のアドレスがdata[i]に代入されるだけで、このアドレスの指す
データは関数struct bodyStr readbody(int i)が終了するとともに
消滅してしまうからね
0677デフォルトの名無しさんNGNG
三項演算子禁止!
アンタにはまだ無理だ>>遭難中
0678遭難中NGNG
エラー E2342 10-30.c 49: パラメータ '__s' は const signed char * 型として定義されているので int は渡せない(関数 main )
コンパイルエラーはこうです。

data[i]=readbody(num);
のまわりはすべてdataからbodyにしました
0679遭難中NGNG
body.a=(t+1 ? ++i : 0);
は消しました
0680デフォルトの名無しさんNGNG
>>674
コンソールメールクライアントなんてもの、Unixでは何十年も前から
沢山作られて使われてて、大抵のはソースも公開されてるよ。
それを読めばいいよって言ってるの。
0681遭難中NGNG
頭がパンクしそうです・・・。
0682デフォルトの名無しさんNGNG
まず落ち着くことだな
0683デフォルトの名無しさんNGNG
宿題スレに引っ越して、仕切りなおしてはどうか。
はっきりいって、ここじゃ迷惑だ>>遭難中
0684遭難中NGNG
移動します。
あいがとうございました
0685646NGNG
ようやくできたぞ、少し修正を加えたがな

http://www2.makani.to/akutoku/upload/dat/1004969013.txt
0686646NGNG
↑のURL直リンだめなので、コピペでヨロシク
0687646NGNG
とか書き込んでいるうちに終了か、写氏
0688デフォルトの名無しさんNGNG
回数指定のループ作りたいときには簡単にforループではイカンのですか。

どーしてもwhileにしたいときには
やはりカウンター作ってそれ見させて制御しますが
こーいうのは効率悪いのですか。
0689デフォルトの名無しさんNGNG
効率は変わんないでしょ、変な書きかたしなけりゃ。
0690デフォルトの名無しさんNGNG
>>688の思っているほど、小手先のテクニックは速度に影響しない。
今時のコンパイラは正しく明快に書かれたコードを最適化ができる。

実際に動かしてみて、もしくは計算量から推測して、遅いと分かったときに
手を下せばよい。
0691デフォルトの名無しさんNGNG
あと、アセンブラコードを出力させて見るっててもあるね。
0692デフォルトの名無しさんNGNG
問題なんは、「自分の使う手段以外は全部効率良くない悪手だ!」と叫ぶ輩がいること。
0693sageNGNG
兵力は集中して、より効果的なところに集中させればよい。
最適化なんてそんなもんだ。
0694遭難中NGNG
今気がつきました、やってもらってるあいだに、居なくなってしまってすみません。
参考にさせてもらいます。
ありがとうございました。
0695デフォルトの名無しさんNGNG
jpeglibのドキュメントを和訳した人いますか?
使い方がさっぱりよ!
ディスティネーションの登録周りがさっぱりよ!
0696デフォルトの名無しさんNGNG
★8人くらいに、『どうぶつの森』すすめましたよ♪
 こんにちは♪わたしは、岩手に住む11歳の小五です!!
わたしは、『どうぶつの森』をクリスマスに買ってもらいました♪帰ってくるなり、
さっそく、やってみました。
 1日中やってました(^^)
 ともだちに、「新しいゲーム買ったよ〜〜」といったら、
「なになに??」ときかれたので、「どうぶつの森」だよ〜〜」と
いったら、いきなりでんわをきって、数分後、家にきました。
いまでは、8人くらいに、『どうぶつの森』すすめましたよ♪ちなみに、
わたしは、「ももこ」がだ〜〜いすきで、PCの、壁紙も、ももこちゃんです♪

クリスマス。(゚ー゚*)...
0697デフォルトの名無しさんNGNG
>>696
漏れは苦利酢魔酢にQ�Vのネットゲー買ってもらうんだー♪(自分に)
帰ったらすぐやるんだー♪(一人で)
それ用のビデオカードも買ったんだよ♪(通販で)
あぁ〜苦利酢魔酢が楽しみ♪(やる時間はない)
0698デフォルトの名無しさんNGNG
>696
コピペマジウザイ
0699こぴぺNGNG
「Forthと共にあれ!」
0700デフォルトの名無しさんNGNG
オッス!、かーにはんで勉強中ッス。
一通りサンプルなんかを打ち込んで、何となく分かった気になってる?のですが
その先に進めないでいるっす、sedやperlの資産(主にテキストファイルの処理)を移植したいと思ってるものの
取り付く島も無い感じです。皆さんはどんなソースを読んで勉強されたんでしょうか
今はread.cgiのソースやstdioを見ているんですが、まだ敷居が高い感じです
スクリプトの時は、本に載ってる内容≒自分のやりたい事、だったんです。
0701デフォルトの名無しさんNGNG
sedやperlのプログラムをCに移植・・・
逆ならともかくねぇ。
0702デフォルトの名無しさんNGNG
>>700
「ソフトウェア作法」読め。お前がまちがっていることがわかる。
0703700 NGNG
>>701
よく分かるッス、力不足でGUIは全く分からないんで、こっちの方が入りやすい
かなと思っただけなんです。
先に関数を沢山書かなきゃならないと思うんですが、そのとっかかりが・・・
0704デフォルトの名無しさんNGNG
>>700
http://www.vector.co.jp/soft/dos/prog/se011510.html
みたいな正規表現ライブラリを使うべし。
0705デフォルトの名無しさんNGNG
( ´,_ゝ`)プッ
0706デフォルトの名無しさん NGNG
( ´,_ゝ`)プッ ( ´,_ゝ`)プッ
0707700 NGNG
>>702
えっと、生産性はよろしく無いと言う事ですよね?
良書の紹介どもッス、(本は学割が無いのがツライ。。)
>>704
おお!凄い、早速使ってみる事にします。
>>705、706 スンマソン(´д`;)

取り合えずcpとか易しげなコマンドでもパクって勉強するっす
0708デフォルトの名無しさんNGNG
HTMLしか打てないんですが、
Cをそれなりにこなせるようになるには、何ヶ月かかります?
ちなみにHTMLは1ヶ月かかりました
0709デフォルトの名無しさんNGNG
100時間もあれば十分だと思う。
0710デフォルトの名無しさんNGNG
出来る奴は1ヶ月位でコンソールツール位書けるようになる
ダメな奴は一生掛かってもダメ これホント
0711デフォルトの名無しさんNGNG
ほんとっすか?
トーシロなので、300時間とみておこう
0712デフォルトの名無しさんNGNG
それうまくいかなかったらこっちつかってちょ
http://www.hi-ho.ne.jp/babaq/bregexp.html
0713デフォルトの名無しさんNGNG
感がいいやつなら、1週間でできると思うけど。
5日で言語のディティールつかんで、
2日でマニュアルの引き方を覚えられそう
0714デフォルトの名無しさんNGNG
うちのプログラマーは3ヶ月もありゃはいってこれるから
がんばってよっていうけど、なかなか…
HTMLとは応用のレベルが違うような…
0715ゲイ2NGNG
WindowsAPIの

CreateFontIndirect(&lf)
LOGFONT lf;

の使い方教えてください。
0716デフォルトの名無しさんNGNG
「HTML書ける」なんてわざわざ言えないよ。恥ずかしくて。
日本人が「僕日本語しゃべれますよ!」って言いふらして歩いているようで。
0717デフォルトの名無しさんNGNG
>>708-713 not 712 読んどけ

プログラミングを独習するには10年かかる
http://www1.neweb.ne.jp/wa/yamdas/column/technique/21-daysj.html

とりあえず、煽り文句を引用しとく
> それは、何かの役に立つかもしれない。でも、それであなたの人生は変わらないし、
> プログラマーとしての本当の技能総体だってそうだ。24時間や数日や数ヶ月じゃあね。
0718デフォルトの名無しさんNGNG
char hoge[] = {'1','0','0','0','\0'};
を
int foo; // に代入して・・・
if (foo == 1000){printf("変換出来ました!\n");}
どうすれば良いんでしょう (死
0719デフォルトの名無しさんNGNG
atoi
0720デフォルトの名無しさんNGNG
strtol
0721デフォルトの名無しさんNGNG
sscanf
0722デフォルトの名無しさんNGNG
できひん、、できひんでー (´□`)/"" !!
808464433とか言ってるし、、、
sscanfでやってみます、有難う御座いました。
0723デフォルトの名無しさんNGNG
一度に代入しようとしないで、一文字づつ処理したら?
0724デフォルトの名無しさんNGNG
>>718
char hoge[] = "1000";
int foo = atoi(hoge);
if (foo == 1000){printf("変換出来ました!\n");}
0725デフォルトの名無しさんNGNG
>>715
ちと、スレ違いだな。
0726デフォルトの名無しさんNGNG
>723-724
出来ました、せんぱい!!  (・∀・)!謝謝
(const char *nptr) は配列のサイズはいらなかったのかぁ・・
先にリファレンス引けるようにならないと、標準関数も使えないにゃ〜
型無し厨房の苦難は続く・・・・  
0727デフォルトの名無しさんNGNG
176 717
何えらそうにいってんだか…(^O^)ぷぷ
0728勉強始めますNGNG
始めまして
少しずつC言語を勉強していきたいのですが
何か簡単な問題から出して頂けませんか?
僕のレベルは、これから構造体やらファイル処理やらを
習得しようかというレベルです。
0729ビル・ジョブスNGNG
>>715
セミコロンも無く、宣言の順番も変・・・感覚的に気持ち悪いので教えたくない・・・
といいたいがヒントをあげよう・・・MSDN ONLINEへ行く。
そこで理解できなければあきらめろ。
ちなみに、なぜ、CreateFontIndirect()なの?
まさか、今時それしか実装されてないWindowsCE 2.1Xじゃないよね?
CreateFont()は知ってるか?
0730デフォルトの名無しさんNGNG
>>728
K&Rよんで問題やれ
0731デフォルトの名無しさん NGNG
>>728
構造体とファイル処理を利用してOSを作成せよ、
但し関数はmainのみとする。
0732ビル・ジョブスNGNG
>>731
おまえは書けるのか?解答教えてくれよ。
0733デフォルトの名無しさんNGNG
>>732
汎用OSのソースだ。くれてやる。
足りないものは自分で追加できるカスタマイズ性が売りだ。

void main(void){
while(1){
/*ユーザータスクはここに追加する*/
task_A();
task_B();
task_C();
task_D();
}}
0734デフォルトの名無しさんNGNG
それがOSなら、誰がmainを実行するんだよ。
ファイル処理を利用、ったって、誰がファイルという抽象化を
サポートすんだよ。
0735デフォルトの名無しさんNGNG
結局テキトーかましただけよ
0736名無しさんNGNG
1.下記の (1)〜(5) は一続きの作業である。それぞれどのような作業をして
いるのか答えなさい。(25)

(1) pwd
(2) mkdir word
(3) cp sample.doc word
(4) cd word
(5) ls

すみません、誰か教えてください。UNIXです。
0737デフォルトの名無しさんNGNG
所詮この板も腐れ外道の集まりということで下げ
0738デフォルトの名無しさんNGNG
main()
{
  char buf[256];
  char res[256];
  int iread;

  printf("-->");
  iread = read(0,buf,256);
  strcpy(res,(char* )crypt("SA",buf));
  printf("crypt passwd:%s\n",buf);
}

というテスト用の深い意味のないプログラムがあります。
ここで問題が生じました。
低水準IOと高水準IOと併用しているからだと思いますが結果が変です。
どうしても低水準と高水準IOと併用したい場合にはどうすればいいのでしょうか?
fflushのような関数を使えばよいのでしょうか?
お願いします。
0739デフォルトの名無しさんNGNG
Win98では現在のローカル日時設定出来るのですが、WinNT/200では出来ません
SetLocalTime関数を使用しています
Helpを見るとSE_SYSTEMTIME_NAME 特権を有効にしなければならず、
この特権を割り当てるには、AdjustTokenPrivileges 関数を使いますが、
AdjustTokenPrivilegesのパラメータの意味がまったくわかりません
教えていただくか、別の方法を教えてください
0740デフォルトの名無しさんNGNG
>>738
低水準IOと高水準IOの併用が原因じゃないのでは?
何がやりたいのかわかりませんが。
0741デフォルトの名無しさんNGNG
>>739
スレ違い。まずMSDNを読んでそれでもわからなかったらAPI相談室で訊け。
0742デフォルトの名無しさんNGNG
>>739
AdjustTokenPrivilegesで検索かけたら、サンプルコードが
たくさん見つかりました。
そこらへん見て、なんとかならない?
0743デフォルトの名無しさんNGNG
>低水準IOと高水準IOの併用が原因じゃないのでは?

それが原因だと思います。では両者を具体的に併用するにはどうしたらいいのでしょうか?
アドバイスよろしくお願いします。
0744デフォルトの名無しさんNGNG
>>739
管理者アカウントでログインすれば、普通に時刻変更できると思うよ。要するに一般ユーザーにはシステム時刻を変更する権限がないんでは。
0745デフォルトの名無しさんNGNG
>>743
それが原因じゃないと思います。自分のコードを見直してみては。
0746デフォルトの名無しさんNGNG
>>738
標準出力をバッファリングしないようにする。
どーせテストプログラムなんだから速度は気にしてないだろ?

man setbuf, setvbuf
0747デフォルトの名無しさんNGNG
>>738
結果が変というけどどう変なのか書いてないからねえ。
0748デフォルトの名無しさんNGNG
>>747
そういうのは業務でバカと組まされたときに良くある話。
そのバカを非難しててもしょうがないのでポワロ並の
推理力を駆使して問題解決に当たらなければね。
0749デフォルトの名無しさんNGNG
>>738
read()で読み込んだデータは最後に'\0'を付けてくれたりしないので、
そのままcrypt()とかprintf()とかに渡したらいかんよ。
0750デフォルトの名無しさんNGNG
cryptのkeyとsaltが逆じゃない?
結果を使ってないので意味がないけど。
0751デフォルトの名無しさんNGNG
>>748
> そういうのは業務でバカと組まされたときに良くある話。
まぁねぇ。

問題を報告しろ、だけだとまともな報告が上がってこないので、私は最低でも次の4点を
箇条書きで出してもらってる。

1. バグの原因となっていると推測しているコード(手で書き写さずに、Cut & Paste すること)
2. 与えた入力
3. あなたは、本来はどのように動作することを想定しているのか?
4. 実際には、どのように動作してしまっているのか?
0752デフォルトの名無しさん NGNG
1. main関数の230〜1400行目。
2. 正しい入力
3. 仕様どうりに動いてくれる事
4. 時々「ピー」ってなって止まります

こんなのが出てこない?
0753デフォルトの名無しさんNGNG
>>752
たまに(苦笑)
0754デフォルトの名無しさんNGNG
はは ご苦労さん
0755デフォルトの名無しさんNGNG
「仕様どうり」ってのがなかなか。
0756デフォルトの名無しさんNGNG
main文内で関数funcを呼び出すことを繰り返しています。
で、func内である値を保持しておきたいのでfuncで
static double hoge;と書いてhogeを定義してます。

で、
main文を繰り返してfunc内で
func(){
printf("before %f\n",hoge);
{処理}
printf("after %f\n",hoge);
}
としてhogeの値を見てみると、
before 1.1
after 1.1
before 1.1
after 1.1
・・・
と続くのですが、突然
before 1.1
after 1.1
before 1000.11
after 1000.11
みたいな感じで、hogeの値が変わってしまうのです。
こういう値がかわっちゃう現象は起こりうることなんでしょうか。
もしそうならその対処法みたいなものはあるのでしょうか。
0757デフォルトの名無しさんNGNG
hogeは別の場所や処理内でも読んだり変えたりしてません。
希望としては値はずっと同じ値であって欲しいのです。
メイン文から、関数を呼び出したら値が変わってた、
って感じなのですが。
0758デフォルトの名無しさんNGNG
どこかにバグがある。
0759デフォルトの名無しさんNGNG
>>756
{処理}のところに、突然に値を変えるコードが書かれてるんじゃないの?
0760759NGNG
759はミス。よく読んでませんでした。

例えば、配列で、その大きさを超えて書き込んだりすると、関係ない変数が書き換わったりします。
0761デフォルトの名無しさんNGNG
{処理}内で変数の領域をはみ出すような書き込みをしてないか?
とりあえず{処理}を見ないことには原因は分からんと思うが。
0762761NGNG
あ、遅レスだ。しかも変数→配列変数だった。
0763757NGNG
早速のレスありがとうございます。

ええと
main内で
for(i=0;i<30000;i++){
func(i)
}
って感じで繰り返しをしてるのですが、
func内の処理の前後でhogeの値を見ても値は変わっていないのです。
func(){
printf("before %f\n",hoge);
{処理}
printf("after %f\n",hoge);
}
ってやって確認しました。だから処理内でおかしなことが
起きていないと判断しているのですが。

とりあえずですが760さんのおっしゃるように
他の部分で配列の値がおかしくなってないかとか確認してみます。
0764デフォルトの名無しさんNGNG
>>756
質問!
func()内で定義している変数hogeを
どうやってmainでhogeの値を確認してるの?
ちなみに以下のソースはコンパイルできませんでした。
void func(void) { static double hoge = 1.1; }
int main(void) { printf("%lf\n", hoge); return 0; }
0765デフォルトの名無しさんNGNG
>>764
mainの中でhogeを確認するなんてどこにも書いてないのでは?
funcの中の最初と最後でprintfしてるだけじゃん。
0766764NGNG
スマン、良く読んでなかった...
しかしそうなると
>>756
> func(){
> printf("before %f\n",hoge);
> {処理}
> printf("after %f\n",hoge);
> }
> としてhogeの値を見てみると、
(中略)
> みたいな感じで、hogeの値が変わってしまうのです。
なのに
>>763
> func内の処理の前後でhogeの値を見ても値は変わっていないのです。
> func(){
> printf("before %f\n",hoge);
> {処理}
> printf("after %f\n",hoge);
> }
> ってやって確認しました。だから処理内でおかしなことが
> 起きていないと判断しているのですが。

756と763で矛盾しているような気がする...
# 良く読んでないからか...
0767デフォルトの名無しさんNGNG
>>766
矛盾してない。
0768デフォルトの名無しさんNGNG
>>763
> func内の処理の前後でhogeの値を見ても値は変わっていないのです。

この処理とは{処理}のこと?それともfunc関数全体の処理?
0769デフォルトの名無しさんNGNG
>>768
>>759 -> >>761 -> >>763
0770デフォルトの名無しさんNGNG
mainのforループのカウンタも出力して、値が変わる瞬間を特定するとか
してはどうだろ。
0771デフォルトの名無しさんNGNG
デバッガ使うという発想はないのか。
0772デフォルトの名無しさんNGNG
聞くなら聞くで中途半端に{処理}とか書かずに
どこかにソースをあげるとか…
0773デフォルトの名無しさんNGNG
ソースキボンヌ
0774デフォルトの名無しさんNGNG
>>768
func関数内の{処理}です

>>770
やってみました。
が、mainのroopのカウンタを出して場所を特定しても
そこで何が行われているのか全くわからないのです。
メイン文のifに入るときとか、そういう瞬間なら
なんとなく原因もつかめそうですが、前のカウントの時と
メイン文の処理も同じなのです。
ちなみにメイン文のi値の値が、hogeに入ってしまっています。
(どうでもいいかもしれませんが)

>>771
ありませんでした。
0775757NGNG
>>772
うーん。基本的に聞きたかったことが、
func内のstatic double hogeっていう変数値が
メインの
for(i){
func();
}
ループのi番目に呼んだfuncの最後の部分での値と
i+1番目に呼んだfuncの最初の部分で値が違うけれど
こういうことがあるのか、ということだったのです。
0776デフォルトの名無しさんNGNG
iがいくつになっているか書き出せ
0777デフォルトの名無しさんNGNG
(i-1)個しか確保してない配列があるだろ(藁
0778デフォルトの名無しさんNGNG
>>775
もう面倒いから、全ソース出せ
0779757NGNG
やりました。>>776

20400 2.047869
20401 2.051167
20402 2.045735
20403 2.045802
20404 2.045622
20405 2040.409722
20406 2040.409265
20407 2040.409731
20408 2040.414136
20409 2040.410585

こんな感じです。
左がメイン文のi 右がhoge
20404をさかいに右の値がどかんと大きくなってるのがダメなとこです。
それ以前のhogeの値がばらばらしているのはぜんぜん問題なしです。

ありません。>>777
0780757NGNG
int func(int time_no){
int flug;
double ave_new_interval,new_interval;
static double p_next_os_time,p_last_os_time,p_last_ms_os_time;
if(time_no==0){
hogehoge;
}else{
if(time_s>=p_next_os_time){
new_interval=interval_1(ave_new_interval);
p_next_os_time=p_last_ms_os_time+new_interval;
p_last_os_time=p[time_no];
flug=1;
}else{/*次の発火前なら*/
if(((time_s<start_time)&&(time_s<0.128*5))||((start_time<time_s)&&(time_s<end_time)&&(time_s<t1*5+start_time))||((end_time<time_s)&&(time_s<t1*5+end_time))){
new_interval=interval_2(ave_new_interval);
p_next_os_time=p_last_ms_os_time+new_interval;
flug=0;
if(time_s>=p_next_os_time){
flug=1;
p_last_ms_os_time=time_s;
new_interval=interval3(ave_new_interval);
p_next_os_time=p_last_ms_os_time+new_interval;
p_last_os_time=p[time_no];
  }
}else{
  p_next_os_time=p_next_os_time;

  flug=0;

}

}

}

return(flug);

}


-----------------------
int main(){
hogehoge;
for(time_no=0;time_no<N;time_no++){
time=time_no*0.1;
time_s=time/1000;
alpha[time_no]=flug(time_no);
}
}

こんな感じです。mainとfuncは別のファイルで、
ここで定義してない変数とかは全部定義してあります。
でコンパイルしてとおります。
0781デフォルトの名無しさんNGNG
今すぐ配列pの定義をコピペして見せろ。
0782デフォルトの名無しさんNGNG
ついでに初期化していないave_new_intervalを受け取ったinterval_1()が何を返すのか
言って見せろ。
0783デフォルトの名無しさんNGNG
>>770
自分でやらなくても、問題の変数に対してハードウェアブレークポイントを設定して、変数が変更された
瞬間にデバッガに落とせば良いような気がするが。(プロセッサがサポートしてれば)
0784757NGNG
>>781

double p[30000];
double interval1(double aveinterval);
interval2,3も同じです。
0785デフォルトの名無しさんNGNG
で、static double hogeって変数はどれなんだろう?
あとmainはfuncを呼んでないように見えるが。
alphaがいくつ確保してあるかも知りたい。
0786勉強始めますNGNG
728です。
>>730さん
K&Rって何ですか?
すいません。

>>732さん
ごめんなさい
少し難しそうです・・・・
もう少し簡単な問題からって言うと我侭ですかね・・・
0787デフォルトの名無しさんNGNG
>>780
hogehoge;
って、なんだこれ。コンパイル通るのか?これで
0788デフォルトの名無しさんNGNG
>>775
>関数内のstatic 定義の変数が、その関数以外の処理で書きかわるか?
バグならありえます。
プログラムは、関数内のstatic 定義の変数をアクセスしているのでは
なく、その前のグローバルアドレスの変数(配列)をアクセスしているが、
あとのデータを上書きする場合があります。
0789デフォルトの名無しさんNGNG
>>785
すいません。
static double p_next_os_timeのp_next_os_timeが
hogeです。
flugはfuncの間違いです。
alpha[]は30000個用意しました。

>>787
hogehogeは別に同と言う事は無い部分なので
書きませんでした。
0790デフォルトの名無しさんNGNG
>>788
なるほど。そういう場合もあるということですね。
0791検索しようNGNG
>>786
http://www.google.com/search?q=k%26R+C%8C%BE%8C%EA&hl=ja&lr=
0792デフォルトの名無しさんNGNG
>>782 にかいてあるけどinterval_1が変な値返してるだけじゃないの?
それかinterval_3が変な値返してる。
勝手に値が変わってるんじゃなくて、足し算で変わってると考えるのが妥当だよね。
time_sはグローバル変数だよね?
0793デフォルトの名無しさんNGNG
>>780
これ実際書いてるヤツをコピペしたのかな。
だったら変数宣言した所に少しでも注釈入れた方がいいんじゃない?
>>792の通りなら、多分自分でも変数を把握できてないと思うよ。
このスレに出す為というわけじゃなくて、これから先
似たような失敗を避ける為にも。
0794デフォルトの名無しさんNGNG
p_next_os_timeの算出に使ってる変数値を全部表示してみたら?
0795デフォルトの名無しさんNGNG
>>789
どうと言う事は無いと自分が思っている部分にこそバグは潜んでいるものだ
0796デフォルトの名無しさんNGNG
なんで、初期化しないのかな。
time_no == 0 のとき、funcって戻り値は何返すのさ。
0797デフォルトの名無しさんNGNG
CSV形式でExcelに格納されているデータを
C/C++で入出力や演算処理したいのですが、参考に
なるプログラムやサイトなどを教えてください。
(例えば、列(A,B,C、・・・)の選択の方法など)
0798デフォルトの名無しさんNGNG
CSVファイルを直接読むの?
Excelを操作したいということ?
0799デフォルトの名無しさんNGNG
うにっくすでint86()みたいな関数を使うにはどうすればいいの?
0800デフォルトの名無しさんNGNG
>>799
目的を述べよ
0801799NGNG
SVGAのBIOSを呼び出したいというだけです。
うにっくすは初心者です。/devにあるファイルをいじればいいのかなぁ?
直接レジスタをいじったりするにはどうすればいいんですか?
インラインアセンブラって使えるんですか?
0802デフォルトの名無しさんNGNG
インラインアセンブラが使えるかどうかはコンパイラ依存。
…と言っても多分gccだろうけど。asm()が使えるよ。文法はinfo gcc参照。

SVGA BIOSを呼べるかどうかは知らないけど、少なくともインラインアセンブラ
でちょろっとint ほげほげとか書いた程度では済まないのは間違いない。
0803デフォルトの名無しさんNGNG
>>798
CSVファイル(但し、Excelで作成されたもの)
に複数の列にわたって大量のデータが格納されており、
これらを処理したいのですが、普通に入出力操作
(fopenなど)をしてもA列しか扱えません。
0804デフォルトの名無しさんNGNG
>>803
普通って、どういうふうにしてみましたか。
0805デフォルトの名無しさんNGNG
>>803
fgets()で一行ずつ取り出して、行の内容を解析し、
目的の列を探して処理するのが普通かな。
ファイルの内容を変更したいのならば、元ファイルを直接更新するのではなくて
一旦別ファイルへ処理結果を書き出して、元ファイルを上書きするなりするのが
一番楽。
0806805NGNG
ちなみに、この手のことはCで組むよりPerl等を使った方が楽な
ことも多い。
0807デフォルトの名無しさんNGNG
厨房な質問で申し訳ありませんが、
学校の課題でifを使って足し算と引き算ができるモノを作れといわれて作ったのですが、
コンパイルは通りますが、実行すると「構文エラーです」と出てしまいますが、
VC++6上での実行は通ります。
何故にclコマンドでは通らないのか教えていただけませんか?
ちなみに、gccではなく、VC++に付属のvcvars32でclコマンドでコンパイルです。


#include<stdio.h>
main()
{
int a=0;
printf("足し算と引き算をするプログラム\n");
printf("足し算1〜5、引き算6以上\n");
scanf("%d",&a);
if(a<5){
int b=0,c=0,d=0;
printf("足し算を行います\n好きな数字を入力してください\n");
scanf("%d",&b);
printf("先ほど入力した数字に幾つ足しますか?\n");
scanf("%d",&c);
d=b+c;
printf("%d+%d=%d",b,c,d);
}
else{
int e=0,f=0,g=0;
printf("引き算を行います\n好きな数字を入力してください\n");
scanf("%d",&e);
printf("先ほど入力した数字に幾つ足しますか?\n");
scanf("%d",&f);
g=e-f;
printf("%d-%d=%d",e,f,g);
}
}
0808   NGNG
>>807
空白いれろや。見づらくてしょうがない。
行の先頭にある半角空白は無効化されるんで、全角ではじめること。
だいたいお前には友達ってものがいないのかよ。こんなとこで
質問しやがってよ。
0809デフォルトの名無しさんNGNG
Callback関数ってなんですか?
あとcallback関数をメンバ関数として作りたいのですが
可能ですか?
0810   NGNG
>>807
せめて何行目でエラーがでるのかぐらい書け!!
だいたい clコマンド直接使ってる奴なんてお前ぐらいだぞ。
VisualStudioからプロジェクト作ってコンパイルしろよ!
0811807NGNG
>>808
今自宅からなので周りに友達が居ません。

>>810
エラーは全く出ません。
コンパイルはちゃんと通ります。
でも、実行すると構文エラーと出てしまいます。
VC++でプロジェクト作って実行すると問題なく通ります。
gccは実行できる環境が現在無いために不明。
0812デフォルトの名無しさんNGNG
>>807
> printf("足し算1〜5、引き算6以上\n");
って書いてあるけど、このソースだと5を入力すると引き算になっちゃうよ。

重箱の隅につきsage
0813デフォルトの名無しさんNGNG
>>811
VCなら返り血を明示的に書かなければ勝手にintになるので
多分間違っているだろうが、main()の前にintかvoidと書いてみたらどうだ。
0814807NGNG
ご親切に説明を下さった方々ありがとうございます。
どう考えても私にはわかりませんので、
学校にいって教授に聞いてみます。
お騒がせしました。
0815  NGNG
>>811
それでだめならフリーのコンパイラ使え。LSIC86とかな。
LSIC86はただのCだから変数宣言を最初になおせよ。
C++使いたいならbolandのやつ使え。
0816デフォルトの名無しさんNGNG
>>801
> SVGAのBIOSを呼び出したいというだけです。
PC-UnixでSVGA BIOSなんて動かんよ。
SVGAlibでも使え。
0817デフォルトの名無しさんNGNG
>>809
その質問の答えは、何のためにcallback関数を作りたいのか
を聞いてからだなー。
なにすんの?
0818デフォルトの名無しさんNGNG
>>811
実行時に構文エラーって良く分からんな。
0819デフォルトの名無しさんNGNG
>>811
> コンパイルはちゃんと通ります。
> でも、実行すると構文エラーと出てしまいます。
エラーメッセージを Copy & Paste しましょう。

手元の VC6 で試してみたけど、コマンドラインからコンパイルできたし、実行もできたぞ。
0820デフォルトの名無しさんNGNG
>>805
レスありがとうございます。
例えば以下のように、
    A    B    C
 1 1.0 2.0 3.0

と格納されているとき、fgets()を使って行ごとに読み、
別のテキストファイルに入力すると、
1.0 2.0 3.0
と書き込まれます。この後、例えばB列のデータのみを
取り出すとか、処理した結果を別のExcelファイルのC列
に書き込むなどの方法を教えてください。
0821デフォルトの名無しさんNGNG
>>820
まず「〜などの方法」ではなく、必要な処理をリストアップすべきだな。
ひとつの関数でいろんなことをまとめてやろうとせずに、単純な処理を
行う関数を部品として作成して。それらを組み合わせて最終的な目的が
果たせるようにする。
たとえば、B列のデータを取り出すためには、まず指定した列のデータを
取得する関数を作らなけりゃならない・・・・、

って、この調子で説明したら先が長くなるなぁ・・・

まず最終的に実現したい機能をリストアップ。
それからだ。
0822デフォルトの名無しさんNGNG
まぁ落ち着きたまへ。そしてマロにC言語の便利なライブラリを持ってきたまへ。
0823821NGNG
う、そうね。
文字列系の標準ライブラリなんて最近つかってなかったんで、はなから
頭に無かった。

配列とポインタとstrstr()が理解できれば、B列取り出すのは難しくないはず。
0824デフォルトの名無しさんNGNG
>>820
まずAWKでやってみて、それで荷が勝ちすぎるようならPerlを使ってみれば。
Cの練習なのでなければ、わざわざCを使って不自由な思いをする必要はない。
0825デフォルトの名無しさんNGNG
検索してみ。C言語のライブラリあるから。
ただあんまり出来はよくなかった気がする。
0826デフォルトの名無しさんNGNG
>>823
sscanfでいいやん。
0827デフォルトの名無しさんNGNG
strtokの使い方が分からないならsscanfつかえ。
0828デフォルトの名無しさんNGNG
signed a;
unsigned b;
signed c;
a = -1;
b = a;
c = b;
とやった場合、c==aとなることは保証されてる?
0829デフォルトの名無しさんNGNG
標準ライブラリのソースコードってどうやって見られるの?
0830デフォルトの名無しさんNGNG
>>829
VCだったら
\Program Files\Microsoft Visual Studio\VC98\CRT
に入ってるよ。
他の環境は知らん。
0831デフォルトの名無しさんNGNG
>>830
サンクス。
入門書を読み終わった後の段階として、
標準ライブラリのソースコードを読もうかと思って。
0832デフォルトの名無しさんNGNG
>>831
一言逝っとくと、VCのランタイムのソースは汚いよ。
0833デフォルトの名無しさんNGNG
Win98では現在のローカル日時設定出来るのですが、WinNT/200では出来ません
SetLocalTime関数を使用しています
Helpを見るとSE_SYSTEMTIME_NAME 特権を有効にしなければならず、
この特権を割り当てるには、AdjustTokenPrivileges 関数を使いますが、
AdjustTokenPrivilegesのパラメータの意味がまったくわかりません
教えていただくか、別の方法を教えてください
0834デフォルトの名無しさんNGNG
Administratorでログイン汁
0835744NGNG
>>833
739で同じ質問しただろ。
答えてやってるのに見もせずに同じ質問するな。

仕方ないからもっかい書いてやるけど、
管理者アカウントでログインすれば設定できるはずだ。
要するに一般ユーザーにはシステム時刻を変更する権限がないんだよ。
0836744NGNG
>>833
あぁ、それから。
システム時刻変更の特権を割り当てるには云々って書いてるけど、
ユーザーの権限を変更できるのは管理者だけなんで。
一般ユーザーのログインでやっても失敗するから、そこんとこお間違いなく。
0837デフォルトの名無しさんNGNG
誰か教えてください。学校の課題で出たんですが、選択整列法or挿入整列法を
行うプログラムが知りたいです。誰か教えてください。全然わかんないです・・・
0838デフォルトの名無しさんNGNG
まず「選択整列法」「挿入整列法」というものが解かりますか?
解かるなら、試しにここに簡単でいいので書いてみてください。
0839ドキュンD1NGNG
どなたか教えて下さい。

main()
{
double a,b,c,d,e;
int i;
scanf("%lf %lf %lf",&a,&b,&c);
d=((a-b)/c)+1.0;
i=d;
printf("%lf %d \n",d,i);
}
このプログラムで
2.0 1.7 0.1 と入力すると4.000000と4が出力されるのですが、
1.9 1.6 0.1 と入力すると4.000000と3 となるのは何故なの?
0840デフォルトの名無しさんNGNG
printfの%lfを%.20fとかに変えてみると分かるけど、
後者の演算の結果は4よりわずかに小さいので、intの変数に代入する際に
切り捨てられて3になります。
正確に4.0にならないのは、浮動小数点の演算誤差のせい。
0841デフォルトの名無しさんNGNG
>>838
ごめんなさい。選択整列法、挿入整列法、どちらもどんなものかわかりません・・・
0842デフォルトの名無しさんNGNG
>>841
じゃああきらめて留年しろ。
0843デフォルトの名無しさんNGNG
>>841
1.宿題で出すのだから授業で説明したか教科書に載っている
2.この板でも一週間に一度は誰かが尋ねるくらい FAQ なことなので、
 google などで検索すれば概念、仕組みからソースコードまで手に入る。
3.宿題は宿題スレで訊ねれ
宿題見てやるよ
http://pc.2ch.net/test/read.cgi/tech/1003838158/
0844839NGNG
>840
レスありがとうございます。
0845デフォルトの名無しさん NGNG
質問です!
ポインタの理解に苦しんでいるのですが、
char (*(**hoge[0])[1])
せんぱい方はこう言うのも簡単に脳内変換出来ちゃうんでしょうか
それともこんな宣言はあまりしない方がいいですか
0846デフォルトの名無しさんNGNG
独学でCを始めて1ヶ月の者です。


#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{

int i;
double d;
long l;

i = atoi(argv[1]);
l = atol(argv[2]);
d = atof(argv[3]);

printf("%d %ld %f",i,l,d);

return 0;
}

上のプログラムは、参考書に載っていたもの
ですが、コンパイルして実行すると強制終了されてしまいます。
本には『コマンドライン上で整数、long型の変数、浮動小数点数
を入力してください。すると、これらの値が画面に再度表示されます』
と、書いてあります。

どのように使うものなのでしょうか?
また、コマンドラインとは何か?といった事が
全然わからないので、それについて分かりやすく
説明されているページをご存知でしたら教えていただきたいです。
0847_NGNG
CとJAVA、初めから覚えるならどちらが難しいですか?
0848846NGNG
>>846についてですが
いろいろと、いじってみた結果
実行することができました。(と思います…)

MS−DOSプロンプトから実行する際に
スペースで区切って『1 2 3』と入力した上で実行
したらできました。気合と勘なので
まだ、何がなんだか理解していませんが…

でも、なんかわかりそうな気がしてきました。
いろいろやってみます。
0849846NGNG
たびたびスイマセン。
別に 1 2 3 じゃなくってもできるんですね。
3つの値をわたさなければいけないということなのかな?
3つ未満の時は強制終了で、3つ以上の時は
実行されるけど反映されるのは最初の3つのみ…

また、こんがらがってきた…
0850デフォルトの名無しさんNGNG
>>846
hoge.exe 1 2 3

としたとき、argv[0]には"hoge.exe"(へのポインタ)が入っていて、
argv[1]には"1"が入ってる。で、コマンドラインの引数が足りないとき、
846ではargv[3]は、メモリ上の変なところを指してるんで
強制終了する(そもそもargv[3]なんてない)。

つーか、こんなサンプルが載ってる本なんて捨てちまえ。
0851デフォルトの名無しさんNGNG
>>846
#include<stdio.h>
int main(int argc, char *argv[])
{
int i;
for(i=0;i<argc;i++) printf("%d:%s\n",i,arg[i]);
return 0;
}

WebでC言語入門とか検索したほうがよいと思われ。
0852851NGNG
ミス。訂正。スマソ。

× for(i=0;i<argc;i++) printf("%d:%s\n",i,arg[i]);
○ for(i=0;i<argc;i++) printf("%d:%s\n",i,argv[i]);
0853846NGNG
>>850-851

今、C言語入門ページ巡りを
しているところです。

なんか、何か1つわからないことがあって
それがわかれば、今まで疑問に思ってきたことが
理解できそうな…そんな感じです。今。
がんばって勉強します。

ちなみに、現在使用している参考書は『独習C』です。
0854デフォルトの名無しさんNGNG
>>845
>char (*(**hoge[0])[1])
コンパイラ通るの?
0855初心NGNG
すいません。>>845の hoge[0] ってのはどうなるんですか?
要素0個の配列?
0856855NGNG
あ、ポインタ変数の配列へのポインタ変数配列の先頭要素へのポインタ、
・・・・でいいんですか・・・・?
0857デフォルトの名無しさんNGNG
今更ながらに >676 の解説希望。
構造体のアドレスでなく値を代入していると
思うんだけど私が間違ってるのか?
*でもついていればアドレスという説明はわかるんだけど。
0858デフォルトの名無しさんNGNG
>857
676が間違ってる。
0859デフォルトの名無しさんNGNG
>>857
たしかに。受けてる関数の引き血もintだしnumの宣言もint。
んで戻り値は〜構造体型。構造体丸投げは多少問題アリですが・・・
それにしても今更ですな。
0860デフォルトの名無しさんNGNG
ネタだろ?
0861デフォルトの名無しさんNGNG
ll これは?
0862デフォルトの名無しさんNGNG
>>861
ハァ?
0863はじめの二歩NGNG
Cを趣味で勉強している大学生です。
とりあえず文法レベルは分かったつもりですが、
まだライブラリ等の知識はあまり無い、という段階です。
Cでの不定長文字列についての質問なのですが、文字列を加工して
返すような関数を作る時、普段はどうしていますか?
もちろんプログラムの目的によっても違うでしょうが、日常的
にはどうしているか、という話です。
1. strncat,snprintfのように、バッファのサイズを引数で
指定して、あふれた分は切り捨てる。
2. fgetsのように、バッファに収まらない時は次回の呼び出しの
ときに返す。
3. バッファは呼び出し先の関数でmalloc()で確保し、バッファへの
ポインタを返す。free()は呼び出し元が行う。
p=hoge();
if(p!=NULL){
puts(p);
free(p);
}
という感じで。
4. 専用の文字列ライブラリを使う。
5. GC(聞きかじりですが)を利用。

1.を除けば一番無駄が少ないのは3.だと思いますが、malloc()は
恐いとよく脅されるので、3.のようなプログラムの書き方でも
大丈夫なものなのか、質問してみたかったのです。
もっとも小心者はJavaでも使うのが正しいのかも知れませんが。
0864デフォルトの名無しさんNGNG
速度が要求される場合か、文字列のサイズが予測できる場合は 1
ユーザの手入力とかそういう入力データ系は 3
かな。

2は、プログラムであふれたかどうかを判断して、処理を書かないといけないので
普通はつかいません。

4も、使うところでは使われています(qmailやdjbdnsで有名なdjbの人とかね)

5は、3や4を使う場合の応用編なんだけど、とりあえずは忘れていていいよ。
0865デフォルトの名無しさんNGNG
面倒なんで最近は全部C++でstd::stringを投げ返してる。
いちいち考える必要がなくなるし。

あと、WindowsAPIがらみとか、渡されたバッファが足りないときは
エラーを返す、ってパターンもあるね。
0866デフォルトの名無しさんNGNG
ここはCスレ
0867初心者NGNG
JAVAとCどっち簡単で使える?
0868デフォルトの名無しさんNGNG
>>867
日本語すらまともに使えない奴にはどっちも無理。
0869デフォルトの名無しさんNGNG
>>867

文字列一回出すためだけにいっぱい書くの嫌ならC。
.exeファイルが作れなくても泣かないのならJava。
0870デフォルトの名無しさんNGNG
Cを使うのはMS-DOS以来なので、intがふつー32bitになっただけで
カルチャーショックを受けている漏れなのですが、最近のOSでは
自動変数というかスタックはどのくらい使ってもOKなんでしょうか?

Windows 2000やLinuxで開発する場合の目安(?)が有れば教えてください。
ファイル読み込みのバッファとして1MBぐらい豪気に使ってもいいのか、とか。
0871デフォルトの名無しさんNGNG
1MBを越えないようにしとけばたいがい平気だが
100Kを越えた時点でふつう、馬鹿かと思う。
0872デフォルトの名無しさんNGNG
VCのリンカはデフォルトで1MBのスタックを確保。
0873デフォルトの名無しさんNGNG
>>870
古典的なUNIXなら無限、というかユーザーリミットに
あたるまで。物理セグメントのないUNIXマシンが多かった。
freeやreturnで再利用されて合計値が下がるのでむしろ好ましい。
0874870NGNG
デフォルトが1MBですか。Linuxのgccも同じぐらいでしょうか?

>871
数十KBぐらいなら、普通の組み方として許されますか?

あと、大きめの構造体を渡す時に参照渡しにするのは、
今でもやりますよね?
0875デフォルトの名無しさんNGNG
>>874
Linuxは古典的な配置のはず。
0876デフォルトの名無しさんNGNG
>>870
たぶん例えで言ってると思うんだけどツッコミ。

>ファイル読み込みのバッファとして1MBぐらい豪気に使ってもいいのか、とか。
今日びのOSはファイルをキャッシュするから
わざわざ大きなバッファを使うメリットはほぼゼロだと思う。
0877870NGNG
>876
いや、本気で言ってました……。
1byteずつ読んでも一向に構わないんですね?
0878876NGNG
>>877
1 byteとかいう極小単位の場合は実装によると思います。
インラインやマクロで関数が実装されていれば実質的に
ポインタ操作と大して変わらないので。

常に非常に高速なアクセスが要求されるとか、作業に必要でないなら
最低限のバッファ(作業場)程度がいいんじゃないでしょうか。
私はそう考えているんですけども、、、。
0879デフォルトの名無しさんNGNG
UNIX系のOSの場合、multi threadにすると使えるstack spaceが減ったり
することがあるので注意。
今時のOSならファイル読み込みはメモリにマップしちゃうのが楽だと思われ。
0880デフォルトの名無しさんNGNG
>>879
マッピングだとワークエリアとして書き込んだときに元データが壊れるから嫌い
いや、俺それで大ミスしたことあるから
0881デフォルトの名無しさんNGNG
>863
3は動かなくないはですが、あんまり良くないですね。
malloc()とfree()を別の関数でやると、それぞれの関数の汎用性(独立性)が下がるんで。

realloc()をうまく使えば、もっと方法がありそうですが。
0882デフォルトの名無しさんNGNG
Pascal文字列互換な関数郡ってないのかね?
0883デフォルトの名無しさんNGNG
varOleStr
0884デフォルトの名無しさんNGNG
intel C/C++ Compilerって、gccやVC++よりも
ものすごい勢いで最適化したりするの?
0885デフォルトの名無しさんNGNG
しないって。Intelのツールの恩恵を受けやすくなってるだけ
0886デフォルトの名無しさんNGNG
ものすごい勢いじゃないにしてもVCやgccより良くない?
0887デフォルトの名無しさんNGNG
VCとはどっこいどっこい。
いいところもあれば悪いところもある。
ただ、確実にgccよりはいいね。

vector Cとか言うのが最適かすごいらしいが。
0888仕様書無しさんNGNG
http://www.pro.or.jp/~fuji/computerbooks/c/c.kernighan.html

この本どうですか?
使用されてた方や知っている方がおられましたら感想聞かせてください。
0889デフォルトの名無しさんNGNG
>>888
ハヤシハルヒコ
0890デフォルトの名無しさんNGNG
>>888
必読

そのあとで林晴彦読むと、ヘタレっぷりがよく分かる
0891デフォルトの名無しさんNGNG
>888-890
ジサクジエン ゴクロウサン(ワラ
0892888NGNG
>>889
ハヤシハルヒコを買えということ?

>>890
そうですか。今会社の研修で使ってるのですが、
プログラミングの勉強はじめてなんで、この本で勉強を
したことが私の基礎になりそうで気になっていたので安心しました。
この会社を研修本にしてる私の会社はある程度見所ありそうですかね?
0893仕様書無しさん NGNG
つーか蟹飯とK&Rはプルグラマのバイブだぞ  ブルブル(・∀・)
0894888NGNG
>>891
ちがうYO!
>>887
ハヤシハルヒコを買え
ある意味必読
0895888NGNG
>>891
なんだよ自作自演て。
掲示板をそんな見方しか出来ないのか。
人間が小さいな、ド厨房さん。
0896デフォルトの名無しさんNGNG
プログラミングの質問ではないけど、
C言語でプログラムを書くにあたって便利なツールは何がありますか?
0897デフォルトの名無しさんNGNG
>>896
UNIX
0898デフォルトの名無しさんNGNG
>>896
Emacs
cflow
警告メッセージをきちんと読む心がけ
0899デフォルトの名無しさんNGNG
(vim&&screen) || emacs
man2html
grep
find
窓な人なら迷わずcygwin
0900デフォルトの名無しさんNGNG
emacsで日本語表示するとなんかドットが荒いんだけど...
0901デフォルトの名無しさんNGNG
サルガッソーと猿実装って何か似てるよね♪
0902デフォルトの名無しさんNGNG
>>901
少し休むことも必要だぞ?
0903デフォルトの名無しさんNGNG
>>889-890
何でK&Rの感想で林が出て来んだよ
それに10分も後に辻褄ぼろぼろのレスつけてんのも変だしな 自作自演クサクサ
0904デフォルトの名無しさんNGNG
http://ebi.2ch.net/test/read.cgi/rikei/1004776636/
0905デフォルトの名無しさんNGNG
データ構造を勉強するのにお勧めの本を教えてください。
できればC言語で学べる本がいいです。お願いします。
0906デフォルトの名無しさんNGNG
sleep関数の最大指定秒数はどのくらいですか?
0907デフォルトの名無しさんNGNG
>>906
そもそも sleep() は標準ライブラリ関数ではないので、環境を明記しないと答えられないと
思われ。
0908デフォルトの名無しさんNGNG
>>907
POSIXらしいよ。
0909仕様書無しさんNGNG
ちくしょーー悔しいがCは面白い。
病みつきになりそうだぜ。
0910デフォルトの名無しさんNGNG
コンパイラ理論も合わせて勉強すると、さらにおもしろくなるよ。
おまけで、最適化理論も学べるし :->
0911デフォルトの名無しさんNGNG
引数の型がunsigned intだから、最大UINT_MAX秒かな?
0912デフォルトの名無しさんNGNG
>>911
その前に死ぬけどね(笑)。
0913デフォルトの名無しさんNGNG
Solaris7上のgccでテストしたら、599184000くらいで0を返したぞ。
0914 NGNG
>>905
Cプログラムで学ぶアルゴリズムとデータ構造

学校で買わされたけど開かなかったなぁ。
0915失礼いたします。NGNG
無料のborland C++ 5.5 コンパイラで、勉強しております。
訳あって、windows98から、windows2000に、OSを入れ替えましたので、
コンパイラを再インストールし直し、ilink32.cfgと、bcc32.cfgの
環境を設定し直しました。
その際、コマンドプロンプトの、作業フォルダの欄には、

"PATH=インストールしたフォルダの場所; %PATH%"

と、98の時と同じ設定をしたのですが、コンパイルすると、

’コンパイルしようとしたファイル名’は、内部コマンドまたは
外部コマンド、操作可能なプログラムまたはバッチファイルとして認識
いません。

と、表示されてしまいました。何故なのでしょうか。
どなたか、教えて下さい。
0916デフォルトの名無しさんNGNG
コンパイラじゃなくてDOSの勉強からやり直せ。
’コンパイルしようとしたファイル名’を直接実行してどうすんだよ。
’コンパイルしようとしたファイル名’の前になにか打ち忘れているだろ?
0917がんばれやNGNG
BCBとVC++のどちらかのソフトを
買おうと思ってるんですけど、どっちが
買いでしょうか。
ちなみに私は学生では無いのでアカデミック版は
買うことができません。
もちろんBCBとVC++はプロフェッショナル版という事で。
0918915NGNG
すいません。説明不足で。
その、「なにか」の

bcc32 ’コンパイルしようとしたファイル名’を、

入れたのですが、これがどうも・・。
と、言いますか、何もわからない素人で、
他の人に、ちゃんと説明できてるかもあやふやで・・。
勉強し直してきます。
0919デフォルトの名無しさんNGNG
>>917
目的は?
0920デフォルトの名無しさんNGNG
>>917
GUIが少しでも絡むならBCB。これ定説。
0921デフォルトの名無しさんNGNG
はじめまして。C初心者です。

int count_sage = 0;
....
char tmp[20]="count_sage";

のようにソース上で記述してあったとして
int型のcount_sageという変数を
char型配列tmpを利用して間接的に
count_sageの内容を書き換えたい
(count_sage=100;と同様の事をしたい)と思っています。
が、やり方が分かりません。。こんなことできるんでしょうか??
ポインタを使ったほうがよいのでしょうか?どなたか教えて下さい。
よろしくお願いします。
0922デフォルトの名無しさんNGNG
>>921
int count_sage = 0;
int *tmp = &count_sage;
*tmp = 100;

変数名を文字列として持っていても C ではなんの意味もないです。
0923デフォルトの名無しさんNGNG
>>922
921はポインタまでまだいってなかったんだよ
0924デフォルトの名無しさんNGNG
独学でCでも勉強しようかと本を買ってきたんだけど。それの練習問題で
「5566と24578の最大公約数を求めるプログラムを作れ」
って問題があったのですがどーやっても今の俺にはできないので教えてください。
多分for文とif文を組み合われて作るのかな?って思うんですが…
0925デフォルトの名無しさんNGNG
>>924
5566と24578の最大公約数は2だよ.
これでもうプログラム作らなくてもよくなったね.
0926デフォルトの名無しさんNGNG
そんなことよりもさあ,情報システム板でみつけてきたんだけど,

while (k > 1) k = k % 2 == 0 ? k / 2 : 3 * k + 1;

が任意のk(正の整数)について停止するのはなぜなんだ?
0927デフォルトの名無しさんNGNG
>>924
「最大公約数 アルゴリズム」で検索してみそ。
0928デフォルトの名無しさんNGNG
>>924
とりあえず君くらいのレベルならこのプログラムでいいんじゃない?

/* a と b の最大公約数を求める */
int m, k, gcd;
m = x > y ? y : x;
for (k = 1; k < m; k++)
  if ((a % k == 0) && (b % k == 0)) gcd = k;
/* ここで変数 gcd に a と b の最大公約数が入っている */
0929デフォルトの名無しさんNGNG
>>925
まちがい「5539と24634」だった。

一応約数でも出してそれから最大値でも調べるかなって思って
こんなプログラム作ったら何も表示されなかった。

{
int a,b,c;
a=5539;
b=24634;
for(c=2;c<5540;c++){
if(a%c==0){
if(b%c==0){
printf("%d\n",c);
}
  }
}
}
0930デフォルトの名無しさんNGNG
ループは逆にした方が効率いいかもな(w
0931デフォルトの名無しさんNGNG
つまり互いに素(最大公約数は1)ってことだろ?
0932デフォルトの名無しさんNGNG
>>926
それ、なんとか予想って数学の問題で、まだ証明されてないんじゃない?
0933930NGNG
>>930は928に書いたのね。シャレで。

>>929
確かにそれじゃ表示されないよ
0934デフォルトの名無しさんNGNG
>>926
角谷予想だ。
http://www.geisya.or.jp/~mwm48961/math2/m3free.htm
0935デフォルトの名無しさんNGNG
gcdといえばユークリッドの互除法だよ。
0936デフォルトの名無しさんNGNG
int do_gcd (int x, int y)
{
if (y == 0)
{
return x;
}
else
{
return do_gcd (y, x % y);
}
}

int gcd (int x, int y)
{
return x > y ? do_gcd (x, y) : do_gcd (y, x);
}

こんなかんじでどうでしょう。
0937デフォルトの名無しさんNGNG
>>936
最初に x, y の大きさで場合わけする必要はないのでは。
0938デフォルトの名無しさんNGNG
質問です。
常にパスを通したいディレクトリを増やしたいのですが
gccの環境変数はどのように設定すればよいのですか?
設定ファイルでもあるのでしょうか?よろしくお願いします。
0939デフォルトの名無しさんNGNG
bash等で使われているreadlineライブラリの使い方が載っているホームページありますか?
若しくはどなたか簡単なreadlineのサンプルを見せてください。
0940俺は童貞だが、NGNG
マジで分からんば。
int型を、char・string型に変換するのはどうするばよか?
どじゃか、教えてくんさい。
0941デフォルトの名無しさんNGNG
(-_-) 「char・string」ッテドンナカタナノ?
(∩∩) sprintfジャダメナノ?
0942デフォルトの名無しさんNGNG
>>938
OSによるし、やり方もいろいろある。
Windowsか? UNIXか?
makeするのに通っていればいいのか? 常に検索対象にしたいのか?
0943デフォルトの名無しさんNGNG
>>940
char*型なのかstring型なのかはっきりせい。
ちなみにCにはstring型はないぞ。
0944デフォルトの名無しさんNGNG
>>942
レスありがとうございます。
OSはLinuxです。常に検索対象にしたいです。
よろしくお願いします。
0945デフォルトの名無しさんNGNG
>>939
man readlineは読んだか?
0946939NGNG
もちろんreadlineは読んだけど解りません。
0947デフォルトの名無しさんNGNG
>>944
~/に .で始まる環境設定ファイルがあるはず。
ファイル名や構文はshellによって違う。
bashなら .bashrcとかにpath設定する。
まずは入門ページを探す。
0948デフォルトの名無しさんNGNG
>>944
普通Linuxならgccは/usr/binにインストールされるからあらためて追加する必
要はないはずだが。

一般的には~/.profileに
export PATH="$PATH${PATH:+:}/path/want/to/append"
つー感じ。
0949デフォルトの名無しさんNGNG
>>947-948
レスありがとうございました。やってみます。
0950デフォルトの名無しさんNGNG
シャー
0951最大公約数の人NGNG
一応こんな感じでいいんですか?答えは191になったのですが・・・。
#include <stdio.h>
#include <stdlib.h>
void main()
{
int k,gcd;

for(k=1;k<5539;k++)
if((5539%k==0)&&(24639%k==0))gcd=k;
printf("%d",gcd);
}

「int m, k, gcd;」を最初に書くとなにやらエラーが出るので「void main()」
にしたんですが、どこかおかしいですか?
0952939NGNG
readlineのサンプルソースコードをぉぉ
0953デフォルトの名無しさんNGNG
>>951
間違い最後の奴で
「int m, k, gcd;」は「int gcd(int x, int y)」
0954デフォルトの名無しさんNGNG
24634じゃなかったのか???
0955デフォルトの名無しさんNGNG
>>939
ttp://php3.de/manual/ja/ref.readline.php
0956955NGNG
あ、まちがえた・・・
0957公約数のひとNGNG
>>954
間違えた。
「#include <stdlib.h>」もいらないね
はずかしので自ら晒しage
0958デフォルトの名無しさんNGNG
>>951, >>953
void main() を int gcd() にしてたってこと?
ソース中にmainがないと、プログラムをどこからはじめたらいいのか分からないので
エラーで怒られたということね。
0959デフォルトの名無しさんNGNG
void func(int a)
{
 int b[]={a,a,a,1};
}
ってCでも出来たっけ?
0960デフォルトの名無しさん NGNG
gccてSIFTJISで書けないの?エスケープ出来ないし 
ダサっ! ププププ
0961デフォルトの名無しさんNGNG
すいません真出来ます 
0962デフォルトの名無しさんNGNG
>>959
できる。

ところで<8>は?
0963デフォルトの名無しさんNGNG
VC++ってEUCで書ける?
0964デフォルトの名無しさんNGNG
EUCはSJISとちがってまだまともなコードだから大丈夫じゃない?
メッセージは滅茶苦茶になるだろうがコンパイルくらいなら
問題ないだろう。

シフトジスが通らないのはそれだけシフトジスの設計が
滅茶苦茶だってことなんだけどな。
0965公約数のモノNGNG
>>958
その通りです

教えてくれた人ありがとう御座います
0966デフォルトの名無しさんNGNG
>>964
そうとも限らんのじゃないか?
"\xa1\xe0\\" \xa0は0xa0そのままとして
EUCだと"÷\\"と正しい文字列になるが、
SJISだと"。濬\"と閉じていない文字列になってしまう。
0967デフォルトの名無しさんNGNG
>>960 勘違いする人がいると困るからマジレスしとくと、gccでもShift_JIS使
えるよ。configureに--enable-c-mbcharを付けてmakeし、環境変数LANGに
C-SJISを設定しておけばいい。

>>966 VC++でEUCをコンパイルするには、Windowsのロケールを英語等のシング
ルバイト圏にすれば大丈夫だったはず。
0968デフォルトの名無しさんNGNG
でも--enable-c-mbcharってかなりバグってるって話だけど。

うーん、そうか。しかしWindowsのロケールってすぐに変えられるもんだったっけ。
0969デフォルトの名無しさんNGNG
>>968
> でも--enable-c-mbcharってかなりバグってるって話だけど。
wchar_t *ws = L"漢字" みたいなのはあやしいけど、文字列リテラルの中に
"表示" って入れるくらいなら大丈夫。

> うーん、そうか。しかしWindowsのロケールってすぐに変えられるもんだったっけ。
Windows 2000ならコントロールパネル→地域のオプション→全般タブ→ロケール
で変えられるよ。
コマンドプロンプトからchcp 437して実行しても大丈夫かも。
0970デフォルトの名無しさんNGNG
みんなはreadline使わないのですか?あんなに便利そうなのに・・・・・
0971デフォルトの名無しさんNGNG
>>969
> Windows 2000ならコントロールパネル→地域のオプション→全般タブ→ロケール
> で変えられるよ。
> コマンドプロンプトからchcp 437して実行しても大丈夫かも。
それでVCって対応する?
0972969==967NGNG
>>971 たしか、VC++は大丈夫だったと思うのよ。今手元に環境がないから、
誰か試してみてくれ。記憶違いだったらスマソ。
0973デフォルトの名無しさんNGNG
GNUのreadlineは駄目なんですか?興味ないんですか?
0974DOKEYNGNG
10万までの素数の表を求めかつ1から100、101から200......
99901から100000それぞれにいくつずつ素数があるか数える
Cプログラムを教えてください
0975デフォルトの名無しさんNGNG
宿題丸投げは別スレだバカ
0976凡才ハカーNGNG
新スレ
http://pc.2ch.net/test/read.cgi/tech/1005811510/l50
0977DOKEYNGNG
これはどう?
#include <stdio.h>
#define YES 1
#define NO 0
#define MAX 10000
#define BOXNUM 100 /* BOXNUM= MAX/100 */

int isprime(int n);

main()
{
int i, j, k;

int box[BOXNUM];
for (j = 0; j < BOXNUM ; j++) box[j] = 0;

printf("2 "); /* 2 is prime */
box[0] = 1;

for (i = 3; i < MAX; i = i + 2) { /* check only odd numbers */
if (isprime(i) == YES){
printf("%d ", i);
box[i/100]++;
}
}
printf("End.\n");

for (k = 0; k < BOXNUM; k++)
printf("box%d: %d\n", k, box[k]);
}

/* n is prime? */
int isprime(int n)
{
int i;

for (i = 3; i < n; i = i+2){ /* devide n by odd number < n */
if (n % i == 0) return NO;
}
return YES;
}
0978デフォルトの名無しさんNGNG
以下の関数がよくわからないんですが、どういう意味なんでしょうか?
malloc
free
isprint
strcmp
exit
ちょっと多いですが、誰か教えてください。
0979Kusakabe YouichiNGNG
>>978: デフォルトの名無しさん wrote:
> 以下の関数がよくわからないんですが、どういう意味なんでしょうか?

マニュアル見ればいいのでは?
どうしてもマニュアル見ちゃいけないというおばあちゃんの遺言とかだったら、
べつの本でもいいけど。

たとえばある入門書では、

> malloc()
178ペイジにでています。

> free()
178 ペイジにでています。

> strcmp()
105 ペイジにでています。

> exit()
66、77ペイジにでています。
0980ひよこ名無しさんNGNG
>>978
宿題か?自分で調べろ。
malloc()free():メモリ関連
isprint():文字種別判別関連
exit():標準ライブラリ関数
0981犬NGNG
コマンドラインパラメータとオプションフラグって何?
0982ひよこ名無しさんNGNG
>>977さん。最高です。フェイントっぷりがこにくいです。一生付いていきたいです。
0983978ですNGNG
>>979
その入門書って何の本でしょうか・・・?
0984Kusakabe YouichiNGNG
>>981
>981: 犬 wrote:
> コマンドラインパラメータとオプションフラグって何?

コマンドラインパラメーターってのはコマンドラインのパラメーター
コマンドラインってのはたいした意味はなくて、
コマンドをキーボードから打ち込むタイプの環境で
foo abc def ...
みたいに打つ場合、一番最初がコマンド名である場合が多いので、
2つめ以降のがパラメーターだったりするわけです。
で、そのパラメーターのことを「コマンドラインパラメーター」という
とかその程度の意味です。

41ペイジに説明がありますね > コマンドライン

オプションスイッチ、オプションフラグなどは同様に102ペイジに解説が
ありますね。
0985デフォルトの名無しさんNGNG
>>983
「作ってわかる
Cプログラミング」
http://dennou.gihyo.co.jp/books/void_c/

宣伝うぜ!
0986978ですNGNG
>>985
ってことは、その本を見れば>>979の内容がわかるんですね?
見てみようかな・・・?
そもそもC言語の本って多すぎて、どれがいいかわかんない!!
0987デフォルトの名無しさんNGNG
一冊お買い上げ!
0988Kusakabe YouichiNGNG
>>986: 978です wrote:
> そもそもC言語の本って多すぎて、どれがいいかわかんない!!

そもそも「C言語」の本を探すより「C」の本を探すほうが
いい本に当たる確率がぐっと高まりますよ。
0989986ですNGNG
>>988
C言語とCって違うんですか?
0990Kusakabe YouichiNGNG
>>989: 986です wrote:
> C言語とCって違うんですか?

同じものを意味するんですが、
言い方がちがうわけです。

Fortran言語とかPascal言語とかC++言語とか書いてある本が
お薦めじゃないのと同じです。
0991986ですNGNG
>>990
なにか、おすすめの本はありますか?
0992Kusakabe YouichiNGNG
>>991: 986です wrote:
> なにか、おすすめの本はありますか?

Cの本で「売れている順」のリストだったら、べつの場所に書いてありましたよ。
0993991ですNGNG
>>992
そうなんですか。なら見てみようと思います・・・ ってどこになるんでしょう・・・
0994デフォルトの名無しさんNGNG
>>991
林晴彦さんの本が評判良いようですよ。
0995デフォルトの名無しさんNGNG
目的によって薦める本が違ってきそう。
仕事で使うCなら少なくとも
www.hir-net.com/book/book19/index.html
みたいなANSIの規格書使ってなきゃ、一緒に仕事したくないな。

ところで新たな質問は新スレでした方が良さそうだね。
0996@@@NGNG
C言語最強だー。
他にも 色々言語あるけど やっぱりCが最高。
0997デフォルトの名無しさんNGNG
997
0998デフォルトの名無しさんNGNG
sage
0999デフォルトの名無しさんNGNG
早く使い切ろう
1000らうんじゃNGNG
失礼。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。