C言語マスター

このエントリーをはてなブックマークに追加
1ドキュヒッキ−
俺は完全にC言語をマスターした。
K&Rもポインタ完全制覇もCプログラミング専門課程
も理解した。もちろんC FAQもだ。
そうそう、珠玉のプログラミングもね。
怖いものはもうない。どっからでもかかってこい。
どんな質問にも答えてやる。
2ドキュヒッキ−:2001/04/16(月) 05:25
Win API など屁でもない。SDKでごりごりだ!
3ドキュヒッキ−:2001/04/16(月) 05:26
でもUNIXは勘弁。
4仕様書無しさん:2001/04/16(月) 05:31
http://ip.tosp.co.jp/i.asp?I=manipoli&P=0
おい!ティンカスども!かかってこい!
厨房虐待サイトだゴラァ!凸(`Д´メ)
5ドキュヒッキ−:2001/04/16(月) 05:38
>>4
氏ね!くされ金玉野郎!!
6仕様書無しさん:2001/04/16(月) 05:40
C言語をマスターしたら、次は、アセンブラよみながらのデバッグ処理が待っている。
言語処理系を100%マスターするには、アセンブラまで追求する必要がある。
最適化の処理落ちまで対応できてこそ、マスターと呼べるのだよ。

7ドキュヒッキ−:2001/04/16(月) 08:06
>>6
をいをい、俺は質問を募っているんだよ、オマエのような
パソヲタの説教を聞いてるんじゃないのよ!?。
ケツを洗って出直してきな!
8仕様書無しさん:2001/04/16(月) 08:17
--引用開始--
struct link_t
{
struct link_t *previous, *next;
};

という構造体をlinkという名前でリストのノードにする構造体に埋め込んでおくことで、

#define node_ptr(type, ptr) (type*)((char*)(ptr)-offsetof(type,link))

というマクロを作ってやれば、一種のダウンキャストができるようになります。
これを先の関数テーブルと組み合わせることでインヘリタンスが実現できます。

--引用終わり--

↑小学生にもわかるように説明してくれ。
9ドキュヒッキ−:2001/04/16(月) 08:29
>>8
マクロはめったな事でつかうなヴァカ!
俺はマクロ反対派。
これならサルでもわかる。
10ドキュヒッキ−:2001/04/16(月) 08:35
急遽予定変更。
このスレは俺の日記スレにする。

今日は休みだ彼女の誕生日プレゼントを買わなければ
ならない。かわいくはないが性格がいいので安物で許してもらおう。
はっきりいって女にどんな物をプレゼントすればいいのか
まったくわからない。鬱だ。
111の心理を分析:2001/04/16(月) 08:41
・数冊本を読んだだけでCをマスターしたと勘違いした。
 ↓
・自信満々でスレをたててみた。
 ↓
・自分の知識の範囲を超えた質問がいきなりでてきた。
 ↓
・ボロが出る前に路線変更。
 ↓
・駄スレ決定。
12ドキュヒッキ−:2001/04/16(月) 08:44
>>11
いやいやCの質問を受け付けながら日記も書いていくよ。
これでいいだろ。
13ドキュヒッキ−:2001/04/16(月) 08:46
こういうスレたてたら絶対普段つかわないような
事の質問出す奴いるんだよな。見苦しい。
14みほこ(ネカマ):2001/04/16(月) 09:02
ヾ(´ー`)ノ 普段つかうような事は質問する必要もなかったり。。
15仕様書無しさん:2001/04/16(月) 09:10
削除依頼出しに逝っていい?
16仕様書無しさん :2001/04/16(月) 09:43
>>15
おっけぃ。
17ドキュヒッキ−:2001/04/16(月) 10:02
>>14
おいっ!くそみほこ(ネカマ)とかいう奴!
俺がスレ立てるたびに荒らしやがって、いい加減に
氏にやがれ!つうかでてくるな!うざいんだよ!
だれもオマエを必要としてないんだから
はやく回線きって首吊って自殺しやがれ!
18 :2001/04/16(月) 10:21
>>みほこ(ネカマ)とかいう人は
真のヒッキー&脳みそドロドロタイプで友達がいないから、
かまってもらいたいんでしょう。
ドキュヒッキーさんが1番かまってくれそうだから邪魔してるのでは?
19仕様書無しさん:2001/04/16(月) 11:03
osiete
20仕様書無しさん:2001/04/16(月) 11:03
templateは、しらんだろう。>ドキュ
21仕様書無しさん:2001/04/16(月) 11:05
C言語を使って彼女を作る方法を教えてくりくり
22 :2001/04/16(月) 11:11
逆にオタク扱いされるかもね。
まぁ「キャー、スゴーイ」とか言ってくれる女性もいるかもしれんけど。
23仕様書無しさん:2001/04/16(月) 11:19
Cのコンパイラをコンパイルする時、なんのコンパイラを使ったの?
コンパイラコンパイラ?
24仕様書無しさん:2001/04/16(月) 11:40
本読んでると「・・・処理系によっては・・・」なんて出てくるけど処理系って何?

コンパイラの事なら言い換える必要ないし・・・・
コンパイラ+パソコンを処理系って言うの?
25仕様書無しさん:2001/04/16(月) 11:57
コンパイラ+OSじゃねぇのか?
16bitと32bitじゃ、int型の大きさも変わってくるだろうから。
26仕様書無しさん:2001/04/16(月) 12:16
>>23

手元に既にある別のコンパイラ。

>>24

その読んでいる本ってのがまともなら、
処理系って単語の定義もまた
載っているんじゃないかと期待。


27仕様書無しさん:2001/04/16(月) 12:53
UNIXの質問が駄目なCプログラマーマスターって
まだこの世にいたんだ。
天然記念物並に扱ってあげないと駄目だね。
28仕様書無しさん:2001/04/16(月) 13:06
>UNIXの質問が駄目なCプログラマーマスター
K&Rが泣くな(笑
29仕様書無しさん:2001/04/16(月) 13:21
C言語が作られた由縁を教えて下さい。
ただし、ぼくの頭は幼稚園児と同じレベルなので幼稚園児にも分かるように短く簡単に説明して下さい。
30仕様書無しさん:2001/04/16(月) 13:35
>>19

template <typename T> T inline min(const T a, const T b) {
return a<b ? a:b ;
}
31仕様書無しさん:2001/04/16(月) 13:59
>>29
アセンブラでは、使いまわすことができないから
32仕様書無しさん:2001/04/16(月) 14:01
>>29
BノツギハC.
33仕様書無しさん:2001/04/16(月) 14:08

ドキュヒッキ−C言語マスター度 査定問題 その 2

---------------------------------------------------

下表は、C言語の進化系列を年代別に表したものである。

IAL (1958)
 ↓
ALGOL60 (1960)
 ↓
■■■ (1963)
 ↓
B (1970)
 ↓
C (1972)
 ↓
K&R C (1978) → C++ (1982)
 ↓
ANSI C (1989)

-----------------

問. 上記■■■にあてはまる言語名を答えよ。

34仕様書無しさん:2001/04/16(月) 14:27
>>33
今となってはどーでもいい知識を試す典型的な悪問だな。
BCPL (1967) は無関係だっけ?まあどうでもいいけど。
3529:2001/04/16(月) 14:40
今度はC++・Javaが出来た由縁を同様にお願いします。
36仕様書無しさん:2001/04/16(月) 14:43
>>34
関係あり
CPL->BCPL->B
37真・要件無しさん:2001/04/16(月) 14:53
>>29
自作ワンボードの8080のアセンブラ(A)で戯れ、ROMライタを手に入れて
ベーシック(B)で遊び、と順調に進んできた人間が次に選ぶ言語として
しー(C)が作られたんよ
他の説明は、後付けで格好つけただけ
38教えて君:2001/04/16(月) 14:59
コンパイルエラーになります。なぜだか分かりません、教えてください。
main()
{
char work_char1,
work_char2;
float rate,rate2;
int count;

count = 1;
rate = 0.5;
work_char = '\n';
rate1 = 0.25;
count = 2;
work_char2 = 'a';
}
3934:2001/04/16(月) 15:05
>>36
だよね。
どうでもよかったけど猛烈に気になって調べたら
http://cm.bell-labs.com/cm/cs/who/dmr/kbman.html
>Users' Reference to B / Ken Thompson
>B is a computer language directly descendant from BCPL
とはっきり書いてあるし。
40仕様書無しさん:2001/04/16(月) 15:35
>>36
そうそう。
だから、C言語の次はD言語じゃなくてP言語だって言ってた。
41仕様書無しさん :2001/04/16(月) 16:32
C++が書かれているのに、Objective-Cが書かれてない。
なぜ??
42仕様書無しさん:2001/04/16(月) 17:43
>>38
2個も変数が定義されてないっす
4338:2001/04/16(月) 17:53
解決しました、ゴメソ。
44ドキュヒッキ−:2001/04/16(月) 17:55
たいした質問こないね。
つうかさC言語もほんとにマスターするのは難しいね。
それと>>24の質問はさ、君そんな事本気でいってるの?
って感じだね。
たぶん俺は2chに来るC使いの中でもかなりハイレヴェルな
方だろうなと思う。とかいってみたり。
45ドキュヒッキ−:2001/04/16(月) 18:00
>>29
C言語が作られた理由は簡単だ。
必要だから。
46ドキュヒッキ−:2001/04/16(月) 18:02
>>41
Objective-Cってなんですの?
オブジェクト指向のC言語って事?
まじでわからんよ。
47ドキュヒッキ−:2001/04/16(月) 18:04
自作自演でした。
48ドキュヒッキ−:2001/04/16(月) 18:08
ヲレもそろそろLinuxマニアになるかな。
49仕様書無しさん:2001/04/16(月) 18:34
>>48
やめとけ
君のキャラじゃヨワスギなのよ、あの板ではな
50ドキュヒッキ−:2001/04/16(月) 18:44
>>49
どういう意味で?
知識が弱すぎって事?
51(-_-):2001/04/16(月) 18:50
全くのPC初心者です
52ドキュヒッキ−:2001/04/16(月) 18:52
>>51
ようこそ!御気楽に!
53仕様書無しさん:2001/04/16(月) 18:56
Linux板は大物ぞろいです
ドキュヒッキーていどでは名無しさんに埋没するだけ
54ドキュヒッキ−:2001/04/16(月) 18:57
ヲレはC言語&MSーDOSの大物だぞ!
55(-_-)51:2001/04/16(月) 19:00
エロ動画の落としかた教えてください。
56ドキュヒッキ−:2001/04/16(月) 19:02
>>55
まずイリアをダウンロードして裏動画の置いてある
ぷにゅ2むにゅというサイトにいきましょう。
57仕様書無しさん:2001/04/16(月) 19:03
ねえ、どうせ立てるなら技術板にしなよ。
ネタならもっと面白くしてよ。
58(-_-)51:2001/04/16(月) 19:05
イリアってゆうのはDLしました。
使い方がよくわからないです。
59ドキュヒッキ−:2001/04/16(月) 19:07
>>57
ネタではない。真剣だ。技術板には「C言語なら俺にきけ」
という名スレがあるのでこっちにたてた。
60ドキュヒッキ−:2001/04/16(月) 19:09
>>58
本気ですか?
61(-_-)51:2001/04/16(月) 19:12
>>60
え?本気だけど。右クリックしてイリアへすべてのURLを送るって
ゆうの押すんですよね?
62仕様書無しさん:2001/04/16(月) 19:20
>>56=1
はぁ〜ぁ。
君はCばかりか、「得ろ獲ろ道」の基本すら理解できていない。

>ぷにゅ2むにゅというサイトにいきましょう。

ばぁーか!
まずは「<動ナビ>さんに行きましょう。」だろうが。
お前は基本からして間違ってんだよ!
もう一度、勉強しなおせ。
63あきばにあ:2001/04/16(月) 21:01
OS−9 C言語っての、1年くらいやってましたが、転職時に
何の役にも立ちませんか?
64仕様書無しさん:2001/04/16(月) 21:08
ぴゅっぴゅっぴゅっぴゅっオナろう触ろう ぴゅっぴゅっぴゅっぴゅっドピュピュピュピュッ
65仕様書無しさん:2001/04/16(月) 21:10
イリアは水素。
66仕様書無しさん:2001/04/16(月) 21:51
このスレがこの板にふさわしい理由を教えれ。
67ドキュヒッキ−:2001/04/16(月) 22:06
>>63
余裕です。
>>66
必要だから。
68仕様書無しさん:2001/04/17(火) 00:17
このスレがこの板に必要な理由を教えれ。
心して答えれ。
真価が問われてるのだ。
69仕様書無しさん:2001/04/17(火) 00:19
>>63
たつ
技術での上司は昔話が好きだから
70仕様書無しさん:2001/04/19(木) 22:19
main(){
char a;
char b;
chg((short*)&b);
}

chg(short* pb){
short c;
c = 2;
*pb = c;
}

bの値が0になっちゃうの。
たすけてよー。
71仕様書無しさん:2001/04/19(木) 23:15
(short)でキャストするのをやめれば、いいんじゃない。
shortって処理系にもよるけど、16bitでしょ。
そこに、"2"をいれてchar型として見ているから
16bitの上位8bitを参照してるのでは?
72仕様書無しさん:2001/04/19(木) 23:31
.cファイルのリストから、.hの依存関係も含めた
makefileを自動生成する方法を教えてください。
73仕様書無しさん:2001/04/19(木) 23:39
>>70 異常終了とかしないだけありがたいと思うべきだと思います。
>>72 LSI C-86試食版に mkdep というツールがありました。それが
そんな感じの働きをしたと思います。たぶんソースくらいはついて
たんじゃないかな。
74>70:2001/04/19(木) 23:46
壱gの容器に弐gの水を入れるようなもんだな。
どうなっても知らんぞ。
75仕様書無しさん:2001/04/19(木) 23:52
>>72
gccで-Mオプション使え。
76あなまにあ:2001/04/20(金) 20:53
初級者→中級者になるために、C言語が勉強出来そうな本ってお勧めありますか?
マジレスでお願いしたいんですけど・・・。
77外付けSCSI:2001/04/20(金) 21:12
>>76
万年初心者の私が言うのもなんですけど、
本ばかりに頼るんじゃなくて、自分でガリガリコード書いて
実際の作業から得られるスキルっていうのを
身につけていくほうがいいんじゃないでしょうか。
「あの本も読んだ!この本も読んだ!あれ・・俺何もできない・・」
って人結構いますよね。

#ちょっと煽りっぽいかも・・ゴメソ
78仕様書無しさん:2001/04/20(金) 21:14
またこんなくそスレがあがってるよ。
もうちょっとマシなスレ見つけたらいいのにね。
>>76
K&Rは読んだ? そのあとはプラットホームと分野に依存じゃない。
79仕様書無しさん:2001/04/20(金) 21:47
初級
コンパイルエラーを解決せよ (1点)

typedef struct
{
 B *b;
} A;

typedef struct
{
 A *a;
} B;

extern A *foo(B *b);
80仕様書無しさん:2001/04/20(金) 22:53
ファイルから縦に並んだdouble型のデータを書式%16.6fで配列に読み込もうとして、
fscanf()関数を使ったら上手くいかない。鬱だ氏脳。

double *x;
x = (double*)malloc(sizeof(double)*num);

for(i=0;i<num;i++){
fscanf(fp,"%16.6f",&x[i]);
printf("%16.6f\n",x[i]);
}

として実行したら、全部0.000000になってしまいました。
ファイルには0.000000のデータは1件だけなのに…
鬱。
81仕様書無しさん:2001/04/20(金) 23:07
>>80
なんでfscanfなの?
82仕様書無しさん:2001/04/20(金) 23:18
>>80
もしかして、改行読み捨てるのわすれてな〜い?
83仕様書無しさん:2001/04/20(金) 23:26
scanf()系でdoubleを読む場合、%lfじゃなかったっけ。
84目のつけ所が名無しさん:2001/04/21(土) 03:28
>>79
うーん。その構造体でコンパイラ通す方法があるの?
わからにゃい。。
8579:2001/04/21(土) 04:20
>>84
あるよ。
1が正解を言うか、泣き言をほざいたら、
答えを書く。
86仕様書無しさん:2001/04/21(土) 05:24
>>79
#define A int
#define B short
とかいうくだらない解答じゃないよな?
87仕様書無しさん:2001/04/21(土) 11:33
>>79
struct A
{
struct B *b;
};

struct B
{
struct A *a;
};

extern struct A *foo(struct B *b);

これでいいのかな?
typedefされてない時点じゃB *b;が使えないって話だよね?
88どっちがすごいの?:2001/04/21(土) 11:44
8979:2001/04/21(土) 11:59
>>87
不正解。問題の意図はそのとおりだけど、
コンパイルエラーは解消できていない。
コンパイルを試してみてから書き込めよ。
自分で試して確認しないやつはプログラマーに向いてない。
9079:2001/04/21(土) 12:00
>>87
もしかして、おまえは1か?
9179:2001/04/21(土) 12:15
お、コンパイルが通る処理系もあるのか……。

こりゃ解答を書いとくか。

struct _A;
struct _B;
typedef struct _A A;
typedef struct _B B;

struct _A
{
 B *b;
};

struct _B
{
 A *a;
};

extern A *foo(B *b);

1に対する挑戦なんだから、野暮なことすんなよ。
92ドキュヒッキ−:2001/04/21(土) 12:19
もっとましな質問はないのかねー?
93バベル:2001/04/21(土) 12:25
Windows上で
送受信のパケット情報を取得解析、放出できるソースを
できるなら簡潔に示してくれ、
言語はBCC55キボーンね。
9487:2001/04/21(土) 13:03
>>89-91=>>79
1じゃないよ。
それと書き込む前にコンパイル通したよ。
2つの処理系で。
つか、どの処理系でも通るものなんじゃないのかな?
まともな処理系なら下のが通るし
下のを通るようにすると>>87も通るようになるもんじゃないかな?
#規約とかじゃ>>87は通ることが保証されてるわけじゃないのだろうけど。

struct A
{
struct A *a;
}
95仕様書無しさん:2001/04/21(土) 13:16
なんか結果的に>>79が一番馬鹿に見えるな
96仕様書無しさん:2001/04/21(土) 13:18
>>95
> 不正解。問題の意図はそのとおりだけど、
> コンパイルエラーは解消できていない。

> コンパイルを試してみてから書き込めよ。
> 自分で試して確認しないやつはプログラマーに向いてない。

このへんが特にな(w
97仕様書無しさん:2001/04/21(土) 13:20
>>79
(模範解答)
そんなあほな構造を設計しない。
98仕様書無しさん:2001/04/21(土) 13:52
>>92
出てくるタイミング的にお前わからないで悩んでたんだろ(藁
99仕様書無しさん:2001/04/21(土) 13:56
>>93
> 言語はBCC55キボーンね。
誰も作らないであろうに一票。
100ドキュヒッキ−:2001/04/21(土) 14:41
質問はオイラの守備範囲以内にしてね。
Hello,worldからwin SDKまでね。
それ以外は興味ないからさ。
それと俺の一番得意なポインタがでてないね。
101ドキュヒッキ−:2001/04/21(土) 14:49
「金持ち父さん貧乏倒産」という本を読んだけど、
面白いね。アメ公が書く本はおもろい本がおおいね。
昔よんだ「お金のことでくよくよするな」 リチャード・カールソン
という本もおもろかったよ。
102仕様書無しさん:2001/04/21(土) 14:49
>>97
激しく同意。
とか思ったり。
103みほこ(ネカマ):2001/04/21(土) 14:52
ドキュヒッキーさん、まるくなってる! マターリ♪
104ドキュヒッキ−:2001/04/21(土) 14:55
>>103
人類みな兄弟。です。
汝の隣人を愛せよ。です。
左の頬をぶたれたら右の頬もさしだせ。です。
105仕様書無しさん:2001/04/21(土) 14:55
ネカマは述べるんじゃねー。うせろ。
106仕様書無しさん:2001/04/21(土) 14:56
ドキュ某もうせろ。うざ。
107みほこ(ネカマ):2001/04/21(土) 14:57
しょぼーん。。
108ドキュヒッキ−:2001/04/21(土) 15:02
>>106
ゴルァ!!何調子ぶっこいてんだよ!くそヲタの分際で!
デブで童貞でパソコンの知識しかないヴォケにうざがられる
筋合いねえんだよ!
ケツを洗って出直してきな!!
10971:2001/04/21(土) 15:12
>>100
>>70,>>79はポインターがらみだと思うけど。
ところで、ドキュヒッキーって若そうだけど年いくつよ?
なんか、自分には人にない特殊な才能があると思い込んでいた
昔の自分を見てるような気がする。
110ドキュヒッキ−:2001/04/21(土) 15:17
>>109
はぁ?
11179じゃないけど:2001/04/21(土) 15:18
>>97 >>102
あんな構造体を使うデータ構造もあると思うよ。
112名無しさん@1周年:2001/04/21(土) 15:21
>>111
再帰構造にしないですむように設計するのが正しいと思われ。
同期デッドロック回避とかいろいろな理由で、そういうデータ構造を
回避する事が設計段階でテクニックとして求められているんだよん。
113仕様書無しさん:2001/04/21(土) 15:22
>>105
君は気づいてないかもしれんが
彼女はホントはネカマじゃないのだよ。
ホントに女なんだ。
114仕様書無しさん:2001/04/21(土) 15:23
WinSDKの質問です。
Console窓でFileDropを受けたいんですが、どうすれば実現可能でしょう?
DOS窓等では、ファイル名がコピペされるようなので、実現不可能
ではないと思うのですが
Console窓のWindowHandleの取得の方法がわかりません。
115ドキュヒッキ−:2001/04/21(土) 15:29
>>114
エラー2:脳みそがコアを吐きました。
116ドキュヒッキ−:2001/04/21(土) 15:31
つうかこのスレ終了。
おつかれさまでした。
117111:2001/04/21(土) 15:47
>>112
同期デッドロックって何?
とか、いろいろ調べてよくわかったよ。
118仕様書無しさん:2001/04/21(土) 18:34
>>115
無能、不能、インポなドキュヒッキ−。
即刻氏んでください。
119仕様書無しさん:2001/04/22(日) 01:15
>マクロはめったな事でつかうなヴァカ!
>俺はマクロ反対派。
ドキュヒッキーの限界は所詮ここまで。

マクロが何故駄目なのか、論理立てて誰でも判るように説明してくれ。
マクロを活用する事によりコーディング量が極端に減る事は誰もが知る所だし、
Xのマクロ提供も知らないんだろうな

ドキュヒッキー、氏ね
120名無しさん:2001/04/22(日) 01:25
ドキュヒッキー、大海を知れ
121仕様書無しさん:2001/04/22(日) 01:46
>>107
なに、カワイコぶってんだよ。
このキチガイが。
俺は忘れねーぜ。
122>114:2001/04/22(日) 01:54
MSDNに載ってるヨ
123(−_−):2001/04/22(日) 04:51
ヒッキ―板から来ました。
誰か、ここのバカスレ主を殺してください。
うちの板にも来て大変迷惑してます。
報酬2000ぺリカでいかがでしょう?
124仕様書無しさん:2001/04/22(日) 11:51
>>1
CのコンパイラをCで書いてそのソースをアプして下さい。
125ドキュヒッキ−:2001/04/22(日) 12:17
>>124
俺のソースは高いよ。
126仕様書無しさん:2001/04/22(日) 12:24
>>1
int と char * を受け取り double を返す関数のポインタのポインタと
10個の要素を持つchar型配列へのポインタを受け取り
char *と可変因数を受け取り
10、20の要素を持つ二次元配列へのポインタを返す関数へのポインタ
を返す関数のポインタ配列(15この要素を持つ)を宣言して下さい。
ただしtypedefを使うことは認めません。
一回の文で記述して下さい。
127ドキュヒッキ−:2001/04/22(日) 12:38
>>126
I am speak English only one.
128みほこ(ネカマ):2001/04/22(日) 13:30
>>121
>俺は忘れねーぜ。

お、覚えられちゃった。。(どきどき)
129仕様書無しさん:2001/04/22(日) 13:37
>>125
買うやつが馬鹿なだけだろ。
130126:2001/04/22(日) 14:17
>>127
Please receive int and char*, receive the pointer of the pointer of the function which returns double, and the pointer to char type arrangement with ten elements, receive char * and the number of Variable number, and declare the pointer arrangement (it has 15 elements) of a function which returns the pointer to the function which returns the pointer to 10 and the 2-dimensional arrangement with the element of 20. However, it does not accept using typedef. Please describe by 1 time of the sentence.
131仕様書無しさん:2001/04/22(日) 15:09
>>127
なに言ってるか分からん。
"I am speak"とか"only one"てなんだよ?
>>130
お前も126と全然違うことを言ってるぞ。
132仕様書なし:2001/04/22(日) 15:13
おおおお!
なんかすごくレベル高そうだなあ、ここ。
初心者の私は見てはいけなかった。

逝ってきます。
133仕様書無しさん:2001/04/22(日) 16:18
>>128

>お、覚えられちゃった。。(どきどき)

バカ、お前を覚えてるんじゃなくて、お前の「キチガイ発言」を覚えてるんだ。
あの発言は、馬鹿さ加減でこの板のBest10に入るぞ。俺のランキングで。
あれほど馬鹿な発言をしておきながら、しかもその後開き直ったからね。

まー、せいぜい精進しろよ。

134DaPyo-n:2001/04/22(日) 16:40
>>126
日本語がスコーシ意味不明ピョン

「可変因数」は「可変(個)引数」でいいの?
「10、20の要素を持つ二次元配列」のデータ型は何?
「一回の文で」って「1行で記述せよ」ってことなの?
「ただしtypedefを使うことは認めません」って言うけどさ、
適切なtypedef宣言できる人って少ないピョン。

結局は「xxx *(*(*func[15])())();」の()を記述すればいいピョン?
135みほこ(ネカマ):2001/04/22(日) 17:25
>>133

キチガイ発言は>>103のことでしょうか。。すみません。
みなさんにマターリしていただきたかったのですが。m(_ _)m ぺこり。。

>バカ、お前を覚えてるんじゃなくて、

なんか、、かわいいですね。(笑)
136仕様書無しさん:2001/04/22(日) 20:56
>>135
なにカマトトぶってんだよ。

このスレの話じゃねーよ。

お前が理解できない発言を「キチガイ」よばわりして、
その発言が真っ当な内容だったと判明すると、
「馬鹿は説明が下手だから読めない」みたいな発言をし、
他の人が、その発言は十分理解できるものだと
言ったにもかかわらず、お前何にも言わなかっただろ。

あの煽りは、寒すぎるし、ひどすぎる。
他人ながら、激しい憤りを感じたぞ。
137仕様書無しさん:2001/04/22(日) 20:57
まぁ、ドキュヒッキーとDel厨とお前と近藤だな。
ここにいらない人間は。
138仕様書無しさん:2001/04/22(日) 21:05
>>136
あのぅ、それ誰かと間違えてるんじゃ
139仕様書無しさん:2001/04/22(日) 23:05
お前、俺達がせっかく問題つくってんのに、1問も答えてないってどういうこと
だよ。>ドキュ
お前、バ〜カだろ?
140仕様書無しさん:2001/04/23(月) 00:26
>>139
いまさらそんなわかり切ったこと書くなよ。
いじって遊びたいのかもしれんが、押すとこ
間違ってるだろ。
どこ押せば鳴くのかすこし興味あるけど、ま、
どうでもいいや。
141ドキュヒッキ−:2001/04/23(月) 05:41
オマエラの質問が難しすぎるだけだろ。
オマエラ俺みたいな初心者つかまえて煽って楽しいか?
142みほこ(ネカマ):2001/04/23(月) 08:54
>>136
壁|_・) だれかと間違えていませんか??
たぶんわたしじゃないですよー。くすん。。
143ドキュヒッキ−:2001/04/23(月) 14:16
>>142
たぶん俺と勘違いしてるんだよ。
俺が以前立てたスレで>>136が言ってるような
事した事あるもん。
144 :2001/04/23(月) 20:35
>>141

>オマエラの質問が難しすぎるだけだろ。
>オマエラ俺みたいな初心者つかまえて煽って楽しいか?

>>1

>俺は完全にC言語をマスターした。
>K&Rもポインタ完全制覇もCプログラミング専門課程
>も理解した。もちろんC FAQもだ。
>そうそう、珠玉のプログラミングもね。
>怖いものはもうない。どっからでもかかってこい。
>どんな質問にも答えてやる。

これは嘘決定っつーことで。

>>142-143

末永くお幸せにな。
145133:2001/04/23(月) 21:27
>>142

すまん。俺の勘違いだった。心から謝る。申し訳ない。

ログを確認したら「ねかま」という名前だった。

本当に申し訳なかった。
146仕様書無しさん:2001/04/23(月) 23:11
>>145
気にするな。
147仕様書無しさん:2001/04/24(火) 01:44
ここはネタすれです。
148139:2001/04/24(火) 12:02
>>141
HAPPY GO LUCKY!
149みほこ(ネカマ):2001/04/24(火) 14:17
>>145
ヾ(´ー`)ノ いえいえ、疑いが晴れたのでよかったです☆
150仕様書無しさん:2001/04/25(水) 19:41
みほこage
151仕様書無しさん:2001/04/25(水) 20:15
みほこnage
152仕様書無しさん:2001/04/25(水) 20:16
You is big fool man.
153仕様書無しさん:2001/04/25(水) 20:57
>>152
You is a big fool man
だ。まちがえるな。
154仕様書無しさん:2001/04/26(木) 00:17
>> 153
あんたも間違えてるよ。
155153じゃないけど:2001/04/26(木) 15:57
>>154
正しくは?
156仕様書無しさん:2001/04/26(木) 16:02
You are big fool man

でわないかと。
157非決定性名無しさん:2001/04/26(木) 16:09
Youが固有名詞だったら間違いではないんだが...
158155:2001/04/26(木) 16:14
>>156
そうだね(笑
中学生れう゛ぇる……
159仕様書無しさん:2001/04/26(木) 16:31
何かのネタだね。
http://piza.2ch.net/accuse/kako/968/968844511.html

元ネタが何なのかは知らん。
160ロジック名無しさん:2001/04/26(木) 17:12
161名無しさん@1周年:2001/04/26(木) 17:46
ハッカ−ジャパンネタじゃねーか
162名無しさん@1周年:2001/04/26(木) 17:46
>>161
ハッカージャパンに載ってたネタってことね。
163名無しさん@そうだ選挙にいこう:2001/04/26(木) 18:16
>>153
 「You is」って、はるか昔、同じ間違いしたサ。英語の小テストで
164仕様書無しさん:2001/04/26(木) 18:30
よくわからんけど
You are
では?
165仕様書無しさん:2001/04/26(木) 18:36
You is のような間違いを鬼の首取ったみたいに指摘し
攻撃して喜ぶくせに、実用的な英語の運用能力は
全くない日本人。

確か You is って大昔にどっかのハッカ気取り
チュボウが犯したミスだよね
166仕様書無しさん:2001/04/26(木) 18:50
>>165
うん。とってもがいしゅつですね。
167名無しさん@1周年:2001/04/26(木) 19:35
大泉洋のが主語だったら間違いであるとはいいきれん。
168仕様書無しさん:2001/04/26(木) 19:58
http://piza.2ch.net/test/read.cgi?bbs=tech&key=987698965

これもドキュヒッキーじゃないの?
169仕様書無しさん:2001/04/26(木) 20:00
>>168
ちょっと違うかと思われ
170ツマル悪魔:2001/04/26(木) 20:02
>>168
なんですの?あんた?
171仕様書無しさん:2001/04/26(木) 23:45
つかそもそもbig fool manなんて言わねえだろって気がするが。
172ドキュヒッキ−:2001/04/27(金) 06:55
ヴァカバッカリ
173ドキュヒッキ−:2001/04/27(金) 07:01
最近わかったんだけどCでグラフィック扱うのは
処理系依存なんだね。どうりで参考書に載ってないわけだ。
ほんとに一つアプリをつくるには処理系独自のライブラリ
をたくさん使わなきゃならないなんて知らなかったよ。
こういう初心者たくさんいるんじゃない?
174仕様書無しさん:2001/04/27(金) 07:11
あんた、本当にC言語しかマスターしてないんだね。
やれやれ
175ドキュヒッキ−:2001/04/27(金) 07:25
>>174
最近VCに移行中ですわ。
あとrubyにチャレンジ中。
176仕様書無しさん:2001/04/27(金) 07:38
>>173
ベーシックユーザーからの昇格によく見られる症状だよ。
すこしは、学習したようだな。
177仕様書無しさん:2001/04/27(金) 09:06
>>174
VBしか出来ない人をVB厨房と言いますが、
Cしかで出来ない人をドキュヒッキーと言う(w
178ドキュヒッキ−:2001/04/28(土) 01:15
きんたの大冒険。
179仕様書無しさん:2001/04/28(土) 02:15
>>177
ドキュはCもまともに出来てないよ。マクロ出来ないんだから、研修卒業してないんじゃないか?
煽りもミエミエで、まぁ、人間として何一つ優れている所なんて無いんじゃないか?
180仕様書無しさん:2001/04/28(土) 02:24
>>179
オマエモナー。
181仕様書無しさん:2001/04/28(土) 23:24
180はドキュヒッキー
182仕様書無しさん:2001/04/29(日) 00:55
>ドキュヒッキ−
>俺は完全にC言語をマスターした。
マジでちょっと喋って見てよ、発音大丈夫?日本語なまりない?
183仕様書無しさん:2001/04/29(日) 01:26
次のポインタの違いわかるか?>ドキュ
わかんなかったら、お前、C言語失格。

char *a[200];
char (*a)[200];
184初心:2001/04/29(日) 01:30
上はポインタの配列。
下は、、??関数ポインタと関係あり??
185仕様書無しさん:2001/04/29(日) 01:37
>>184
両方とも配列だってばさ。
186仕様書無しさん:2001/04/29(日) 01:43
ヒント:

 上は、下の200倍メモリを消費する。
187!184:2001/04/29(日) 02:54
>>185
下は配列??
188仕様書無しさん:2001/04/29(日) 02:58
>>187
配列のポインタとでも逝って置くこととしよう。
189仕様書無しさん:2001/04/29(日) 03:03
>>188
じゃあ配列じゃないよね??
190仕様書無しさん:2001/04/29(日) 03:07
>>189
どちらとも、配列として活用できる。
しかし、これ以上言うと答えを言ってしまうので、だまっていてくれ。
191仕様書無しさん:2001/04/29(日) 03:10
>>190
了解。
192仕様書無しさん:2001/04/29(日) 03:11
C言語は分かり難いね。
char *a[200]; → char *(a[200]);
193仕様書無しさん:2001/04/29(日) 03:37
ObjectPascalで書くとどうなるの?
194ドキュヒッキ−:2001/04/29(日) 08:36
おっとヲレにもわかる問題が出されているな
>>183
上はcharに対するポインタの配列で
下はcharの配列へのポインタ。

下の意味はわからんけどね。
ポインタは複雑すぎてバグの元になるからJavaのほうがいいや。
195初心:2001/04/29(日) 10:31
勉強になるだす。
続けてください。
196出題者:2001/04/29(日) 12:19
>上はcharに対するポインタの配列で
>下はcharの配列へのポインタ。
少し、簡単すぎたようだな。

では、次の問題。

問題. 下記の関数は、整数を、BCDコード(2進化10進符号)
    に変換する関数である。

int int2bcd(int val)
{
int result=0;
int i;
for( i=0 ; val ; i+=4,val/=10 ) {
result |= [ア] ;
}
return result ;
}

[ア] に入る数値式を、iとvalを使って表せ。
197ドキュヒッキ−:2001/04/29(日) 12:30
>>196
難しすぎ。
それよりウルティマやったほうがおもしろいと思ふ。
198仕様書無しさん:2001/04/29(日) 12:37
ドキュヒッキーさんもかわいそうだね〜
199DaPyo-n:2001/04/29(日) 14:26
>>198
激しく同意。BCDコード(2進化10進符号)←古っ。プ
forの中にごちゃごちゃ書くスタイルは嫌いだし、初心者に
見せるべきものでは無いと思われ…
200名前入れてちょ:2001/04/29(日) 14:33
>>196
うーん、難しい。
valがマイナスのときの処理がどうしても出てこない。
とくにval/=10の動作が処理系依存だから、それを吸収するのはもっと
難しい。それとオーバーフローのチェックもね。
これらをiとvalを使った数値式で表現できるとしたら、196はすごい
実力の持ち主かも。(まさかカンマ演算子でだらだら書くとかじゃない
でしょうね)
201d?l?????:2001/04/29(日) 14:38
>>196
う、俺もわからん。マジ鬱だ…。
202d?l?????:2001/04/29(日) 14:40
val<0 のときは置いておくとして、こたえ教えてくらはい。
203ドキュヒッキ−:2001/04/29(日) 14:42
みんなと同意見でほッとしました。
204d?l?????:2001/04/29(日) 14:46
>>203
ドキュヒッキーと同レベルだから、こっちは
鬱になってるんだっつーの。

# しかも、みんな同意見って…。違うだろ。
205出題者:2001/04/29(日) 14:48
[ア] (val%10)<<i だよ。
BCDコードっつ〜のは、下位から4ビットづつを10進数で表す手法のこと。
今じゃ、あんまし使わないけどね。 昔のコンピュータでは、掛け算なんかを
高速化する手法とかでよく使われていたらしいよ。

206仕様書無しさん:2001/04/29(日) 14:49
意外と普通だよ。ドキュヒくん。
問題出してるやつがいじわるなだけ。
素直なドキュの方がイイ感じ。
207ドキュヒッキ−:2001/04/29(日) 14:50
>>205
激しく同意!
208ドキュヒッキ−:2001/04/29(日) 14:51
>>206
激しく同意!!
209出題者:2001/04/29(日) 14:56
情報処理2種じゃ、いまだにこんな問題が出るから怖い....
210仕様書無しさん:2001/04/29(日) 14:57
>>207 のドキュヒキ
何に同意してるのか知らんが、意外と素直なのね
211d?l?????:2001/04/29(日) 14:58
もいっこ出題してもらえません? 悔しすぎる。
212仕様書無しさん:2001/04/29(日) 14:59
今からこのスレは、リアルドキュソのドキュヒッキーを
みんなで温かく見守り、指導し、成長させるスレです。
213仕様書無しさん:2001/04/29(日) 15:05
それは面白そう。
214出題者:2001/04/29(日) 15:16
>>200
マイナスの時を考えると、こうなる。
先の出題は、プラス方向のみ。
問題が複雑化するので省略した。

int int2sbcd(int sval)
{
 int result=0;
 int i, val = sval>0 ? sval : -sval ;
 for( i=0 ; val ; i+=4,val/=10 ) {
  result |= (val%10)<<i ;
 }
 return sval>0 ? result : -result ;
}

215ドキュヒッキ−:2001/04/29(日) 15:17
それではこちらから問題を出そう。
CからC++に移行するのに普通の人の平均習得時間を
述べよ。またCからJavaに移行するのとどっちが
最終的に得か理論立てて述べよ。
216仕様書無しさん:2001/04/29(日) 15:20
ドキュヒさんは仕事中なんですか?
だとしたらお疲れ様。
217仕様書無しさん:2001/04/29(日) 15:20
指導するヤツのレヴェルと、ドキュヒがどれを信じるかによって、
スーパーハカーとかVB厨とかになったりするんだね。
218仕様書無しさん:2001/04/29(日) 15:23
そだね。
219ドキュヒッキ−:2001/04/29(日) 15:30
ゴールデンウイーク中。
スーパーハカーになりたいけど、
ウルテマが面白くてウルテママスターにもなりたい。
220名前入れてちょ:2001/04/29(日) 15:33
>>214
二進化十進数なのに、マイナス演算子使って問題ないの?
それにオーバーフローの場合がやっぱりわからない。

二進化十進数は今でも結構使うよ。RTCのデータ形式とかはほとんど二進化十進
だからね。
221ドキュヒッキ−:2001/04/29(日) 15:33
思うんだけどさ、プログラムも知らないくせにSEに
なりたいとか言ってる奴よりヲレのほうがマシだと
オモワレ。
222仕様書無しさん:2001/04/29(日) 15:38
>>221
マジレス。それは言えてる。
223ドキュヒッキ−:2001/04/29(日) 15:56
>>222
ありがとう(涙。
224仕様書無しさん:2001/04/29(日) 16:03
>>221
そんな奴が五万といるだろうな。

SE板っての作ったら
以外とPG板よりも人数がいるかもな。
225仕様書無しさん:2001/04/29(日) 16:13
くだらんSEはたっくさんいる。
あんなんなるんだったらプログラマの方がマシ。
226出題者:2001/04/29(日) 16:17
>>211
じゃあ、次の問題ね。

問題. 次の整数xを配列a[1]〜a[n]までの配列から番兵を用いて導き
    出す関数を完成させなさい。 ただし、戻り値は、配列のイン
    デックスとする(0で未検出)。

int search(int x,int a[],int n)
{
 int *p = &a[n] ;
 a[<ア>] = x ;
 while(<イ>) p--;
 return (int)(p-a)/sizeof(<ウ>) ;
}

<ア>〜<ウ>にあてはまる数式、もしくは、型名を答えよ。
227 :2001/04/29(日) 16:18
>>215
経験則では、Cを習得するのに要した時間の4倍。
228仕様書無しさん:2001/04/29(日) 16:22
2種みたひ
229出題者:2001/04/29(日) 16:28
>二進化十進数なのに、マイナス演算子使って問題ないの?
処理系によって、右往左往。
230出題者:2001/04/29(日) 18:00
>それにオーバーフローの場合がやっぱりわからない。
こんくらい、自分で考えろや。
教えとくから。

#define MAXINTBITS 32 //4の倍数

int int2bcd(int val)
{
 int result=0;
 int i;
 for( i=0 ; val ; i+=4,val/=10 ) {
  result |= (val%10)<<i ;
 }
 if(i>MAXINTBITS) {
  /* オーバーフロー */
 }
 return result ;
}

231 :2001/04/29(日) 18:07
>>230
だんだん増えてる……
232220:2001/04/29(日) 18:09
>>230
符号付き整数がオーバーフローしたとき、例外が発生するかどうかは処理系定義で
例外が発生したときの動作は未定義なはずでしょ。
i+=4を繰り返してクラッシュした後ではif(i>MAXINTBITS)としてみても手遅れでは?
233出題者:2001/04/29(日) 18:14
じゃあ、これでどうだ。

#define MAXINTBITS 32 //4の倍数

unsigned int int2bcd(unsigned int val)
{
 unsigned int result=0;
 int i;
 for( i=0 ; val ; i+=4,val/=10 ) {
  result |= (val%10)<<i ;
 }
 if(i>MAXINTBITS) {
  /* オーバーフロー */
 }
 return result ;
}

234出題者:2001/04/29(日) 18:16
ていうか、俺は、BCD表記の例問題を作っただけだから...
ここまで、やる必要あるのか?
235通りすがり:2001/04/29(日) 18:19
>>226
こっちはもっと難しい。
題意が意味不明な上に、nが負の場合の処理を<ア>〜<ウ>の中で吸収しな
ければならないとは。

(int)(p-a)/sizeof(<ウ>)

の部分で、(int)(p-a)が負になったとき、sizeof演算子が返すsize_tに
合わせてsize_t型に変換されるか、それともsizeof(<ウ>)の方がint型
に変換されるかは処理系依存ですよ。後者の場合、除算の振る舞いも処理
系依存になる。前者の場合は整数の負値の内部表現にまで依存してしまう。
これらを<ア>〜<ウ>の中でどうやって吸収するの?
236出題者:2001/04/29(日) 18:20
>i+=4を繰り返してクラッシュした後ではif(i>MAXINTBITS)としてみても手遅れでは?
シフト演算に例外は、発生しないよ。常識常識。

237出題者:2001/04/29(日) 18:22
>>235
ば〜かだな。
番兵があるから、絶対負にはならないんだよ。
238出題者:2001/04/29(日) 18:23
>>235
答え、わかったか?
239出題者:2001/04/29(日) 18:25
>処理系依存ですよ。
そんなでかい数値はここでは、扱わないよ。
240出題者:2001/04/29(日) 18:32
>>235
(p-a) ← この時点で常に正だよ。
機械語の加算命令の常識を君は、知っているよね?
241出題者:2001/04/29(日) 18:34
>>235
sizeof()は、整数に決まっているだろうが!!
242通りすがり:2001/04/29(日) 18:35
>>236
シフト演算のことなんて言ってないよ。
val/=10で割っていった場合、valが負の場合は永久に0にならないかも知れない
ということ。
その場合、i+=4の結果がINT_MAXを超えた時点でクラッシュする。

>>237
int search(int x,int a[],int n)という関数はどうやって nに負が渡される
ことを禁止できるの?
243出題者:2001/04/29(日) 18:39
>val/=10で割っていった場合、valが負の場合は永久に0にならないかも知れない
ということ。
ばかか、お前は。 どんな数でも、2以上の整数で割っていけば、0になるよ。
>int search(int x,int a[],int n)という関数はどうやって nに負が渡される
ことを禁止できるの?

しょうがない、答えを教えるよ。

 ア = 0
イ = *p!=x
ウ = int*

番兵勉強しなおせ!

244出題者:2001/04/29(日) 18:50
まとめて書いておくことにするよ。

 番兵による高速検索法

ここでは、 int a[n+1] の配列を用いることを a[1]〜a[n]であるこ
 とに起因させている。 問題定義は、配列a[1]〜a[n]の中からxを探し
 あてること。


問題. 次の整数xを配列a[1]〜a[n]までの配列から番兵を用いて導き
    出す関数を完成させなさい。 ただし、戻り値は、配列のイン
    デックスとする(0で未検出)。

回答.

int search(int x,int a[],int n)
{
 int *p = &a[n] ;
 a[0] = x ;
 while(*p!=x) p--;
 return (int)(p-a)/sizeof(int*) ; //もしくは、sizeof(p)
}
245出題者:2001/04/29(日) 19:05
だれも、nが負だとは、いってないだろ。
通りすがりのくせに、すげ〜陰険だな。
じゃあ、この一言を追加しておくよ。
※nは、常に正の数とする。
世話がかかる野郎だ。
君の感覚で情報処理受けに行ったら、即効、落ちるね。
だって、nが負かどうかで、迷ってしまうくらいなんだから、
そんなこんなで試験時間の大半ロスしちまうんじゃないの?
バカじゃなきゃ、常識的にわかるだろうが。
246ドキュヒッキ−:2001/04/29(日) 19:05
キミ達はハイレヴェルだねぇ。
247出題者:2001/04/29(日) 19:11
通りすがりみたいな奴と、組んでプログラムは組みたくないな。
どうでもいいことに首つっこんで、仕事だいなしにしそう。
248仕様書無しさん:2001/04/29(日) 19:12
段平?
>>245
受かりました。
249出題者:2001/04/29(日) 19:36
>>248
じゃあ、ただの陰険野郎ってことだね。
250211:2001/04/29(日) 19:47
>>226
ありがとう。でも、最後間違えちゃった…。
 ア: 0
 イ: *p!=x
 ウ: a[0]
にしちゃったよ…。うぅぅぅ。

今後も問題出してくれれば、がんばって考えますので
よろしくです。
251ドキュヒッキ−:2001/04/29(日) 19:49
ヲレの出番がすでにない・・・
252出題者:2001/04/29(日) 20:10
>>250
>ウ: a[0]
それでも、問題ないよ。 おいらが書き忘れただけさ。
253出題者:2001/04/29(日) 20:19
>>250
>ウ: a[0]
いや、間違いだったね。
ウソついてしまった。>>252 ごめん。
a[0]つかいたければ、 ウ: &a[0] かな?
上記のやり方だとコンパイラによっては、解釈の仕方が変わってくる
から、あまり使わないほうがいいかもしれない。

254211:2001/04/29(日) 20:22
>>252
いや、アドレス長だから int * でないと…、
ん〜、いや a[0] でもいいのかな…。そしたら
int * って結果的には正しいけど、意味的に
変でないすか? char の配列のとき char * で
割ることになるし…。

あーオレ頭わりい
255DaPyo-n:2001/04/29(日) 20:58
はぁ〜。もしかすると俺がドキュソかなぁ?
なんで「return (int)(p-a);」じゃ無いの?
宇津田…詩嚢
256211:2001/04/29(日) 21:08
んー、((int)p-(int))a/sizeof(int a[0])
か、(int)(p-a) かなぁ。

#include <stdio.h>

int search(int x,int a[],int n)
{
 int *p = &a[n] ;
 a[0] = x ;
 while(*p!=x) p--;
 return (int)(p-a)/sizeof(&a[0]) ;
}

main(){
 int array[]={0,1,4,5,7,8,11};

 int n;

 n = 1; printf("found %d in array[%d]\n", n,
        search(n, array, sizeof(array)/sizeof(array[0])));
 n = 8; printf("found %d in array[%d]\n", n,
        search(n, array, sizeof(array)/sizeof(array[0])));
 n = 3; printf("found %d in array[%d]\n", n,
        search(n, array, sizeof(array)/sizeof(array[0])));
}

だと、
 found 1 in array[0]
 found 8 in array[1]
 found 3 in array[0]
となっちゃった。FreeBSD 4.2-RELEASE+gcc-2.95。
257211:2001/04/29(日) 21:10
>>256
> んー、((int)p-(int))a/sizeof(int a[0]) か、(int)(p-a) かなぁ。

全然違うじゃん。

((int)p-(int)a)/sizeof(a[0]) か、(int)(p-a)、でした。
まだ間違ってる?
258211:2001/04/29(日) 21:14
>>253
あと、&a[0] の解釈がコンパイラによって違う、について
詳しく教えて下さい。
259仕様書無しさん:2001/04/29(日) 21:24
うわ、知らなかった。
↑の例を手元のVC++で中身を表示させてやってみたら、
p:1245032 a:1245028 p-a:1 (int)(p-a): 1
found 1 in array[0]
p:1245048 a:1245028 p-a:5 (int)(p-a): 5
found 8 in array[1]
p:1245028 a:1245028 p-a:0 (int)(p-a): 0
found 3 in array[0]
だって。
260出題者:2001/04/29(日) 21:59
>>258
&a[0]をポインタと解釈する処理系と、
&a[0]をa自体を表すこととして、aのサイズが不明と返す
2系統のコンパイラ。
261出題者:2001/04/29(日) 22:07
やっぱ、例題がまずかったか?
VC++も、癖、強いから。
処理系依存か?
gccだと、とおるんだが...
262仕様書無しさん:2001/04/29(日) 22:11
つーか、君たち、板違いだっつーの。
263出題者:2001/04/29(日) 22:11
たぶん、下記で全てのコンパイラで通ると思う。
((int)p-(int)a)/sizeof(p)
オフセット値が変換される処理系とそうでない処理系と2種類あるから
なんとも言い難いが...
264出題者:2001/04/29(日) 22:16
オフセット値を考慮しない処理系は、例えば、ポインタ同士の
アラインメントが揃ってないときとかに問題があるからで、VC++は、
少し問題だな... アラインメントが揃ってないときに問題がすごい
出そうな気がする。
265出題者:2001/04/29(日) 22:33
アラインメントが揃っていない例として、
たとえば、下記の例題をコンパイルしてみると、どう表示される?

void main()
{
char buffer[256];
int *p,*a;
a=(int*)&buffer[0];
p=(int*)&buffer[5]; //bufferの5バイト目にセット。
printf("p-a:%d",(int)(p-a));
}

これで、1とか表示されたら、ショックだな....

VC++の場合は、さっき、intであらわしちゃったけど、
明示的に (int)((char*)p-(char*)a) にしないと、
ただしいオフセット位置が検出できないって事か....
なんか、奇妙だな。

266211:2001/04/29(日) 22:40
>>261
> gccだと、とおるんだが...
>>256 でも書きましたが、gcc-2.95 でも >>259 の VC++ と
同じ結果になりました。

>>260
> &a[0]をa自体を表すこととして、aのサイズが不明と返す
それって ANSI C に準拠してますか? &a[0] じゃなくて &a と
勘違いされてませんか? ANSI C 以前は &a は文法エラーも
ありえましたが。

あと、ちと調べてみましたが、ANSI C では「ポインタ同士の
減算の結果は要素数となる」ことが保証されていませんか?
ということは

>>263
> オフセット値が変換される処理系とそうでない処理系と
> 2種類あるからなんとも言い難いが...

これは ANSI C 以外の処理系もカバーしたい、という意図でしょうか?
267211:2001/04/29(日) 22:42
>>265
gcc-2.95.3 では 1 でした。
268通りすがり:2001/04/29(日) 22:42
>>243
除算演算子の各オペランドの符号が異なる場合、結果が代数学上の商より大きい整数値
になるか小さい整数値になるかは処理系依存。
つまり、-1/10が-1になるかもしれないということ。

>>245
ただし書きがなければ、nの定義域がINT_MIN〜INT_MAXになることを想定するのは
あたりまえのこと。

いっそ全然動かないコードならあっさり捨てられて害がないけど、ある程度動くから
始末に終えない。それを生かすために多大なコストを払わされるからね。
いわば対人地雷に匹敵するぐらい悪魔的じゃないの。
269出題者:2001/04/29(日) 22:44
これは、通る? 211さん。

main(){
 int array[7]={0,1,4,5,7,8,11};

 int n;

 n = 1; printf("found %d in array[%d]\n", n,
        search(n, array, 7 ));
 n = 8; printf("found %d in array[%d]\n", n,
        search(n, array, 7 ));
 n = 3; printf("found %d in array[%d]\n", n,
        search(n, array, 7 ));
}


270211:2001/04/29(日) 22:47
>>269
ん〜、コンパイルが通るか?という意味なら、通りました。
gcc-2.95.3 です。
271出題者:2001/04/29(日) 22:48
>>270
実行結果は、前と変わらない?
272211:2001/04/29(日) 22:51
>>271
同じです。ちょっと意図がわからんのですが…。
int array[]={0,1,4,5,7,8,11} で、
sizeof(array)/sizeof(array[0]) != 7 となる
場合を疑っておられる?
273仕様書無しさん:2001/04/29(日) 22:55
って有価、板違いだって、あんたたち。
274出題者:2001/04/29(日) 22:56
と、もう一つ。

int search(int x,int a[],int n)
{
 int *p = &a[n] ;
 a[0] = x ;
 while(*p!=x) p--;
 return (p-a);
}

いつから仕様変更になったんだろう?
5年前のCなら、通ってたのに。
275通りすがり:2001/04/29(日) 22:57
>>240
もうわかっていると思うけど、そんなことはないよ。nが負の場合にはね。

>>241
sizeofの結果は符号なしの汎整数型だからunsigned shortとかでもOK。つまりint型
より小さいかもしれないということ。この場合、除算の前にint型に型変換されること
になる。

基本的な部分が理解できていないから、return (int)(p-a)/sizeof(int*) ;みたいな
バカなことを書くことになるの。
そもそもダブルスラッシュを使っていることからみてC99だと思うけど、それなら、
int a[*]として渡した方がずっと安全だよ。まあ、初心者相手にC99を持ち出すこと
自体どうかしているというのは置いといて。
276通りすがり:2001/04/29(日) 23:02
>>274
言語仕様がかわったのは1999年12月1日だよ。Amendment1は1994年だけどね。
でも、そんな基本的なところは全然変わってない。
5年前のCっていうのはそれ自体おかしいんじゃ。(バグだらけとか、Cもどきとか)
277211:2001/04/29(日) 23:09
>>276
釈迦に説法でしょうが、「言語仕様が変わった」という表現はどうでしょうか。
「新しい C 言語の規格が決まった」くらいで。

ちなみに C99 ちうのは ISO/IEC 9899:1999 のことで、
http://www.geocities.co.jp/SiliconValley/1002/c99d/ を参照のこと。
gcc の対応状況については、http://gcc.gnu.org/gcc-3.0/c99status.html
http://gcc.gnu.org/c99status.html

ところで、Amendment1 って知らないのですが、これは何でしょうか?
278通りすがり:2001/04/29(日) 23:17
>>277
>釈迦に説法でしょうが、「言語仕様が変わった」という表現はどうでしょうか。
>「新しい C 言語の規格が決まった」くらいで。

まあ言い方はどっちでもいいけど。

>ところで、Amendment1 って知らないのですが、これは何でしょうか?

日本語で何ていったか(JIS X3010規格の中での用語)は忘れたけど、
__STDC_VERSION__マクロの追加や<:などの二文字表記が使えるように
なったという些細な変更と、iso646.h, wctype.h, およびwchar.hを
追加したもの。
279出題者:2001/04/29(日) 23:25
まあ、いいや。
ボロだしたから、このスレ降りるわ。
後は、お好きにどうぞ。
ストーカーみたいにしつこい奴がいるし。
だけど、俺が間違えたのは、1カ所だけだ。
通りすがりの言うことが100パーただしいわけじゃないから
みんな、洗脳されないように、気をつけるように。
今度、問題だして欲しかったら、別スレでも立ててくれ。
では。
280DaPyo-n:2001/04/29(日) 23:45
>>279
逝って良し。半可通&中途半端だよ、出題者さん。洗脳って?

人を試すために出題するのであれば、最低限実行確認くらいしろって。
大体searchの関数型はptrdiff_tだよ。せいぜいunsigned int にしておけよ。
そうすれば、俺の嫌いなキャスト(int)をしなくてもいいだろ?
281出題者:2001/04/30(月) 01:24
頭の中で、作った問題集だから。
なんかの拍子で、海馬体に遮蔽が生じたんだと思う。
眠かったし...。
2ちゃんに真面目に書き込みしにきてるわけじゃないからね、
どっか、すっとぼけていたんだよ。
こっちも、ストレス発散のために書きに来ているから、一番
リラックスするときで、そういうときに、ミスが多いんだよね。
わるかったよ。 これから、気をつけるよ。
282仕様書無しさん:2001/04/30(月) 01:41
>>281
気にすんなって。楽しかたアルよ
283DaPyo-n:2001/04/30(月) 12:42
>>281
ちょっと(他の件で)むかついていたから、言いすぎたみたいだ。スマソ
でも、本気で書いているわけではないので。280のmail欄を見ておいてくれよぉ
284出題者:2001/04/30(月) 15:57
みんな、、ありがとう。
うぅぅぅぅ。 泣けてくるよ〜。
285通りすがり:2001/04/30(月) 18:09
>>284
今度はきちんと単体テストを済ませてから出題してちょうだい。
286仕様書無しさん:2001/04/30(月) 18:13
うんうん、いいはなしだぁ〜ぐすん。
まさかプログラマ板で見れるとは。
287211:2001/04/30(月) 18:15
おもしろかったっすよ〜。いい勉強になりました。

Amendment1 についてもありがとう>278
288出題者:2001/04/30(月) 18:34
>>285
了解。 これからそうすることにするよ。
ちょっと、ポインタの勉強になったよ。

>>211

 もし、ポインタ演算のC言語の仕様が要素数ではなくて、ポイ
 ンタの絶対オフセットで定義されていた場合、ウの回答は、キ
 ミの答えで合っていたね。

  sizeof(int*) じゃなくて、正しくは、 sizeof(int)。

 まとめて、書くとこんな感じです。

  return (int)((char*)p-(char*)a)/sizeof(int) ;

 p-a が要素数を返すので、簡単に書くとこうです。

  return p-a ;

 気が付いたら、間違いだらけだった。 うわ〜。 ショック。
289出題者:2001/04/30(月) 19:42
めげずにもう1問。
今度は、デバッグかけたから大丈夫だ。

例題.

 A君は、小さい順に並んだna個の整数配列 a[0]〜a[na-1] と、
 小さい順に並んだnb個の整数配列 b[0]〜b[nb-1] を
 マージして、小さい順に並んだ一つの配列 c[0]〜c[na+nb-1] を
 作りたいと思っている。

  int i, j, k ; i = j = k = 0 ;
  while( i < na && j < nb ) {
  if(『ア』)
  c[k++] = a[i++] ;
  else
  c[k++] = b[j++] ;
  }
  while(『イ』) c[k++] = a[i++] ;
  while(『ウ』) c[k++] = b[j++] ;

 上記プログラム 『ア』〜『ウ』 に入る適切な評価式を答え、
 A君の望みを叶えてあげなさい。
290出題者:2001/04/30(月) 19:45
ちょっと、みにくかったから、もう一回書き直し。

例題.

 A君は、小さい順に並んだna個の整数配列 a[0]〜a[na-1] と、
 小さい順に並んだnb個の整数配列 b[0]〜b[nb-1] を
 マージして、小さい順に並んだ一つの配列 c[0]〜c[na+nb-1] を
 作りたいと思っている。

 int i, j, k ; i = j = k = 0 ;
 while( i < na && j < nb ) {
  if(『ア』)
   c[k++] = a[i++] ;
  else
   c[k++] = b[j++] ;
 }
 while(『イ』) c[k++] = a[i++] ;
 while(『ウ』) c[k++] = b[j++] ;

 上記プログラム 『ア』〜『ウ』 に入る適切な評価式を答え、
 A君の望みを叶えてあげなさい。
291仕様書無しさん:2001/04/30(月) 20:34
ア:a[i] < b[j]
イ:i<na
ウ:j<nb
かな。
292通りすがり:2001/04/30(月) 21:46
>>290,291
今度は動きそうだ!
293出題者:2001/05/01(火) 12:31
291さんの答えで合ってる。
そろそろ疲れてきたので、この辺で少し休憩させてくれ。
294仕様書無しさん:2001/05/08(火) 00:52
さらしage
ドキュヒッキー氏ね
295仕様書無しさん:2001/05/08(火) 01:39
なんだか難しい問題がつづいてたみたいですね ちょっとレベルを落としましょうよ〜

もんだい1:下の@とAの標準出力にでてくる結果は一致しますか?それともしませんか?
もんだい2:各々の標準出力にでてくる結果はなんですか?
もんだい3:Aのようなポインタ操作をするときに気をつけることはなんですか?

32bitCPUでうごくOS上のPGと考えてください。

@PG1
main()
{
long lValue = 0x7FFFFFFF ;
float fValue = 0x7FFFFFFF ;

if ( 0 == memcmp( &lValue , &fValue , 4 ) ) printf( "lValue=fValue\n" ) ;
else printf( "lValue != fValue\n" ) ;
}

APG2
main()
{
long lValue = 0x7FFFFFFF ;
float fValue ;

*( ( long * )&fValue ) = lValue ;

if ( 0 == memcmp( &lValue , &fValue , 4 ) ) printf( "lValue=fValue\n" ) ;
else printf( "lValue != fValue\n" ) ;
}
296出題者:2001/05/08(火) 03:24
こたえ1: しない。
こたえ2: @ lValue != fValue (フロートのケタ落ち&longとfloatのメモリ形状の不一致)
      A lValue = fValue
こたえ3: メモリ上でのコンペアでは、問題ないが、型がフロートなので、
      ロングとして代入された値は、NANになる。
      *( ( long * )&fValue ) = lValue ;
       ↑ 型名がわかってて、こんなバカなことをイチイチする人は、
         まずいないだろう。
      ある1メモリ域に対して違う型を扱う場合は、普通、共用体を使うのが
      ただしいやり方だろう。
297仕様書無しさん:2001/05/08(火) 04:32
>      ある1メモリ域に対して違う型を扱う場合は、普通、共用体を使うのが
>      ただしいやり方だろう。
なにが正しい使い方かは知らないがいつもポインタを通して
違うポインタ形にキャストしてつかってるなぁ、共用体を使った
ことは2,3回しかない。
298仕様書無しさん:295:2001/05/08(火) 12:21
>>296
いちいち共用体つくるのめんどくさいんですもん (^_^;
あと、プラントなんかだとNANになる値を扱う分野というのもあったりします。
(センサーが壊れたときの無効値とか)

>>297
処理系とアドレス型によっては、バウンダリのブービートラップに
はまって「???」なこともあったりします (^_^;
こういうキャストはあまり好ましくないと思われます。
299297:2001/05/08(火) 12:45
>>298なるほどたしかに良くない良くない・・・
300ドキュヒッキ−:2001/05/08(火) 15:51
オイラは最近、心が病にかかったのでもう2ch
には2度とこない。
301仕様書無しさん:295:2001/05/08(火) 18:22
>>297
覚悟のバカキャストなら大丈夫ですよ(笑)
includeファイルさわっちゃダメとかいうご無体な指令が来ることがあるときなんかも
使ってたりします(どことは言わない某銀行)
302死要書無しさん:2001/05/09(水) 00:06
>301
そうさ、上司の指令がバカくさければ、複雑なコーディングを組んで、
一般のプログラマからは、想定できないほど、バカみたいに複雑化して
やればいいさ。 引継ぎが大迷惑を被るだろうけど...
303通りすがり:2001/05/09(水) 22:56
>>296
もんだい1の答えだけど、必ずしも一致しないとは限らないよ。
long型もfloat型も実際に何バイトの型になるかは処理系依存だし、ビッグエンディアン
の場合には、先頭4バイトに0が埋められてたまたま一致してしまうことがないとは言い
切れない。

共用体の場合、代入した値を異なるメンバを使ってアクセスした場合の動作は一切保証
されないことが規格で定められているので、あまり感心できる方法じゃないね。
304仕様書無しさん:2001/05/09(水) 23:13
RAMが足りないため、char型の配列を大量に取って、使いまわしてる
プログラムを見たことがある。
int型もキャストして無理やり代入している。
8bitなんでRAMが少なくしょうがないんだが、馬鹿な後輩は「すごいテクニック」
と感心していた。
感心するのはいいけど、安易に真似したらぶっ殺してやる。
305非決定性名無しさん:2001/05/09(水) 23:38
>>304
領域の事前一括確保なんて、そんな珍しい技じゃないと
おもうが。
意味不明なほどのキャストの嵐で、ソースは死ぬほど見苦
しくなるだろうけど。
306出題者:2001/05/10(木) 01:55
NANを使いたければ、#defineマクロを一つ作っておき、違う処理系でも
簡単に修正できるように、ヘッダに明記すべきところ。

#deinfe NANVALSET_FLOAT(a) (*(long*)(a)=0x7FFFFFFF)
307出題者:2001/05/10(木) 01:57
間違えた

 × #deinfe NANVALSET_FLOAT(a) (*(long*)(a)=0x7FFFFFFF)
 ○ #define NANVALSET_FLOAT(a) (*(long*)&(a)=0x7FFFFFFF)
308出題者:2001/05/10(木) 02:02
>>303
その前に、ビッグエンディアンでも、ケタ落ちで既に一致しないよ。
それに、32ビット処理系では、残り4ビットも残っていない。
0x7FFFFFFFFは、残り、1ビットだよ。
309出題者:2001/05/10(木) 02:10
>>303
いくら、ビッグエンディアンでも、LONG_MAXの値を代入していて
4バイト全てが0とういのは、どうみても、そのコンピュータが
壊れているとしか思えない。存在していたら、教えて欲しい。
310マックプログラマ:2001/05/10(木) 02:28
>>303
ビッグエンディアンでも、そんな事は、絶対ありえません。
通りすがりさん、素人光線、丸出しです。
311仕様書無しさん:2001/05/10(木) 10:52
配列sがあります。この配列を調べて、4以下の数があれば配列aに、6以上の数が
あれば配列cに格納するプログラムを作成して下さい。
312仕様書無しさん:2001/05/10(木) 11:31
>>311
・sizeof s, sizeof a, sizeof cは一致する事が前提
・配列の型は?(一応intと仮定)

static int is4le(const int *, size_t);
static int is6ge(const int *, size_t);

int main(void)
{
  int s[10], a[10], b[10];
 
  if(is4le(s, sizeof s)){
    memcpy(a, s, sizeof s);
  }
  if(is6ge(s, sizeof s)){
    memcpy(c, s, sizeof s);
  }
  return 0;
}

/* 4以下の数があれば真を返す */
static int is4le(const int *ptr, size_t siz)
{
  size_t max = siz / sizeof ptr[0];
  int i;
  for(i = 0; i < max; i++) {
    if(ptr[i] <= 4) {
      return 1;
    }
  }
  return 0;
}

/* 6以上の数があれば真を返す */
static int is6ge(const int *ptr, size_t siz)
{
  size_t max = siz / sizeof ptr[0];
  int i;
  for(i = 0; i < max; i++) {
    if(ptr[i] >= 6) {
      return 1;
    }
  }
  return 0;
}
313仕様書無しさん:2001/05/10(木) 11:51
>>312
すばらしい
314通りすがり:2001/05/10(木) 12:37
>>310
long型が8バイト以上の場合を想定して言ってる?
315通りすがり:2001/05/10(木) 12:42
少し補足すると、long型は少なくとも-2147483647〜+2147483647の範囲を
表現できればいいから、大きい分には何百バイトあっても規格上はOKだよ。
316仕様書無しさん311:2001/05/10(木) 13:29
配列int sがあります。この配列を調べて、4以下の数があれば配列int aに、6以上の数が
あれば配列intcに格納するプログラムを作成して下さい。
配列s = {2, 657, -7, 1, -9, 10}

317仕様書無しさん:2001/05/10(木) 14:31
# やべ、振り分けのスペルが思い浮かばねぇ
# もっとカッコイイ関数名にしてくれ
static void furiwake(const int *, size_t, int **, int **);

int main(void)
{
  int s[] = { 2, 657, -7, 1, -9, 10};
  int a[10], c[10];
  int *pa = a;
  int *pc = c;
 
  furiwake(s, sizeof s, &pa, &pc);
  return 0;
}

/* sをaとcに振り分ける */
static void furiwake(const int *ptr, size_t siz, int **a, int **c)
{
  size_t max = siz / sizeof ptr[0];
  int i;
  for(i = 0; i < max; i++) {
    if(ptr[i] <= 4) {
      **a = ptr[i];
      (*a)++;
    }
    if(ptr[i] >= 6) {
      **c = ptr[i];
      (*c)++;
    }
  }
  return 0;
}

# 要素数はpa - a, pc - cでそれぞれ求められる
318仕様書無しさん:2001/05/10(木) 15:51
>>317
わざわざ pa, pc を用意する必要性とは?

# furiwake が嫌なら furikake かな。
319317:2001/05/10(木) 18:17
>>318
> わざわざ pa, pc を用意する必要性とは?
pa, pcがないと配列のどこまでにデータが入っていて、
どこまでがゴミデータか判断できない。
# まぁ、振り分ける「だけ」なら要らないけど
320出題者:2001/05/11(金) 01:42
>>314
その前に、キミの解答が聞きたい。
こたえ3にキミは、どのように、書くのか、すごく気になる。
321仕様書無しさん:2001/05/11(金) 02:03
初心者です。
Cを勉強中なのですが、C++はCが使えたらスムーズに扱えるものですか?

C#というものをあちこちで目にするのですが、C++とどう違うのですが?
322仕様書無しさん:2001/05/11(金) 02:07
>>321
スムーズには無理。
323出題者:2001/05/11(金) 02:20
>>321
1.クラスによる、スコープの制限、メソッドの変数参照短縮化、関数の構造化
2.継承による、クラスメソッドの拡張性
3.オペレータによる、変数演算の短縮化
4.仮想関数による、継承クラスを基クラスに逆算参照させる仮想化
5.テンプレートによる、クラスの型参照の自由性

上記、1〜5のことを分かるまで、大体2週間程度かかる。
あとは、コードを書いてコンパイラでデバッグしてけば、そのうち、慣れる。
324通りすがり:2001/05/11(金) 09:02
>>320
こたえ3:
こんなポインタをしてはならない。理由としては、
long型とfloat型の大きさが一致するとは限らないこと、
境界整列が合致するとも限らないことがあげられる。
これは何ビットのCPUを使用しているかは無関係。

もし、処理系を特定して使用する場合には、その旨を
コメント等で明記した上で、

#ifndef _MSC_VER
#error "This compiler or platform is not supported!"
#endif

のようにしておくことで、誤使用を回避する。
325通りすがり:2001/05/11(金) 09:04
打ち間違い。

>こんなポインタをしてはならない。

こんなポインタ操作をしてはならない。
326仕様書無しさん:2001/05/11(金) 15:12
今Cを勉強中なんですけど、文字列を扱う時に変数は配列を使うべき
なのかポインタを使うべきなのかよく分かりません。
すいませんが教えてください。ヽ(゜д゜)ノ
327仕様書無しさん:2001/05/11(金) 15:28
>326
時と場合による、としか言えません。が、

一応私的な指針をば。


文字列定数しか、使わない変数である。
const char *p = "abcde"; ポインタ変数で十分。
文字列定数の領域については考える必要が無いため。

長さが決まった文字列しか扱わない。
長さを決めて、その領域を配列でとる。
char array[50]; /* 49byteの領域しか使わない */

とんでもなく長い、あるいは実行時にならないと、長さが分からない。
ポインタ変数を宣言して、必要なときmalloc等を用いて領域を確保する。

char *p;
int len
・・・
p = malloc(/* 使うサイズ */len);

こんな風にやってます。
328仕様書無しさん:2001/05/11(金) 15:30
>>326
勉強中ならポインタを使えばいいと思われ
329仕様書無しさん:2001/05/11(金) 15:44
つまらない質問で恐縮なのですがfopenでファイルを開けて
テキストて書き込むのとバイナリで書き込むのとは差があるのでしょうか
char a='A';
をテキスト形式で書き込むと.10進で
バイナリで書き込むと16進で書き込まれると考えていいものなのでしょうか。


330326:2001/05/11(金) 16:01
>>327-328様
スゴイありがとうございます。
331仕様書無しさん:2001/05/11(金) 16:17
>>329
ファイルの中身は所詮0と1です。
fopenの前にバイナリファイルとテキストファイルの違いを勉強されたほうが
よいです。
332仕様書無しさん:2001/05/11(金) 17:31
基本的に、バイナリファイルとテキストファイルに違いなどありません。
バイナリで書きこめば、バイナリになりますし、テキストとして書きこめば、テキストになります。

FILE *fp;
int a = 1;
fprintf(fp, "%d", a);
とした場合は
ファイルのdumpは、「31」
フツーに1としか書かれていないファイルに見えますし、

fwrite(&a, 1, sizeof(a), fp);
とすれば、
ファイルのdumpした結果は
IntelCPUの場合、「01 00 00 00」
といったバイナリになります。

以降は補足ですが、
MSの世界では、まだ、テキストファイルとバイナリファイルによる違いが存在します。


#include<stdio.h>

#define Mojiretu "abc\n"

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

  fp = fopen("test13_a.txt", "wb");
  if(fp==NULL) return;

  fwrite(Mojiretu, 1, sizeof(Mojiretu), fp);
  fclose(fp);

  fp = fopen("test13_b.txt", "w");
  if(fp==NULL) return;

  fwrite(Mojiretu, 1, sizeof(Mojiretu), fp);
  fclose(fp);
}
改行コードの扱いが少し変わります。
UNIXでは2つのfwriteに違いはありません。
333仕様書無しさん:2001/05/11(金) 18:48
なるほど、ありがとうございました。
IntelCPUの場合、「01 00 00 00ていうのはどうゆうことなのでしようか。
これはコードの体系なのでしょうか。
なんどもすいません。
334仕様書無しさん:2001/05/11(金) 19:05
335てんさいぷろぐらむぁ(偽):2001/05/11(金) 19:10
>>333
01 00 00 00については
リトルエンディアンとかビッグエンディアンで検索かけて調べてみるがよろし。

テキストとバイナリについては

バイナリ:
そのまんま(意味不明か?)

テキスト:
改行コードをプログラム内部では共通の物(\n)として扱い
書き出し時にはその機種独自のものにしてくれる
プログラムの環境依存度を下げてくれる便利機能モード

とか適当に覚えておくがよろし
336仕様書無しさん:2001/05/11(金) 19:11
ファイルの中身もエンディアンって関係あったんだー
まじ、しらなかったよ
普段、バイナリなんか書かないから知らなかった。
337通りすがり:2001/05/11(金) 20:08
>>335
違うよ。テキストモードは各々の値をできる限り文字として扱うようにする
のに対して、バイナリモードでは何の変更もかけずにそのままの値を使用する。
改行文字やファイル終端文字も文字の一種に過ぎない。

具体例を挙げた方が分かりやすいかな?

#include <locale.h>
#include <stdio.h>
#include <wchar.h>

void foo(FILE *stream)
{
setlocale(LC_ALL, "");
fputws(L"これがモードの違いだ!", stream);
}

上の関数をテキストモードとバイナリモードそれぞれで実行してみて。
処理系にもよるけど、多くの場合、目から鱗が落ちると思うよ。
338ドキュヒッキ−:2001/05/11(金) 20:23
オマエラみんな氏ね!
339てんさいぷろぐらむぁ(偽):2001/05/11(金) 20:44
>>337

了解です。
確認しました。

TEXT:
82 B1 82 EA 82 AA 83 82 81 5B 83 68 82 CC 88 E1 82 A2 82 BE 81 49
BIN:
53 30 8C 30 4C 30 E2 30 FC 30 C9 30 6E 30 55 90 44 30 60 30 01 FF

つーかマルチバイトとかワイドとかローカルとか事すっかり忘れてました
Cは奥が深い。

ちゃらりら〜ん♪
てんさいぷろぐらむぁ(偽)はかしこさが1上がった!!
340仕様書無しさん:2001/05/21(月) 22:55
ちなみにロケールな。よろしく。
341仕様書無しさん:2001/06/14(木) 01:25
>338

お前も
342仕様書無しさん:2001/06/14(木) 01:55
TextのEOFのコードが決まっている処理系(MSなど)では、
EOFのコードが発見されると一部の関数でファイル読み込み
終了しなかったっけ? MSだと、0x1aだったと思う。つまり、
0x20 0x22 0x1a 0x23
みたいなファイルだと、テキストモードでは最後の0x23は
読み取られない。バイナリだと全部読む。ちがうん?
343ドキュヒッキ−:2001/06/14(木) 09:25
おまたせしました!
ついにウルテマの世界から帰ってきました!
GM戦士になって暴れまわっていましたが、
プログラムが懐かしくなり二ヶ月ぶりに
Cでなんかつくろうと思ったらほとんど
C忘れてしまっています。
またこれからいろいろ質問するのでよろぴく!!
344仕様書無しさん
>>343
>>1 では>俺は完全にC言語をマスターした。
と言っていたのに
今では>またこれからいろいろ質問するのでよろぴく!!
と言っている。
矛盾という言葉の意味をなんとなく理解してしまった。
俺のレベルが1下がった。