■ 2ちゃんねるは、ここのサーバを使ってるです。。。
 .jp ドメインお持ちのお客様大歓迎。maido3.jp
 .fm 取得代行します。(US) maido3.fm
 .ca 取得代行します。(US) maido3.ca
 .com .net .org 取得代行します。(US) maido3.com
 .cc .to .tv 取得代行はじめました。NEW
人気サイト
月々1,000円からの BinboServer.com 2ちゃんねるも使っている Big-Server.com
>> 2ちゃんねる、サーバ監視所

■掲示板に戻る■ ■過去ログ倉庫めにゅーに戻る■
C言語なら、俺に聞け! <7>
1 名前: sageジョブス 投稿日: 01/10/19 00:17
おれは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/


2 名前: デフォルトの名無しさん 投稿日: 01/10/19 00:19
ポインタってなんですか?


3 名前: 武夫。 投稿日: 01/10/19 00:19
こんにちは


4 名前: デフォルトの名無しさん 投稿日: 01/10/19 00:31
>>2
アドレス


5 名前: 前すれ 973 投稿日: 01/10/19 03:07
>> 前すれ 974 さんへ
すみません, 話のふりがまずかったですね.

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

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

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

おそらく本職のプログラマさんはこんなのが必要なときは
scanf() なんか使わないで, もっとがりがりトークンの切り出しのプログラムとか
lex/yacc とか使うんだろうとは思うんですけどね(ちなみに私は本職のプ
ログラマではありません).


6 名前: 超初心者 投稿日: 01/10/19 03:58
連立微分方程式を数値積分して解くときに、
最大原理を用いて、4次のルンゲクッタ法で計算したいのですが、
ポインタを使わないで計算するプログラムソースとかありませんか?
または最大原理を説くプログラムソースなどがある場所を教えて下さい。


7 名前: デフォルトの名無しさん 投稿日: 01/10/19 04:05
シューティング法のプログラムがわかりません。
どこかにないですか?


8 名前: デフォルトの名無しさん 投稿日: 01/10/19 04:12
シューティング法ってなに?
ねぇ、なに?
教えてよ、お願い


9 名前: デフォルトの名無しさん 投稿日: 01/10/19 04:38
>8
C言語で書かれた、シューティングゲームのソースです。


10 名前: デフォルトの名無しさん 投稿日: 01/10/19 04:45
>>6
ポインタを使うと何か不都合がありますか?


11 名前: 超初心者 投稿日: 01/10/19 04:56
>>10
ポインタを使った事がないので、プログラムが理解できないです・・・鬱
2次の配列を使ってやるのが良いと言われたのですが・・・
何処かにないですか?初心者ですみません。


12 名前: デフォルトの名無しさん 投稿日: 01/10/19 06:05
最大原理を用いる4次のルンゲクッタ法を私に教えてくれれば、
私がプログラムを書いてあげよう。


13 名前: デフォルトの名無しさん 投稿日: 01/10/19 07:03
>>12
そのくらい自分で調べろよ。


14 名前: 974 投稿日: 01/10/19 07:26
>>5
K&Rに書いてあるだろ。
他の本はしらん。


15 名前: デフォルトの名無しさん 投稿日: 01/10/19 10:46
タコな質問ですいません。
VBでChr(9)のようにAscii文字を指定するような関数って
Cにもありますか?


16 名前: ぷろぐらまぁ 投稿日: 01/10/19 10:50
>>15
出力先によっても違うが、printfかsprintfかfprintfあたりを使うと良い。
ex) printf("%c", 65); /* ASCIIコードで65が出る */


17 名前: デフォルトの名無しさん 投稿日: 01/10/19 10:54
>>15
char ch = 9;
変数に直接アスキーコードを代入すればいい。


18 名前: 15 投稿日: 01/10/19 10:57
>>16
ありがとうございます。
できれば標準入出力ではなく、VBのように
const chr* Chr( int );
のような感じで関数として使いたいのです。
こういうのってやっぱ自分で作らないといけないんですかね。


19 名前: 15 投稿日: 01/10/19 10:58
>× const chr*
>○ const char*
ですね。


20 名前: デフォルトの名無しさん 投稿日: 01/10/19 11:07
>>18
Cでの文字列の取扱に関して理解してる? 文字と文字列は別だよ?


21 名前: !=17 投稿日: 01/10/19 11:08
>>15
何がしたいのか分からん。
'\t'や'\x9'や'\011'の文字定数や(char)9も結局9だし、
それを文字として印字したいならprintf("%c", 9)やputchar(9)。
VBの頭でCを考えてないか?


22 名前: 15 投稿日: 01/10/19 11:22
>>17
そっか、別にわざわざ関数化することないんですよね。
なんか難しく考え過ぎてました。


23 名前: デフォルトの名無しさん 投稿日: 01/10/19 13:14
String型ってやっぱ欲しいよね。
というわけでむかし自作したんだけど
需要あるのかな?


24 名前: デフォルトの名無しさん 投稿日: 01/10/19 13:35
>23
PascalやVBで使われてるStringと互換性を持たせれば、あるいは。

ってかもうあるような気もするけど、知らない。


25 名前: デフォルトの名無しさん 投稿日: 01/10/19 13:53
>>23
オラ、イラネ


26 名前: デフォルトの名無しさん 投稿日: 01/10/19 14:13
高速かつ低資源な検索ルーチンを教えて。
ハッシュだとある程度の数なら十分に動作するんだが・・・
数が大量になるとスピードがでない。
なんか良いロジックある?

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


27 名前: デフォルトの名無しさん 投稿日: 01/10/19 14:15
>>26
ハッシュってのがまさしくそれ。
たぶん実装がヘボいと思われ。


28 名前: デフォルトの名無しさん 投稿日: 01/10/19 14:23
>>27
激しく同意。

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

というのだったら、

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

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

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

ぐらいの考察をかましちゃってもいいんだよ。
みんな分かるから。


29 名前: 26 投稿日: 01/10/19 14:24
>>27
あら、それを言われると辛い(^^;)
じゃ、高速なハッシュってどうやって組むの?
私のルーチン、いたって標準的な使い方だと思う。
100万のオーダなら平気だけど、2000万近くになると…

へぼいって言ってくれるくらいだから、さぞや素晴らしいロジックを
持ってるんだろうね。教えてください。


30 名前: デフォルトの名無しさん 投稿日: 01/10/19 14:33
>>29
>じゃ、高速なハッシュってどうやって組むの?

だから、オーダーでものを言え。
どう低速なのか説明できないのか?


31 名前: デフォルトの名無しさん 投稿日: 01/10/19 14:49
>>26
オープンアドレス法?
チェイン法?
(って話からするとチェインか?)
ハッシュテーブルのサイズは?

2000万近くあるなら BST のほうがいいかもよ。
もしくはチェインの下に BST を吊すとか。


32 名前: 26 投稿日: 01/10/19 15:09
>>28、30
27へのレスを書いてる際には28のレスは無かったのよね。
別に変に煽ろうとかって意味じゃないから(^^;)

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


33 名前: デフォルトの名無しさん 投稿日: 01/10/19 15:29
>>32
BST はバイナリサーチツリー、2分探索木ってやつ。

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

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

BST の実装法は探せばいっぱいでてくるはず。


34 名前: 33 投稿日: 01/10/19 15:33
日本語変だ…。鬱氏


35 名前: 26 投稿日: 01/10/19 15:39
>>33
ありがと。確かに自分のコード、しょぼかったです。


36 名前: デフォルトの名無しさん 投稿日: 01/10/19 15:40
あぁ、オーダーっつーのは、計算量のことね。
データの量じゃないぞ。


37 名前: デフォルトの名無しさん 投稿日: 01/10/19 16:22
>>33
べつに、木をぶら下げなくても、
じどうでハッシュのサイズを拡張するようにすればいい。
Optimize・・・ とか言う本に詳細載ってたけど、
具体的な書籍名は忘れた


38 名前: デフォルトの名無しさん 投稿日: 01/10/19 16:55
>>37
チェイン法において、リストの代わりに木を使うって話だよ。
ハッシュテーブルに全てを入れようとするのは大変なだけだと思う。
サイズ変えるコストも馬鹿にならないだろうし。


39 名前: デフォルトの名無しさん 投稿日: 01/10/19 17:14
>>38
詳細は覚えてないんだけど、再ハッシュする必要がある要素は、
極わずかっていう手法だったはず。


40 名前: デフォルトの名無しさん 投稿日: 01/10/19 17:19
char *name[]={"ノビタ","シズカ","スネオ"};
char name[][6]={"ノビタ","シズカ","スネオ"};
上と下の初期化の仕方って、どっちがいいの?


41 名前: デフォルトの名無しさん 投稿日: 01/10/19 17:22
>>40
上と下ではまるで意味が違います。


42 名前: デフォルトの名無しさん 投稿日: 01/10/19 17:23
>>40
良い悪いじゃなくて、処理内容が違うんで目的によります。
char *str = "abc";
char str[4] = "abc";
この違い分かってます?


43 名前: 42 投稿日: 01/10/19 17:25
あらかぶっちゃった。スマソ。


44 名前: デフォルトの名無しさん 投稿日: 01/10/19 17:37
>>42
すみませんが詳しく教えてください。


45 名前: デフォルトの名無しさん 投稿日: 01/10/19 17:43
>>42
自分で勉強しろよ。


46 名前: デフォルトの名無しさん 投稿日: 01/10/19 17:50
>>44
この程度は基本。2chで訊くようなものじゃない。
K&Rを死ぬほど読め。


47 名前: デフォルトの名無しさん 投稿日: 01/10/19 17:55
> K&Rを死ぬほど読め。

最近このスレで流行ってる?


48 名前: デフォルトの名無しさん 投稿日: 01/10/19 18:28
>>47
このスレッドでは最近かもしれないが、世間ではここ十年以上は流行ってると思われ。


49 名前: デフォルトの名無しさん 投稿日: 01/10/19 18:48
>>6
服部雄一:C言語とPADによる数値計算(培風館)

>本書ではポインタ変数を一切使わずにプログラムを記述する。


50 名前: デフォルトの名無しさん 投稿日: 01/10/19 18:58
>>49
それって、著者がポインタを理解してない上にサンプルがトンチキで有名な本では…


51 名前: 47 投稿日: 01/10/19 19:10
>>48
あ、K&R でなくセリフがね…


52 名前: デフォルトの名無しさん 投稿日: 01/10/19 19:55
>>50
そうなの?…じゃあこれ
Numerical Recipies in C[日本語版](技術評論社)


53 名前: デフォルトの名無しさん 投稿日: 01/10/19 20:34
あげようよ。
そこから始めようよ。


54 名前: デフォルトの名無しさん 投稿日: 01/10/19 20:47
K&Rってそんなにいいのか?
アンサーブックで十分だろ。


55 名前: デフォルトの名無しさん 投稿日: 01/10/19 20:58
K&R?
初心者にはお勧めできない。


56 名前: デフォルトの名無しさん 投稿日: 01/10/19 21:07
すみません、既出かもしれないけど、ここで質問させて下さい。
ポインタで悩んでます。

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

ところがポインタだと、
int x = 10;
int *p = &s;
という具合に、右辺に書く内容が *p についてではなくて p になってしまうのですか?
メモリの中身(*p)でなくて、番地(p)を書くのですか?
もしそうだとしても、感覚的に理解できないのです。


57 名前: 56 投稿日: 01/10/19 21:11
すみません、下から4行目は
int *p = &x;
でした。スマソ。


58 名前: デフォルトの名無しさん 投稿日: 01/10/19 21:14
int a;
int *p = &a; // *はポインタであることを示すだけ

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

という違いがある。
変数宣言時の'*'とその他の場所の'*'は違うよ。


59 名前: デフォルトの名無しさん 投稿日: 01/10/19 21:17
ちなみに後者は「ポインタ演算子」と呼ばれるもので、+や-などと同じカテゴリ。
&もそうだね。

前者をなんと呼ぶのかは知らん。


60 名前: デフォルトの名無しさん 投稿日: 01/10/19 21:20
そんなことを56は言ってんじゃないと思うが。
何かを指すものがポインタだから、としか言いようがない。


61 名前: 56 投稿日: 01/10/19 21:21
レスありがとうございました。

>変数宣言時の'*'とその他の場所の'*'は違うよ。
心の中でもやもやしてたものが晴れました。
ありがとうございます。
ポインタの宣言するときだけは
int* p=&a;
のイメージで捉えたらいいのですね?


62 名前: デフォルトの名無しさん 投稿日: 01/10/19 21:22
漏れはコンパイルの度にmakeって打つことによって、
人生通算で何回負けたかワカラン


63 名前: デフォルトの名無しさん 投稿日: 01/10/19 21:27
>>60
そんなことを56は言ってんじゃないと思うが。
つーか、あんた何で56の言いたいことがわかるのさ!


64 名前: デフォルトの名無しさん 投稿日: 01/10/19 21:29
>>61
>int* p=&a;
>のイメージで捉えたらいいのですね?

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

でも、
int *p, *q;
と書くつもりで、
int* p, q;
ってイメージして
int *p, q;
ってやっちゃ駄目よ。


65 名前: 60 投稿日: 01/10/19 21:30
>>63
56を読んでそう思ったからだ。
少なくとも型指定時の*と間接参照の*を混乱しているようには
読めなかった。まぁ56が疑問を解決したのならいいけど。。


66 名前: デフォルトの名無しさん 投稿日: 01/10/19 22:33
bcc32でコンパイル、実行すると特に問題なく動作プログラムがあって、
それをVCでコンパイルならできるのですが、実行すると

runtime error R6002
- floating point not loaded

というメッセージがでてエラーになります。
このメッセージの意味は何なんでしょうか?


67 名前: ビル・ジョブス 投稿日: 01/10/19 22:39
>>みんな
宣言時はポインタ修飾詞。

>>56
intは整数を入れる変数だよね。
で、ポインタはアドレスを入れる変数だよ。
(もう分かってる?)


68 名前: ビル・ジョブス 投稿日: 01/10/19 22:46
>>66
DOS窓だね。
浮動小数点演算がソフトウェアエミュレーションになってる?
VCの設定は確認済み?


69 名前: 66 投稿日: 01/10/19 23:05
>>68
はい、DOS窓です。
浮動小数点を使っているのは一箇所だけ実行時間を計っているところだけ
なんですが、printfで表示するときに直接計算せず、いったんdouble型の
変数に代入してから実行するといけました。
そのソフトウェアエミュレーションというのを設定するというのは
どこをいじればいいんでしょう?ヘルプで「ソフトウェアエミュレーション」
といれても、でてこなかったので...。


70 名前: デフォルトの名無しさん 投稿日: 01/10/20 11:04
hitck[ix][iy]=off;
ixとiyの関係を教えて下さい。


71 名前: デフォルトの名無しさん 投稿日: 01/10/20 12:50
>69 一箇所だけなら 整数で計算させたらいいじゃんと思うのだが?
  単に少数点表示がメンドクサって事だけでしょ?

c=a/b
((a-c*b)*100)/b


72 名前: デフォルトの名無しさん 投稿日: 01/10/20 13:03
flushかそんな感じのあったと思ったけど忘れた。教えて。
printfで事情があって改行しなかったら出力されなかったので、flushしたい。


73 名前: デフォルトの名無しさん 投稿日: 01/10/20 13:24
fflush()


74 名前: デフォルトの名無しさん 投稿日: 01/10/20 13:26
>>71 div()というのも蟻

#include <stdlib.h>
div_t d = div(a, b);
printf("%3d.%.2%%\n", d.quot, d.rem);


75 名前: デフォルトの名無しさん 投稿日: 01/10/20 13:28
fflush(stdout)


76 名前: 74 投稿日: 01/10/20 13:31
これは適切じゃないな、スマソ。


77 名前: デフォルトの名無しさん 投稿日: 01/10/20 13:48
fパラメータって無いのか


78 名前: デフォルトの名無しさん 投稿日: 01/10/20 15:45
fflush()って、どういう時に使うのですか?
バッファを書き出す、と言われてもピンと来ない……。


79 名前: デフォルトの名無しさん 投稿日: 01/10/20 15:55
#innkuru-do <esuthidhiaio-dotto.etti>
boido meinn (zoido)
{
innto a,b,c
huro-to x,y

purinntoehu("itteyosi")
あぎゃあああああああああああ
}


80 名前: 80 投稿日: 01/10/20 17:13
そもそもストリームって何のことですか?


81 名前: デフォルトの名無しさん 投稿日: 01/10/20 17:22
>>80
川の流れのようなもの


82 名前: デフォルトの名無しさん 投稿日: 01/10/21 08:34
C言語でマルチスレッドプログラミングってできるもんなんでしょうか?


83 名前: デフォルトの名無しさん 投稿日: 01/10/21 08:43
>82
 OSによってはAPIを呼び出せば非同期型スレッドは簡単

 SETJMP LONGJMPで 同期型のスレッドは作れる
 もちろんアセンブラでスタック切替をしても同じ。


84 名前: デフォルトの名無しさん 投稿日: 01/10/21 12:25
タコな質問ですが、たとえば、

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

のようにある記号で挟まれた文字列をその内容によって
変換するようなプログラムってどう書けばいいでしょうか?


85 名前: デフォルトの名無しさん 投稿日: 01/10/21 12:44
>>84
???
いまカッコ内かどうかのフラグを持たせて、
フラグがたってる間だけ変換処理を実行する。
じゃ、ないの?


86 名前: デフォルトの名無しさん 投稿日: 01/10/21 13:42
>>82
pthreadライブラリを探せ


87 名前: デフォルトの名無しさん 投稿日: 01/10/22 05:33
>>84
それって正規表現使うのがいいんじゃない?
Cに正規表現ライブラリってあるかなぁ?


88 名前: 56 投稿日: 01/10/22 10:20
>>56-57で質問させて頂いた者です。
みなさんレスありがとうございました。
しかし一度は納得したものの、再び分からなくなってしまいました。
というのも、

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

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

どなたかお助けを!!


89 名前: デフォルトの名無しさん 投稿日: 01/10/22 10:32
>>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);
}
とすればお望みの動作になる。


90 名前: デフォルトの名無しさん 投稿日: 01/10/22 10:34
>>88=56
文字列を " " で囲むと,それは文字列へのポインタになります
しかも文字列の末尾にはちゃんと nil 文字('\0')が付加されます
p にはその文字列へのポインタが代入されます
*p を参照すれば,そこにはポインタに指し示された部分にあるデータを得ることができます
つまり p にはよく分かんないアドレスが,*p には 'A' が入ってるってこと

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

# きっと正確な説明じゃないと思うけど,こんな理解でも大丈夫なはずです


91 名前: デフォルトの名無しさん 投稿日: 01/10/22 10:34
ここでは65=0x41 という文字コードが印刷されたという事です >>88

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

*p は いつでも (int)ord(*p) という変換がされているとでも考えて下さい


92 名前: 56 投稿日: 01/10/22 10:48
>>90
>文字列を " " で囲むと,それは文字列へのポインタになります

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

>>91
すみません、僕の頭ではちょっと難しくて・・・・(^^;)
C以外さわったことないんで。。


93 名前: デフォルトの名無しさん 投稿日: 01/10/22 11:13
>>92
char型という8ビットの"整数"です。
char型はASCIIひと文字分の文字コードを扱うのに使ったりします。
C言語の文字列はchar型の単なる配列です。


94 名前: デフォルトの名無しさん 投稿日: 01/10/22 11:26
文字コードを意識したくない。
どうすればいいかな?


95 名前: デフォルトの名無しさん 投稿日: 01/10/22 11:28
>>94 他の言語を使え Windowsなら C++とかDelphiとか


96 名前: デフォルトの名無しさん 投稿日: 01/10/22 11:48
ある掲示板で char, short, long は使うな、
int8_t, int16_t, int32_t を使えと言われたんですが、
char, short, long では何かまずいんでしょうか?
教えてください。


97 名前: デフォルトの名無しさん 投稿日: 01/10/22 11:51
>>96
なにもまずくないけど?


98 名前: デフォルトの名無しさん 投稿日: 01/10/22 12:00
>>96
目的も書かずに、「char, short, longは使うな、
int8_t, int16_t, int32_t を使え」っていうのでは何とも言えない。
「何のために」っていうのがまずあるはず。
教えて下さいの前に、質問の仕方を改めること。
場合によっては、Cは使うな、Perlの方がずっとその目的には向いてる、
ということもある。


99 名前: デフォルトの名無しさん 投稿日: 01/10/22 12:40
>>95
C++やDelphiだと文字コードを意識しなくていいって?
Delはプラットホームが限られるからってことか?


100 名前: デフォルトの名無しさん 投稿日: 01/10/22 13:59
MS-DOS/V 6.2 で10ms間隔で割り込みを発生させ、カウンタを作りたいんです。

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

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

よろしくお願いします。


101 名前: デフォルトの名無しさん 投稿日: 01/10/22 14:00
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のままです。


102 名前: 100 投稿日: 01/10/22 14:08
見にくいんで、ソースを上げなおしてみました。

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);
}


103 名前: デフォルトの名無しさん 投稿日: 01/10/22 14:19
timl,timsの定義にvolatileが必要とかそういうこと?


104 名前: 100 投稿日: 01/10/22 14:32
volatile long timl;
volatile short tims;

long volatile timl;
short volatile tims;

共に駄目でした。

long far timl;
short far tims;

も駄目でした。


105 名前: 100 投稿日: 01/10/22 14:42
と言うか、割り込みが発生していません。
メインルーチン側の printf をコメントすると、動かなくなります。
(Ctrl+Alt+del でリセットされるので、永久ループになってるだけですが。)


106 名前: 103 投稿日: 01/10/22 15:01
非DOSユーザーがレスするのもナニだけど…

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

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


107 名前: 100 投稿日: 01/10/22 15:28
> この方法でタイマー割り込みが使えるのはPC98onlyだったりしない?

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

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

削除します。


108 名前: デフォルトの名無しさん 投稿日: 01/10/22 15:51
DOS/Vタイマベクタは 0x1c or 0x08 のはず。
割り込み周期の変更は知らん。


109 名前: 100 投稿日: 01/10/22 16:18
> DOS/Vタイマベクタは 0x1c or 0x08 のはず。

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

引き続き、情報を募集しますので、何か知ってたら教えてください。


110 名前: 103 投稿日: 01/10/22 17:19
MS-DOS自身も使っているベクタみたいだから、setvectでベクタを上書きして
しまうと、DOS自身の割り込みハンドラが呼ばれなくなってまずいような
気がする。

setvectする前にgetvectで古いベクタを保存しておいて、timintの中で
カウントアップの処理をした後で、書き換える前のベクタへジャンプする
必要があるんじゃないかな?


111 名前: デフォルトの名無しさん 投稿日: 01/10/22 17:22
>>98
なに言ってんだか。


112 名前: 100 投稿日: 01/10/22 17:46
>110

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

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

0x1cでやると、カウントアップは出来ました。
ただ、周期が約55msに固定で、必要な10ms間隔にならない為、
使えない事が判明しました。


113 名前: ビル・ジョブス 投稿日: 01/10/22 18:16
>>110
chain_intr()とかっていうライブラリ関数あったなー

>>112
CLIしてるなら、きっと中の処理が遅くて再入してるよ


114 名前: 100 投稿日: 01/10/22 18:50
>> 113
もしや最初にスレを立てた伝説の?(@_@)

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

ちなみに0x1cでやると、Ctrl+Cで中断できるんですが
0x08でやると、Ctrl+Cで中断出来ません。


115 名前: デフォルトの名無しさん 投稿日: 01/10/22 19:18
_disable()で割り込みを禁止、
_enable()で割り込みを許可していると思われ。
CLI、STIは割り込みを禁止したり許可したりするアセンブラ命令

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

タイマ周期の変更はポート叩く方法しか知らん
しかもアセンブラ。


116 名前: 56 投稿日: 01/10/22 19:27
>>93
それは分かってますよ。
"a"と'a'の違いがわからないのです。


117 名前: デフォルトの名無しさん 投稿日: 01/10/22 19:31
'a'は整数。
"a"はポインタ。


118 名前: デフォルトの名無しさん 投稿日: 01/10/22 19:49
>>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 * 型ではないからです


119 名前: デフォルトの名無しさん 投稿日: 01/10/22 19:57
"..."はポインタじゃないし、'.'はchar型じゃないだろ。


120 名前: 56 投稿日: 01/10/22 20:21
>>118
main の中の1行目と2行目は内容同じだし、3行目と4行目も内容同じだと思うんですけど・・・。

>>119
え? え? そうなんですか?


121 名前: デフォルトの名無しさん 投稿日: 01/10/22 20:22
'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におまかせしている。


122 名前: デフォルトの名無しさん 投稿日: 01/10/22 20:25
>>121
微妙に痛いんですが。。。


123 名前: 56 投稿日: 01/10/22 20:29
>>121
おお!
なんと解りやすい解説!!

ありがとうございまいた <(_ _)>


124 名前: デフォルトの名無しさん 投稿日: 01/10/22 20:32
えと 'A' は 文字定数といいます
 文字定数は C 言語では int で C++では charになります


125 名前: デフォルトの名無しさん 投稿日: 01/10/22 20:54
>>122
同意。この説明で分かった気になってしまうと後がこわいかも。


126 名前: 56 投稿日: 01/10/22 20:57
オレやばいですか?


127 名前: デフォルトの名無しさん 投稿日: 01/10/22 20:58
>>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 である場合もある
(規格上はどちらも間違いではない)


128 名前: 121 投稿日: 01/10/22 21:00
>127
ありがとう。
教えるのは難しいなり。


129 名前: 56 投稿日: 01/10/22 21:15
お、オレ1人が取り残されてる・・・(泣

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

思わぬ所ってどこっすか?


130 名前: 56 投稿日: 01/10/22 21:18
>char *e = "a"; とやった場合、c == e である場合も c != e である場合もある
>(規格上はどちらも間違いではない)

これは感覚的に理解できます。


131 名前: デフォルトの名無しさん 投稿日: 01/10/22 21:50
strcpy(&(bMfh.bfType),"BM");

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

もーわかんない。


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

>bfTypeがchar[2]か[3]かわかんないので、
これは問題あると思うが。


133 名前: 127 投稿日: 01/10/22 22:04
>>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) { ... } は?
どちらになるかは不定なので、どちらかを期待してプログラミングしちゃいけない。

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

てな説明で分かってもらえますか?


134 名前: デフォルトの名無しさん 投稿日: 01/10/22 22:14
「実体」ってアドレス値のこと?


135 名前: デフォルトの名無しさん 投稿日: 01/10/22 22:13
>131
typedef struct tagBITMAPFILEHEADER { // bmfh
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;

これか? MSDNで見つかるだろ。


136 名前: デフォルトの名無しさん 投稿日: 01/10/22 22:17
>>134
そだね


137 名前: ビル・ジョブス 投稿日: 01/10/22 22:18
>>56
じゃー"a"はどこにあるのかな?「記憶クラス」って知ってるか?


138 名前: デフォルトの名無しさん 投稿日: 01/10/22 22:19
ありがと>>132


139 名前: デフォルトの名無しさん 投稿日: 01/10/22 22:23
strcpy(&(bMfh....),"BM")で
ちゃんと動いてるんだけど、考えると
strcpy(bMfh....,"BM")←つまり&がない。
でも正解なのが不思議だ・・・


140 名前: ビル・ジョブス 投稿日: 01/10/22 22:31
>>139
文字列はアドレスだから、違和感無いよ・・・


141 名前: デフォルトの名無しさん 投稿日: 01/10/22 22:33
構造体あれこれ。

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];


142 名前: 132 投稿日: 01/10/22 22:38
>>139
げげ。135を見るとbfTypeつーのは
char bfType[2]でもchar bfType[3]でもなくてWORD bfTypeじゃんよ。
早く言ってくれよオイ。聞いてないよ−。
それじゃ strcpy(bMfh.bfType, "BM") は間違い。"&"付きが正解。


143 名前: ビル・ジョブス 投稿日: 01/10/22 22:45
>>142
"&"付きでも基本的に間違い!NULLがセットされるでしょ。
しかーし、今回はアライメント合わせされてるので動作するな。
しかし、いかん、おれには書けない・・・。


144 名前: 100 投稿日: 01/10/22 22:56
>>115
>CLI、STIは割り込みを禁止したり許可したりするアセンブラ命令
アセンブラの割り込み許可/禁止って、EI/DIだと思ってました。
NECだけ?

>タイマ周期の変更はポート叩く方法しか知らん
>しかもアセンブラ。
よろしければ、ポートだけでも教えてもらえませんか?
アセンブラも多少ならわかりますので、見せて頂けたら幸いです。


145 名前: デフォルトの名無しさん 投稿日: 01/10/22 23:19
tell me


146 名前: デフォルトの名無しさん 投稿日: 01/10/22 23:30
正解は、
bf.bfType = MAKEWORD('M', 'B');


147 名前: デフォルトの名無しさん 投稿日: 01/10/22 23:36
>144
かなり昔のを発掘してきた。

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

DLしたら教えてくれ。即削除する。


148 名前: どしろ〜とちゃん 投稿日: 01/10/23 00:13
ほんと、ドシロートな質問ですまんす。

「構造体を直接引数で渡すな!ポインタで渡せや!」
って、結構プログラムやってるツレから言われたんですけど、
さっぱり意味がわかりません。
なんで直接渡しちゃだめなん?


149 名前: デフォルトの名無しさん 投稿日: 01/10/23 00:16
コピーする手間とメモリと時間がもったいないから。


150 名前: デフォルト名無しさん 投稿日: 01/10/23 00:23
typedef structで定義したのがあるんだけどそれをstructで定義したら使えないんですよね。
なんでっすか?


151 名前: デフォルトの名無しさん 投稿日: 01/10/23 00:24
>>150
その簡単な例を挙げてくれ


152 名前: デフォルトの名無しさん 投稿日: 01/10/23 00:25
とりあえずここで同じことを聞いてこい。
http://mentai.2ch.net/test/read.cgi/prog/1002039334/


153 名前: 56 投稿日: 01/10/23 00:34
>>137
知ってますけど、"a"はどこにあるのかは分かりません。


154 名前: 適当マン 投稿日: 01/10/23 00:35
>>148
ポインタで渡すべきシーンと実体で渡すべきシーンがある。
圧倒的に多いのは前者だが、後者もそれなりに使う。
どんな状況で使うかはロジック次第。


155 名前:   投稿日: 01/10/23 00:52
C++だったら「そっちで間接参照しろや!」って切り替えしたりできるんだけどねぇ。
まあそのツレもあえて「構造体を」って言ってるところがまだ青い。


156 名前: どしろ〜とちゃん 投稿日: 01/10/23 01:27
総合的に、なんとなく分かったような・・・。レスくれた方々、多謝デス!

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

しかし・・・>155サンの
>まあそのツレもあえて「構造体を」って言ってるところがまだ青い。
が、わかんないっす〜。なんで?


157 名前: デフォルトの名無しさん 投稿日: 01/10/23 03:20
>>143 意味不明。


158 名前: 100 投稿日: 01/10/23 09:03
>>147
ホストが落ちてるみたいなんで、少々お待ちを。


159 名前: 100 投稿日: 01/10/23 10:43
>>147
DL出来ました。
今、MASMが手元に無いんですが、何とか探してテストして見たいと思います。
どうもありがとうございます。


160 名前: デフォルトの名無しさん 投稿日: 01/10/23 11:35
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でのオーバーロードが解決できないと言われてしまいます。
もしかして根本的に勘違いしてるのでしょうか?


161 名前: デフォルトの名無しさん 投稿日: 01/10/23 13:50
C++は、よそで聞け!


162 名前: デフォルトの名無しさん 投稿日: 01/10/23 22:04
>>154
「実体で渡すべきシーン」とは?

>>155
もう少し詳しい解説きぼん。


163 名前: デフォルトの名無しさん 投稿日: 01/10/23 22:11
>>162
例外中立をぶちこわしたいとき


164 名前: デフォルトの名無しさん 投稿日: 01/10/23 22:57
>>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;
.
.
}

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

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

へたなことして自己満足していると最適化処理の足をひっぱるだけに
なっていることがある.


165 名前: デフォルトの名無しさん 投稿日: 01/10/23 23:00
>>164
実測で十分。


166 名前: 164 投稿日: 01/10/23 23:08
>>165
それで十分なら OK.
デブは腹時計が正確らししな。デブヲ。


167 名前: デフォルトの名無しさん 投稿日: 01/10/23 23:25
>>160
処理系は?

むしろクラス定義の後にセミコロンがないとか戻り値が宣言されてないとかで
文句いわれそうな気が。


168 名前: 適当マン 投稿日: 01/10/24 00:06
>>162
単にコピーしたいときとか、
いつまでも実体があることが保証されないとき。


169 名前: デフォルトの名無しさん 投稿日: 01/10/24 00:19
>>168
うーむ、ネタでしょうか.詳細キボンヌ


170 名前: デフォルトの名無しさん 投稿日: 01/10/24 01:00
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);
}


171 名前: デフォルトの名無しさん 投稿日: 01/10/24 01:04
%gで表示するとどうなる?


172 名前: 適当マン 投稿日: 01/10/24 01:11
>>169
違うスレッドから同じものをアクセスするときとか。


173 名前: デフォルトの名無しさん 投稿日: 01/10/24 01:22
>170
%lf にしてみて。
%f は float に反応するけど double には無反応みたい。


174 名前: デフォルトの名無しさん 投稿日: 01/10/24 01:26
>>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/


175 名前: デフォルトの名無しさん 投稿日: 01/10/24 01:29
>>160
おそらく、fooに戻り値が無いから、
コンストラクタと解釈されておかしくなってると思われ。


176 名前: デフォルトの名無しさん 投稿日: 01/10/24 03:12
>>172
その場合、グローバルでとってあるか、動的に確保した領域使うと思う.
前者ならプロセスの寿命で、後者ならポインタで管理になるよね.


177 名前: デフォルトの名無しさん 投稿日: 01/10/24 08:01
>173
ありがとうございました。
うまく動きました。


178 名前: 56 投稿日: 01/10/24 13:16
>>133
わかりやすい解説ありがとうございました!
>>133のレスに気付きました、遅くなって失礼しました。
了解です、理解しました♪
これで僕の>>56の疑問はかなり霧が晴れました。
レスくれたみなさん、ありがとうございました!!


179 名前: デフォルトの名無しさん 投稿日: 01/10/24 15:39
enum{ a, b, c }

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

#if a == b
#error a == b <- ここでエラー
#endif
何でこれエラーになるの?


180 名前: デフォルトの名無しさん 投稿日: 01/10/24 15:38
すいません、ひとつ教えてください。
ファイルの操作を行う中でファイルの先頭行と最終行を削除すると
いう機能を盛り込みたいのです。

fopenを追加モードで開いてポインタを先頭に持ってけばいいかなと
簡単に考えていたんですが、思ったようにうまくいきません。
先頭行、最終行ともに文字列があります。
どなたかよろしくお願いします。


181 名前: 信頼度3割 投稿日: 01/10/24 16:01
>>180
fgets で行単位に取得して、1行目と最終行だけファイリングしないようにする。


182 名前: デフォルトの名無しさん 投稿日: 01/10/24 16:03
>>179
定数じゃないぞ。enum を #define で書き直せ


183 名前: デフォルトの名無しさん 投稿日: 01/10/24 16:19
>>180
追加モードって、"a"の事?
これだと追加だけで、既存の部分の変更って、出来ないんじゃなかったかな。
多分、この場合は"r+"あたりじゃないかな?
ただし、ファイルがある事が前提。
テストしてないんで、違ってたらスマソ。


184 名前: デフォルトの名無しさん 投稿日: 01/10/24 18:53
>>183
"a"でも変更できるよ。単にfopen()後のファイルポインタがファイル末尾に
なってるだけなので、fseek()してから書き込めばいい。

でも>>180の答えとしては、>>181が一番いいと思う。


185 名前: デフォルトの名無しさん 投稿日: 01/10/24 19:20
>>179
enumはプリプロセッサでは見えない。
#ifの式の中の名前はすべてマクロと見なされて、
未定義のものは0として扱われる。


186 名前: 180 投稿日: 01/10/24 19:37
>>181>>183>>184
ありがとうございます。2行目から書きこんで最終行を書きこまないで
ファイルクローズってことですよね?
またなにか分からないことがあったらよろしくお願いします。


187 名前: デフォルトの名無しさん 投稿日: 01/10/24 20:51
gccでpop3クライアントを作る予定なのですが、どこかにいい
サンプルor解説はないでしょうか?


188 名前: sage 投稿日: 01/10/24 21:56
おい、だれか激しくつっこめよ。 >>184


189 名前: デフォルトの名無しさん 投稿日: 01/10/24 22:06
>>184
"a"でオープンして書き込みしたら、どこにシークしても元々あったデータは上書きできないよ。
そんないい加減なコードどっかで試したの?


190 名前: デフォルトの名無しさん 投稿日: 01/10/24 23:03
>>187
archie fetchmail


191 名前: 184 投稿日: 01/10/25 15:41
>>189
ガーン、なんてこった。
スマソ…。


192 名前: 180 投稿日: 01/10/25 20:11
やはりそうでしたか。
書きこめないのでおかしいなって思ってたんですよ(w


193 名前: デフォルトの名無しさん 投稿日: 01/10/26 01:42
charは1byteだって、ところでbyteってなに。
NULLポインタ? それってなによ。
sizeof 'a'が4になった。なんで1じゃないの。
const char * const p = "hoge"; どうなるってのさ。
なんでprintfの%fはdoubleでscanfの%fはfloatなのよ?
%cもちがうよ。なんで。


194 名前: デフォルトの名無しさん 投稿日: 01/10/26 01:46
君にはまずよいこのためのC言語という本を勧める。


195 名前: デフォルトの名無しさん 投稿日: 01/10/26 01:55
それより、COBOL とか、JAVAの入門書をすすめて。


196 名前: デフォルトの名無しさん 投稿日: 01/10/26 10:48
>>194
俺に聞けって、結局本買えってことですか。

それにしても、聞いたことない本ですな。こんなの勧める
奴ってたいていヘタレってのが相場なんじゃない。


197 名前: デフォルトの名無しさん 投稿日: 01/10/26 10:54
>>196
> 俺に聞けって、結局本買えってことですか。
程度による。さすがに「日本語が読み書きできます」とか「バイトの意味がわかっている」のは
前提でしょ。

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

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

> なんでprintfの%fはdoubleでscanfの%fはfloatなのよ?
これは引数の格上げ規則のせい。「格上げ」で検索してみましょう。


198 名前: ぷーち 投稿日: 01/10/26 12:14
C言語に、線引きや円を描く「関数」てあるの?


199 名前: デフォルトの名無しさん 投稿日: 01/10/26 12:26
>>198 標準ライブラリにはない。
環境依存のライブラリならフリー商用いろいろある。


200 名前:   投稿日: 01/10/26 12:34
>ところでbyteってなに。
などという質問をしてくる奴にはVBかHSPお奨めします。
君にはC言語ですら100年早いよ。>>193


201 名前: ぷーち 投稿日: 01/10/26 12:44
>199
レスどうもです。


202 名前: ジーコ 投稿日: 01/10/26 13:38
ある年月日にx日足した年月日を出力したいんですが、
どうしたらいいんでしょうか。


203 名前: デフォルトの名無しさん 投稿日: 01/10/26 13:46
>>202
time_t


204 名前: デフォルトの名無しさん 投稿日: 01/10/26 13:49
年月日→mktime()→time_t→gmtime()→年月日


205 名前: 急ぎMAN 投稿日: 01/10/26 14:37
全角スペースを判別する関数はあるのでしょうか?
教えてください


206 名前: デフォルトの名無しさん 投稿日: 01/10/26 14:48
>>205
strcmp(s," ")


207 名前: 急ぎMAN 投稿日: 01/10/26 14:50
>>206
サンクス
助かりましたm(..)m


208 名前: デフォルトの名無しさん 投稿日: 01/10/26 16:06
文字リテラルがchar型でなくてint型?
だったらなんでwchar_t型とかL'a'とかあるんですか?

byteを知らなければCで組むの100年早いですか?
ごたくはいいんでばっちり説明してくださいよ。
できるなら。


209 名前: デフォルトの名無しさん 投稿日: 01/10/26 16:23
>>208
これ以上こいつに教えないでください。
わざとあおって、答えを引き出そうとする手です。


210 名前: デフォルトの名無しさん 投稿日: 01/10/26 16:43
>>209
少なくとも君には何も聞かないよ。ま、答えれられるとも
思えないけど。


211 名前: デフォルトの名無しさん 投稿日: 01/10/26 16:51
>>208
charはintに収まるがwchar_tはその限りでない。


212 名前: sage 投稿日: 01/10/26 16:51
>>208
昔々、C言語に wchar_t や L'a' がまだ存在してなかった時代。
そのころ 'a' が int だったので、
過去との互換性のために今でも 'a' が int なのです。

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


213 名前: 208 投稿日: 01/10/26 16:56
sage書くとこ間違えた・・・鬱。

ついでに212に追伸。
そのころなぜ 'a' が int だったか。
それは 'a' と書くのと、単に 97 と書くのが等価だったからかな。


214 名前: 横槍 投稿日: 01/10/26 17:49
>>213 今は違うのか?


215 名前: デフォルトの名無しさん 投稿日: 01/10/26 18:27
>>214
そのころそうだったので、過去との互換性のために今でも 'a' が int なのです。と書きましたが?


216 名前: デフォルトの名無しさん 投稿日: 01/10/26 18:54
本当に'a'がintっていうのなら、なんで
int i = '\xff'; これが-1なのさ。charなら
別におかしくないけど。


217 名前: これってC言語ですか??? 投稿日: 01/10/26 19:00
<!-- 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);


218 名前: デフォルトの名無しさん 投稿日: 01/10/26 19:06
>charはintに収まるがwchar_tはその限りでない。

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

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

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


219 名前: デフォルトの名無しさん 投稿日: 01/10/26 19:10
>>218
信じるかどうかまで面倒みきれねえよ。
規格上、「charはintを内包する」とは決められているが、wchar_tとintに関して
直接の関係は定義されてないってだけの話だ。


220 名前: デフォルトの名無しさん 投稿日: 01/10/26 19:11
>>217
C言語です。勉強すれば読めると思うので本でも買って頑張ってください。


221 名前: デフォルトの名無しさん 投稿日: 01/10/26 19:13
>>217
LANGUAGE="JavaScript"


222 名前: デフォルトの名無しさん 投稿日: 01/10/26 19:48
>>219
内包の意味がよくわかんない。
intはcharを内包する、なら分るんだけど。


223 名前: デフォルトの名無しさん 投稿日: 01/10/26 19:52
>>219
>規格上、「charはintを内包する」とは決められている

俺にはchar=1byteってのとshort int <= int <= long intって
ことしか決まってないように思えるが。
本当に規格できまってるなら100%信じるよ。


224 名前: デフォルトの名無しさん 投稿日: 01/10/26 20:10
>>223
くだらねぇ、ホント、くだらねぇ。
そこまで読めるなら 2.3定数 も読めよ。

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

intかどうかは処理系依存って言うことだろ。


225 名前: デフォルトの名無しさん 投稿日: 01/10/26 20:42
>>216
たぶん '\xff' は -1 と等価なんでわ?っでもこの辺の事情は詳しく知りません。いま手元に詳しい資料ないし。

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

「byte はデータ量を表す単位のひとつ」
ここまでが定義として主張したいことで、
「一般的に8個の bit から成ります」
これはおっしゃる通り「一般的」な「一つの例」です。


226 名前: デフォルトの名無しさん 投稿日: 01/10/26 23:48
くだらないっていうぐらなら引っ込んでればいいのに。

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

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

int c = i - '0'

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

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

それはそうなんだけどさ。もっと厳密に定義できてもいいん
じゃない。


227 名前: デフォルトの名無しさん 投稿日: 01/10/26 23:55
> それは根本的に間違ってるんじゃない。たんに
そうなのか?
文字リテラルがint型である、という記述は一切見当たらなかったが。


228 名前: デフォルトの名無しさん 投稿日: 01/10/27 00:00
見つけた中で一番良さげなバイトの定義。これでどう。

The smallest addressable unit of digital storage larger than a bit and smaller than a word. A byte now consists of eight bits.


229 名前: デフォルトの名無しさん 投稿日: 01/10/27 00:04
私自身が確認したわけじゃないが、文字定数は int であると
「JIS X 3010 6.1.3.4 文字定数、意味規則」
に書いてあるらしい。


230 名前: デフォルトの名無しさん 投稿日: 01/10/27 00:30
>>228
これいいですね。でも「アドレス可能な最小単位」って
定義だけじゃなぜだめなんだろう。


231 名前: デフォルトの名無しさん 投稿日: 01/10/27 00:40
すいません。全くの初心者です。質問させてくださ。
LSI C-86 Ver 3.30c 試食版 を使ってるんですが
その後、パソコンの動作が異常に遅くなるんですが、
何故ですか?再起動以外に直す方法はないでしょうか?


232 名前: デフォルトの名無しさん 投稿日: 01/10/27 01:05
質問させて下さい。
EBCDIKとパックが混合になっているデータをそれぞれに分けたい
のですが全然うまくいかずに困っています。
良い方法がありましたらどうかアドバイスお願いします。


233 名前: デフォルトの名無しさん 投稿日: 01/10/27 01:05
4bitマイコンも有るぞ


234 名前: デフォルトの名無しさん 投稿日: 01/10/27 02:46
中置表記法で書いた式を後置表記法に変換するプログラムがわかりません。
教えてください。


235 名前: デフォルトの名無しさん 投稿日: 01/10/27 03:03
>>234
構文木になっているのなら、
木を深さ優先で再帰的にたどって、
再帰から帰り際にノードのラベルを出力すれば良い。

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

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

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

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

カッコや単項演算子の処理は自分で考えれ。


236 名前: 235 投稿日: 01/10/27 03:04
あー、字下げ狂った。

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


237 名前: デフォルトの名無しさん 投稿日: 01/10/27 10:24
>231
私も試食版を使っているが、なんともないぞ。
(OSはWindows98)

あなたのパソ自体に問題があると思われ。


238 名前: デフォルトの名無しさん 投稿日: 01/10/28 01:53
typedef int Myfunc(const char *, const struct stat *, int );
typedef文なのですが、Myfuncは
「char型と構造体statとint型を引数にとり、int型を返す関数へのポインタ」
でよろしいのでしょうか?


239 名前: デフォルトの名無しさん 投稿日: 01/10/28 02:00
typedef int (*Myfunc)(const char *, const struct stat *, int );
なら、まあ、そういうことだ。


240 名前: デフォルトの名無しさん 投稿日: 01/10/28 02:03
>>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;

と書けるワケ。


241 名前: 名無し~3.EXE 投稿日: 01/10/28 02:05
>>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の範囲を表現できない。


242 名前: デフォルトの名無しさん 投稿日: 01/10/28 02:44
>sizeof(char) == 1
>sizeof(short int) >= 1
>なので符号さえ一致していれば、intにcharは収まる。

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

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

1byte == 8bitとはどこにも触れられていない


243 名前: デフォルトの名無しさん 投稿日: 01/10/28 02:56
・1バイトは, 多くの場合 8ビットと等価で, この場合はオクテットと呼ぶ.
8ビットの場合は 1単位で 256値(2 の 8乗)の情報を扱える.
・"多くの場合" というのは, 正確には 1バイト = 8ビットとは決まってい
ないためである. 7ビットでもバイトであるし, 汎用機の中には 9ビット
長をバイトとして扱うものがある. また Unicode 文字セットのような 16
ビット固定長のものでは, 1単位 16ビットを 1バイトと呼ぶことがある.
・厳密に 8ビット単位を重視する場合には, "オクテット" という単位を用
いる.
ちなみに4ビットはニブルと言うよ。


244 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:04
>>242
>ただし、charとshortの関連についてはどこにも触れられてないはず。

新ANSI C言語辞典という本には、
char≦short≦int と書いてあるよ。
(この本が間違ってるのかな?)


245 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:24
>>244
その本おかしいんじゃない?
char = 文字型
short/int/long = 整数型
関連があるほうがおかしいんだが


246 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:28
>>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.


247 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:30
>>245
C言語だと char も整数型ですがな。


248 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:30
strcasecmp
ってなに?


249 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:31
>>245
Cのcharは整数型。
(こんな基本的なコトを説明させんなよ)


250 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:32
>>245
1バイトの整数=char


251 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:33
>>245
つっこまれすぎ(藁


252 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:36
いやそれと同じことを通信系のCの経験3年とやらの中途採用に
教えたばかりだ。

世の中、あんなもんでも仕事は出来てたらしい。


253 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:37
速攻でコンだけのツッコミが。
意外と人がいたんだな。


254 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:40
>>248
大文字小文字を区別しない strcmp。ANSI C 標準には入ってないけど FreeBSD の libc あたりには
入ってた気がする。


255 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:42
>>254
ありがとう。
知らなかったよ。


256 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:43
>250
その1バイトの定義が処理系によって異なるの。
intもそうだろう?


257 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:48
>>256
なにが言いたいの?
Cだと、cahrは1バイトって定義されてんだけど?


258 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:50
微妙に笑える。


259 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:51
hは無声音で、読みは「かー」でよろしいか?


260 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:51
>>256
ひょっとして256=245?
バイトの定義はあるよ。
addressable unit of data storage large enough to hold any
member of the basic character set of the execution
environment
ビット数は決まってないけどね。


261 名前: デフォルトの名無しさん 投稿日: 01/10/28 03:54
>>256
>その1バイトの定義が処理系によって異なるの。
intはそうだけど、charは違うだろ


262 名前: デフォルトの名無しさん 投稿日: 01/10/28 04:01
>>261
sizeof はどの処理系でも同じだけど、
CHAR_BITは、決まってないね。


263 名前: デフォルトの名無しさん 投稿日: 01/10/28 04:02
1BYTE = 8bitというのは定義されてなくて、アスキー(キャラクタコード)
で表す最小単位がcharでないのかい?
実際アスキーはアルファベットまで7bitだし。
ただCPUのデータは2のn剰単位で扱うので8bit=1BYTEになると。


264 名前: デフォルトの名無しさん 投稿日: 01/10/28 04:06
>>255
*BSD の libc は、微妙に便利な文字列操作関数がそろってる。

snprintf(), asprintf() (これはGNU 由来だったかも), strlcpy() などなど。暇があったら、いちど
ttp://www.tac.eu.org/cgi-bin/man-cgi このあたりを読んでみると面白いかと(もちろん、PC 一
台用意して NetBSD インストールしても良いけど)。


265 名前: デフォルトの名無しさん 投稿日: 01/10/28 04:05
>>263
実物は見たこと無いけど、1バイトが7ビットや9ビットのマシンも
あるらしいよ。


266 名前: デフォルトの名無しさん 投稿日: 01/10/28 04:11
>>265
同意。
昔の大型機は6ビットだったり。
DSPだと32ビット単位でしかアドレス付いてなかったり。

8ビットとかASCIIとか気にしない方がいいよ。


267 名前: デフォルトの名無しさん 投稿日: 01/10/28 04:13
>>263
> CPUのデータは2のn剰単位で扱うので8bit=1BYTEになると。
7bit だって、あらわせる文字は 2^7 ですって。

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

必ずしも 4, 8, 16, 32 が特別な数値というわけでは、ありません。


268 名前: デフォルトの名無しさん 投稿日: 01/10/28 04:24
>>267
243=256=263は俺なんだけど。まあいいか。
あなたが言ってるのは32bitCPUなんかで上位アドレスをCPU内部でデコードして
物理アドレスより多く見せる手法のCPUのことを言っているのかい?
その場合もバスのデータ幅は最小8bitでしょう。


269 名前: デフォルトの名無しさん 投稿日: 01/10/28 04:32
実際SH3などはアドレスの上位3ビットをイメージで使っているな。
それでもバスデータの単位は8bit。


270 名前: デフォルトの名無しさん 投稿日: 01/10/28 04:44
>>268
267は何だかデムパっぽくて良くワカランが...
12bit CPUとか(東芝TLCS-12, Intersilの何とか)
36bit CPUとかもあるってば。


271 名前: デフォルトの名無しさん 投稿日: 01/10/28 04:54
>267
アスキーコードのdellは0x7fですぞ。きっちり7bitで収まってますぞ。


272 名前: デフォルトの名無しさん 投稿日: 01/10/28 05:02
>>271
そりゃ分かってるけど
> 実際アスキーはアルファベットまで7bitだし。
> ただCPUのデータは2のn剰単位で扱うので8bit=1BYTEになると。
この文章のつながりが謎だったから、突っ込んだだけ。別に ALU の入出力を 2^n bit にする
のは必然じゃないし。


273 名前: デフォルトの名無しさん 投稿日: 01/10/28 05:03
charが7bitだとEUC使えないよね UTF8はUTF7に?
広いのはいいけど狭いのは使えないよね


274 名前: デフォルトの名無しさん 投稿日: 01/10/28 10:51
宣言で

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

としたらコンパイラが怒ってコンパイルしてくれませんでした。
なんでじゃ?


275 名前: デフォルトの名無しさん 投稿日: 01/10/28 10:53
UNIXのCではcharで1文字表すのにEUCを使っているとでも言うのでしゅか?
ちなみにJAVAでは文字セットとしてunicodeを用いるので16bitですにょ。


276 名前: 241 投稿日: 01/10/28 13:03
ふむ、通じなかったか。

>>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準拠だ。


277 名前: デフォルトの名無しさん 投稿日: 01/10/28 13:11
>>275
> UNIXのCではcharで1文字表すのにEUCを使っているとでも言うのでしゅか?
プログラミング言語Cを読んで、出直し。


278 名前: デフォルトの名無しさん 投稿日: 01/10/28 14:11
>>274
セミコロンつけ忘れたんでしょ。


279 名前: デフォルトの名無しさん 投稿日: 01/10/28 14:17
C言語は文字セットとしてASCIIを用いるのに対しJAVAではunicodeを用いる。
unicodeもECUもシフトJISも下位の7bitはASCIIとコードは変わらない。(つまりDELまで)
よって1byte=8bitのプロセッサでは、Cのcharは1ByteでJAVAのcharは2byte
になる。
昔からあるC言語はアルファベットだけを定義すればよかったんだな。


280 名前: デフォルトの名無しさん 投稿日: 01/10/28 14:57
>>279
文字セットと文字コードを混同してる。出直し。


281 名前: デフォルトの名無しさん 投稿日: 01/10/28 22:39
>280
おまえ全てを説明してみろ。


282 名前: デフォルトの名無しさん 投稿日: 01/10/28 22:40
>>276 が成立するなら、符号が一致するかぎりcharが保持する値はshort intが表現できる範囲に収まる。
符合が一致するなら。
符合が一致するという保証は?

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

こういう処理系も存在できる。


283 名前: デフォルトの名無しさん 投稿日: 01/10/28 22:41
char = 1byte = 64bit


284 名前: デフォルトの名無しさん 投稿日: 01/10/28 23:22
>1byte = 64bit
ぉぃ。どういうアーキテクチャの CPU だ。


285 名前: 241 投稿日: 01/10/28 23:59
>>282
> 1byte = 64bit
> short = 16bit
> int=long=32bit
>
> こういう処理系も存在できる。
sizeof(char)は1。
この処理系のsizeof(short)は0.25なのか?
最少アクセス単位のcharよりも小さいデータ型というのが存在したら規格違反じゃないのか?
その辺どうよ。


286 名前: デフォルトの名無しさん 投稿日: 01/10/29 00:03
C言語の有名なライブラリってあるのですか?
あったら紹介してください。
文字列操作でもグラフィックでもいいです。


287 名前: デフォルトの名無しさん 投稿日: 01/10/29 00:18
>>285
charが最小アクセス単位であると定義されてる個所は?


288 名前: デフォルトの名無しさん 投稿日: 01/10/29 00:35
>>287
sizeof(char) == 1 で明確だと思うが。


289 名前: デフォルトの名無しさん 投稿日: 01/10/29 01:24
>>282 はアホ。
「符号が一致するなら」の意味も分かってない。
符合ってなんだよ。

  こういう処理系も存在できる。
できねーよ。


290 名前: デフォルトの名無しさん 投稿日: 01/10/29 01:25
>>286
libc


291 名前: デフォルトの名無しさん 投稿日: 01/10/29 02:08
>>288,282
おまえ全然説明になってない。
あんたの言うcharは何を定義するか答えろ。
それと'a'のバイナリコードはどうなるかも知らないのか?
たとえばだな

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

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




それは単に標準ライブラリの関数仕様だろうが。


292 名前: デフォルトの名無しさん 投稿日: 01/10/29 02:16
>>291
とりあえずスレの趣旨に沿った話題だから上げるぞ。

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

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

char は C の整数型のひとつで sizeof(char) == 1 と「定義」されている。sizeof は関数ではなく、
C の予約語。


293 名前: デフォルトの名無しさん 投稿日: 01/10/29 02:17
putchar((int)a)→putchar((int)x)


294 名前: デフォルトの名無しさん 投稿日: 01/10/29 02:32
>sizeof は関数ではなく、C の予約語。
それをいうなら演算子でしょ


295 名前: デフォルトの名無しさん 投稿日: 01/10/29 02:39
このスレで文字定数はint型だっていったやつがいたけど、だったらなんで
int a = 0xff と int b = '\xff' がちがう値になるのだ?


296 名前: デフォルトの名無しさん 投稿日: 01/10/29 02:41
>>294
プログラミング言語C A2.4 には予約語にも含めてあるけど。


297 名前: デフォルトの名無しさん 投稿日: 01/10/29 02:45
>>295
'\xff' は (int)(char)0xff と同じだから。char が符号付の場合には符号拡張される。


298 名前: デフォルトの名無しさん 投稿日: 01/10/29 02:46
>>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 .

わかった?


299 名前: デフォルトの名無しさん 投稿日: 01/10/29 02:59
>>294
より狭い範囲の方がより正確ということでは。


300 名前: 299 投稿日: 01/10/29 02:59
もとい
s/294/296/


301 名前: デフォルトの名無しさん 投稿日: 01/10/29 03:44
>>298
もともと質問した人は、規格(それってC99?)できまってることぐらいは
知ってると思うよ。俺もCは初心者だけど、それぐらいは知ってる。問題
は、sizeof 'a'は1を返すのが自然だし、事実C++だと1だよね。じゃあ
なんでCはint型なのか? それって規格のバグじゃないとか思うんだけど。


302 名前: デフォルトの名無しさん 投稿日: 01/10/29 03:50
http://www.bohyoh.com/CandCPP/FAQ/FAQ00005.html


303 名前: デフォルトの名無しさん 投稿日: 01/10/29 04:22
>298
あんたの言っていることはいつも同じ。
その狭い視野ではC言語のもつポテンシャルを十分引き出せないと思われ。


304 名前: デフォルトの名無しさん 投稿日: 01/10/29 04:31
>>301
関数プロトタイプ登場以前から、
char, shortは全てintに格上げしてから計算されていた。
同様にfloatはdoubleに格上げされていた。
charやfloatを(格上げせずに)関数に渡す方法なんて無かった。

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

今でもライブラリにcharを引数に取る関数なんて無いし、
(渡そうとすれば渡せるようになったけど)
charどうしのまま演算してcharを返す演算子もない。


305 名前: デフォルトの名無しさん 投稿日: 01/10/29 04:33
>>303
意味不明。
あんたが勝手に規格の解釈を変えれば、
C言語のポテンシャルを引き出せるようになるのか?(藁


306 名前: 289 投稿日: 01/10/29 04:54
>>305
ageんなよ。

245も282も291も295もアホ。
ひょっとしてこのうち3つくらいは同一人物か。


307 名前: デフォルトの名無しさん 投稿日: 01/10/29 05:05
>>303
規格を読むたびに解釈が変わったら困ると思うが。

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

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


308 名前: デフォルトの名無しさん 投稿日: 01/10/29 05:21
>>301

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

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

最近のCPUの命令セットを考えると
かえってCの方が合理的かも知れん。
演算は32bit単位しかなかったりするから。


309 名前: つじののみ 投稿日: 01/10/29 06:01
>>275
日本語EUCもシフトJISも日本語を示すために8ビット目を
使うからCHAR_BIT が 7 だと困るんれすよ。
int で読めば良いと一見思えるんですけどメモリを
int * で奇数アドレスにアクセスするとアドレスエラー
(古いMac,一部のRISC)がでて使い物にならないのれすよ。
エスケープシーケンスを使うと str* 関数やそのほかの
文字列操作もののみのすきなスパゲッティプログラムに
なるれすよ。


310 名前: デフォルトの名無しさん 投稿日: 01/10/29 07:22
>>285 sizeof(short)は0.25なのか?

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

くだらない質問で申し訳ないですが


311 名前: デフォルトの名無しさん 投稿日: 01/10/29 11:36
>>309
論点を理解しないやつだな。
8と決めてかかるなっつってんだよ。
9ビットならいいんだろ?

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

sizeofの返す値の方はsize_t(符号無しの整数型)だ。


312 名前: デフォルトの名無しさん 投稿日: 01/10/29 13:29
int main( int argc, char *argv[] )
{
 if( argc == 1 )
 {
  argc = 2;
  argv[1] = ".";
 }

 return 0;
}

ってのはあり?
mainの引数をいじったことはないのでなにか不安。
(コンパイラはなにも言わなかったけど)


313 名前: デフォルトの名無しさん 投稿日: 01/10/29 13:36
ぎりぎりセーフかな。
argcが1なら、
argv[1]にはNULLが入ってることが保証されてる。
argv[2]に書き込むと何が起きるか保証はない。


314 名前: デフォルトの名無しさん 投稿日: 01/10/29 13:42
ではmallocを使って argv[1] と argv[2]
のメモリ(ですか?)を確保すると安全ということでしょうか?


315 名前: デフォルトの名無しさん 投稿日: 01/10/29 13:51
>>314
argvを、だろ。
argv = (char **)malloc(sizeof(char *) * 好きなだけ);


316 名前: デフォルトの名無しさん 投稿日: 01/10/29 14:11
正直mallocって使ったことないので助かります。
ありがとうございました。


317 名前: デフォルトの名無しさん 投稿日: 01/10/29 17:55
できるかぎり大きな素数を探すプログラムを作ってください。多倍長演算も自作で。お願いします。


318 名前: デフォルトの名無しさん 投稿日: 01/10/29 18:01
>>317
自分で作れ。


319 名前: デフォルトの名無しさん 投稿日: 01/10/29 19:59
できるかぎり大きな素数を表示するプログラム。
int main()
{
while(1)
fputc('1',stdout);
}


320 名前: デフォルトの名無しさん 投稿日: 01/10/29 20:18
>>317
http://pc.2ch.net/test/read.cgi/tech/993457354/l50


321 名前: デフォルトの名無しさん 投稿日: 01/10/29 20:37
>>319
それ、ホントに素数なの?

1 を並べた数だと

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

というわけで、素数でない数も含まれている。これを続けていったときに、ある一定の桁数以上 1 を並べたときに、
その数が常に素数となるかは怪しい気がするが。


322 名前: デフォルトの名無しさん 投稿日: 01/10/29 20:50
>>321
1111 素数ではない(11*101)
11111 素数ではない(41*271)

というわけで素数じゃないことの方が多そうな予感。


323 名前: デフォルトの名無しさん 投稿日: 01/10/29 22:13
>>321-322
少なくとも、桁数が素数じゃなかったら当然 非素数になるなぁ。
でも「一定範囲より先は全部合成数」ってことは無いと思う、なんとなく…。


324 名前: デフォルトの名無しさん 投稿日: 01/10/29 22:34
#define MAX 0xffffffff
void main()
{
int i,n;
for(i=0;i<=MAX;i++){
n = rand() % 10;
printf("%d",i);
}
printf("7");
}


325 名前: デフォルトの名無しさん 投稿日: 01/10/29 22:35
#define MAX 0xffffffff
void main()
{
int i,n;
for(i=0;i<=MAX;i++){
n = rand() % 10;
printf("%d",n);
}
printf("7");
}


326 名前: デフォルトの名無しさん 投稿日: 01/10/29 23:00
林晴比古の本は買わない方がいいって、本当ですか?


327 名前: デフォルトの名無しさん 投稿日: 01/10/29 23:36
C言語ってどの程度の事が出来るんですか?


328 名前: 意味がわかりません 投稿日: 01/10/29 23:45
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;


329 名前: デフォルトの名無しさん 投稿日: 01/10/30 00:07
>>319 のプログラムが表示する数のうち、
素数であるものには、上限があるか?
むずかしひ。


330 名前: 329 投稿日: 01/10/30 00:13
あ、ひょっとして >>319 の出力は2進数か?
だったらメルセンヌ素数か...


331 名前: デフォルトの名無しさん 投稿日: 01/10/30 01:14
>304
昔からそういうものだった。ってあんた開き直ってどうする。


332 名前: デフォルトの名無しさん 投稿日: 01/10/30 01:35
>>331
単に事実を述べてるだけだろ。


333 名前: デフォルトの名無しさん 投稿日: 01/10/30 03:50
>>307
いやね、君のように「規格できまってるからです」でちゃんちゃん
みたいな奴ばっかじゃないんだよ。

称号とかわけのわかんないこと言ってるヒマがあったら、ちったあ
自分で考えたらどうだい。ま、あたらしい概念とか知見を生み出せ
るような頭脳の持ち主じゃないようだが。


334 名前: デフォルトの名無しさん 投稿日: 01/10/30 04:01
>>333
なんか、どっかの遺恨を持ち込んでるみたいだが…

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

『文字定数はint型』というのは、新たな知見を持ち込む余地がないと
思うんだが。


335 名前: デフォルトの名無しさん 投稿日: 01/10/30 04:02
>>333
UNIX V6 の頃の C コンパイラ、Portable C Compiler と UNIX V6 のソースコードは
読んでいて、C の背景はそれなりに理解してるつもりですけど。

何を言いたいのか良く分かりませんが、C の型に関する規則で何か不満があるとい
う主張でしょうか?


336 名前: デフォルトの名無しさん 投稿日: 01/10/30 04:16
>>326
>林晴比古の本は買わない方がいいって、本当ですか?

本当です。


337 名前: デフォルトの名無しさん 投稿日: 01/10/30 08:41
>>326
>林晴比古の本は買わない方がいいって、本当ですか?

ウソです。


338 名前: 326 投稿日: 01/10/30 09:05
うをぉぉぉぉ!
誰を信じればいいのじゃーーー!!???


339 名前: デフォルトの名無しさん 投稿日: 01/10/30 09:15
>>338
1995年以降に出版された本ならいいよ。
それ以前なら、パスして。


340 名前: デフォルトの名無しさん 投稿日: 01/10/30 12:32
>>335
333 は片岡だと思われ。基地外を相手にしては
いけない。


341 名前: デフォルトの名無しさん 投稿日: 01/10/30 13:42
しつもーん.
ファイルのリストを作るようなプログラムを書こうと思い.
プログラムを組んでました.
system()関数をつかってdirコマンドで作ろうと思ったんですが.
うまくいきません.
標準出力をscanf関数かget関数等で得ることはできるのでしょうか?
もしくは,system関数を使わずにdirコマンドみたいなことができたら教えて欲しいのですが.


342 名前: デフォルトの名無しさん 投稿日: 01/10/30 13:47
>>341
see opendir readdir


343 名前: デフォルトの名無しさん 投稿日: 01/10/30 13:47
>>341
>標準出力をscanf関数かget関数等で得ることはできるのでしょうか?

こっちはpopen


344 名前: デフォルトの名無しさん 投稿日: 01/10/30 13:50
>>341
MS系 なら findfirst,findnext


345 名前: デフォルトの名無しさん 投稿日: 01/10/30 13:51
>>341
system("command.com /c dir");


346 名前: デフォルトの名無しさん 投稿日: 01/10/30 13:51
>>341
Cの標準関数にディレクトリを直接扱えるものはない。
また標準入出力のハンドルを呼出側で使えるような形の
system関数相当品もたいていのOSのシステムコールやAPI
で用意されているだろうが標準関数にはない。
いずれにしろOSごとのAPIやシステムコールを調べれ。


347 名前: デフォルトの名無しさん 投稿日: 01/10/30 14:14
>>346
標準ライブラリにも無いの?
信じられん。


348 名前: 341 投稿日: 01/10/30 14:20
んー,ヒントもらったんでがんばってみます.
でも,簡単に作れると思ったけど結構たいへんそうだな.
これ.


349 名前: デフォルトの名無しさん 投稿日: 01/10/30 14:34
>>347
CP/MとかDOS-1.xとかディレクトリ構造なかったしな。
Cのライブラリが標準化された頃は
階層ディレクトリ構造もUNIX以外では
あまり一般化してなかったんじゃないか?
(汎用機はまたぜんぜん違うらしいし)


350 名前: デフォルトの名無しさん 投稿日: 01/10/30 15:32
あのう、C++でダイアログボックスをだすのって、
どうするんでしょう?


351 名前: デフォルトの名無しさん 投稿日: 01/10/30 15:38
開発環境などもう少し詳しく書かないとどうにも答えようがない。


352 名前: デフォルトの名無しさん 投稿日: 01/10/30 17:26
>>350
念力。


353 名前: デフォルトの名無しさん 投稿日: 01/10/30 21:22
>>350
C++ ならスレ違い。

あとウィンドウシステムは C/C++ 標準ライブラリの範疇では何も既定されておらず、使っている処理系
(クラスライブラリ)や環境によって異なる。VC 使ってるなら VC スレで、gcc と KDE なら UNIX 板に
行って KDE スレで聞きましょう。


354 名前: デフォルトの名無しさん 投稿日: 01/10/30 21:52
>>353
ncursesはどこで聞けばいい?
Linux板?


355 名前: デフォルトの名無しさん 投稿日: 01/10/30 21:54
>>354
UNIX 板か Linux 板、好きなほうで聞くよろし。man ncurses とか言われそうだが。


356 名前: デフォルトの名無しさん 投稿日: 01/10/30 22:08
void fooclass::dialog()
{
printf("+=================+\n");
printf("| 一般保護違反です |\n");
printf("|    OK    |\n");
printf("+=================+\n");
}


357 名前: デフォルトの名無しさん 投稿日: 01/10/31 00:49
void fooclass::dialog()
{
printf("+=================+\n");
printf("| 未成年者保護条例違反です |\n");
printf("|    OK    |\n");
printf("+=================+\n");
}


358 名前: 139 投稿日: 01/10/31 01:55
教えてください!キーボードからアドレス(番地)を入力し、
その領域の内容を表示するのに
#include<stdio.h>
void main(void)
{
short *p;
scanf("%d",&p);
printf ("%d\n",*p);

}
だと実行すると不正な処理とでます
どこがいけないのでしょう?


359 名前: デフォルトの名無しさん 投稿日: 01/10/31 01:57
>>358
お前の頭がいけない


360 名前: デフォルトの名無しさん 投稿日: 01/10/31 02:03
>>358
そのプログラムの目的がいけない。
入力したアドレスが絶対に存在するかどうかどうやって調べるのだ?


361 名前: 139 投稿日: 01/10/31 02:07
ポインタの勉強でこんなプログラムをつくれと
あと入力は100以下だと


362 名前: 139 投稿日: 01/10/31 02:20
そもそも*Pを宣言した時点でポインタ変数Pのアドレスはきまってしまいますよね?
書き換えることなんてできるのかな?うまい方法があるのかな?


363 名前: デフォルトの名無しさん 投稿日: 01/10/31 02:52
>>358
やっぱOSが介在している環境ではアドレス直接指定は拒否されるんじゃないのかな?
OSや常駐プログラムが常時メモリ上を走っていて、それらが衝突しないようにメモリ管理してるのがOSだからね。
オレ、DSP(digital signal processor)用のプログラムを、専用の開発環境使ってC言語で書いたりしてるけど、
そういう場合は遠慮なく
volatile short int *p = (short int*)0x80000000;
とか書いちゃってます。
もちろんエラーも出ません。


364 名前: デフォルトの名無しさん 投稿日: 01/10/31 03:03
多倍長演算がわかりません。ほんとに教えてください。
できるかぎり速いのがいいです。FFTとか。
お願いします。


365 名前: デフォルトの名無しさん 投稿日: 01/10/31 03:12
>>361
100以下でも何でも、その課題は間違っている。

>>362
そういう問題ではない(その理解もだいぶ間違っているが


366 名前: 139 投稿日: 01/10/31 03:16
>>363
有難うございます


367 名前: 363 投稿日: 01/10/31 03:20
パソコンのメモリの中身を覗いてみたくなる気持ちは理解できる(w


368 名前: デフォルトの名無しさん 投稿日: 01/10/31 06:31
>>361 DOS でコンパイル&実行したら動くんじゃない?
>>362 全然間違い。


369 名前: デフォルトの名無しさん 投稿日: 01/10/31 11:26
char name[11];

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

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

(いよいよCプログラミング専門過程を読む段階になってきた予感……)


370 名前: 名無し 投稿日: 01/10/31 11:32
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]


371 名前: デフォルトの名無しさん 投稿日: 01/10/31 11:32
"10文字以内"と言いつつ10文字以上入力されても検出できない
プログラムを書くバカがいます。


372 名前: . 投稿日: 01/10/31 11:33
そもそもscanfを使う事自体間違い


373 名前: デフォルトの名無しさん 投稿日: 01/10/31 11:42
scanf 系で実現するにはどうすればよいのですか。getchar とか
fgets を使った方法しか思い浮かびません。


374 名前: デフォルトの名無しさん 投稿日: 01/10/31 11:45
>>371
10文字目を検出してそれ以降は入力させない
ってことはできるんですか?


375 名前: . 投稿日: 01/10/31 11:46
一文字ずつキーコードを拾って判断する入力ルーチン作れ


376 名前: デフォルトの名無しさん 投稿日: 01/10/31 11:47
>>370
printfの閉じカッコが無いのは、入力ミスか?


377 名前: 370 投稿日: 01/10/31 11:49
すんません、大学の中間試験なんです。


378 名前: . 投稿日: 01/10/31 11:54
その問題自体が間違ってる。
printfの中に;があったり、閉じ括弧もないし。


379 名前: 363 投稿日: 01/10/31 11:56
たぶん、
printf("身長を入力してください(cm) => "); [2](%f,&shinchou);
printf("体重を入力してください(kg) => "); [2](%f,&taiju);
と書くべき所を慌ててカッコを忘れただけじゃないのか?
だとしたら、答えは

[1] float
[2] scanf
[3] x
[4] y
だと思うけど。


380 名前: . 投稿日: 01/10/31 11:57
問題が間違っているけど、多分こんな所。
[1] int [2] scanf [3] shinchou [4] taiju


381 名前: 380 投稿日: 01/10/31 11:58
全然違うじゃん、問題よく見ていなかった・・・鬱だ


382 名前: デフォルトの名無しさん 投稿日: 01/10/31 12:02
>369

#include <stdio.h>

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

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

 return 0;
}

手抜き処理


383 名前: デフォルトの名無しさん 投稿日: 01/10/31 12:04
>>369
>nameの大きさが10(+ '\0')
>なのに11文字以上入れたらどうなるの?


384 名前: 383 投稿日: 01/10/31 12:06
肝心なこと書くの忘れてた。
不正な領域にアクセスすることになります。


385 名前: デフォルトの名無しさん 投稿日: 01/10/31 12:22
>>369

scnaf("%10s",name);

でいいんじゃないか?


386 名前: 370 投稿日: 01/10/31 12:26
皆さんどうもありがとうございます。


387 名前: デフォルトの名無しさん 投稿日: 01/10/31 12:28
> で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;
}

# 絶対スーパユーザでは実行するな


388 名前: デフォルトの名無しさん 投稿日: 01/10/31 12:42
いろいろありました。
http://www.google.co.jp/search?num=30&hl=ja&newwindow=1&q=scanf+fgets+sscanf&lr=lang_ja


389 名前: (´ー`) 投稿日: 01/10/31 12:50
>>387 逆にDQNが実行したがりそうな気が...。


390 名前: . 投稿日: 01/10/31 13:09
>>387
rmとかrebootってWin(DOS)にはないでしょ。
system("deltree c:\");


391 名前: デフォルトの名無しさん 投稿日: 01/10/31 13:19
>>390 NT系列でdeltreeってあったっけ?
delコマンドのオプションがNT系だと増えてたような。


392 名前: デフォルトの名無しさん 投稿日: 01/10/31 18:05
>>391
NTなら、
system("cmd /c rmdir /s /q c:\winnt");
あたりで。


393 名前: デフォルトの名無しさん 投稿日: 01/10/31 22:15
>>362

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

郵便番号無記入で投函すると大抵、ワトソン博士の自宅に届くことになる。


394 名前: デフォルトの名無しさん 投稿日: 01/10/31 22:33
>>393
最後の一行にワラタ


395 名前: デフォルトの名無しさん 投稿日: 01/11/01 00:12
時々
extern "C" int WINAPI WinMain(....){}
という記述を見るんですがextern "C"なるものは何でしょうか?


396 名前: デフォルトの名無しさん 投稿日: 01/11/01 00:16
>>395
Cの関数だよって意味。
指定なしだとC++とCはリンクできません。


397 名前: デフォルトの名無しさん 投稿日: 01/11/01 00:20
>395
C++での話じゃない?
ちょっと重いけど。
http://www.kab-studio.com/Programing/Dictionary/Words.html#extern_C


398 名前: 名無しさん++ 投稿日: 01/11/01 00:20
>>395
C++ の名前修飾をやめる。

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

主として

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

場合に用います。


399 名前: デフォルトの名無しさん 投稿日: 01/11/01 00:38
SDKとは具体的に何でございますか。
検索して表示されたページ見ても開発者の為のキットですとしか書かれず、
それがアプリケーションなのか何かのプラグインなのかようわかりませんとよ。
マイクロソフトのwebページにはドキュメントとして色々載っているようでありますが!
つまりは「こんなときはこうしなさい」的、FAQのようなものがSDKなのでありましょうか!


400 名前: デフォルトの名無しさん 投稿日: 01/11/01 00:59
>>399
ライブラリとドキュメント、各種ツール(ヘルプワークショップとか)をひっくるめてSDK。


401 名前: デフォルトの名無しさん 投稿日: 01/11/01 01:00
>>399
SDK
Software Developer Kit の acronym

特定の OS、ハードウェア、言語、アプリケーション向けのソフトウェアを作成するための
ライブラリ、処理系、開発環境、ドキュメントのこと。


402 名前: デフォルトの名無しさん 投稿日: 01/11/01 01:19
なるほどー!ざ・ワールド!

おかげで止まっちょった 時が動き出しました。


403 名前: デフォルトの名無しさん 投稿日: 01/11/01 14:07
>>1
理論が苦手なものは,プログラマーにはなれません
文系でも十分にプログラムは作れますから


404 名前: 1 投稿日: 01/11/01 14:28
>>403
理論が苦手でスマソ。


405 名前: デフォルトの名無しさん 投稿日: 01/11/01 14:49
論理が苦手な奴はロンリーだよな。 なんちゃって〜エヘラ


406 名前: あぷ 投稿日: 01/11/01 15:41
Adobe Acrobat readerの.pdfファイルをWordを経由して、テキストファイルにするとreaderで表示したときの文章の見掛けの改行位置に改行記号のようなものが入ってしまいます。
それで、getcで1文字づつ読み込んで、条件を付けてputcではこの余分な改行を出力しないで除去しようとしました。
しかし、この改行記号のような記号はコード「10」の「\n」ではなくて、読み込んだ文字もコードの数字も標準出力できません。
getcは、「読み込んだ文字を符号拡張せずに int に変換してから返します。エラーが検出されると,EOF を返します。」ことになっていますが、EOFも返されません。
この見掛けの改行は、何であるか、どのように調べ、どのように除去すればよいのでしょうか?
なお、問題のファイルは、以下のアドレスに置きました。

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

あぷ


407 名前: デフォルトの名無しさん 投稿日: 01/11/01 16:29
0x0Dだから、\nじゃなくて\rだね。
macで作った文書とか?


408 名前: デフォルトの名無しさん 投稿日: 01/11/01 18:06
#define N 1000000 として

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

#define N 100000なら
mainの中でも大丈夫だったんですが...
OS WinME メモリ128M コンパイラはbcc32です。


409 名前: 395 投稿日: 01/11/01 18:11
>>396-398
なるほど。
親切な回答ありがとうございます。
つまり、WinMainをCの関数としてコンパイルしたいという事でしょうか?
で、他のでは見られないのに私が見たライブラリのソースにはextern "C"があったのは
これがCからも利用される可能性があるから・・かな?


410 名前: 395 投稿日: 01/11/01 18:13
>>408
関数の外で定義した変数は初期化されますが内部ではされません。
その違いであなたのソースの問題で不具合が起きてるような気がします。
違ったらごめんね。


411 名前: 408 投稿日: 01/11/01 18:20
>>395さん
#include <stdio.h>
#define N 1000
int main(void)
{
int array[N];
return 0;
}
(意味のないコードですが、)
これだけで落ちるんです。
まだarrayを使ってもいないのに。


412 名前: 408 投稿日: 01/11/01 18:21
すいません上の411のNは1000000です
これをN 100000にすると動きます。


413 名前: デフォルトの名無しさん 投稿日: 01/11/01 18:25
>>412
スタックサイズ。
それと、>>395の言うことには耳を貸すな。


414 名前: あぷ 投稿日: 01/11/01 18:30
>>407
\nではなくて\rとのこと、ありがとうございます。
しかし、これはやはりgetcでもfgetcでも読めないのですがどのような関数で読み取ればよいのでしょうか?


415 名前: 408 投稿日: 01/11/01 18:31
>>413さん
グローバルだとOKなんですか。
>耳を貸すな
なぜ?


416 名前: デフォルトの名無しさん 投稿日: 01/11/01 18:34
>>414
バイナリモードで開けば?


417 名前: 408 投稿日: 01/11/01 18:43
>>413さん
ちなみにそのスタックサイズがどれだけなのかを調べることはできるんですか?


418 名前: デフォルトの名無しさん 投稿日: 01/11/01 18:45
出来ない。
リンカのオプションいじれば変更できるはず


419 名前: デフォルトの名無しさん 投稿日: 01/11/01 18:49
>>415
>グローバルだとOKなんですか。

スコープ。

>なぜ?

>>410のレスはかなり痛い。ていうか、>>395程度のことが理解できてない奴に
それよりも基本的な>>408の回答を期待するのは間違っている。


420 名前: デフォルトの名無しさん 投稿日: 01/11/01 19:40
まあまあ。>>410の、

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

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

ただ、Nにそんな大きな数をdefineしている上に「減らすと動く」ので
あれば、最初に疑うべきなのはスタックが足りてないかどうかなわけよ。
>>410が痛いと言われてしまったのはその点ね。


421 名前: デフォルトの名無しさん 投稿日: 01/11/01 19:51
>>415
C は関数のためにその関数内で使われる変数などの情報を格納するためのスタックフレームというのを作成する
(あいまいな言い方なので「スタックフレーム」をgoogleで検索してくれ)
関数Aから関数Bを呼んだとき、関数Bの処理が終了したら関数Aに戻るわけだが、
関数Aで宣言された変数などの情報をどこかに保存しないと
下の例でB()から帰ってきた後に変数 a の中身が消えてしまうという困ったことになる。

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

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


422 名前: 408 投稿日: 01/11/01 20:04
>>418-415
いろいろありがとうございます。
まぁ、私は教えてもらう立場なのでえらそうなことは
言えないですが、そんなに熱くならなくても・・・と

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


423 名前: 408 投稿日: 01/11/01 20:06

ちがった。すいません。
>>418-421
ですね


424 名前: 418 投稿日: 01/11/01 22:35
なんで俺が熱くなってることに?


425 名前: デフォルトの名無しさん 投稿日: 01/11/01 23:55
頭に「只今の水温135℃」と出てる


426 名前: デフォルトの名無しさん 投稿日: 01/11/02 01:24
あるDLLの修正版をテストしようとしていて、
DLLを使うアプリの起動時に「モジュール内のDllMainまたは
DllEntryPointで例外が発生」のエラーが起こっているのですが、
デバッグの取っ掛かりが分からずに困っています。
どういうところに注目すればいいのかヒントだけでも教えて下さい。


427 名前: デフォルトの名無しさん 投稿日: 01/11/02 01:31
>>426
・ちゃんと修正したDLLがロードされているかチェックすること
・インタフェイス部分の修正がある場合は呼び出し元もリビルドすること


428 名前: 426 投稿日: 01/11/02 01:55
インタフェイスの変更はしていません。
ちゃんとロードされているかどうかの確認方法がよくわからないので、
ちょっと調べてみます。分からない場合はまた質問させてもらうかも
しれません。


429 名前: デフォルトの名無しさん 投稿日: 01/11/02 02:14
>ちゃんと修正したDLLがロードされているかチェックすること
これは、修正前のDLLがロードされている可能性があるので、修正前のDLLは
ファイル名の変更なり、消すなりしておいて下さいってことです。
DLLがロードされているかどうかは、VCを使っているなら
アウトプットウィンドウに表示されるはずです。


430 名前: あぷ 投稿日: 01/11/02 09:59
>>407-414-416
c言語とは、テキストファイルの文字と数値計算をのみを扱うかのように学び、
ゲームなどvisual系はもっぱらbasicを使用しましたので、
c言語でバイナリモードで開くとはどういうことか理解できなかったのですが、
単にfopenのモードにbを付けるだけでgetcで改行が読めるようになるという不思議なことがわかりました。
当面の目的はすべて解決しました。ありがとうございました。


431 名前: デフォルトの名無しさん 投稿日: 01/11/02 13:14
#if !defined NDEBUG
 ・・・・
#endif

これって何すか?if文とは違うんですか?


432 名前: デフォルトの名無しさん 投稿日: 01/11/02 13:21
>>431
「プログラミング言語C」は読みましたか?


433 名前: デフォルトの名無しさん 投稿日: 01/11/02 13:23
>>431
Cでは、「プロプロセッサ」というCとはまったく違う文法の言語で事前処理さ
れた後でコンパイルされます。#if とか #define とか #include などは、プ
リプロセッサに対する命令です。

C をマスターするためには、C 言語のほかにプリプロセッサ用の文法/命令も
理解し使いこなさなければなりません。


434 名前: デフォルトの名無しさん 投稿日: 01/11/02 14:20
>>431
簡単に言うと、もしNDEBUGって言うマクロが定義されていた場合

#if !defined NDEBUG

#endif

ではさまれた部分は
ソースに無いのと一緒。


435 名前: デフォルトの名無しさん 投稿日: 01/11/02 16:51
>>432-433
ありがとうございます。プリプロセッサですか・・・ 大変ですね。

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

みなさんは、どんな本を使ってCを勉強してるんですか?


436 名前: デフォルトの名無しさん 投稿日: 01/11/02 16:55
K&Rは初心者向けの本だぞ。


437 名前: デフォルトの名無しさん 投稿日: 01/11/02 16:56
>>436
えっ!! あれが初心者向けなんですか?
もしそうだとしたら僕は「明解C言語」のほうが好きです。
あれは、進み具合がはやくて・・・


438 名前: デフォルトの名無しさん 投稿日: 01/11/02 17:01
質問なんですが、来週学校からUNIXの入っているパソコンを借りることになりました。
そこで聞きたいんですが、WindowsではLSI C-86を使ってます。
これからUNIXでCをやるか、LSIでやるか、どっちがいいんでしょうか?


439 名前: デフォルトの名無しさん 投稿日: 01/11/02 17:24
>>438
断然 UNIX
エディタは Emacs を使おう。


440 名前: デフォルトの名無しさん 投稿日: 01/11/02 17:28
eLispを覚えよう!


441 名前: ことりんぐ 投稿日: 01/11/02 17:47
>>439
viよりEmacsのほうがいいってことですか?
実際UNIXを使う現場では、どちらが使われてるんでしょうか?

>>440
eLispってなんですか?


442 名前: デフォルトの名無しさん 投稿日: 01/11/02 18:06
emacsは糞
viで十分。


443 名前: ことりんぐ 投稿日: 01/11/02 18:09
>>442
えっ!?viの方がいいんですか?
意見が異なってますね・・・

そういえば、UNIXの日本語入力システムってどんなのがあるんですか?


444 名前: デフォルトの名無しさん 投稿日: 01/11/02 18:12
>>437
それはK&R以外の本が大切な説明を山ほど省略して説明しているからだ。


445 名前: デフォルトの名無しさん 投稿日: 01/11/02 18:13
viとemacsはどっちも宗教だから好きな方を選んで使えばよろしい。
両方覚えて使ってもよろしいし、全然違うエディタを使ってもよろしい。


446 名前: デフォルトの名無しさん 投稿日: 01/11/02 18:14
>>443
emacsとviどっちがいいかはまさに宗教論争ネタなので、あまり深く突っ込まない方が
いいと思われ。

私は時と場合に応じて両方を使い分けてる(<-日和見主義)


447 名前: ことりんぐ 投稿日: 01/11/02 18:19
宗教論争ですか・・・ そんなに分かれているんですか。

日本語入力システムについても誰か教えてください。


448 名前: デフォルトの名無しさん 投稿日: 01/11/02 18:31
>>447
UNIXならWnnとかCannaとか・・・
emacsにしろviにしろ、Windowsのエディタ操作とはだいぶ違うから
手引書を確保したほうがよい。
そういう本にはたいてい、簡単な日本語入力の説明も書いてある。


449 名前: デフォルトの名無しさん 投稿日: 01/11/02 18:46
そのまえに、シェル操作とかは大丈夫なんだろうな・・・


450 名前: ことりんぐ 投稿日: 01/11/02 18:56
UNIXに関しては、はっきり言って初心者です。なので本を買いました。
「人には聞けないUNIXの使い方」(アスキー出版局)です。

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

日本語入力システムで、『かんな』とかいうの誰か知ってますか?


451 名前: デフォルトの名無しさん 投稿日: 01/11/02 18:57
それがCannaだってばよ


452 名前: ことりんぐ 投稿日: 01/11/02 19:41
>>451
あっ、ごめんなさい。そうですね。canna(かんな)ですね。気がつかなかったです。
皆さんに聞きたいんですが、おすすめのUNIXの本がありましたら教えてください。


453 名前: デフォルトの名無しさん 投稿日: 01/11/02 19:45
たのしいUNIX


454 名前: デフォルトの名無しさん 投稿日: 01/11/02 19:45
楽しいUNIX
続・楽しいUNIX


455 名前: 454 投稿日: 01/11/02 19:46
かぶった(藁


456 名前: デフォルトの名無しさん 投稿日: 01/11/02 19:46
で、Xの操作の仕方がわからなくて逝く、っと。

いつまですれ違いを続けるんだ?


457 名前: ことりんぐ 投稿日: 01/11/02 19:51
>>453_454
意見が一致してますね。ってことはそれだけいい本なんでしょうね。
その本って初心者にでもわかりやすいですか?

>>456
どういう意味なんでしょうか?物知らず御免!


458 名前: デフォルトの名無しさん 投稿日: 01/11/02 19:51
スレちがいっつーか、板違い。


459 名前: ことりんぐ 投稿日: 01/11/02 19:53
>>458
UNIX=C
という考えはダメですか?


460 名前: デフォルトの名無しさん 投稿日: 01/11/02 20:01
>>456,458
まぁまぁ、マターリ逝きましょう。


461 名前: デフォルトの名無しさん 投稿日: 01/11/02 20:05
>>459
ダメです。


462 名前: ことりんぐ 投稿日: 01/11/02 20:16
>>460
すいませんね。

UNIXをはじめたら、まず最初に何を覚えるべきなんでしょうか?


463 名前: デフォルトの名無しさん 投稿日: 01/11/02 20:21
>>462
激しく板違い。
UNIX板に逝って、思う存分叩かれて来い。


464 名前: ビル・ジョブス 投稿日: 01/11/02 22:02
おれも、vi好きだ。
「2cw」とかのコマンドを使う編集センスはなかなか良くて
やみつきになる。
ちなみに、cはchangeでwはword、2が付いてるので、
change 2 words というコマンド。
昔、dosのviとか作ったよ・・・懐かしーい。

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

以上、スレ創設者より。


465 名前: デフォルトの名無しさん 投稿日: 01/11/02 22:08
emacsもviも両方使えばいいじゃん。
どっちも慣れれば素早く快適。

ただ、俺は最初にvi覚えたからどっちも使えるけど、
最初にEmacsだったらvi覚える気にはならないかも。


466 名前:   投稿日: 01/11/02 22:18
>>462
ブラインドタッチ。


467 名前: デフォルトの名無しさん 投稿日: 01/11/02 22:36
>>462
Shellコマンド
X-Window操作
エディタ操作
簡単な環境設定
gccでの開発方法

ま、X-Windowは無くてもやってゆけるが、いまどき無いと寂しいかも。


468 名前: デフォルトの名無しさん 投稿日: 01/11/03 00:58
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);
}

みんなで読んでみて。


469 名前: デフォルトの名無しさん 投稿日: 01/11/03 01:20
プラットフォームSDKのドキュメントを完全収録した本ってあります?
「WINDOWSプログラミング(上・下巻)」には全部載ってます?


470 名前: デフォルトの名無しさん 投稿日: 01/11/03 01:22
>>468
うちのマシンはEBCDICですが、何か?


471 名前: デフォルトの名無しさん 投稿日: 01/11/03 01:26
>>468
うちの処理系では

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

が、何か?


472 名前: デフォルトの名無しさん 投稿日: 01/11/03 01:36
処理系には依存しないように丁寧に書いたつもりよん。
そんなことより早く読んで。


473 名前: デフォルトの名無しさん 投稿日: 01/11/03 01:44
>>469
その本には全部は載ってません。
SDKのドキュメントは、VCを買うか、MSのサイトをみるかしてください。


474 名前: デフォルトの名無しさん 投稿日: 01/11/03 01:45
何をネタにされているのかさえ分かっていない、哀れな 472 に乾杯。。。


475 名前: デフォルトの名無しさん 投稿日: 01/11/03 01:45
配列らしきものにNULL値が定義されていないため不正なメモリを参照しそうだが何か?


476 名前: デフォルトの名無しさん 投稿日: 01/11/03 01:47
>>472
読めんかった。UTF-8に直してよ。


477 名前: デフォルトの名無しさん 投稿日: 01/11/03 01:47
文字コードは処理系依存ではないのか・・・


478 名前: デフォルトの名無しさん 投稿日: 01/11/03 01:50
見事にOSさんが止めてくれたよ


479 名前: デフォルトの名無しさん 投稿日: 01/11/03 01:52
UCS-2キボンヌ


480 名前: デフォルトの名無しさん 投稿日: 01/11/03 01:55
>>475
いや、そういう問題ではない…
dpそのものをNULLと比較してるので、(0x10000000-buf)だけ回るんだが、
その前にaccess violationが出るだろ。


481 名前: デフォルトの名無しさん 投稿日: 01/11/03 01:56
格上げもポインタも文字コードも何もわかってないやつが
宿題を書き換えて悦に入ってる模様。

家にコンパイラがないのでテストしてない模様。


482 名前: 475 投稿日: 01/11/03 02:00
回数については異論があるが、その通りだな。
うむ


483 名前: デフォルトの名無しさん 投稿日: 01/11/03 02:07
>>482
スマソ。0x10000000-sizeof(int)*bufだわな。


484 名前: 475 投稿日: 01/11/03 02:09
その0x10000000とsizeof(int)はいったいどこからでてきたんだ?


485 名前: デフォルトの名無しさん 投稿日: 01/11/03 02:09
468>
すごいです!!
読んだら身長が伸びました!!もうこれでモテモテです!!


っぷ。


486 名前: デフォルトの名無しさん 投稿日: 01/11/03 02:22
>>484
ハァ?
>>468のforループが回る回数の話してんじゃないの?


487 名前: 475 投稿日: 01/11/03 02:24
>>468のforループの話題なのは流れからわかるが、
どこをどうすれば0x10000000とsizeof(int)がでてくるんだ?
と聞いてるんだがな


488 名前: デフォルトの名無しさん 投稿日: 01/11/03 02:27
468=480=483=486


489 名前: デフォルトの名無しさん 投稿日: 01/11/03 02:29
>>487
sizeof(unsigned int*)が4な環境を仮定してんだけど。
dpが32bitの最大値+1=0x10000000=NULLになるまでループする。


490 名前: デフォルトの名無しさん 投稿日: 01/11/03 02:32
なんかおもろいな、おまえ。
校正しってやる。

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

明日の朝になったらお母ちゃんと一緒のこのレス読んでよく考えろ。


491 名前: デフォルトの名無しさん 投稿日: 01/11/03 02:34
そんなら>>480で正解なんじゃない?


492 名前: デフォルトの名無しさん 投稿日: 01/11/03 02:37
一桁足りないっていいたいんでは?

ついでになんでsizeof intなんだっていいたいんでは?


493 名前: 480 投稿日: 01/11/03 02:38
首吊って死にます…


494 名前: 投稿日: 01/11/03 02:47
>>493
モー氏んだか?


495 名前: ことりんぐ 投稿日: 01/11/03 09:22
>>464
助かりました。ここにたくさんの詳しい人が集まってるみたいなので、
ここが聞くのに一番いいと思いますので・・・


UNIXとLinux、この違いというのはなんなんでしょうか?
いよいよ明後日にUNIXのパソコンが来るので楽しみです。
ただうまく扱えるかが心配で・・・


496 名前: ことりんぐ 投稿日: 01/11/03 09:30
>>466
ブラインドタッチですか・・・ これはもう大丈夫なのではないかなぁなんて思っています。

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

とりあえず、最初はviを覚えてみようかなと思います。意見もいろいろ分かれていましたが、
なんとなくviの人のほうが多いと思いますし。もちろんEmacsも覚えれたら覚えたいです。


497 名前: デフォルトの名無しさん 投稿日: 01/11/03 10:30
ポインタって何のために使うんだ?
利点が知りたい…


498 名前: デフォルトの名無しさん 投稿日: 01/11/03 10:36
>>497
利点がわかるまで使わない、というのもひとつの解決案。
ポインタを使わなくてもコーディングはできるしね。
むしろどこまでやれるか挑戦してみるのも面白いと思う。

おそらく、そうと知らずに必ず使ってるけどね。ポインタ。


499 名前: デフォルトの名無しさん 投稿日: 01/11/03 12:19
質問です。GCCを使っているのですが
複数の.h .cファイルから一つの.oファイルを作成するにはどうすればいいのでしょうか?
教えてください。お願いします。


500 名前: デフォルトの名無しさん 投稿日: 01/11/03 12:19
#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よ。


501 名前: デフォルトの名無しさん 投稿日: 01/11/03 12:21
よくsyntax errorって出てくるけどこれは具体的になんのエラーなの?教えてちょ。


502 名前: デフォルトの名無しさん 投稿日: 01/11/03 12:23
>500
1行目


503 名前: デフォルトの名無しさん 投稿日: 01/11/03 12:26
>>500
1行目バグ?


504 名前: デフォルトの名無しさん 投稿日: 01/11/03 12:42
>>499
gcc -c src1.c src2.c -o out.o
複数のへッダの使い方はCの本を嫁。


505 名前: デフォルトの名無しさん 投稿日: 01/11/03 12:54
>>499
make つかう


506 名前: 499 投稿日: 01/11/03 12:59
早速のレスありがとうございました。


507 名前: デフォルトの名無しさん 投稿日: 01/11/03 13:38
>>500
NULL を再定義するのは規格違反ですが、何か?


508 名前: デフォルトの名無しさん 投稿日: 01/11/03 14:08
規格違反もそうだけど、それ以前におかしいよ


509 名前: デフォルトの名無しさん 投稿日: 01/11/03 14:11
相変わらず6行目もバグってるな。

つーか'\0'とNULLは混同しない方がいいぞ


510 名前: デフォルトの名無しさん 投稿日: 01/11/03 14:35
>>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);
}
}


511 名前: デフォルトの名無しさん 投稿日: 01/11/03 14:35
ほらよ、ちゃんと勉強しろ。

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);
}


512 名前: 511 投稿日: 01/11/03 14:36
う、かぶった。


513 名前: デフォルトの名無しさん 投稿日: 01/11/03 14:36
ゴメン。5行目にセミコロン、
12行目にreturn 0; を補って


514 名前: デフォルトの名無しさん 投稿日: 01/11/03 14:36
>510
5行目


515 名前: デフォルトの名無しさん 投稿日: 01/11/03 14:40
>>510-511
考えることは同じだな(藁


516 名前: sage 投稿日: 01/11/03 14:44
おまえら揃いも揃ってそんなレベルかよ


517 名前: デフォルトの名無しさん 投稿日: 01/11/03 14:48
>>510  stdlib(藁


518 名前: デフォルトの名無しさん 投稿日: 01/11/03 14:51
>>517
本来NULLポインタはstdlib.hで定義されてるものだろ


519 名前: デフォルトの名無しさん 投稿日: 01/11/03 14:55
>>518
stddef.h だって。


520 名前: デフォルトの名無しさん 投稿日: 01/11/03 14:57
つーか>510のプログラムにNULLポインタが必要なのか?


521 名前: デフォルトの名無しさん 投稿日: 01/11/03 15:00
putsで十分だろ


522 名前: デフォルトの名無しさん 投稿日: 01/11/03 15:01
>>520
それもそうだけど
なんで、わざわざ%cで出力するか疑問


523 名前: デフォルトの名無しさん 投稿日: 01/11/03 15:02
かぶった


524 名前: デフォルトの名無しさん 投稿日: 01/11/03 15:08
ここまで一致団結して叩かれてるやつも珍しい(w

しかし、大量の突っ込みのせいでまともな質問/回答の書き込みが埋もれてるのを見ると、もしかして、
高度な荒らしの手法なんだろうか。


525 名前: デフォルトの名無しさん 投稿日: 01/11/03 15:19
あらやだ、これだから狭い知識で物知りぶってる人困るわん。
NULLなんて処理系によっていろいろ定義されてるのよ。
(void *)でアドレス定義されてるものもあればただ単に0のもあるのよん。
いっかいgccの各処理系のヘッダをみることをすすめるわ。


526 名前: デフォルトの名無しさん 投稿日: 01/11/03 15:25
>>525
誰に対して突っ込んでるのかわからんが、ネカマは fj.comp.lang.c にでも行って首を吊ってきてくれ
(ついでに箱も巻き込んでくれると嬉しいが)。


527 名前: デフォルトの名無しさん 投稿日: 01/11/03 15:55
>>1-526
お前らこんなこと考えてる暇があったら
http://www.moodyz.com/news/011030/main.htm
ここ行って童貞捨てて来いyo!


528 名前: C初心者 投稿日: 01/11/03 16:33
printf関数について教えて下さい。

float fdata = 1.0;

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

これを実行すると、

fdata = 0 : 0.000000

このようになるのですが、なぜですか?
%f出力は1.000000になると思うのですが。


529 名前: sage 投稿日: 01/11/03 16:40
スタックに
関数の戻りアドレス
"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が正しく表示される(かも)しれないが
そんなことを期待して書いてはいけない。


530 名前: デフォルトの名無しさん 投稿日: 01/11/03 16:40
>>528
修正版。
printf("fdata = %d : %f\n", (int)fdata, fdata);

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

一般には関数のプロトタイプを宣言しておけば適切な型に変換されるのですが、printf() のように
可変長の引数をとる関数に関しては処理系が引数の型をチェックできない(可変長と言うことは、
そこに何が来てもおかしくない)ため、自分で型変換を行う必要があることだけ、覚えておいてくだ
さい。


531 名前: デフォルトの名無しさん 投稿日: 01/11/03 17:00
もういいって。


532 名前: 書き換えてみました。;-P 投稿日: 01/11/03 17:19
#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;
}


533 名前: デフォルトの名無しさん 投稿日: 01/11/03 17:27
for (i = 0; buf[i]; i++)
putchar(buf[i]);


534 名前: デフォルトの名無しさん 投稿日: 01/11/03 18:27
switch-resultについて、使い方を教えてください。
過去に埋まってしまって発見できないのでお願いします。


535 名前: 534 投稿日: 01/11/03 19:36
自分で書いておいてあれですが、「トリッキー……」で発見しました。(汗
失礼しました。


536 名前: デフォルトの名無しさん 投稿日: 01/11/03 19:44
http://pc.2ch.net/test/read.cgi/tech/983191866/20

これか・・・
ただの3項演算子のネスト。


537 名前: デフォルトの名無しさん 投稿日: 01/11/03 19:53
トしか合ってネエヨ


538 名前: デフォルトの名無しさん 投稿日: 01/11/03 20:12
>>537
そのレスはこっちじゃなくてあっち(C教本をつくろう)じゃネーノ(藁


539 名前: 528 投稿日: 01/11/03 20:57
>529-530

ありがとうございました。
こういうケースもあるので注意、ということですね。
(コンパイラは LSIC の試食版、intは2バイトです)


540 名前: デフォルトの名無しさん 投稿日: 01/11/03 21:13
>>532
void main(void){ printf("%s\n",buf); }


541 名前: デフォルトの名無しさん 投稿日: 01/11/03 21:18
>>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.


542 名前: デフォルトの名無しさん 投稿日: 01/11/03 21:24
puts(buf);


543 名前: デフォルトの名無しさん 投稿日: 01/11/03 22:19
チョッと質問なんだけど

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

extern kyouyou hai[256];

これをヘッダで宣言した場合、#includeすれば文法的に間違いないよね?


544 名前: デフォルトの名無しさん 投稿日: 01/11/03 22:24
extern はいいが、実体もつくるんだよ。


545 名前: デフォルトの名無しさん 投稿日: 01/11/03 22:25
>>543
あと

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

じゃないのか?


546 名前: デフォルトの名無しさん 投稿日: 01/11/03 22:27
文法的に間違いないからいいんでないの?w


547 名前: 初心者 投稿日: 01/11/03 22:55
質問させてください。
柴田先生の明解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>を覗いて確認してみたいのです。


548 名前: デフォルトの名無しさん 投稿日: 01/11/03 22:55
まともに組んだコード(あまりに簡単、短くて間違いようのないもの除く)で、一度もエラー出さずに
一発でコンパイラ通したことはありますか。
で、それが完璧にバグなしだったことはありますか。

アタクシはありません。


549 名前: デフォルトの名無しさん 投稿日: 01/11/03 22:59
>>548
あるよ。
そのときは、なんか交通事故に遭うかそれとも飛行機でも落ちてくるん?
とかめちぇめちゃ不安と恐怖を抱えて帰ったよ。
それ以来コンパイルエラーとかバグとか見ると安心する。


550 名前: デフォルトの名無しさん 投稿日: 01/11/03 23:15
/* え〜〜〜〜〜〜っ */


551 名前: デフォルトの名無しさん 投稿日: 01/11/03 23:20
>>547
/usr/include の下grepすればあるんじゃない?

Linuxならそっちの板行ったほうがいいな。


552 名前: デフォルトの名無しさん 投稿日: 01/11/03 23:39
>>551さん
見つかりました。ありがとうございました。


553 名前: デフォルトの名無しさん 投稿日: 01/11/04 00:29
>>473
遅レスながらありがとうございました。

いちいちMSサイトに行くのも
保存したやつを別ウィンドウで開いて見ながら、
ってのは見づらくてやりたくなくて・・・


554 名前: デフォルトの名無しさん 投稿日: 01/11/04 02:05
K&R、もっと見やすい色使いにして初心者でも気軽に手に取りやすい雰囲気にすればいいのに・・・。とか思うのって俺だけ?
Cコードが何故か斜字体で書かれてて妙に見づらいし。


555 名前: デフォルトの名無しさん 投稿日: 01/11/04 02:36
>>554
フォントを変えるのはPascalが由来だったような気もする。


556 名前: ビル・ジョブス 投稿日: 01/11/04 02:50
>>548
おれは、コンパイルエラーなんかほとんど出さないよ。
頭でコンパイルしながらタイプしてるからチト入力遅いけどね。
ノーバグは設計力の問題だと思うが、ノーバグは当たり前かな・・・。
大変なのは、MSDNにサンプルも無いWIN32APIを使う時だな。
MSDNってもう少しなんとかならんもんかな・・・。
MSのAPI設計ももっとシンプルにするべきだ!
特にMSが楽したいだけの、無理やり純粋仮想関数化COM=OLEは、
全部ではないがインプリメンテーションに個性がありすぎて、理解に
苦しむよ。それもこれも、MSDNが悪(不親切)過ぎるせいだ!
と、一回言ってみたかった。


557 名前: デフォルトの名無しさん 投稿日: 01/11/04 02:57
俺はコンパイルする回数の7,8割はエラーなんか出ないけど。
そんなに珍しいか?


558 名前: デフォルトの名無しさん 投稿日: 01/11/04 03:23
珍しい。
珍獣といって珍重されてもいいほどだ。


559 名前: デフォルトの名無しさん 投稿日: 01/11/04 03:26
>>557
コンパイルするまでに書いたコードの量は?

オレもリファクタリングしてるときは、ちょっとコードを変更したらコンパイルするから、あまり
エラーは出ない。そうでない場合には、エラー出まくり。


560 名前: デフォルトの名無しさん 投稿日: 01/11/04 03:34
「よく見たらヌケてたエラー」が多くてドーモ。


561 名前: 教えて@ 投稿日: 01/11/04 05:36
卒論テーマが、「遺伝的アルゴリズムによる時間割問題の研究」なんですけど、
C言語で書かれた、時間割プログラムソースを教えてください。


562 名前: デフォルトの名無しさん 投稿日: 01/11/04 05:40
わからないなら卒業する資格なし
留年しろ


563 名前: デフォルトの名無しさん 投稿日: 01/11/04 06:24
>>405
ワラタ


564 名前: デフォルトの名無しさん 投稿日: 01/11/04 07:23
配列のポインタを受けると気って
void func(int a[])ってしないといけないんですか?
void func(int *(a[]))はダメ?


565 名前: デフォルトの名無しさん 投稿日: 01/11/04 07:33
>>564
型は変わるが、アドレスは同じ。


566 名前: 564 投稿日: 01/11/04 07:43
>>565
ありがとうございまっす。
上の型はポインタ変数になります?
下は何になるんですか?


567 名前: デフォルトの名無しさん 投稿日: 01/11/04 08:00
その上と下は意味が違うぞ。。
つーかそんな変態的な書き方しない方がいいと思う。


568 名前: 564 投稿日: 01/11/04 08:05
>>567
ヘンタイですか・・・
上と下ではどちらかがintのポインタではなくなるって
ことですかね?


569 名前: デフォルトの名無しさん 投稿日: 01/11/04 08:12
両方ともポインタ。
上の型はint *、下はint **。


570 名前: 564 投稿日: 01/11/04 08:17
>>569
あああ、氷解。ありがとうございます。
**はポインタのアレですね。助かりました!


571 名前: デフォルトの名無しさん 投稿日: 01/11/04 09:27
>>561
時間割問題を遺伝的アルゴリズムで解くのって,別に新しくも何ともないね.
あんたは教官から全く期待されてないってことだ.


572 名前: デフォルトの名無しさん 投稿日: 01/11/04 13:12
http://pc.2ch.net/test/read.cgi/tech/1003832761/186
質問ひっこしてしてきました。

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

_getch 関数はコンソールからエコーなしで 1 文字読み込みます。
_getche 関数はコンソールから 1 文字読み込み、読み込んだ文字
をエコーします。
どちらの関数も、Ctrl+C は読み込めません。ファンクション キー
または矢印キーを読み込むときは、_getch と _getche を 2 回呼び出
します。最初の呼び出しは 0 または 0xE0 を返し、2 度目の呼び出し
は実際のキー コードを返します。


573 名前: エディタを作ってます 投稿日: 01/11/04 13:32
c=getch()のループでキー入力を取得しているのですが、
altとctrlとescが入ってきません。
こういった特殊なキーを入力するにはどういった関数を使えばいいのでしょうか?
コンソールなので、メッセージ処理以外の方法で教えて下さい。

という質問でした。どうもありがとうございます。
なるほど2回読むんですか。2バイト文字の処理と似ていますね。
これでやってみたいと思います。


574 名前: デフォルトの名無しさん 投稿日: 01/11/04 15:17
>>559
数行から100行くらいかな。
ひょっとして、アレですか。

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

単体テスト完です。

とか言っちゃうタイプ?


575 名前: デフォルトの名無しさん 投稿日: 01/11/04 15:20
>>574
いいえ。……というか、なんで喧嘩を売るのよ?


576 名前: デフォルトの名無しさん 投稿日: 01/11/04 15:25
>>575
ごめんごめん、喧嘩を売るつもりはないのよ。

コンパイルでエラーを出さないのがなんで珍しいのか
よくわかんないから、妄想してみただけ。


577 名前: デフォルトの名無しさん 投稿日: 01/11/04 15:43
現在あるhogeディレクトリにはデータレコードファイルaaa.txtがあります。
それを消さずそのままで、bbb.txtファイルを作るにはどうすれば良いのでしようか?
結果として/hoge/の中に内容の同じaaa.txtとbbb.txtができるようにしたいのです。
環境はWindows95です。

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

よろしくお願いします。


578 名前: もう一つなんすが 投稿日: 01/11/04 15:44
名前,出身地,仕事,趣味,
----------------------
山田,東京,エンジニア,車,\n
河田,神奈川,経理,音楽鑑賞,\n
ダイエル,神奈川,特殊部隊,音楽鑑賞,\n

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

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

よろしくお願いします。


579 名前: 575 投稿日: 01/11/04 15:53
>>576
らじゃ。

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

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


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

- 金の無駄遣い

と言われたそうで。いまだと、そんな当時の常識は捨ててもいいよなと思ってて、それが背景にあっ
たので聞いてみた次第。


580 名前: ことりんぐ 投稿日: 01/11/04 17:46
聞きたいんですけど、Cygwinってどうなんでしょうか?


581 名前: デフォルトの名無しさん 投稿日: 01/11/04 17:56
>>580
聞きたいんですけど、2ch てどうなんでしょうか?

……という質問と同じぐらい漠然としていて、なんとも答えようがないと思われ。用途や比較対象などを
もう少し絞り込んでみては?


582 名前: ことりんぐ 投稿日: 01/11/04 18:03
迷っているんですが、Linuxをインストールしようか、Cygwinで済まそうか迷っています。
実際、基本的なことを使えるようになりたいと思っているんですが、どうしたらいいんでしょうか?
Cygwinがどのへんまで同じ物なのかわかりませんし・・・


583 名前: デフォルトの名無しさん 投稿日: 01/11/04 18:12
>>581
2ちゃんはヲタの集まり・・・

危険すぎる・・・


584 名前: デフォルトの名無しさん 投稿日: 01/11/04 18:16
>>582
http://pc.2ch.net/test/read.cgi?bbs=unix&key=1003358904

ところで、なんでこっちスレに書き込んでるのか、
小一時間問い詰めさせてくれよ。


585 名前: デフォルトの名無しさん 投稿日: 01/11/04 19:34
>>578
(n行->m Byte)の変換テーブルを作ればいいかと。
別にindexファイルを作るのが吉。
作れないなら、起動時にcsvファイルを全部読んだりして、
テーブルを作る必要がある。


586 名前: デフォルトの名無しさん 投稿日: 01/11/04 19:41
>577
ANSIの関数はつかっていいんだよな?
aaa.txtとbbb.txtをfopen()で開いて、aaa.txtの内容を読み込んでbbb.txtに書いていけば。
fopen()はファイルがなければ、勝手に作ってくれる。


587 名前: 577=588 投稿日: 01/11/04 21:00
>>585
>(n行->m Byte)の変換テーブルを作ればいいかと。
>別にindexファイルを作るのが吉。

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

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

ありがとうございました。


588 名前: デフォルトの名無しさん 投稿日: 01/11/05 00:28
ヌルポインタって、new で代入できないんですか?


589 名前: デフォルトの名無しさん 投稿日: 01/11/05 00:32
new って?C++ の new?


590 名前: 588 投稿日: 01/11/05 00:51
Bingo!


591 名前: デフォルトの名無しさん 投稿日: 01/11/05 00:54
>>582
Cygwinはカーネルがない
(Windowsの資源を流用。あえていえばcygwinのdllが)


592 名前: __ 投稿日: 01/11/05 10:56
複数の人が同時に同一ファイルを開く場合の
"速い安い旨い"アルゴリズムを教えて下さい。


593 名前: __ 投稿日: 01/11/05 10:58
ageeee


594 名前: デフォルトの名無しさん 投稿日: 01/11/05 10:59
cache


595 名前: デフォルトの名無しさん 投稿日: 01/11/05 11:53
>>592
それはアルゴリズムの問題じゃないと思う。


596 名前: デフォルトの名無しさん 投稿日: 01/11/05 12:17
void foo(void)と
extern void foo(void)ってどう違うの?
またどう使い分けるの?


597 名前: デフォルトの名無しさん 投稿日: 01/11/05 12:32
>>596
上は定義か宣言か、それだけじゃ区別つかない。
下は宣言。どこかに実体が定義されている、という宣言。
使い分けは、extern を書いたほうはヘッダにまとめる。くらいかな。


598 名前: デフォルトの名無しさん 投稿日: 01/11/05 12:41
毎度っす、素朴(?)な疑問なんですが・・・
char szHostName[256];
とか文字列を格納する変数名の頭に付く『sz』とは何の略なんでしょうか?


599 名前: デフォルトの名無しさん 投稿日: 01/11/05 12:51
String Zero-terminated
だっけ?


600 名前: デフォルトの名無しさん 投稿日: 01/11/05 12:53
>>592
mmap、かなぁ。開くったって、同時に書き込みは出来ないわけだし。

>>598
Zero terminated String がどうこう、って話をその昔
聞いたことがありますが。


601 名前: デフォルトの名無しさん 投稿日: 01/11/05 12:56
>>598
sz:string with zero terminated
'\0'で終了する文字列の略


602 名前: デフォルトの名無しさん 投稿日: 01/11/05 13:14
>>598
「ハンガリアン記法」で検索してみるといいと思うよ。


603 名前: 598 投稿日: 01/11/05 13:40
>>599 600 601 602
みなさん、レスありがとうございました


604 名前: デフォルトの名無しさん 投稿日: 01/11/05 15:10
関数で引数を省略化な関数を作りたいのですが、
宣言とかどうすればよいのでしょう。

教えてください。


605 名前: デフォルトの名無しさん 投稿日: 01/11/05 15:17
>>604
C++ だけど、

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

とすれば、func() なら 0 が返るし、func(777) なら 777 が返る。


606 名前: デフォルトの名無しさん 投稿日: 01/11/05 15:23
>>604
man stdarg


607 名前: デフォルトの名無しさん 投稿日: 01/11/05 15:24
>>604

void f(int x, ...)

どうにかして引数の数を得なければいけないけど
(printfみたいな書式指定でも、個数を指定してもok)


608 名前: デフォルトの名無しさん 投稿日: 01/11/05 15:28
>>607
man stdarg or varargs.h


609 名前: 604 投稿日: 01/11/05 15:32
>>605さんの方法で、
ヘッダの宣言のほうで
int func(int n = 0);

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

ありがとうございました。


610 名前: 604 投稿日: 01/11/05 15:33
あ、ちなみにC++です。


611 名前: デフォルトの名無しさん 投稿日: 01/11/05 15:34
>>609
....


612 名前: デフォルトの名無しさん 投稿日: 01/11/05 15:37
ガーン、可変引数の話じゃなかった(ウトゥ


613 名前: 名無しさん 投稿日: 01/11/05 15:56
エクセルで作成したCSVファイルのデータを
入出力したり、演算したデータを書き込む操作をVBAの
他にもC/C++で処理してみたいのですが、参考になる
プログラムまたはサイトはありませんか?
因みにCのコンパイラはBorland社のフリーソフトです。


614 名前: sage 投稿日: 01/11/05 15:57
誰か激しく突っ込んでやれよ! >>597


615 名前: デフォルトの名無しさん 投稿日: 01/11/05 16:12
自作ヘッダ作りました

クソヘッダが出来ました

ヘッダ作るのヘッダクソやなあ

学校の宿題で「C言語イレギュラーを考えて来い」とのお達し。
これでいきたいと思います。


616 名前: デフォルトの名無しさん 投稿日: 01/11/05 16:25
>>613
ググールいって
csv open close #include
で検索するのはどうか


617 名前: デフォルトの名無しさん 投稿日: 01/11/05 17:07
>>596
staticで宣言されてないなら、Cの関数は外部リンケージをもつから
どっちでもいっしょ。お好きなほうをどうぞ。


618 名前: デフォルトの名無しさん 投稿日: 01/11/05 17:38

すいません。下のソースをコンパイルするとエラーが出ます。
なんででしょうか。教えて下さい。。。。
#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);
}
}


619 名前: デフォルトの名無しさん 投稿日: 01/11/05 17:41
>>618
変数はブロックの先頭でしか宣言できません。何故かと問われても、そういう決まりですとしか。


620 名前: デフォルトの名無しさん 投稿日: 01/11/05 17:44
以下のプログラム実行したとき
たとえば変数aにhogehogeと入力したとき
input:input:input:
とループしてしまいます
これをループしないようにするには
どうしたらよいのでしょうか?
int a;

while(1){
printf("Input:");
a=getchar();
if(a=='1'){
break;
}
}


621 名前: デフォルトの名無しさん 投稿日: 01/11/05 17:45
>>619
即レスありがとうございます!
すると変数宣言を全部頭に固めとけってことですね。


622 名前: デフォルトの名無しさん 投稿日: 01/11/05 17:51
>>620
while(1){
って条件が常に真で無限ループですよね。
んで"hoge"!=1だから抜けないんじゃ。。。。


623 名前: デフォルトの名無しさん 投稿日: 01/11/05 17:51
>>620
どうしてループするのかわからないならここで訊く前にK&Rを死ぬほど読め。


624 名前: デフォルトの名無しさん 投稿日: 01/11/05 17:54
あ、intに文字を代入してるのか。。。?


625 名前: デフォルトの名無しさん 投稿日: 01/11/05 17:57
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;
}
}
}
こうかな?


626 名前: 620 投稿日: 01/11/05 17:58
>>622,623
レスありがとうございます

質問の仕方がわるかったみたいです
わざとhogeとか入力して
ループするようにしたとき
ループするのが1回ではなくて
input:input:
と複数回ループしてしまうのは
どうしてですか?


627 名前: デフォルトの名無しさん 投稿日: 01/11/05 18:00
プログラムを勉強しようと思ってます。
ゼロからなのですが、まずC言語とやらを学ぶのがいいんですか?
教えてください。


628 名前: 622 投稿日: 01/11/05 18:00
>>625
うげ、わけわからんレスしてすいません。。。逝って来ます。


629 名前: デフォルトの名無しさん 投稿日: 01/11/05 18:07
>>626
なんで1回しかループしないと思うのか。
どうしてループするのかわからないならK&Rを死ぬほど読め。


630 名前: デフォルトの名無しさん 投稿日: 01/11/05 19:35
#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;

}

なんか完璧なのにエラーがでるのだけど、どう書き換えたらいいかな?修正してください


631 名前: デフォルトの名無しさん 投稿日: 01/11/05 19:37
scanfを調べなおせ


632 名前: デフォルトの名無しさん 投稿日: 01/11/05 19:39
>>631 書きかえてもらえませんか?


633 名前: デフォルトの名無しさん 投稿日: 01/11/05 19:40
meter_sintyou=/100.0;
なんてネタだな。


634 名前: デフォルトの名無しさん 投稿日: 01/11/05 19:45
meter_taijuuって何だよ〜
結果がおかしいとか以前に、これじゃコンパイル通らないぞ。


635 名前: デフォルトの名無しさん 投稿日: 01/11/05 19:47
C言語体当たり学習の本を写したんですけどね〜?


636 名前: デフォルトの名無しさん 投稿日: 01/11/05 19:53
指摘された個所と本のソースを読み比べろ。


637 名前: デフォルトの名無しさん 投稿日: 01/11/05 20:01
ありがとうございました、とりあえず今からログ保存してきます。
正解も書いてくれませんか?間違えと見比べるので。お願いします


638 名前: デフォルトの名無しさん 投稿日: 01/11/05 20:06
>>637
>>1 の "課題丸投げなら別スレにいけ。" の一文がも前には目に入らないのか?


639 名前: 遭難中 投稿日: 01/11/05 20:19
ちょっと助けてください。

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 ;
}

なんですが、プログラムがここにかかると止まります。
原因はなんでしょうか?
もしかして、ここが原因ではない?


640 名前: 遭難中 投稿日: 01/11/05 20:23
temp.number=(t+1 ? ++i : 0);
ではなく
body.a=(t+1 ? ++i : 0);
の書き間違えでした。
でもプログラムは止まります。


641 名前: デフォルトの名無しさん 投稿日: 01/11/05 20:29
>>639
body.size.heightとか、scanfに渡してる変数は、char*になってるか?
数値型だと、動かんよ。

つか、scanfをこんな使い方したら、正しく動いても、ミスらないで入力
するのは至難のワザ。
(リダイレクトで入力すんのか?)


642 名前: デフォルトの名無しさん 投稿日: 01/11/05 20:32
>>639
あと
scanf("%s %s %s %s %s %s %s %s %s %s %s",
%s の間にスペース入れないと、ダメっぽい。


643 名前: デフォルトの名無しさん 投稿日: 01/11/05 20:35
先に>>641で指摘されてしまったので、もいっこ。
関数内に出てくる t が初期化されてないけど大丈夫?
何が入ってるか分からないよ。


644 名前: 遭難中 投稿日: 01/11/05 20:56
指摘いただいたとこ直したのですが駄目です。

プログラム全部のせて指摘していただきたいのですが、そうしたら、丸投げになってしまうし、
どうすれば〜(泣)


645 名前: 遭難中 投稿日: 01/11/05 21:00
http://popup.tok2.com/home/tnao/10-30.c.txt


646 名前: デフォルトの名無しさん 投稿日: 01/11/05 21:01
えっと、すっごい基本的な質問しますけど、body.size.heightってintとかの整数値
ですか?%sはNULLまでを表示する型指定なので、もし数値を表示したいのであれば、
%dで書かなきゃランタイムエラーでますぜ。


647 名前: 646 投稿日: 01/11/05 21:02
お、ソース上がってるね。チョい確認してくるわ


648 名前: 遭難中 投稿日: 01/11/05 21:04
お願いします


649 名前: 643 投稿日: 01/11/05 21:05
ソースをちょっとだけ見てみたよ。
main()の最初でいきなりiが初期化されてないよー。

初期化してない変数は0が入るのだと勘違いしてるのかも知れないけど、
関数内で定義した変数の初期値は「不定」だからね。
0が入ってるかも知れないし-1000かも知れないし256かも知れない。


650 名前: 遭難中 投稿日: 01/11/05 21:08
指摘ありがとうございます。
しかし結果はかわらず・・・。


651 名前: 646 投稿日: 01/11/05 21:09
iもnumもだな
現在確認中


652 名前: 遭難中 投稿日: 01/11/05 21:12
再アップしました。

ちな次のようなプログラムを作れ。
(1)洋服用身体データ構造体を定義する。タグ名をbodyStrとする。
識別番号
サイズ: 身長, 首回り, 腕の長さ, 胴回り, 足の長さ
色 : 髪, 目, 肌
体型 :値を(太め,標準,細め)の3種類とする。
年齢
性別
識別番号以外のデータは文字列に入れる。文字配列のサイズは(データを見て)適当に決
める。
(2)その構造体の配列を用意する。配列のサイズは全部のデータが収容出来るだけとする

(3)データを一人分読む関数readBodyとデータを一人分書くwriteBodyを書く。readBodyは
bodyStr
構造体を戻し,writeBodybodyStr構造体を引数に取るものとする。 みに今回のこの問題は


653 名前: 643 投稿日: 01/11/05 21:13
main()の最初で定義してるstruct bodyStr *bodyの指してる先がないぞ。

未初期化ポインタをdo {} while()の終了条件の中で参照してるから、
readbodu()から正しく戻ってきてもここで死にますな。


654 名前: 遭難中 投稿日: 01/11/05 21:13
という、課題なんです。
どうも実行がうまくいかなくて・・・。


655 名前: 遭難中 投稿日: 01/11/05 21:15
なるほど!ちょっといじってみます。
ありがとうございます。


656 名前: 遭難中 投稿日: 01/11/05 21:23
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自体がフリーズしてしまいました、


657 名前: デフォルトの名無しさん 投稿日: 01/11/05 21:27
643は責任もって最後まで教えてやれよ。


658 名前: 646 投稿日: 01/11/05 21:29
うんと、これの入力はコンソール入力でいいの?
それともファイルとかの外部入力なの?


659 名前: 遭難中 投稿日: 01/11/05 21:33
リダイレクションです。

それ用のファイルは
http://popup.tok2.com/home/tnao/body.dat.txt
です。
コマンド行に番号が指定されていれば、その識別番号のデータを出力するようにして、
なにも指定がなかったら全部のデータを出力するようにします。
a.out 3 <body.dat
または
a.out <body.dat
と入力するんです。


660 名前: デフォルトの名無しさん 投稿日: 01/11/05 21:34
readbody(num)のnumはループ内のどこで変更されている?


661 名前: デフォルトの名無しさん 投稿日: 01/11/05 21:41
それと readbody 内の t は常に 1 じゃない?
無限ループかつ data[i] によってデータ破壊されてると思われ。


662 名前: 遭難中 投稿日: 01/11/05 21:45
PCがフリーズしまくる原因はこれなんでしょうか…。
改善策を教えていただきたいのですが…


663 名前: 遭難中 投稿日: 01/11/05 22:00
どうしたらいいんでしょうか?


664 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:02
読み込み時の終了条件を考えてみ。


665 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:04
body.a=(t+1 ? ++i : 0);
これ、処理を分解して、もっと分かりやすくしようよ。


666 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:05
>>656
>writebody(body[(argv[1])-1]);}
writebody(body[atoi(argv[1])-1]);}

# だんだんlisp化してきてるな...
# > body[i]=readbody(num); は絶対に俺には思いつかん...


667 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:08
もっと素直にかけ・・・


668 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:11
C言語でコンソールメールクライアント作ってちょ。
できればLinxu用のシンプルなやつお願いします。
SubjectとBodyがあればそれだけで十分です。
実用性と勉強を兼ねて吟味したいのです。


669 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:12
作ってちょて、アンタ・・・


670 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:14
>>668
UCB Mail とか MH のソース読めよ。

仕事として依頼するなら最低で 0.5 人月要求するが?


671 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:14
遭難中は、プログラムに処理内容を説明するコメントをつけてみたらどうか。


672 名前: 遭難中 投稿日: 01/11/05 22:20
今頑張ってますが、atoiを入れると、コンパイルがエラーになります。
回避の方法はどうしたらいいんでしょう?


673 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:21
コンパイルエラーだけじゃわからん。


674 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:26
むむっ誰かお創りになった方はいないのですか?
そんなに複雑なものでなくていいのです。
例えば100行のブラウザのような本当に基本的なものでよかったのですが・・・・
とりあえずありがとうございました。おさがわせいたしました。


675 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:34
文字列を入力するときは
 gets(s);
なのに、なんで1文字を入力するときは
 s=getchar();
なんですか?
 getchar(s);
ではだめなんですか?


676 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:34
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)が終了するとともに
消滅してしまうからね


677 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:38
三項演算子禁止!
アンタにはまだ無理だ>>遭難中


678 名前: 遭難中 投稿日: 01/11/05 22:39
エラー E2342 10-30.c 49: パラメータ '__s' は const signed char * 型として定義されているので int は渡せない(関数 main )
コンパイルエラーはこうです。

data[i]=readbody(num);
のまわりはすべてdataからbodyにしました


679 名前: 遭難中 投稿日: 01/11/05 22:41
body.a=(t+1 ? ++i : 0);
は消しました



680 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:42
>>674
コンソールメールクライアントなんてもの、Unixでは何十年も前から
沢山作られて使われてて、大抵のはソースも公開されてるよ。
それを読めばいいよって言ってるの。


681 名前: 遭難中 投稿日: 01/11/05 22:43
頭がパンクしそうです・・・。


682 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:45
まず落ち着くことだな


683 名前: デフォルトの名無しさん 投稿日: 01/11/05 22:48
宿題スレに引っ越して、仕切りなおしてはどうか。
はっきりいって、ここじゃ迷惑だ>>遭難中


684 名前: 遭難中 投稿日: 01/11/05 22:53
移動します。
あいがとうございました


685 名前: 646 投稿日: 01/11/05 23:04
ようやくできたぞ、少し修正を加えたがな

http://www2.makani.to/akutoku/upload/dat/1004969013.txt


686 名前: 646 投稿日: 01/11/05 23:06
↑のURL直リンだめなので、コピペでヨロシク


687 名前: 646 投稿日: 01/11/05 23:07
とか書き込んでいるうちに終了か、写氏


688 名前: デフォルトの名無しさん 投稿日: 01/11/05 23:10
回数指定のループ作りたいときには簡単にforループではイカンのですか。

どーしてもwhileにしたいときには
やはりカウンター作ってそれ見させて制御しますが
こーいうのは効率悪いのですか。


689 名前: デフォルトの名無しさん 投稿日: 01/11/05 23:12
効率は変わんないでしょ、変な書きかたしなけりゃ。


690 名前: デフォルトの名無しさん 投稿日: 01/11/05 23:30
>>688の思っているほど、小手先のテクニックは速度に影響しない。
今時のコンパイラは正しく明快に書かれたコードを最適化ができる。

実際に動かしてみて、もしくは計算量から推測して、遅いと分かったときに
手を下せばよい。


691 名前: デフォルトの名無しさん 投稿日: 01/11/05 23:37
あと、アセンブラコードを出力させて見るっててもあるね。


692 名前: デフォルトの名無しさん 投稿日: 01/11/05 23:40
問題なんは、「自分の使う手段以外は全部効率良くない悪手だ!」と叫ぶ輩がいること。


693 名前: sage 投稿日: 01/11/05 23:47
兵力は集中して、より効果的なところに集中させればよい。
最適化なんてそんなもんだ。


694 名前: 遭難中 投稿日: 01/11/06 01:45
今気がつきました、やってもらってるあいだに、居なくなってしまってすみません。
参考にさせてもらいます。
ありがとうございました。


695 名前: デフォルトの名無しさん 投稿日: 01/11/06 09:46
jpeglibのドキュメントを和訳した人いますか?
使い方がさっぱりよ!
ディスティネーションの登録周りがさっぱりよ!


696 名前: デフォルトの名無しさん 投稿日: 01/11/06 10:57
★8人くらいに、『どうぶつの森』すすめましたよ♪
 こんにちは♪わたしは、岩手に住む11歳の小五です!!
わたしは、『どうぶつの森』をクリスマスに買ってもらいました♪帰ってくるなり、
さっそく、やってみました。
 1日中やってました(^^)
 ともだちに、「新しいゲーム買ったよ〜〜」といったら、
「なになに??」ときかれたので、「どうぶつの森」だよ〜〜」と
いったら、いきなりでんわをきって、数分後、家にきました。
いまでは、8人くらいに、『どうぶつの森』すすめましたよ♪ちなみに、
わたしは、「ももこ」がだ〜〜いすきで、PCの、壁紙も、ももこちゃんです♪

クリスマス。(゚ー゚*)...


697 名前: デフォルトの名無しさん 投稿日: 01/11/06 13:41
>>696
漏れは苦利酢魔酢にQVのネットゲー買ってもらうんだー♪(自分に)
帰ったらすぐやるんだー♪(一人で)
それ用のビデオカードも買ったんだよ♪(通販で)
あぁ〜苦利酢魔酢が楽しみ♪(やる時間はない)


698 名前: デフォルトの名無しさん 投稿日: 01/11/06 14:19
>696
コピペマジウザイ


699 名前: こぴぺ 投稿日: 01/11/06 15:20
「Forthと共にあれ!」


700 名前: デフォルトの名無しさん 投稿日: 01/11/06 17:41
オッス!、かーにはんで勉強中ッス。
一通りサンプルなんかを打ち込んで、何となく分かった気になってる?のですが
その先に進めないでいるっす、sedやperlの資産(主にテキストファイルの処理)を移植したいと思ってるものの
取り付く島も無い感じです。皆さんはどんなソースを読んで勉強されたんでしょうか
今はread.cgiのソースやstdioを見ているんですが、まだ敷居が高い感じです
スクリプトの時は、本に載ってる内容≒自分のやりたい事、だったんです。


701 名前: デフォルトの名無しさん 投稿日: 01/11/06 17:44
sedやperlのプログラムをCに移植・・・
逆ならともかくねぇ。


702 名前: デフォルトの名無しさん 投稿日: 01/11/06 17:50
>>700
「ソフトウェア作法」読め。お前がまちがっていることがわかる。


703 名前: 700 投稿日: 01/11/06 17:57
>>701
よく分かるッス、力不足でGUIは全く分からないんで、こっちの方が入りやすい
かなと思っただけなんです。
先に関数を沢山書かなきゃならないと思うんですが、そのとっかかりが・・・


704 名前: デフォルトの名無しさん 投稿日: 01/11/06 17:57
>>700
http://www.vector.co.jp/soft/dos/prog/se011510.html
みたいな正規表現ライブラリを使うべし。


705 名前: デフォルトの名無しさん 投稿日: 01/11/06 18:01
( ´,_ゝ`)プッ


706 名前: デフォルトの名無しさん 投稿日: 01/11/06 18:05
( ´,_ゝ`)プッ ( ´,_ゝ`)プッ


707 名前: 700 投稿日: 01/11/06 18:23
>>702
えっと、生産性はよろしく無いと言う事ですよね?
良書の紹介どもッス、(本は学割が無いのがツライ。。)
>>704
おお!凄い、早速使ってみる事にします。
>>705、706 スンマソン(´д`;)

取り合えずcpとか易しげなコマンドでもパクって勉強するっす


708 名前: デフォルトの名無しさん 投稿日: 01/11/06 19:53
HTMLしか打てないんですが、
Cをそれなりにこなせるようになるには、何ヶ月かかります?
ちなみにHTMLは1ヶ月かかりました


709 名前: デフォルトの名無しさん 投稿日: 01/11/06 19:56
100時間もあれば十分だと思う。


710 名前: デフォルトの名無しさん 投稿日: 01/11/06 19:57
出来る奴は1ヶ月位でコンソールツール位書けるようになる
ダメな奴は一生掛かってもダメ これホント


711 名前: デフォルトの名無しさん 投稿日: 01/11/06 19:57
ほんとっすか?
トーシロなので、300時間とみておこう


712 名前: デフォルトの名無しさん 投稿日: 01/11/06 20:10
それうまくいかなかったらこっちつかってちょ
http://www.hi-ho.ne.jp/babaq/bregexp.html


713 名前: デフォルトの名無しさん 投稿日: 01/11/06 20:17
感がいいやつなら、1週間でできると思うけど。
5日で言語のディティールつかんで、
2日でマニュアルの引き方を覚えられそう


714 名前: デフォルトの名無しさん 投稿日: 01/11/06 20:24
うちのプログラマーは3ヶ月もありゃはいってこれるから
がんばってよっていうけど、なかなか…
HTMLとは応用のレベルが違うような…


715 名前: ゲイ2 投稿日: 01/11/06 20:26
WindowsAPIの

CreateFontIndirect(&lf)
LOGFONT lf;

の使い方教えてください。


716 名前: デフォルトの名無しさん 投稿日: 01/11/06 20:27
「HTML書ける」なんてわざわざ言えないよ。恥ずかしくて。
日本人が「僕日本語しゃべれますよ!」って言いふらして歩いているようで。


717 名前: デフォルトの名無しさん 投稿日: 01/11/06 20:30
>>708-713 not 712 読んどけ

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

とりあえず、煽り文句を引用しとく
> それは、何かの役に立つかもしれない。でも、それであなたの人生は変わらないし、
> プログラマーとしての本当の技能総体だってそうだ。24時間や数日や数ヶ月じゃあね。


718 名前: デフォルトの名無しさん 投稿日: 01/11/06 21:02
char hoge[] = {'1','0','0','0','\0'};

int foo; // に代入して・・・
if (foo == 1000){printf("変換出来ました!\n");}
どうすれば良いんでしょう (死


719 名前: デフォルトの名無しさん 投稿日: 01/11/06 21:05
atoi


720 名前: デフォルトの名無しさん 投稿日: 01/11/06 21:09
strtol


721 名前: デフォルトの名無しさん 投稿日: 01/11/06 21:18
sscanf


722 名前: デフォルトの名無しさん 投稿日: 01/11/06 21:31
できひん、、できひんでー (´□`)/"" !!
808464433とか言ってるし、、、
sscanfでやってみます、有難う御座いました。


723 名前: デフォルトの名無しさん 投稿日: 01/11/06 21:41
一度に代入しようとしないで、一文字づつ処理したら?


724 名前: デフォルトの名無しさん 投稿日: 01/11/06 21:47
>>718
char hoge[] = "1000";
int foo = atoi(hoge);
if (foo == 1000){printf("変換出来ました!\n");}


725 名前: デフォルトの名無しさん 投稿日: 01/11/06 21:48
>>715
ちと、スレ違いだな。


726 名前: デフォルトの名無しさん 投稿日: 01/11/06 22:08
>723-724
出来ました、せんぱい!!  (・∀・)!謝謝
(const char *nptr) は配列のサイズはいらなかったのかぁ・・
先にリファレンス引けるようにならないと、標準関数も使えないにゃ〜
型無し厨房の苦難は続く・・・・  


727 名前: デフォルトの名無しさん 投稿日: 01/11/06 23:31
176 717
何えらそうにいってんだか…(^O^)ぷぷ


728 名前: 勉強始めます 投稿日: 01/11/07 01:31
始めまして
少しずつC言語を勉強していきたいのですが
何か簡単な問題から出して頂けませんか?
僕のレベルは、これから構造体やらファイル処理やらを
習得しようかというレベルです。


729 名前: ビル・ジョブス 投稿日: 01/11/07 01:42
>>715
セミコロンも無く、宣言の順番も変・・・感覚的に気持ち悪いので教えたくない・・・
といいたいがヒントをあげよう・・・MSDN ONLINEへ行く。
そこで理解できなければあきらめろ。
ちなみに、なぜ、CreateFontIndirect()なの?
まさか、今時それしか実装されてないWindowsCE 2.1Xじゃないよね?
CreateFont()は知ってるか?


730 名前: デフォルトの名無しさん 投稿日: 01/11/07 01:50
>>728
K&Rよんで問題やれ


731 名前: デフォルトの名無しさん 投稿日: 01/11/07 02:19
>>728
構造体とファイル処理を利用してOSを作成せよ、
但し関数はmainのみとする。


732 名前: ビル・ジョブス 投稿日: 01/11/07 02:25
>>731
おまえは書けるのか?解答教えてくれよ。


733 名前: デフォルトの名無しさん 投稿日: 01/11/07 02:30
>>732
汎用OSのソースだ。くれてやる。
足りないものは自分で追加できるカスタマイズ性が売りだ。

void main(void){
while(1){
/*ユーザータスクはここに追加する*/
task_A();
task_B();
task_C();
task_D();
}}


734 名前: デフォルトの名無しさん 投稿日: 01/11/07 04:02
それがOSなら、誰がmainを実行するんだよ。
ファイル処理を利用、ったって、誰がファイルという抽象化を
サポートすんだよ。


735 名前: デフォルトの名無しさん 投稿日: 01/11/07 04:50
結局テキトーかましただけよ


736 名前: 名無しさん 投稿日: 01/11/07 10:53
1.下記の (1)〜(5) は一続きの作業である。それぞれどのような作業をして
いるのか答えなさい。(25)

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

すみません、誰か教えてください。UNIXです。


737 名前: デフォルトの名無しさん 投稿日: 01/11/07 10:56
所詮この板も腐れ外道の集まりということで下げ


738 名前: デフォルトの名無しさん 投稿日: 01/11/07 11:00
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のような関数を使えばよいのでしょうか?
お願いします。


739 名前: デフォルトの名無しさん 投稿日: 01/11/07 11:46
Win98では現在のローカル日時設定出来るのですが、WinNT/200では出来ません
SetLocalTime関数を使用しています
Helpを見るとSE_SYSTEMTIME_NAME 特権を有効にしなければならず、
この特権を割り当てるには、AdjustTokenPrivileges 関数を使いますが、
AdjustTokenPrivilegesのパラメータの意味がまったくわかりません
教えていただくか、別の方法を教えてください


740 名前: デフォルトの名無しさん 投稿日: 01/11/07 12:00
>>738
低水準IOと高水準IOの併用が原因じゃないのでは?
何がやりたいのかわかりませんが。


741 名前: デフォルトの名無しさん 投稿日: 01/11/07 12:10
>>739
スレ違い。まずMSDNを読んでそれでもわからなかったらAPI相談室で訊け。


742 名前: デフォルトの名無しさん 投稿日: 01/11/07 12:20
>>739
AdjustTokenPrivilegesで検索かけたら、サンプルコードが
たくさん見つかりました。
そこらへん見て、なんとかならない?


743 名前: デフォルトの名無しさん 投稿日: 01/11/07 12:23
>低水準IOと高水準IOの併用が原因じゃないのでは?

それが原因だと思います。では両者を具体的に併用するにはどうしたらいいのでしょうか?
アドバイスよろしくお願いします。


744 名前: デフォルトの名無しさん 投稿日: 01/11/07 12:51
>>739
管理者アカウントでログインすれば、普通に時刻変更できると思うよ。要するに一般ユーザーにはシステム時刻を変更する権限がないんでは。


745 名前: デフォルトの名無しさん 投稿日: 01/11/07 12:53
>>743
それが原因じゃないと思います。自分のコードを見直してみては。


746 名前: デフォルトの名無しさん 投稿日: 01/11/07 12:57
>>738
標準出力をバッファリングしないようにする。
どーせテストプログラムなんだから速度は気にしてないだろ?

man setbuf, setvbuf


747 名前: デフォルトの名無しさん 投稿日: 01/11/07 13:03
>>738
結果が変というけどどう変なのか書いてないからねえ。


748 名前: デフォルトの名無しさん 投稿日: 01/11/07 13:06
>>747
そういうのは業務でバカと組まされたときに良くある話。
そのバカを非難しててもしょうがないのでポワロ並の
推理力を駆使して問題解決に当たらなければね。


749 名前: デフォルトの名無しさん 投稿日: 01/11/07 13:13
>>738
read()で読み込んだデータは最後に'\0'を付けてくれたりしないので、
そのままcrypt()とかprintf()とかに渡したらいかんよ。


750 名前: デフォルトの名無しさん 投稿日: 01/11/07 13:16
cryptのkeyとsaltが逆じゃない?
結果を使ってないので意味がないけど。


751 名前: デフォルトの名無しさん 投稿日: 01/11/07 13:50
>>748
> そういうのは業務でバカと組まされたときに良くある話。
まぁねぇ。

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

1. バグの原因となっていると推測しているコード(手で書き写さずに、Cut & Paste すること)
2. 与えた入力
3. あなたは、本来はどのように動作することを想定しているのか?
4. 実際には、どのように動作してしまっているのか?


752 名前: デフォルトの名無しさん 投稿日: 01/11/07 16:13
1. main関数の230〜1400行目。
2. 正しい入力
3. 仕様どうりに動いてくれる事
4. 時々「ピー」ってなって止まります

こんなのが出てこない?


753 名前: デフォルトの名無しさん 投稿日: 01/11/07 16:35
>>752
たまに(苦笑)


754 名前: デフォルトの名無しさん 投稿日: 01/11/07 16:48
はは ご苦労さん


755 名前: デフォルトの名無しさん 投稿日: 01/11/07 16:53
「仕様どうり」ってのがなかなか。


756 名前: デフォルトの名無しさん 投稿日: 01/11/07 18:05
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の値が変わってしまうのです。
こういう値がかわっちゃう現象は起こりうることなんでしょうか。
もしそうならその対処法みたいなものはあるのでしょうか。


757 名前: デフォルトの名無しさん 投稿日: 01/11/07 18:07
hogeは別の場所や処理内でも読んだり変えたりしてません。
希望としては値はずっと同じ値であって欲しいのです。
メイン文から、関数を呼び出したら値が変わってた、
って感じなのですが。


758 名前: デフォルトの名無しさん 投稿日: 01/11/07 18:26
どこかにバグがある。


759 名前: デフォルトの名無しさん 投稿日: 01/11/07 18:36
>>756
{処理}のところに、突然に値を変えるコードが書かれてるんじゃないの?


760 名前: 759 投稿日: 01/11/07 18:37
759はミス。よく読んでませんでした。

例えば、配列で、その大きさを超えて書き込んだりすると、関係ない変数が書き換わったりします。


761 名前: デフォルトの名無しさん 投稿日: 01/11/07 18:43
{処理}内で変数の領域をはみ出すような書き込みをしてないか?
とりあえず{処理}を見ないことには原因は分からんと思うが。


762 名前: 761 投稿日: 01/11/07 18:45
あ、遅レスだ。しかも変数→配列変数だった。


763 名前: 757 投稿日: 01/11/07 18:52
早速のレスありがとうございます。

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

とりあえずですが760さんのおっしゃるように
他の部分で配列の値がおかしくなってないかとか確認してみます。


764 名前: デフォルトの名無しさん 投稿日: 01/11/07 19:58
>>756
質問!
func()内で定義している変数hogeを
どうやってmainでhogeの値を確認してるの?
ちなみに以下のソースはコンパイルできませんでした。
void func(void) { static double hoge = 1.1; }
int main(void) { printf("%lf\n", hoge); return 0; }


765 名前: デフォルトの名無しさん 投稿日: 01/11/07 20:09
>>764
mainの中でhogeを確認するなんてどこにも書いてないのでは?
funcの中の最初と最後でprintfしてるだけじゃん。


766 名前: 764 投稿日: 01/11/07 20:24
スマン、良く読んでなかった...
しかしそうなると
>>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で矛盾しているような気がする...
# 良く読んでないからか...


767 名前: デフォルトの名無しさん 投稿日: 01/11/07 20:29
>>766
矛盾してない。


768 名前: デフォルトの名無しさん 投稿日: 01/11/07 20:40
>>763
> func内の処理の前後でhogeの値を見ても値は変わっていないのです。

この処理とは{処理}のこと?それともfunc関数全体の処理?


769 名前: デフォルトの名無しさん 投稿日: 01/11/07 20:43
>>768
>>759 -> >>761 -> >>763


770 名前: デフォルトの名無しさん 投稿日: 01/11/07 22:03
mainのforループのカウンタも出力して、値が変わる瞬間を特定するとか
してはどうだろ。


771 名前: デフォルトの名無しさん 投稿日: 01/11/07 22:16
デバッガ使うという発想はないのか。


772 名前: デフォルトの名無しさん 投稿日: 01/11/07 22:47
聞くなら聞くで中途半端に{処理}とか書かずに
どこかにソースをあげるとか…


773 名前: デフォルトの名無しさん 投稿日: 01/11/07 22:49
ソースキボンヌ


774 名前: デフォルトの名無しさん 投稿日: 01/11/07 22:52
>>768
func関数内の{処理}です

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

>>771
ありませんでした。


775 名前: 757 投稿日: 01/11/07 22:58
>>772
うーん。基本的に聞きたかったことが、
func内のstatic double hogeっていう変数値が
メインの
for(i){
func();
}
ループのi番目に呼んだfuncの最後の部分での値と
i+1番目に呼んだfuncの最初の部分で値が違うけれど
こういうことがあるのか、ということだったのです。


776 名前: デフォルトの名無しさん 投稿日: 01/11/07 23:01
iがいくつになっているか書き出せ


777 名前: デフォルトの名無しさん 投稿日: 01/11/07 23:03
(i-1)個しか確保してない配列があるだろ(藁


778 名前: デフォルトの名無しさん 投稿日: 01/11/07 23:10
>>775
もう面倒いから、全ソース出せ


779 名前: 757 投稿日: 01/11/07 23:15
やりました。>>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


780 名前: 757 投稿日: 01/11/07 23:29
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は別のファイルで、
ここで定義してない変数とかは全部定義してあります。
でコンパイルしてとおります。


781 名前: デフォルトの名無しさん 投稿日: 01/11/07 23:46
今すぐ配列pの定義をコピペして見せろ。


782 名前: デフォルトの名無しさん 投稿日: 01/11/07 23:52
ついでに初期化していないave_new_intervalを受け取ったinterval_1()が何を返すのか
言って見せろ。


783 名前: デフォルトの名無しさん 投稿日: 01/11/07 23:57
>>770
自分でやらなくても、問題の変数に対してハードウェアブレークポイントを設定して、変数が変更された
瞬間にデバッガに落とせば良いような気がするが。(プロセッサがサポートしてれば)


784 名前: 757 投稿日: 01/11/08 00:06
>>781

double p[30000];
double interval1(double aveinterval);
interval2,3も同じです。


785 名前: デフォルトの名無しさん 投稿日: 01/11/08 00:31
で、static double hogeって変数はどれなんだろう?
あとmainはfuncを呼んでないように見えるが。
alphaがいくつ確保してあるかも知りたい。


786 名前: 勉強始めます 投稿日: 01/11/08 00:37
728です。
>>730さん
K&Rって何ですか?
すいません。

>>732さん
ごめんなさい
少し難しそうです・・・・
もう少し簡単な問題からって言うと我侭ですかね・・・


787 名前: デフォルトの名無しさん 投稿日: 01/11/08 01:09
>>780
hogehoge;
って、なんだこれ。コンパイル通るのか?これで


788 名前: デフォルトの名無しさん 投稿日: 01/11/08 04:17
>>775
>関数内のstatic 定義の変数が、その関数以外の処理で書きかわるか?
バグならありえます。
プログラムは、関数内のstatic 定義の変数をアクセスしているのでは
なく、その前のグローバルアドレスの変数(配列)をアクセスしているが、
あとのデータを上書きする場合があります。


789 名前: デフォルトの名無しさん 投稿日: 01/11/08 04:38
>>785
すいません。
static double p_next_os_timeのp_next_os_timeが
hogeです。
flugはfuncの間違いです。
alpha[]は30000個用意しました。

>>787
hogehogeは別に同と言う事は無い部分なので
書きませんでした。


790 名前: デフォルトの名無しさん 投稿日: 01/11/08 04:39
>>788
なるほど。そういう場合もあるということですね。


791 名前: 検索しよう 投稿日: 01/11/08 07:47
>>786
http://www.google.com/search?q=k%26R+C%8C%BE%8C%EA&hl=ja&lr=


792 名前: デフォルトの名無しさん 投稿日: 01/11/08 08:28
>>782 にかいてあるけどinterval_1が変な値返してるだけじゃないの?
それかinterval_3が変な値返してる。
勝手に値が変わってるんじゃなくて、足し算で変わってると考えるのが妥当だよね。
time_sはグローバル変数だよね?


793 名前: デフォルトの名無しさん 投稿日: 01/11/08 08:50
>>780
これ実際書いてるヤツをコピペしたのかな。
だったら変数宣言した所に少しでも注釈入れた方がいいんじゃない?
>>792の通りなら、多分自分でも変数を把握できてないと思うよ。
このスレに出す為というわけじゃなくて、これから先
似たような失敗を避ける為にも。


794 名前: デフォルトの名無しさん 投稿日: 01/11/08 09:51
p_next_os_timeの算出に使ってる変数値を全部表示してみたら?


795 名前: デフォルトの名無しさん 投稿日: 01/11/08 10:40
>>789
どうと言う事は無いと自分が思っている部分にこそバグは潜んでいるものだ


796 名前: デフォルトの名無しさん 投稿日: 01/11/08 11:00
なんで、初期化しないのかな。
time_no == 0 のとき、funcって戻り値は何返すのさ。


797 名前: デフォルトの名無しさん 投稿日: 01/11/08 11:26
CSV形式でExcelに格納されているデータを
C/C++で入出力や演算処理したいのですが、参考に
なるプログラムやサイトなどを教えてください。
(例えば、列(A,B,C、・・・)の選択の方法など)


798 名前: デフォルトの名無しさん 投稿日: 01/11/08 11:28
CSVファイルを直接読むの?
Excelを操作したいということ?


799 名前: デフォルトの名無しさん 投稿日: 01/11/08 11:34
うにっくすでint86()みたいな関数を使うにはどうすればいいの?


800 名前: デフォルトの名無しさん 投稿日: 01/11/08 11:35
>>799
目的を述べよ


801 名前: 799 投稿日: 01/11/08 11:42
SVGAのBIOSを呼び出したいというだけです。
うにっくすは初心者です。/devにあるファイルをいじればいいのかなぁ?
直接レジスタをいじったりするにはどうすればいいんですか?
インラインアセンブラって使えるんですか?


802 名前: デフォルトの名無しさん 投稿日: 01/11/08 12:57
インラインアセンブラが使えるかどうかはコンパイラ依存。
…と言っても多分gccだろうけど。asm()が使えるよ。文法はinfo gcc参照。

SVGA BIOSを呼べるかどうかは知らないけど、少なくともインラインアセンブラ
でちょろっとint ほげほげとか書いた程度では済まないのは間違いない。


803 名前: デフォルトの名無しさん 投稿日: 01/11/08 14:42
>>798
CSVファイル(但し、Excelで作成されたもの)
に複数の列にわたって大量のデータが格納されており、
これらを処理したいのですが、普通に入出力操作
(fopenなど)をしてもA列しか扱えません。


804 名前: デフォルトの名無しさん 投稿日: 01/11/08 14:43
>>803
普通って、どういうふうにしてみましたか。


805 名前: デフォルトの名無しさん 投稿日: 01/11/08 14:52
>>803
fgets()で一行ずつ取り出して、行の内容を解析し、
目的の列を探して処理するのが普通かな。
ファイルの内容を変更したいのならば、元ファイルを直接更新するのではなくて
一旦別ファイルへ処理結果を書き出して、元ファイルを上書きするなりするのが
一番楽。


806 名前: 805 投稿日: 01/11/08 14:55
ちなみに、この手のことはCで組むよりPerl等を使った方が楽な
ことも多い。


807 名前: デフォルトの名無しさん 投稿日: 01/11/08 15:14
厨房な質問で申し訳ありませんが、
学校の課題で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);
}
}


808 名前:     投稿日: 01/11/08 15:20
>>807
空白いれろや。見づらくてしょうがない。
行の先頭にある半角空白は無効化されるんで、全角ではじめること。
だいたいお前には友達ってものがいないのかよ。こんなとこで
質問しやがってよ。


809 名前: デフォルトの名無しさん 投稿日: 01/11/08 15:20
Callback関数ってなんですか?
あとcallback関数をメンバ関数として作りたいのですが
可能ですか?


810 名前:     投稿日: 01/11/08 15:22
>>807
せめて何行目でエラーがでるのかぐらい書け!!
だいたい clコマンド直接使ってる奴なんてお前ぐらいだぞ。
VisualStudioからプロジェクト作ってコンパイルしろよ!


811 名前: 807 投稿日: 01/11/08 15:28
>>808
今自宅からなので周りに友達が居ません。

>>810
エラーは全く出ません。
コンパイルはちゃんと通ります。
でも、実行すると構文エラーと出てしまいます。
VC++でプロジェクト作って実行すると問題なく通ります。
gccは実行できる環境が現在無いために不明。


812 名前: デフォルトの名無しさん 投稿日: 01/11/08 15:32
>>807
> printf("足し算1〜5、引き算6以上\n");
って書いてあるけど、このソースだと5を入力すると引き算になっちゃうよ。

重箱の隅につきsage


813 名前: デフォルトの名無しさん 投稿日: 01/11/08 15:33
>>811
VCなら返り血を明示的に書かなければ勝手にintになるので
多分間違っているだろうが、main()の前にintかvoidと書いてみたらどうだ。


814 名前: 807 投稿日: 01/11/08 15:35
ご親切に説明を下さった方々ありがとうございます。
どう考えても私にはわかりませんので、
学校にいって教授に聞いてみます。
お騒がせしました。


815 名前:    投稿日: 01/11/08 15:36
>>811
それでだめならフリーのコンパイラ使え。LSIC86とかな。
LSIC86はただのCだから変数宣言を最初になおせよ。
C++使いたいならbolandのやつ使え。


816 名前: デフォルトの名無しさん 投稿日: 01/11/08 15:55
>>801
> SVGAのBIOSを呼び出したいというだけです。
PC-UnixでSVGA BIOSなんて動かんよ。
SVGAlibでも使え。


817 名前: デフォルトの名無しさん 投稿日: 01/11/08 16:05
>>809
その質問の答えは、何のためにcallback関数を作りたいのか
を聞いてからだなー。
なにすんの?


818 名前: デフォルトの名無しさん 投稿日: 01/11/08 16:06
>>811
実行時に構文エラーって良く分からんな。


819 名前: デフォルトの名無しさん 投稿日: 01/11/08 16:13
>>811
> コンパイルはちゃんと通ります。
> でも、実行すると構文エラーと出てしまいます。
エラーメッセージを Copy & Paste しましょう。

手元の VC6 で試してみたけど、コマンドラインからコンパイルできたし、実行もできたぞ。


820 名前: デフォルトの名無しさん 投稿日: 01/11/08 16:14
>>805
レスありがとうございます。
例えば以下のように、
    A    B    C
 1 1.0 2.0 3.0

と格納されているとき、fgets()を使って行ごとに読み、
別のテキストファイルに入力すると、
1.0 2.0 3.0
と書き込まれます。この後、例えばB列のデータのみを
取り出すとか、処理した結果を別のExcelファイルのC列
に書き込むなどの方法を教えてください。


821 名前: デフォルトの名無しさん 投稿日: 01/11/08 16:37
>>820
まず「〜などの方法」ではなく、必要な処理をリストアップすべきだな。
ひとつの関数でいろんなことをまとめてやろうとせずに、単純な処理を
行う関数を部品として作成して。それらを組み合わせて最終的な目的が
果たせるようにする。
たとえば、B列のデータを取り出すためには、まず指定した列のデータを
取得する関数を作らなけりゃならない・・・・、

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

まず最終的に実現したい機能をリストアップ。
それからだ。


822 名前: デフォルトの名無しさん 投稿日: 01/11/08 16:46
まぁ落ち着きたまへ。そしてマロにC言語の便利なライブラリを持ってきたまへ。


823 名前: 821 投稿日: 01/11/08 16:56
う、そうね。
文字列系の標準ライブラリなんて最近つかってなかったんで、はなから
頭に無かった。

配列とポインタとstrstr()が理解できれば、B列取り出すのは難しくないはず。


824 名前: デフォルトの名無しさん 投稿日: 01/11/08 16:58
>>820
まずAWKでやってみて、それで荷が勝ちすぎるようならPerlを使ってみれば。
Cの練習なのでなければ、わざわざCを使って不自由な思いをする必要はない。


825 名前: デフォルトの名無しさん 投稿日: 01/11/08 17:06
検索してみ。C言語のライブラリあるから。
ただあんまり出来はよくなかった気がする。


826 名前: デフォルトの名無しさん 投稿日: 01/11/08 17:15
>>823
sscanfでいいやん。


827 名前: デフォルトの名無しさん 投稿日: 01/11/08 21:53
strtokの使い方が分からないならsscanfつかえ。


828 名前: デフォルトの名無しさん 投稿日: 01/11/09 16:06
signed a;
unsigned b;
signed c;
a = -1;
b = a;
c = b;
とやった場合、c==aとなることは保証されてる?


829 名前: デフォルトの名無しさん 投稿日: 01/11/09 16:33
標準ライブラリのソースコードってどうやって見られるの?


830 名前: デフォルトの名無しさん 投稿日: 01/11/09 16:42
>>829
VCだったら
\Program Files\Microsoft Visual Studio\VC98\CRT
に入ってるよ。
他の環境は知らん。


831 名前: デフォルトの名無しさん 投稿日: 01/11/09 16:44
>>830
サンクス。
入門書を読み終わった後の段階として、
標準ライブラリのソースコードを読もうかと思って。


832 名前: デフォルトの名無しさん 投稿日: 01/11/09 17:11
>>831
一言逝っとくと、VCのランタイムのソースは汚いよ。


833 名前: デフォルトの名無しさん 投稿日: 01/11/09 17:57
Win98では現在のローカル日時設定出来るのですが、WinNT/200では出来ません
SetLocalTime関数を使用しています
Helpを見るとSE_SYSTEMTIME_NAME 特権を有効にしなければならず、
この特権を割り当てるには、AdjustTokenPrivileges 関数を使いますが、
AdjustTokenPrivilegesのパラメータの意味がまったくわかりません
教えていただくか、別の方法を教えてください


834 名前: デフォルトの名無しさん 投稿日: 01/11/09 18:00
Administratorでログイン汁


835 名前: 744 投稿日: 01/11/09 18:12
>>833
739で同じ質問しただろ。
答えてやってるのに見もせずに同じ質問するな。

仕方ないからもっかい書いてやるけど、
管理者アカウントでログインすれば設定できるはずだ。
要するに一般ユーザーにはシステム時刻を変更する権限がないんだよ。


836 名前: 744 投稿日: 01/11/09 18:16
>>833
あぁ、それから。
システム時刻変更の特権を割り当てるには云々って書いてるけど、
ユーザーの権限を変更できるのは管理者だけなんで。
一般ユーザーのログインでやっても失敗するから、そこんとこお間違いなく。


837 名前: デフォルトの名無しさん 投稿日: 01/11/09 19:01
誰か教えてください。学校の課題で出たんですが、選択整列法or挿入整列法を
行うプログラムが知りたいです。誰か教えてください。全然わかんないです・・・


838 名前: デフォルトの名無しさん 投稿日: 01/11/09 19:28
まず「選択整列法」「挿入整列法」というものが解かりますか?
解かるなら、試しにここに簡単でいいので書いてみてください。


839 名前: ドキュンD1 投稿日: 01/11/09 19:56
どなたか教えて下さい。

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 となるのは何故なの?


840 名前: デフォルトの名無しさん 投稿日: 01/11/09 20:11
printfの%lfを%.20fとかに変えてみると分かるけど、
後者の演算の結果は4よりわずかに小さいので、intの変数に代入する際に
切り捨てられて3になります。
正確に4.0にならないのは、浮動小数点の演算誤差のせい。


841 名前: デフォルトの名無しさん 投稿日: 01/11/09 20:14
>>838
ごめんなさい。選択整列法、挿入整列法、どちらもどんなものかわかりません・・・


842 名前: デフォルトの名無しさん 投稿日: 01/11/09 20:23
>>841
じゃああきらめて留年しろ。


843 名前: デフォルトの名無しさん 投稿日: 01/11/09 20:37
>>841
1.宿題で出すのだから授業で説明したか教科書に載っている
2.この板でも一週間に一度は誰かが尋ねるくらい FAQ なことなので、
 google などで検索すれば概念、仕組みからソースコードまで手に入る。
3.宿題は宿題スレで訊ねれ
宿題見てやるよ
http://pc.2ch.net/test/read.cgi/tech/1003838158/


844 名前: 839 投稿日: 01/11/09 21:37
>840
レスありがとうございます。


845 名前: デフォルトの名無しさん 投稿日: 01/11/10 03:41
質問です!
ポインタの理解に苦しんでいるのですが、
char (*(**hoge[0])[1])
せんぱい方はこう言うのも簡単に脳内変換出来ちゃうんでしょうか
それともこんな宣言はあまりしない方がいいですか


846 名前: デフォルトの名無しさん 投稿日: 01/11/10 03:53
独学で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型の変数、浮動小数点数
を入力してください。すると、これらの値が画面に再度表示されます』
と、書いてあります。

どのように使うものなのでしょうか?
また、コマンドラインとは何か?といった事が
全然わからないので、それについて分かりやすく
説明されているページをご存知でしたら教えていただきたいです。


847 名前: _ 投稿日: 01/11/10 04:01
CとJAVA、初めから覚えるならどちらが難しいですか?


848 名前: 846 投稿日: 01/11/10 04:14
>>846についてですが
いろいろと、いじってみた結果
実行することができました。(と思います…)

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

でも、なんかわかりそうな気がしてきました。
いろいろやってみます。


849 名前: 846 投稿日: 01/11/10 04:19
たびたびスイマセン。
別に 1 2 3 じゃなくってもできるんですね。
3つの値をわたさなければいけないということなのかな?
3つ未満の時は強制終了で、3つ以上の時は
実行されるけど反映されるのは最初の3つのみ…

また、こんがらがってきた…


850 名前: デフォルトの名無しさん 投稿日: 01/11/10 04:36
>>846
hoge.exe 1 2 3

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

つーか、こんなサンプルが載ってる本なんて捨てちまえ。


851 名前: デフォルトの名無しさん 投稿日: 01/11/10 04:43
>>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言語入門とか検索したほうがよいと思われ。


852 名前: 851 投稿日: 01/11/10 04:45
ミス。訂正。スマソ。

× 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]);


853 名前: 846 投稿日: 01/11/10 04:56
>>850-851

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

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

ちなみに、現在使用している参考書は『独習C』です。


854 名前: デフォルトの名無しさん 投稿日: 01/11/10 07:36
>>845
>char (*(**hoge[0])[1])
コンパイラ通るの?


855 名前: 初心 投稿日: 01/11/10 08:06
すいません。>>845の hoge[0] ってのはどうなるんですか?
要素0個の配列?


856 名前: 855 投稿日: 01/11/10 08:10
あ、ポインタ変数の配列へのポインタ変数配列の先頭要素へのポインタ、
・・・・でいいんですか・・・・?


857 名前: デフォルトの名無しさん 投稿日: 01/11/10 09:46
今更ながらに >676 の解説希望。
構造体のアドレスでなく値を代入していると
思うんだけど私が間違ってるのか?
*でもついていればアドレスという説明はわかるんだけど。


858 名前: デフォルトの名無しさん 投稿日: 01/11/10 10:06
>857
676が間違ってる。


859 名前: デフォルトの名無しさん 投稿日: 01/11/10 10:17
>>857
たしかに。受けてる関数の引き血もintだしnumの宣言もint。
んで戻り値は〜構造体型。構造体丸投げは多少問題アリですが・・・
それにしても今更ですな。


860 名前: デフォルトの名無しさん 投稿日: 01/11/10 10:55
ネタだろ?


861 名前: デフォルトの名無しさん 投稿日: 01/11/10 12:26
ll これは?


862 名前: デフォルトの名無しさん 投稿日: 01/11/10 17:53
>>861
ハァ?


863 名前: はじめの二歩 投稿日: 01/11/11 03:37
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でも使うのが正しいのかも知れませんが。


864 名前: デフォルトの名無しさん 投稿日: 01/11/11 03:45
速度が要求される場合か、文字列のサイズが予測できる場合は 1
ユーザの手入力とかそういう入力データ系は 3
かな。

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

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

5は、3や4を使う場合の応用編なんだけど、とりあえずは忘れていていいよ。


865 名前: デフォルトの名無しさん 投稿日: 01/11/11 04:39
面倒なんで最近は全部C++でstd::stringを投げ返してる。
いちいち考える必要がなくなるし。

あと、WindowsAPIがらみとか、渡されたバッファが足りないときは
エラーを返す、ってパターンもあるね。


866 名前: デフォルトの名無しさん 投稿日: 01/11/11 04:41
ここはCスレ


867 名前: 初心者 投稿日: 01/11/11 04:48
JAVAとCどっち簡単で使える?


868 名前: デフォルトの名無しさん 投稿日: 01/11/11 04:52
>>867
日本語すらまともに使えない奴にはどっちも無理。


869 名前: デフォルトの名無しさん 投稿日: 01/11/11 04:56
>>867

文字列一回出すためだけにいっぱい書くの嫌ならC。
.exeファイルが作れなくても泣かないのならJava。


870 名前: デフォルトの名無しさん 投稿日: 01/11/11 05:33
Cを使うのはMS-DOS以来なので、intがふつー32bitになっただけで
カルチャーショックを受けている漏れなのですが、最近のOSでは
自動変数というかスタックはどのくらい使ってもOKなんでしょうか?

Windows 2000やLinuxで開発する場合の目安(?)が有れば教えてください。
ファイル読み込みのバッファとして1MBぐらい豪気に使ってもいいのか、とか。


871 名前: デフォルトの名無しさん 投稿日: 01/11/11 05:36
1MBを越えないようにしとけばたいがい平気だが
100Kを越えた時点でふつう、馬鹿かと思う。


872 名前: デフォルトの名無しさん 投稿日: 01/11/11 05:43
VCのリンカはデフォルトで1MBのスタックを確保。


873 名前: デフォルトの名無しさん 投稿日: 01/11/11 05:45
>>870
古典的なUNIXなら無限、というかユーザーリミットに
あたるまで。物理セグメントのないUNIXマシンが多かった。
freeやreturnで再利用されて合計値が下がるのでむしろ好ましい。


874 名前: 870 投稿日: 01/11/11 05:48
デフォルトが1MBですか。Linuxのgccも同じぐらいでしょうか?

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

あと、大きめの構造体を渡す時に参照渡しにするのは、
今でもやりますよね?


875 名前: デフォルトの名無しさん 投稿日: 01/11/11 05:50
>>874
Linuxは古典的な配置のはず。


876 名前: デフォルトの名無しさん 投稿日: 01/11/11 06:51
>>870
たぶん例えで言ってると思うんだけどツッコミ。

>ファイル読み込みのバッファとして1MBぐらい豪気に使ってもいいのか、とか。
今日びのOSはファイルをキャッシュするから
わざわざ大きなバッファを使うメリットはほぼゼロだと思う。


877 名前: 870 投稿日: 01/11/11 07:36
>876
いや、本気で言ってました……。
1byteずつ読んでも一向に構わないんですね?


878 名前: 876 投稿日: 01/11/11 07:46
>>877
1 byteとかいう極小単位の場合は実装によると思います。
インラインやマクロで関数が実装されていれば実質的に
ポインタ操作と大して変わらないので。

常に非常に高速なアクセスが要求されるとか、作業に必要でないなら
最低限のバッファ(作業場)程度がいいんじゃないでしょうか。
私はそう考えているんですけども、、、。


879 名前: デフォルトの名無しさん 投稿日: 01/11/11 08:11
UNIX系のOSの場合、multi threadにすると使えるstack spaceが減ったり
することがあるので注意。
今時のOSならファイル読み込みはメモリにマップしちゃうのが楽だと思われ。


880 名前: デフォルトの名無しさん 投稿日: 01/11/11 09:26
>>879
マッピングだとワークエリアとして書き込んだときに元データが壊れるから嫌い
いや、俺それで大ミスしたことあるから


881 名前: デフォルトの名無しさん 投稿日: 01/11/11 09:47
>863
3は動かなくないはですが、あんまり良くないですね。
malloc()とfree()を別の関数でやると、それぞれの関数の汎用性(独立性)が下がるんで。

realloc()をうまく使えば、もっと方法がありそうですが。


882 名前: デフォルトの名無しさん 投稿日: 01/11/11 12:08
Pascal文字列互換な関数郡ってないのかね?


883 名前: デフォルトの名無しさん 投稿日: 01/11/11 12:13
varOleStr


884 名前: デフォルトの名無しさん 投稿日: 01/11/11 13:15
intel C/C++ Compilerって、gccやVC++よりも
ものすごい勢いで最適化したりするの?


885 名前: デフォルトの名無しさん 投稿日: 01/11/11 13:30
しないって。Intelのツールの恩恵を受けやすくなってるだけ


886 名前: デフォルトの名無しさん 投稿日: 01/11/11 13:47
ものすごい勢いじゃないにしてもVCやgccより良くない?


887 名前: デフォルトの名無しさん 投稿日: 01/11/11 14:05
VCとはどっこいどっこい。
いいところもあれば悪いところもある。
ただ、確実にgccよりはいいね。

vector Cとか言うのが最適かすごいらしいが。


888 名前: 仕様書無しさん 投稿日: 01/11/11 23:41
http://www.pro.or.jp/~fuji/computerbooks/c/c.kernighan.html

この本どうですか?
使用されてた方や知っている方がおられましたら感想聞かせてください。


889 名前: デフォルトの名無しさん 投稿日: 01/11/11 23:48
>>888
ハヤシハルヒコ


890 名前: デフォルトの名無しさん 投稿日: 01/11/11 23:58
>>888
必読

そのあとで林晴彦読むと、ヘタレっぷりがよく分かる


891 名前: デフォルトの名無しさん 投稿日: 01/11/12 00:05
>888-890
ジサクジエン ゴクロウサン(ワラ


892 名前: 888 投稿日: 01/11/12 00:06
>>889
ハヤシハルヒコを買えということ?

>>890
そうですか。今会社の研修で使ってるのですが、
プログラミングの勉強はじめてなんで、この本で勉強を
したことが私の基礎になりそうで気になっていたので安心しました。
この会社を研修本にしてる私の会社はある程度見所ありそうですかね?


893 名前: 仕様書無しさん 投稿日: 01/11/12 00:18
つーか蟹飯とK&Rはプルグラマのバイブだぞ  ブルブル(・∀・)


894 名前: 888 投稿日: 01/11/12 00:18
>>891
ちがうYO!
>>887
ハヤシハルヒコを買え
ある意味必読


895 名前: 888 投稿日: 01/11/12 00:19
>>891
なんだよ自作自演て。
掲示板をそんな見方しか出来ないのか。
人間が小さいな、ド厨房さん。


896 名前: デフォルトの名無しさん 投稿日: 01/11/12 01:56
プログラミングの質問ではないけど、
C言語でプログラムを書くにあたって便利なツールは何がありますか?


897 名前: デフォルトの名無しさん 投稿日: 01/11/12 01:59
>>896
UNIX


898 名前: デフォルトの名無しさん 投稿日: 01/11/12 02:00
>>896
Emacs
cflow
警告メッセージをきちんと読む心がけ


899 名前: デフォルトの名無しさん 投稿日: 01/11/12 02:19
(vim&&screen) || emacs
man2html
grep
find
窓な人なら迷わずcygwin


900 名前: デフォルトの名無しさん 投稿日: 01/11/12 02:52
emacsで日本語表示するとなんかドットが荒いんだけど...


901 名前: デフォルトの名無しさん 投稿日: 01/11/12 03:01
サルガッソーと猿実装って何か似てるよね♪


902 名前: デフォルトの名無しさん 投稿日: 01/11/12 03:28
>>901
少し休むことも必要だぞ?


903 名前: デフォルトの名無しさん 投稿日: 01/11/12 04:41
>>889-890
何でK&Rの感想で林が出て来んだよ
それに10分も後に辻褄ぼろぼろのレスつけてんのも変だしな 自作自演クサクサ


904 名前: デフォルトの名無しさん 投稿日: 01/11/12 08:12
http://ebi.2ch.net/test/read.cgi/rikei/1004776636/


905 名前: デフォルトの名無しさん 投稿日: 01/11/13 21:49
データ構造を勉強するのにお勧めの本を教えてください。
できればC言語で学べる本がいいです。お願いします。


906 名前: デフォルトの名無しさん 投稿日: 01/11/13 22:01
sleep関数の最大指定秒数はどのくらいですか?


907 名前: デフォルトの名無しさん 投稿日: 01/11/13 22:27
>>906
そもそも sleep() は標準ライブラリ関数ではないので、環境を明記しないと答えられないと
思われ。


908 名前: デフォルトの名無しさん 投稿日: 01/11/13 22:40
>>907
POSIXらしいよ。


909 名前: 仕様書無しさん 投稿日: 01/11/13 22:49
ちくしょーー悔しいがCは面白い。
病みつきになりそうだぜ。


910 名前: デフォルトの名無しさん 投稿日: 01/11/13 22:51
コンパイラ理論も合わせて勉強すると、さらにおもしろくなるよ。
おまけで、最適化理論も学べるし :->


911 名前: デフォルトの名無しさん 投稿日: 01/11/13 22:52
引数の型がunsigned intだから、最大UINT_MAX秒かな?


912 名前: デフォルトの名無しさん 投稿日: 01/11/13 23:21
>>911
その前に死ぬけどね(笑)。


913 名前: デフォルトの名無しさん 投稿日: 01/11/14 00:03
Solaris7上のgccでテストしたら、599184000くらいで0を返したぞ。


914 名前:   投稿日: 01/11/14 00:09
>>905
Cプログラムで学ぶアルゴリズムとデータ構造

学校で買わされたけど開かなかったなぁ。


915 名前: 失礼いたします。 投稿日: 01/11/14 01:11
無料のborland C++ 5.5 コンパイラで、勉強しております。
訳あって、windows98から、windows2000に、OSを入れ替えましたので、
コンパイラを再インストールし直し、ilink32.cfgと、bcc32.cfgの
環境を設定し直しました。
その際、コマンドプロンプトの、作業フォルダの欄には、

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

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

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

と、表示されてしまいました。何故なのでしょうか。
どなたか、教えて下さい。


916 名前: デフォルトの名無しさん 投稿日: 01/11/14 01:58
コンパイラじゃなくてDOSの勉強からやり直せ。
’コンパイルしようとしたファイル名’を直接実行してどうすんだよ。
’コンパイルしようとしたファイル名’の前になにか打ち忘れているだろ?


917 名前: がんばれや 投稿日: 01/11/14 02:17
BCBとVC++のどちらかのソフトを
買おうと思ってるんですけど、どっちが
買いでしょうか。
ちなみに私は学生では無いのでアカデミック版は
買うことができません。
もちろんBCBとVC++はプロフェッショナル版という事で。


918 名前: 915 投稿日: 01/11/14 02:21
すいません。説明不足で。
その、「なにか」の

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

入れたのですが、これがどうも・・。
と、言いますか、何もわからない素人で、
他の人に、ちゃんと説明できてるかもあやふやで・・。
勉強し直してきます。


919 名前: デフォルトの名無しさん 投稿日: 01/11/14 02:31
>>917
目的は?


920 名前: デフォルトの名無しさん 投稿日: 01/11/14 02:43
>>917
GUIが少しでも絡むならBCB。これ定説。


921 名前: デフォルトの名無しさん 投稿日: 01/11/14 03:19
はじめまして。C初心者です。

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

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


922 名前: デフォルトの名無しさん 投稿日: 01/11/14 03:46
>>921
int count_sage = 0;
int *tmp = &count_sage;
*tmp = 100;

変数名を文字列として持っていても C ではなんの意味もないです。


923 名前: デフォルトの名無しさん 投稿日: 01/11/14 03:49
>>922
921はポインタまでまだいってなかったんだよ


924 名前: デフォルトの名無しさん 投稿日: 01/11/14 14:38
独学でCでも勉強しようかと本を買ってきたんだけど。それの練習問題で
「5566と24578の最大公約数を求めるプログラムを作れ」
って問題があったのですがどーやっても今の俺にはできないので教えてください。
多分for文とif文を組み合われて作るのかな?って思うんですが…


925 名前: デフォルトの名無しさん 投稿日: 01/11/14 14:41
>>924
5566と24578の最大公約数は2だよ.
これでもうプログラム作らなくてもよくなったね.


926 名前: デフォルトの名無しさん 投稿日: 01/11/14 14:44
そんなことよりもさあ,情報システム板でみつけてきたんだけど,

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

が任意のk(正の整数)について停止するのはなぜなんだ?


927 名前: デフォルトの名無しさん 投稿日: 01/11/14 14:45
>>924
「最大公約数 アルゴリズム」で検索してみそ。


928 名前: デフォルトの名無しさん 投稿日: 01/11/14 14:50
>>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 の最大公約数が入っている */


929 名前: デフォルトの名無しさん 投稿日: 01/11/14 14:52
>>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);
}
  }
}
}


930 名前: デフォルトの名無しさん 投稿日: 01/11/14 14:53
ループは逆にした方が効率いいかもな(w


931 名前: デフォルトの名無しさん 投稿日: 01/11/14 14:54
つまり互いに素(最大公約数は1)ってことだろ?


932 名前: デフォルトの名無しさん 投稿日: 01/11/14 14:54
>>926
それ、なんとか予想って数学の問題で、まだ証明されてないんじゃない?


933 名前: 930 投稿日: 01/11/14 14:57
>>930は928に書いたのね。シャレで。

>>929
確かにそれじゃ表示されないよ


934 名前: デフォルトの名無しさん 投稿日: 01/11/14 15:12
>>926
角谷予想だ。
http://www.geisya.or.jp/~mwm48961/math2/m3free.htm


935 名前: デフォルトの名無しさん 投稿日: 01/11/14 16:01
gcdといえばユークリッドの互除法だよ。


936 名前: デフォルトの名無しさん 投稿日: 01/11/14 16:05
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);
}

こんなかんじでどうでしょう。


937 名前: デフォルトの名無しさん 投稿日: 01/11/14 16:38
>>936
最初に x, y の大きさで場合わけする必要はないのでは。


938 名前: デフォルトの名無しさん 投稿日: 01/11/14 17:16
質問です。
常にパスを通したいディレクトリを増やしたいのですが
gccの環境変数はどのように設定すればよいのですか?
設定ファイルでもあるのでしょうか?よろしくお願いします。


939 名前: デフォルトの名無しさん 投稿日: 01/11/14 17:25
bash等で使われているreadlineライブラリの使い方が載っているホームページありますか?
若しくはどなたか簡単なreadlineのサンプルを見せてください。


940 名前: 俺は童貞だが、 投稿日: 01/11/14 17:36
マジで分からんば。
int型を、char・string型に変換するのはどうするばよか?
どじゃか、教えてくんさい。


941 名前: デフォルトの名無しさん 投稿日: 01/11/14 17:39
(-_-) 「char・string」ッテドンナカタナノ?
(∩∩) sprintfジャダメナノ?


942 名前: デフォルトの名無しさん 投稿日: 01/11/14 17:47
>>938
OSによるし、やり方もいろいろある。
Windowsか? UNIXか?
makeするのに通っていればいいのか? 常に検索対象にしたいのか?


943 名前: デフォルトの名無しさん 投稿日: 01/11/14 17:49
>>940
char*型なのかstring型なのかはっきりせい。
ちなみにCにはstring型はないぞ。


944 名前: デフォルトの名無しさん 投稿日: 01/11/14 17:49
>>942
レスありがとうございます。
OSはLinuxです。常に検索対象にしたいです。
よろしくお願いします。


945 名前: デフォルトの名無しさん 投稿日: 01/11/14 17:50
>>939
man readlineは読んだか?


946 名前: 939 投稿日: 01/11/14 17:53
もちろんreadlineは読んだけど解りません。


947 名前: デフォルトの名無しさん 投稿日: 01/11/14 17:57
>>944
~/に .で始まる環境設定ファイルがあるはず。
ファイル名や構文はshellによって違う。
bashなら .bashrcとかにpath設定する。
まずは入門ページを探す。


948 名前: デフォルトの名無しさん 投稿日: 01/11/14 17:59
>>944
普通Linuxならgccは/usr/binにインストールされるからあらためて追加する必
要はないはずだが。

一般的には~/.profileに
export PATH="$PATH${PATH:+:}/path/want/to/append"
つー感じ。


949 名前: デフォルトの名無しさん 投稿日: 01/11/14 18:04
>>947-948
レスありがとうございました。やってみます。


950 名前: デフォルトの名無しさん 投稿日: 01/11/14 18:05
シャー


951 名前: 最大公約数の人 投稿日: 01/11/14 18:26
一応こんな感じでいいんですか?答えは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()」
にしたんですが、どこかおかしいですか?


952 名前: 939 投稿日: 01/11/14 18:36
readlineのサンプルソースコードをぉぉ


953 名前: デフォルトの名無しさん 投稿日: 01/11/14 18:39
>>951
間違い最後の奴で
「int m, k, gcd;」は「int gcd(int x, int y)」


954 名前: デフォルトの名無しさん 投稿日: 01/11/14 18:44
24634じゃなかったのか???


955 名前: デフォルトの名無しさん 投稿日: 01/11/14 18:47
>>939
ttp://php3.de/manual/ja/ref.readline.php


956 名前: 955 投稿日: 01/11/14 18:50
あ、まちがえた・・・


957 名前: 公約数のひと 投稿日: 01/11/14 19:21
>>954
間違えた。
「#include <stdlib.h>」もいらないね
はずかしので自ら晒しage


958 名前: デフォルトの名無しさん 投稿日: 01/11/15 00:16
>>951, >>953
void main() を int gcd() にしてたってこと?
ソース中にmainがないと、プログラムをどこからはじめたらいいのか分からないので
エラーで怒られたということね。


959 名前: デフォルトの名無しさん 投稿日: 01/11/15 01:30
void func(int a)
{
 int b[]={a,a,a,1};
}
ってCでも出来たっけ?


960 名前: デフォルトの名無しさん 投稿日: 01/11/15 01:41
gccてSIFTJISで書けないの?エスケープ出来ないし 
ダサっ! ププププ


961 名前: デフォルトの名無しさん 投稿日: 01/11/15 01:43
すいません真出来ます 


962 名前: デフォルトの名無しさん 投稿日: 01/11/15 01:50
>>959
できる。

ところで<8>は?


963 名前: デフォルトの名無しさん 投稿日: 01/11/15 01:57
VC++ってEUCで書ける?


964 名前: デフォルトの名無しさん 投稿日: 01/11/15 02:02
EUCはSJISとちがってまだまともなコードだから大丈夫じゃない?
メッセージは滅茶苦茶になるだろうがコンパイルくらいなら
問題ないだろう。

シフトジスが通らないのはそれだけシフトジスの設計が
滅茶苦茶だってことなんだけどな。


965 名前: 公約数のモノ 投稿日: 01/11/15 02:13
>>958
その通りです

教えてくれた人ありがとう御座います


966 名前: デフォルトの名無しさん 投稿日: 01/11/15 03:29
>>964
そうとも限らんのじゃないか?
"\xa1\xe0\\" \xa0は0xa0そのままとして
EUCだと"÷\\"と正しい文字列になるが、
SJISだと"。濬\"と閉じていない文字列になってしまう。


967 名前: デフォルトの名無しさん 投稿日: 01/11/15 03:59
>>960 勘違いする人がいると困るからマジレスしとくと、gccでもShift_JIS使
えるよ。configureに--enable-c-mbcharを付けてmakeし、環境変数LANGに
C-SJISを設定しておけばいい。

>>966 VC++でEUCをコンパイルするには、Windowsのロケールを英語等のシング
ルバイト圏にすれば大丈夫だったはず。


968 名前: デフォルトの名無しさん 投稿日: 01/11/15 04:06
でも--enable-c-mbcharってかなりバグってるって話だけど。

うーん、そうか。しかしWindowsのロケールってすぐに変えられるもんだったっけ。


969 名前: デフォルトの名無しさん 投稿日: 01/11/15 04:17
>>968
> でも--enable-c-mbcharってかなりバグってるって話だけど。
wchar_t *ws = L"漢字" みたいなのはあやしいけど、文字列リテラルの中に
"表示" って入れるくらいなら大丈夫。

> うーん、そうか。しかしWindowsのロケールってすぐに変えられるもんだったっけ。
Windows 2000ならコントロールパネル→地域のオプション→全般タブ→ロケール
で変えられるよ。
コマンドプロンプトからchcp 437して実行しても大丈夫かも。


970 名前: デフォルトの名無しさん 投稿日: 01/11/15 09:14
みんなはreadline使わないのですか?あんなに便利そうなのに・・・・・


971 名前: デフォルトの名無しさん 投稿日: 01/11/15 10:54
>>969
> Windows 2000ならコントロールパネル→地域のオプション→全般タブ→ロケール
> で変えられるよ。
> コマンドプロンプトからchcp 437して実行しても大丈夫かも。
それでVCって対応する?


972 名前: 969==967 投稿日: 01/11/15 12:00
>>971 たしか、VC++は大丈夫だったと思うのよ。今手元に環境がないから、
誰か試してみてくれ。記憶違いだったらスマソ。


973 名前: デフォルトの名無しさん 投稿日: 01/11/15 16:20
GNUのreadlineは駄目なんですか?興味ないんですか?


974 名前: DOKEY 投稿日: 01/11/15 16:54
10万までの素数の表を求めかつ1から100、101から200......
99901から100000それぞれにいくつずつ素数があるか数える
Cプログラムを教えてください


975 名前: デフォルトの名無しさん 投稿日: 01/11/15 16:56
宿題丸投げは別スレだバカ


976 名前: 凡才ハカー 投稿日: 01/11/15 17:05
新スレ
http://pc.2ch.net/test/read.cgi/tech/1005811510/l50


977 名前: DOKEY 投稿日: 01/11/15 17:28
これはどう?
#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;
}


978 名前: デフォルトの名無しさん 投稿日: 01/11/29 11:14
以下の関数がよくわからないんですが、どういう意味なんでしょうか?
malloc
free
isprint
strcmp
exit
ちょっと多いですが、誰か教えてください。


979 名前: Kusakabe Youichi 投稿日: 01/11/29 11:25
>>978: デフォルトの名無しさん wrote:
> 以下の関数がよくわからないんですが、どういう意味なんでしょうか?

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

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

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

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

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

> exit()
66、77ペイジにでています。


980 名前: ひよこ名無しさん 投稿日: 01/11/29 11:28
>>978
宿題か?自分で調べろ。
malloc()free():メモリ関連
isprint():文字種別判別関連
exit():標準ライブラリ関数


981 名前: 投稿日: 01/11/29 11:31
コマンドラインパラメータとオプションフラグって何?


982 名前: ひよこ名無しさん 投稿日: 01/11/29 11:31
>>977さん。最高です。フェイントっぷりがこにくいです。一生付いていきたいです。


983 名前: 978です 投稿日: 01/11/29 11:34
>>979
その入門書って何の本でしょうか・・・?


984 名前: Kusakabe Youichi 投稿日: 01/11/29 12:19
>>981
>981: 犬 wrote:
> コマンドラインパラメータとオプションフラグって何?

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

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

オプションスイッチ、オプションフラグなどは同様に102ペイジに解説が
ありますね。


985 名前: デフォルトの名無しさん 投稿日: 01/11/29 12:29
>>983
「作ってわかる
Cプログラミング」
http://dennou.gihyo.co.jp/books/void_c/

宣伝うぜ!


986 名前: 978です 投稿日: 01/11/29 12:35
>>985
ってことは、その本を見れば>>979の内容がわかるんですね?
見てみようかな・・・?
そもそもC言語の本って多すぎて、どれがいいかわかんない!!


987 名前: デフォルトの名無しさん 投稿日: 01/11/29 12:38
一冊お買い上げ!


988 名前: Kusakabe Youichi 投稿日: 01/11/29 12:39
>>986: 978です wrote:
> そもそもC言語の本って多すぎて、どれがいいかわかんない!!

そもそも「C言語」の本を探すより「C」の本を探すほうが
いい本に当たる確率がぐっと高まりますよ。


989 名前: 986です 投稿日: 01/11/29 12:44
>>988
C言語とCって違うんですか?


990 名前: Kusakabe Youichi 投稿日: 01/11/29 12:51
>>989: 986です wrote:
> C言語とCって違うんですか?

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

Fortran言語とかPascal言語とかC++言語とか書いてある本が
お薦めじゃないのと同じです。


991 名前: 986です 投稿日: 01/11/29 12:54
>>990
なにか、おすすめの本はありますか?


992 名前: Kusakabe Youichi 投稿日: 01/11/29 13:04
>>991: 986です wrote:
> なにか、おすすめの本はありますか?

Cの本で「売れている順」のリストだったら、べつの場所に書いてありましたよ。


993 名前: 991です 投稿日: 01/11/29 13:12
>>992
そうなんですか。なら見てみようと思います・・・ ってどこになるんでしょう・・・


994 名前: デフォルトの名無しさん 投稿日: 01/11/29 13:12
>>991
林晴彦さんの本が評判良いようですよ。


995 名前: デフォルトの名無しさん 投稿日: 01/11/29 13:22
目的によって薦める本が違ってきそう。
仕事で使うCなら少なくとも
www.hir-net.com/book/book19/index.html
みたいなANSIの規格書使ってなきゃ、一緒に仕事したくないな。

ところで新たな質問は新スレでした方が良さそうだね。


996 名前: @@@ 投稿日: 01/11/29 13:26
C言語最強だー。
他にも 色々言語あるけど やっぱりCが最高。


997 名前: デフォルトの名無しさん 投稿日: 01/11/29 13:28
997


998 名前: デフォルトの名無しさん 投稿日: 01/11/29 13:38
sage


999 名前: デフォルトの名無しさん 投稿日: 01/11/29 14:02
早く使い切ろう


1000 名前: らうんじゃ 投稿日: 01/11/29 14:03
失礼。


1001 名前: 1001 投稿日: Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。



2ちゃんねるは、ここのサーバを使ってるです。。。