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

このエントリーをはてなブックマークに追加
1日下部?はつみみです
C言語質問スレッド Part 26

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART4
http://pc.2ch.net/test/read.cgi/tech/1022961238/l50

・前スレ

<25> http://pc.2ch.net/test/read.cgi/tech/1024918442/
<24> http://pc.2ch.net/test/read.cgi/tech/1024033400/
<23> http://pc.2ch.net/test/read.cgi/tech/1023024817/

コンパイラなどのリンクは>>2-3 あたり
void日下部氏の激動の半生は過去スレを参照
今から考えると、僕の人生はvoidだった。
そう、何も作り出すことは出来なかった。
しかし、僕の中のstatic変数にはいろんな思い出がつまってる。
でももうダメだ。
いつの日からか発生したループは、スタックを食いつぶしながら
僕のメモリ領域をどんどん蝕んでいく。

もうダメだ・・・。

僕は決心して窓を開けた。

「このプログラムは不正な処理を行ったため・・・」
5
>>1 ヽ(-д-)オツカレ・・・
むしろ>>4におつかれ。。。
ほー
namespace {
>>4; //翻訳単位に隔離しますた
}
fgetcの戻り値は、EOF以外なら何でもunsigned charに入れていいですか?
12デフォルトの名無しさん:02/07/07 23:50
>>11
いいよ、むしろ漏れの以下略
0〜UCHAR_MAX (一般に0〜255) とあるから (ANSI C言語辞典)
いいのではないかな。>>11
1411:02/07/07 23:53
ありがとう。>>12-13
↑返却値が 0〜UCHAR_MAX ということで↑
16過去ログその1:02/07/08 01:13
17過去ログその2:02/07/08 01:14
なぜか5以下のリンクを張ろうとすると
「名前いれてちょ」
で書けない。

あと上のリンク、重複がいくつかあります。スマソ
19デフォルトの名無しさん:02/07/08 02:01
年配のCプログラマは、なぜ不要なキャストを多用しがちなのでしょうか?歴史的な理由が
あれば教えてください。

p = (Pの型 *)NULL; とか、const P* 型の引数を関数内で 必ず・わざわざ P* 型の
変数にキャストして代入して使ってみたり、などです。別のバッググラウンドをもっている
複数人が揃ってこの調子なのでヘナヘナ萎えています。

僕は普段はVC++を使うので、こういうtype safeのタの字も無いコードを書く理由が
思い当たらないのですが…。単にANSI以前にCを覚えたのでconstを知らないとか?
だとしたら寂しすぎる。


無能な年寄りなんかに構っちゃいけません。徹底放置が一番
>>20
そいつが考えるAPIにconstがついていなかった場合、呼ぶ側がconst_castしなければいけなくなって大迷惑、
よって徹底放置というわけにもいかない。

…という罠は一応考えられるな。まぁCコンパイラを使うのだったら警告が出るだけだっけか?

ところでMicrosot C/C++なんてあるの?
マイクロソット
>>22
くだらないことをきくなよ
>>22
チェコでは正式名称なのかもしれん。
http://www.microsoft.com/cze/traincert/mcp/UkazteCoUmite.asp
>>24
単なるタイプミスでしょ。
> 年配のCプログラマは、なぜ不要なキャストを多用しがちなのでしょうか?歴史的な理由が
> あれば教えてください。
昔はvoid *が存在せず。それに変わる汎用ポインタとしてchar *が使われていた。

例えば
foo *p = (foo *)malloc(sizeof(foo) * n);
とか

まぁ、10年後C99が普及したら何で年輩の人は
foo p[n];
と定義すればいいのに不要なmallocを使うんですか?
とか言われるかもしれない。
>>26
それはそうだけど、>>19のあげてる例はちょっと違うだろう。
やっぱりポインタとかキャストについての理解がいい加減なんじゃあ。
アセンブラ上がりの人が多いからとか?
変数の型に対する認識が甘かったりするかも知れない。
2926:02/07/08 11:48
>>27
> p = (Pの型 *)NULL; とか、
26はここの部分の説明をしてみた。

> const P* 型の引数を関数内で 必ず・わざわざ P* 型の
> 変数にキャストして代入して使ってみたり、などです。
C++ でmutableを使うべき処理の場合、Cではcastで騙さないと同じ処理を実現できない。
他にやり方があったら教えてくれ。
>29
え?26って、「 p = (Pの型 *)NULL; 」の説明やったん?
すると、昔は、#define NULL (char*)0 とかやったりしたん?
mallocとは違って、どんな時代のC/C++でも、
p=NULL;で済む筈やと思うけどなぁ。
Fortranで書かれた、書式なしの文章を
Cで開く事は出来るのでしょうか?

write(6) N
write(6) (X(I),Y(I),I=1,N)

で書かれたらしいのですが………
一応バイナリモードで開けば読めるんじゃないの?
ただREAL型とかがどんな風に書き込まれてるか知らないけど。
Fortranではこれで開けたのですが……
なんとかこの操作をCでやりたいのです。

real x(100),y(100)
open(10,file='xy.dat',form='unformatted')
read(10) n
read(10) (x(i),y(i),i=1,n)

do j=1,n
write(6,*) x(j),y(j)
enddo

stop
end



f2cだと
#include "f2c.h"
なんてなモノをやら無きゃならないので困ってます…。
よくわかんないけど要はフォートランの吐き出したバイナリテープを
読み込んで標準出力に吐き出したいわけ?Cで。

フォートランで書いたサブルーチンをオブジェクトファイルにしてcにリンクとかすれば
できるんじゃない?
使ってるコンパイラのリファレンスでも読め。
3519:02/07/08 21:33
>>29 いや、mutable的な処理をするときにconst外ししているだけなら そもそも文句言わないって(^^;
36デフォルトの名無しさん:02/07/08 23:28
>>33
fscanf(fp,"%d",&n);
for(i=0;i<n;i++){
 fscanf(fp,"%f%f",&x[i],&y[i]);
}
37デフォルトの名無しさん:02/07/09 00:03
return関数っつーのは
return(0)やらreturn(-1)とか数値しか返せないの?
例えばmyfuncとかいう自作関数があった場合
エラー時にはmyfuncに戻るという動作をさせたいときには
どうすりゃいいのですか??????
>>37
意味が。
if (error)
myfunc()
40デフォルトの名無しさん:02/07/09 00:04
>>37
longjmp以下略ワラ
関数ではない罠
>>37
関数じゃねーよ
setjmp()をmyfunc()から呼び出すしかないな。
,
4537:02/07/09 00:10
優しく教えてくれるヤシ・・・アリガd
厳しい指摘するヤシ・・・アリガd

ミンナミンナアリガd
>>37
>myfuncに戻る
というてますが、戻るんだったらreturnでいいじゃん
初めて聞いたよ>return関数
目からうろこが落ちた
@`
4937:02/07/09 00:11
>>46
他の関数から飛ぶっす。
>>47
目からうろこが落ちたの使いどころが間違ってないか?
51デフォルトの名無しさん:02/07/09 00:12
>>49
myfuncを呼ぶだけじゃだめなのか?
エラーが出たら-1でも返して、呼び出し元がさらにmyfunc呼べばいいじゃん。
53デフォルトの名無しさん:02/07/09 00:15
>>37
とりあえず、テストソースでもいいから、ソース出せ。
みんな混乱してるじゃねーか。
5437:02/07/09 00:17
>>54
くだらねー(見に行っちまったが)
>>55
URLで気づけ
我慢できずに見に行ってしまった鬱・・・。
58デフォルトの名無しさん:02/07/09 00:22
なぜか紫になっていた鬱・・・。
59デフォルトの名無しさん:02/07/09 00:32
結構カワイイ社員いるね
しかもお好み課(藁
>>59
http://www.otafuku.co.jp/jinji/fujiwara_2.htm

この会社、いまどきフローチャート書かせるのかよ・・・・
61デフォルトの名無しさん:02/07/09 01:51
すみません、質問いいですか?
構造体についてなんですが・・・

Aのソースで宣言した構造体を、
Bのモジュールで使用することは可能でしょうか?
現在、AとBをコンパイル&リンクしようとすると、
Bのモジュールのコンパイル時に「宣言されていない構造体」ってエラーが出て、
コンパイルできずエラーが出てしまいます・・・。

構造体を、Bで宣言すればコンパイルは通るんですが・・・。

他のソースで宣言してる構造体を、
その別のソースで使用する方法がありましたら教えてください。
よろしくお願いします。
.hに入れて#include
あのー、
rand()関数使って何かおもしろいことできませんか?
ゲームでも面白い動作でも何でもいいです。
よろしくおながいします。
*((int*)rand()) = 0;
>>64
恐ろしい動作
66デフォルトの名無しさん:02/07/09 02:00
>>64
ランダムなアドレスに0を書き込むってこと?
6761:02/07/09 02:00
>>62
構造体自体は、ヘッダーファイルを作って、Aでインクルードしてます。
しかし、問題が解決されません・・・。
Aでも、インクルードして、Bでも、インクルードしろって意味なのでしょうか・・・???

でも、たしか、宣言ってカブって行うと、ダメなんですよね・・・???
>>64
やってみてアクセス違反がでなかったら勝ち。
>>64
VC++じゃ実行できないYO!!
VC++で実行できるものでrandをつかった面白いものをおながいします。
同じ翻訳単位でかぶるとまずい
宣言は被ってもへいき
定義はだめ
そう言えばBASICでもよく POKE RND, RND / 256 ってやってたよ。
走らせてると突然ピタッと止まるんだよな。その瞬間ゾクゾクっとした
快感が体を走り抜けたよ。たまんねえな。

>>67
宣言がダブッたらまずいのは、同一ファイル内のみ。
7361:02/07/09 02:06
>>70-72

宣言はOKで定義はダメ!
スペシャルサンクス!
さっそく、テストしてきます!!
つか、かぶってねーじゃん。
レスはかぶりまくりだな。
76221:02/07/09 09:20
すいません、めっちゃ初歩の質問良いですか?
昨日初めてコンパイルしてみようとしたのですが、
完了-コンパイル「C:\WINDOWS\PROFILES\SHIN\MYDOCU~1\HELLO.c 1: ファイル 
stadio.hがオープンできない (No such file or directory)」と出てコンパイルできません。
何が問題なんでしょう?宜しくお願い致します。
>>76
本のサンプル入力してるのか?
もう一度サンプルと同じか確認して見ろ。
78 :02/07/09 09:26
>>76
stadio → stdio
ワロタ
メッチャレベルヒクイ
まぁ、気がつかなくて悔しがっている>77=79な訳だが・・
8177:02/07/09 09:42
>>80
え?なんで俺?
本人からのレスかと思って見てみれば( ;´Д`)
80はちょっとあれなので気にしないでやってください。
83221:02/07/09 09:51
>>77
LSI C-86 超簡単セットアップ Ver 1.53を使って
ドラッグ&ドロップしただけなので、入力ミスとかはないと思います。
8477:02/07/09 09:54
>>83
>>78も書いてるけど、ミスがあるから言ってるんだよ・・・。
85かわりにこれ使え:02/07/09 09:58
/* hello.c */
#include <stdio.h>

int main()
{
printf("hello world!\n");
return 0;
}
86221:02/07/09 10:05
>>78
「stadio」と出てます。
>>84
ソースコードを書いて、Cコンパイラのアイコンに放り込んだだけなのですが…
ソースコードに問題があるのでしょうか?
>「stadio」と出てます。
だから、stdio.hに直してくれよ
88221:02/07/09 10:11
>>85
メモ帳にコピペしてCコンパイラに放り込んだら
[email protected]」とでました。
それほんとにCコンパイラか?
LCCだろ。そう出るよ
91221:02/07/09 10:20
>>90
これでいいんですか?
hello world!と出るもんじゃないんですか?
つーか、そのソースをここに晒したほうがはやいだろ。
stadio.hになっていませんように・・・(-人-)ナムナム・・・
>>91
実行ファイル(hello.exe)ができてないか?
コンパイルはできたのか?
もんの凄い厨発見・・・・・・・・・・・・・・・・・・・・・・
LSICのEXEにソースをドラッグする人って、とっても珍しいと思う。
歴史上10人も居ないのではなかろうか。
>>96
おいらはVC++のcl.exeにD&Dしています。
>>97
ありえねぇ
lcc.exe(だっけ?)は16bit pure dos アプリだし・・・
LSIC を
  窓 か ら
    投 げ 捨 て ろ
このスレおもしろい
>>101
そのシミュレータをC言語で作ってみます。
>>103
よろしくおながいします。
105221:02/07/09 11:26
できました。
皆さん、ご協力ありがとうございました。
本当に感謝してます!
>105
結局、どうやって解決したの?
どこのスレの221なのかとても気になる
108221:02/07/09 11:32
>>106
ボーランドのコンパイラを落としてきました。

>>107
http://pc.2ch.net/test/read.cgi/tech/1026138039/
ここです
>>108
そこはたった今221になったと思うんだけども。
まさか余因子行列聞いてる212じゃないだろうな。
LSICでも出来るけどなぁ。lld@何タラってのはコンパイル&リンクできたっつーこと。
同じディレクトリにhello.exeがあるはずだが。
あとstadio.hはstdio.hの間違いだったろ?
111デフォルトの名無しさん:02/07/09 11:38
ヘッダーファイルの中で他のヘッダーファイルをincludeするのはいけない行為?
>>111
いけなくないが、そのヘッダに#ifndef #define #endifの、例の
あれが書いてあるといいね。
>>112

#ifndef _HEADER_H_
#define _HEADER_H_

/* 中略 */

#endif

多重インクルード防止用のこういうやつ?
> あれが書いてあるといいね。
> 多重インクルード防止用のこういうやつ?
一応「インクルードガード」という名称がある。
俺も最初の頃はスタジオ.hだと思ってたよ。
ついでに、random関数ってrandだけ良いのね。
これも知らずにリンカエラーでさんざ悩んだよ。
昔、cin(シン)、cout(コート)と読んでたぞ (激鬱
117ツリー構造:02/07/09 15:40
リスト構造とツリー構造の違いを教えてください。
>>117
名前を変えたの?
119ツリー構造:02/07/09 15:43
えっ?
今回の書き込みが初めてですけど
>>119
マルチすんな、ぼけぇと言いたいところだが、これ以上被害が広まるのもいやなので
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=%E3%83%AA%E3%82%B9%E3%83%88%E6%A7%8B%E9%80%A0+%E3%83%84%E3%83%AA%E3%83%BC%E6%A7%8B%E9%80%A0+%E9%81%95%E3%81%84&lr=

これでわからなかったらあ き ら め ろ
122ツリー構造:02/07/09 15:48
学校の問題なので別の人が書き込んだのかも?
おねがいします。
教えてください。
>>122
>>121さんが答えへの道を示してくれている
>>122
宿題はスレ違いだ。(・∀・)カエレ!
つーか情報系の学生ってこんなレベル低い?
普通科行けなかったヤツが行くところとか?
学生なのに普通科?
>>122
大人をなめるんじゃねーぞ。このウソつき。
ツリー構造とリスト構造の違いか・・・
ツリービューとリストビューくらい違うな・・・
木と表くらい違う。
ツーリは分岐するけど
リストは分岐する気がしない
131ツリー:02/07/09 16:13
>>123から128
別人にだまされたおまえらはDQN!
大人だかなんだかしらんが心の狹いやつらだな、おい!

132ツリー構造:02/07/09 16:13
ばーか!!
答えなんてソッコーでわかってんだよ!!
早く終わって暇だったから書き込んだだけ。
聞けっていうから聞いてやったのに、
結局だれも答えてねーじゃん。
ネタはけっこうです。
134ツリー:02/07/09 16:20
心の狹い大人=カス
この方程式は万国共通です。
すぐにネタだといって煽る奴=DQN
これもまたしかり


135初心者:02/07/09 16:22
>132
すみません。
ツリー構造について教えてください。
136543:02/07/09 16:23
スンマソーン
他スレの543ですが、
「2のべき乗」って、VBAだと
「2^5 とか、2^12」なんすけど、
C(C++、VC++)では違うんですか?
さっき2^4とか計算させたらエラーが出たんですけど。
>>134
ネタじゃなくて天然だったのか。
バカすぎるぞ。

ネットで宿題の答え聞いてるガキはDQN。
これは万国共通(マジで)
>>136
エラーはでなくねぇ?
結果はぜんぜん違うけど
139543:02/07/09 16:26
>138
もう一度試してみるっす。
ちなみに今VC++でやってます。
>>136
演算子ではべき乗はないっす。
math.hをinclude してpow(2,4)かな
>>136
> さっき2^4とか計算させたらエラーが出たんですけど。

本当に試したのかよ。
エラーにはならないだろ。
>>135
エクスプローラの左を見なさい、それがツリーです。
エクスプローラの右を見なさい、それがリストです。

これでわからないようなドキュは氏んでください。
143デフォルトの名無しさん:02/07/09 16:27
エクスプローラで左に出てる奴がツリー、右に出てる奴がリスト。
XORだ
145初心者:02/07/09 16:28
うるせえ、ばか!
くたばれ!
Fuck yourself
ネタはけっこうです。
147143:02/07/09 16:29
>>142
ピンポン同時。
148初心者:02/07/09 16:29
ネタに混じれすするな
149543:02/07/09 16:30
>141
ビルドの段階で。
>>142-143
別人ならすごいな
151543:02/07/09 16:31
>140
ありがとうございました。
「16」
と出ました。
152543:02/07/09 16:33
ちなみにスンマソン。。。

pow(2,128)

をやってみました。実行はされたんですけど、

3.40282e+038

となりました。
これを完全に整数の形で表示させる事が出来ないものなのでしょうか?
153デフォルトの名無しさん:02/07/09 16:35
できるよ。
どうせ有効桁数6桁だからその部分と'0'をずらっと並べる。
"3.40282000000・・・・"と
154初心者:02/07/09 16:35
うるせえ!さる!
殺すぞ!おい、543!この野郎邪魔すんな!

155デフォルトの名無しさん:02/07/09 16:36
>>154
あなたはこのスレに誤爆しないで・・・
>>152
完全な整数は無理。
そこまでの精度は無い
157155:02/07/09 16:37
543って>>152のことか(ワラ
158543:02/07/09 16:38
げ!
もしかして「近似」の結果なんすか???
ちなみに上の
「3.40282e+038 」
の意味を教えていただければと。。。

初心者でスンマソーン。。。
159デフォルトの名無しさん:02/07/09 16:39
3.40282×10^38

3.40282x10^38
161デフォルトの名無しさん:02/07/09 16:39
>>158
3.40282 * 10^38
162543:02/07/09 16:39
>>159-161

本当にありがとうございます。
163161:02/07/09 16:40
>>159-161
3Pハァハァ
164初心者:02/07/09 16:41
おい!543!
無視すんな!
真面目ぶってもおもしろくねぇぞ!
笑わせろ!
165161:02/07/09 16:43
>>164
おまえが笑わせてみろよ(プ
166543:02/07/09 16:43
そうしてみると、ある巨大な整数(紙の上には書けるくらい)が、
「素数か否か」
を判定するプログラムってかなり難しいと考えていいですかね?
167543:02/07/09 16:44
>164
おっきい?
168初心者:02/07/09 16:45
Fカップですが何か?
169543:02/07/09 16:46
豚なの?
宿題が出来なくて暴れてるヤツをかまうなって・・
>>166
多倍長整数演算のライブラリとか、どっかで拾ってくればいいよ。
172543:02/07/09 16:49
ありがとう。

素数か否かを判定するには1から平方根までの素数で試し割りしてみるんだっけ?
割れなきゃ素数。

どおしても大きな値を扱いたいならそれなりに工夫が要る
組込型じゃ扱えない。

174543:02/07/09 16:55
そうですか。。。
例えばですね、
全ての1以上の自然数nに対して、
n^2と、(n+1)^2 の間には必ず素数が存在する(リーマン予想)
はnが何兆の時まで正しい事が確認されている、らしいんです。

うーむ。。。これをCで動かすには。。。グタ。
やめときなさい。
176543:02/07/09 16:57
はい。
C以外でも動かないだろ。

文字列を使って計算すれば?
たとえばunsigned shortは65535までしか扱えないけど
char num[10]なら"100000000"だぞ。
もちろん四則演算も自分で実装する。
plus(num1, num2);とか

あるいは大きな数字は複数のintで表すとか。
12345678=
1234*10000 + 5678だろ?
そうすればint num1 = 1234, num2 = 5678で表して
2で割るならおのおのを2で割れば?

178543:02/07/09 17:04
>177
アイデアは嬉しいっす。
ありがとうございます。

ただですね、a+bをcで割る時に、
a,b両方がcで割り切れなくとも、a+bがcで割れることが
あるんです(例 a=b=1,c=2)。
a+bではなくa*10^x+bですが。
まぁいいか。
>>178
そのへんも、ちゃんと実装するのよ
181543:02/07/09 17:12
考えてみます。
ありがとうございました。
一旦落ちて飯の支度をします。
182デフォルトの名無しさん:02/07/09 17:35
無限ループに陥ったとき、画面上でマウスをダブルクリックするとループはとまりますが、ctrl+cを押した場合と異なった処理が行われているのですか?
> 一旦落ちて飯の支度をします。
>>181
どうしてもCじゃないとだめっすか?
このスレに書いている以上、どうしてもCじゃないとだめなのかもしんないけど。

標準でないライブラリを使ってもいいのであれば、
ttp://www.score.is.tsukuba.ac.jp/~okuma/OpenMath/
なんてどうだろう、って使ったことないんだけども。

bignumのある処理系使うと手軽なんだけど。
scheme (たいていbignum持ってる) とか、Rubyとか(この名前出すと厨房よってくるか?)。
でも処理の規模を考えるとこの辺の処理系使うのは速度に問題あり、かな。
185543:02/07/09 18:26
>>184
ええとですね、
俺はCの勉強も兼ねてるんです。
もう直ぐ三十路なのに職も無く、ぷらぷらするのも
なんなので、C(VC++)を勉強してそれ関係の仕事にと。。。

遅い?
>>185
どういう方面に就職希望かわからんけど、
素数の計算とかはあんまり深入りしないで、違うことやったほうが
いいと思う。
187543:02/07/09 18:33
>186
サンクス。
当方VBAはそこそこ使えますが、それ以外のプログラムは
html言語をちょろっと出来る程度なので凄く不安。。。
はぁ。。。
html・・・
189デフォルトの名無しさん:02/07/09 18:52
>>185
なるほど、そういうことね。

おれも>>186の言うことに半分賛成。
でもこういう風に自分で課題を設定して何かやろうとするのはいいことだと思うよ。
ただ、今回の課題は初心者にはレベルが高すぎるような気がする。

やるとすると、

struct bignum {
 unsigned int *buf;
 size_t len;
};

みたいな構造体を使ってごにょごにょすることになるんだろうけど、
メモリ管理とかややこしい問題が絡んでくるんでかなりきついと思う。

どういった本を読んでます? (この話題も荒れるかも)
とにかくCに関してはクズ本が99%を占めてるんで、
下手な本で勉強するとロクなことにならん。

おれが今まで読んだ中では Practical C というオライリーから出てる本がいいかな。
入門書はそんなに読んでないけど。他にちゃんと読んだつったらK&Rくらいだからなあ。
ttp://www.oreilly.co.jp/BOOK/cpra/
これね。岩谷の粗悪な翻訳も以前出てたのでそれを掴まされないように注意してね。
>>185
遅くないよ。
俺の知り合いに45才で会社を起こして、自分でCのプログラム書いて
バリバリ稼いでいる奴がいるよ。

最近はさすがに疲れたのか、学生にアルバイトさせているが。
192543:02/07/09 19:51
皆さんありがとう。
今手元にある本は、
「新C++言語入門 ビギナー編」 by 林晴比古
「新VisualC++6.0入門」    by ヾ

です。
先にも述べたとおり、これまで組んできた事のある言語は
HTMLとVBA。
VBAのほうは(マクロを組むと言うのかな)、ちゃんと金融会社
に勤務中に、ある計算をするためにプログラムを組んでいました
(moduleを沢山使いました)。

あとUNIXも使った事はあるんです。
手元にある本は
「UNIX プログラミング環境」 by kernighan and Rob.Pike
(石田 晴久訳)

です。
本で1から練習するよりも、本を片手に実践の方が
速く身に付くよ。
194デフォルトの名無しさん:02/07/09 21:10
C言語はJavaなどの言語に比べて細かいプログラムが
組めるらしいのですが、 具体的にどのくらい細かくまでプログラミングできるのでしょうか
>>194
細かさの意味がわからんが、大して変わらんかと
#include <stdio.h>
int
main
(
int
argc
,
char
*
*
argv
)
{
printf
(
"Hello "
"World.\n"
)
;
return
0
;
}
レベル ノ ヒクイ ジサクジエン ニ ワラタ
>>193
どーい。この分野ほど、知っているだけではなにもできない分野はないね。
なんでもひたすら試してみるといいよね。
random
randomize
って使ってる?
srandやrandなら使わんことも無い
201デフォルトの名無しさん:02/07/09 21:31
malloc
free
って使ってる?
202デフォルトの名無しさん:02/07/09 21:32
pennis
って最近使ってる?
203デフォルトの名無しさん:02/07/09 21:32
NTTコムウェア
って知ってる?
204199:02/07/09 21:34
房のせいでちゃんとした回答が得られなかった
20533:02/07/09 21:37
超亀レス

>34 36
ありがとう。
206543:02/07/09 21:56
スンマソーン。
再び543っす。
仮に面接で、
「C言語できますか?」
ってきかれたら、俺のレベルで、
「簡単なプログラムなら出来ます」
って答えて問題無いすかね???
207543:02/07/09 21:57
http://pc.2ch.net/test/read.cgi/tech/1023530449/
ここの543でした。
すみません。。。
208デフォルトの名無しさん:02/07/09 22:02
>>206
「簡単なプログラムなら出来ます」
なんて回答をしている時点で
相手には君のレベルが分かっちゃうからOK!
209543:02/07/09 22:04
???
よくわからんです(笑)
>>206
具体的に作ったプログラムを言った方がいいのでは?
211543:02/07/09 22:07
んじゃぁ、ここの553に書いたものが自作の中で
最新のものだと人に言えないかも。。。

http://pc.2ch.net/test/read.cgi/tech/1023530449/

C言語二日目。。。
2chをフル活用してますな
213543:02/07/09 22:17
ええ。
本当に簡単だな
215543:02/07/09 22:22
ええ。。。(恥
216デフォルトの名無しさん:02/07/09 22:38
2次元配列の要素数を取得するにはどうすればよいですか?
質問なんですが

プログラムは細かく関数化したほうがいいですか?
フローチャートを書くことは勉強になりますか?
フローチャートって楽しいですか?

おねがいしまする
>>217
・物による。いろんな分割法あり
・まぁ、いい加減に書きまくるよりはイイかと
・俺は嫌い
219デフォルトの名無しさん:02/07/09 22:42
>>216
厳密にはCには二次元配列はないと思った。

で、たとえば、
int ary[10][10];

なんて配列があったとして、要素数を求めるのは

sizeof(ary) / sizeof(ary[0][0])

だろうねえ。
>>218
ありがとうございました
ググルで 関数 分割法で調べてみまする
221デフォルトの名無しさん:02/07/09 22:47
>>219
ありがとうございました。
C++にはあるんでしょうか・・・・?

でもそれはスレ違いになりそうなのでC++スレに逝ってきます
222デフォルトの名無しさん:02/07/09 22:48
>>218
フローチャートは百害あって一利なしだと思う。
あっちゃこっちゃ飛ぶgotoの乱用みたいなチャートになりがちだし。
PADとかHCP(だっけか?)のほうがましだけど、
こういうのって擬似コード使うほうがよっぽどいいと思ってる。
223217:02/07/09 22:49
関数内がifばっかりって…
やっぱり良くないですよね…
224デフォルトの名無しさん:02/07/09 22:52
>>215
あっちでレスしてみたよ。584ね。

で、このレベルでプログラム書けます、というのは、うーん。
嘘じゃないけどもね(ニガワラ

まあでも仕事でやるとスキルがむちゃくちゃあがるからね。
独習よりははるかにいいと思う。
問題は、採ってくれるところがあるかどうかだけども(w
225217:02/07/09 22:53
値が4つあって、その値を大きい順に並べて、その順番を数値に当てはめて返すという
関数なんですが
226543:02/07/09 22:58
>>224
どうもです。
あっちのレス読んできました。
ありがとうございます。
とりあえず俺としては、
「プログラムを組む上で最も基本的なことが抑えられていて、
 且つ余計な事をしていないか?」
ということが問題だったのです。

といいつつ、気になるので質問させてください。
sm = ((a + b) * (b - a + 1)) / 2;
のほうが計算が速くなるとかっていうメリットはあるのでしょうか?

初心者ですんません。
227デフォルトの名無しさん:02/07/09 23:04
>>226
うーん。まあVC++よりはCの話題だからこっちのスレでいいか(w

で、一般にループまわすよりは速くなります。

ただし欠点もあって、forでまわすよりもオーバーフローしやすいという問題があります。
掛け算してるところでね。
すいません 書き直します
値が4つあって、その値を大きい順に並べて、
その順番を数値に当てはめて返すという
関数なんですが


A=2 B=5 C=4 D=1
だったら
cbadなので5を返す

というのなんですが、
ifとかつかわずに可能でしょうか。
if使うとものすごく長くなってしまったので
おながいします
> その順番を数値に当てはめて返すという

わからん…

>例
>A=2 B=5 C=4 D=1
>だったら
>cbadなので5を返す

最大値を返すってこと?
230デフォルトの名無しさん:02/07/09 23:30
>>228
ポカーン
bcad?
>>228
今世紀(はじまって間もないけど)最大の難問だ
何が言いたいのか全くわからん・・・
233デフォルトの名無しさん:02/07/09 23:35
>>228
宿題?

A, B, C, Dが0未満じゃないと仮定して、こんな感じかな。
ただし、試してないよ。

#define numitem(a) (sizeof(a) / sizeof((a)[0]))

int max(a, b) {
 return (a > b) ? a : b;
}

int foo(a, b, c, d) {
 int i, m = 0, ary[4] = {a, b, c, d};

 for (i = 0; i < numitem(ary); i++) {
  m = max(m, ary[i]);
 }
 return m;
}
234デフォルトの名無しさん:02/07/09 23:35
素因数分解のプログラムってどうやればいいんですか?
235233:02/07/09 23:37
あっと、配列の初期化ってこういう風にはできなかったっけか(汗
236デフォルトの名無しさん:02/07/09 23:39
>>234
ユークリッドの互除法でぐぐってみれ。
237228:02/07/09 23:39
あ、すいません
例えば
abcdという順番で大きければ1を返す
bacdならば2を返す
でbcadなので5を返すという風にしたいのです。

この数字はなんでもよいです…
何かしら返り血から順番がわかるようにしたいのです

おねがいします(;_;)
>>234
楕円曲線法でぐぐってみれ。
239228:02/07/09 23:42
そこで素直に
abcdを大きい順に変数M1からM4に格納して
M1が何なら どの値を返すという風に
IFを羅列しようと考えているのですが…
すいません
>>237
わかた〜よ!!
abcdの順列に番号をつけておいて
大きい順に並べ替えたものに対応する番号を返すんだね!!
241228:02/07/09 23:43
>>240
配送です。
おめがいします
すいません
242デフォルトの名無しさん:02/07/09 23:55
>>241

return (srt[0]*10000 + srt[1]*1000 + srt[2]*100 +srt[3]);

243228:02/07/10 00:00
>>242
誤植ばっかりですいません2ch怖いので…

それってひとつの値が10を超えても大丈夫ですか?
引数の値は不定値で桁数がわからないのです。
オレ的にこう


#include <stdio.h>

int main(void)
{
int A=2, B=5,C=4, D=1;
int values[] = {A, B, C, D };

int result = 0;
for( int j = 0; j<4; ++j ) // j 番目に大きい数字を見つけて result に入れる
{
int min = 0;
int minIndex = -1;
for( int i = 0; i<4; ++i )
{
if ( values[i]>min )
{
minIndex = i;
min = values[i];
}
}
result |= (minIndex+10)<<(j*4);
values[minIndex] = 0;
}

printf( "%X\n", result );
return 0;
}
メガデモ級のが作れるようになれば一人前じゃないの
246228:02/07/10 00:20
>>244
おおすごい
なるほど、
たしかにそうなんだな…
abcdを数字にすれば返せるし
ありがとうございました
247244:02/07/10 00:23
>>246
あ、ゴメン
コメント逆だ、j番目に小さい数字を
248デフォルトの名無しさん:02/07/10 01:42
2byte文字がうまくあつかえないのですが、その辺について詳しいサイト知りませんか?
250デフォルトの名無しさん:02/07/10 03:09
C++では#define NULL0;と書きますが、なぜC言語では#define NULL (void*)0;
と書くのですか?
251デフォルトの名無しさん:02/07/10 03:11
>>250
#define NULL 0と書かれている場合もあるよ。
それとセミコロンはいらない。
次スレはケイコタンの1きぼんぬ
253デフォルトの名無しさん:02/07/10 03:40
>>250
C では
#define NULL (void *)0
と書きますが、なぜ C++ では
#define NULL 0
と書くのですか?
254デフォルトの名無しさん:02/07/10 03:41
>>250
NULL というマクロを使わないでプログラム組んでみればわかるよ。
>>253
つーか、C++では NULL の代わりに 0 と書けよ。
256デフォルトの名無しさん:02/07/10 03:54
つか、CでもNULLなんか使わんで、0でいいだろ。
>>256
Cではいけなかったのでは?汎用機の一部には、NULL != 0のものが
あったような記憶が。
258デフォルトの名無しさん:02/07/10 03:59
>>257
規格上はokよ。処理系によってはだめなのもあるけど。
いまだにプロトタイプ使えない処理系ある(らしい)のと一緒ね。
259258:02/07/10 04:08
心配になってC FAQを見直してみた。
そうか、プロトタイプが foo(int bar, ...); みたいな関数の不定数引数に
ヌルポインタを渡すときだけはキャストする必要があるみたいだな。

ttp://www.catnet.ne.jp/kouno/c_faq/c5.html#2
260デフォルトの名無しさん:02/07/10 16:37
コメントの所が /* */というのと//というやつの違いは何なんですか?
拾ったexampleソースをCでコンパイルしようとしたら、//が全部エラー出ました。
/*comment*/
はCとC++のコメント
//comment
はC++のコメント

C++を知らないCコンパイラなら上記のコメントしか受け付けないだろうね。
>>261
おお、なるほど。
どうも有り難うございました。
263デフォルトの名無しさん:02/07/10 17:05
>>260
gccなら//もコンパイルできるよ
264248:02/07/10 17:49
>>249
ありがとうございます!
265デフォルトの名無しさん:02/07/10 18:03
質問いいでしょうか?

動的に構造体の配列を取ろうとしてるのですが・・・
うまく動かなくて困ってます。

http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/311.zip

・・・に、ソースを置かせてもらってます。
どなたか、アドバイスお願いします・・・。
これは罠ね!
267265:02/07/10 18:17
>>266
罠ではなく、マジです(汗
PC初心者板用のアップ板を借りてます。
268デフォルトの名無しさん:02/07/10 18:17
stderrをfcloseしてもいい?
>>265
1Kもないようなソースを圧縮すんなよ。
>>267
Testの中のintやcharまでポインタにする必要はない
271265:02/07/10 18:26
>>269
いや・・・癖でして・・・・

>>267
このソースは、抜き出した物でして・・・
どうしても、構造体の中の変数をポインタで取りたいのです。

このソースで、構造体の配列って作れてますかねぇ〜?
272265:02/07/10 18:27
すみません、>>267は、>>270の間違いです・・・。

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

struct Test{
int test01;
char test02[2];
};

int main ()
{
int i;
struct Test *test;
test = (struct Test *) calloc (3, sizeof(struct Test));

test[0]->test01 = 10;
test[0]->test02 = 'a';

test[1]->test01 = 20;
test[1]->test02 = 'b';

test[2]->test01 = 30;
test[2]->test02 = 'c';

for (i=0; i<3; i++) {
printf("%d  %s", test[i]->test01, test[i]->test02);
}

return 0;
}
試してないが。
274デフォルトの名無しさん:02/07/10 18:31
>>271
test[0].test01 = 10;
test[0].test02 = 'a';

これって、

int *pi;
char *pc;
pi = 10;
pc = 'a';

と同じようなことやってんだけど、どこがおかしいかわかる?
275デフォルトの名無しさん:02/07/10 18:32
>>273

> test[0]->test02 = 'a';

いや、ここは
strcpy(test[0]->test02, "a");
もしくは
test[0]->test02[0] = 'a';
test[0]->test02[1] = '\0';
だろう。
>275
めんご。
>>271
「取りたい」というのは「自分の気持ち」でしょ?
論理的または理論的根拠にはいくらでも拘ればいいと思うけど、
自分の気持ちを拘りの根拠にしてたら上達は望めないと思うよ。
278デフォルトの名無しさん:02/07/10 18:37
>>276
どんまい
>271
構造体配列はできてるが構造体メンバがポインタなのにいきなり
値を代入してるのは間違い。
メモリをアロケートしてそこをポインタに指させるまでポインタは使えない。
つまり
test[0]->test01 = (int *)malloc(sizeof(int));
test[0]->test02 = (char *)malloc(n * sizeof(char));
みたくメモリを確保しないと。
280デフォルトの名無しさん:02/07/10 18:43
>>271
どうしても構造体のメンバをポインタでやりたいというのなら、
int t0;
t0 = 10;
test[0]->test01 = &t0;
test[0]->test02 = "a";
または、
test[0]->test01 = (int *)malloc(sizeof(int));
*test[0]->test01 = 10;
test[0]->test02 = "a";
こんなかんじでやれ。

"a"と'a'の違いはわかってるよね。
281デフォルトの名無しさん:02/07/10 19:03
int a=3;
int b=2;
foat f;
f=a/b
以上のように、2つの変数をint型で、その2つの変数の割り算の結果を収めるのにfloat型で宣言した場合、小数部分は切り捨てられ、1.0という出力結果になります。
2つの変数をint型のままでちゃんと割り算の結果を1.5と出力したい場合どうすればよいのですか。方法はありますか。
>>281
f = (double)a / b
283デフォルトの名無しさん:02/07/10 19:05
>>281
キャストする。
f = (float)a/b;
284デフォルトの名無しさん:02/07/10 19:13
>>282
>>283
・・・・・どっちですか??
285282:02/07/10 19:14
あ。floatか。283が正解。
てかfloatなんか使うなYO!(逆ギレ)
286265:02/07/10 19:17
た・・・沢山のレス、ありがとうございます!
>>273
わざわざ、ソースを書いていただいてありがとうございます。
う〜ん、しかし同じようなエラーが出ます・・・
>>275さんの修正を入れても、エラーが出てしまいます・・・。

>>274
ええ、どこがおかしいか分かります。
しかし、アローを使うとエラーが出てしまってコンパイルすら通らず・・・
ドットだと、警告は出るものの、コンパイルが通るので、コンパイルして、
実行。 即エラー終了。 この時点で途方にくれてました・・・(汗)

>>277
言葉が悪かったです・・・
「取りたい」のではなく、「ポインタで取る必要がある」です。
すんません・・・。

>>279
はい、試させてもらいました。
しかし、「-> か ->* の左には構造体のポインタが必要」というエラーが出てしまって・・・

>>280
えっと、同じく、「-> か ->* の左には構造体のポインタが必要」のエラーがでます・・・


う〜〜ん・・・
ここまでエラーが出るとコンパイラを疑いたくなります(苦笑)
287273:02/07/10 19:27
ごめん。'->'じゃなくて'.'でいいみたい。
288273:02/07/10 19:32
#include <stdio.h>
#include <stdlib.h>

struct Test{
int *test01;
char *test02;
};

int main ()
{
int i;
struct Test *test;
test = (struct Test *) calloc (3 , sizeof(struct Test));

test[0].test01 = (int *)malloc(1 * sizeof(int));
test[0].test02 = (char *)malloc(2 * sizeof(char));
*test[0].test01 = 10;
test[0].test02[0] = 'a';
test[0].test02[1] = '\0';

test[1].test01 = (int *)malloc(1 * sizeof(int));
test[1].test02 = (char *)malloc(2 * sizeof(char));
*test[1].test01 = 20;
test[1].test02[0] = 'b';
test[1].test02[1] = '\0';

test[2].test01 = (int *)malloc(1 * sizeof(int));
test[2].test02 = (char *)malloc(2 * sizeof(char));
*test[2].test01 = 30;
test[2].test02[0] = 'c';
test[2].test02[1] = '\0';

for (i=0; i<3; i++) {
printf("%d %s", *test[i].test01, test[i].test02);
}

return 0;
}

おわび。freeしてません。
>>282
>>283
ありがとうございます!
ポインタちゃんと勉強したら?>>265
以下長文スマソ

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

struct Test{
  int *test01;
  char *test02;
};

struct Test *
Test3_new()
{
  struct Test *test = (struct Test *) calloc( 3, sizeof(struct Test) );
  int i;
  for ( i = 0; i < 3; i++ ) {
    test[i].test01 = (int *) calloc( 1, sizeof(int) );
    test[i].test02 = (char *) calloc( 2, sizeof(char) );
  }
  return test;
}

int main ()
{
  int i;
  struct Test *test;
  test = Test3_new();

  *(test[0].test01) = 10;
  test[0].test02[0] = 'a';
  test[0].test02[1] = '\0';

  *(test[1].test01) = 20;
  test[1].test02[0] = 'b';
  test[1].test02[1] = '\0';

  *(test[2].test01) = 30;
  test[2].test02[0] = 'c';
  test[2].test02[1] = '\0';

  for (i=0; i<3; i++) {
    printf("%d %s\n", *(test[i].test01), test[i].test02);
  }

  return 0;
}
291デフォルトの名無しさん:02/07/10 19:35
>>286

> >>279
> はい、試させてもらいました。
> しかし、「-> か ->* の左には構造体のポインタが必要」というエラーが出てしまって・・・

あ、そうか。testの型はTest*だから、test[0]の型はTestだ。
だから、.(ドット)演算子を使うべきであった。
292デフォルトの名無しさん:02/07/10 19:56
>>290
改造してみた。
#include <stdio.h>
#include <stdlib.h>

struct Test{
 int *test01;
 char *test02;
};

void Test_new(struct Test *t, int n, char c)
{
 t->test01 = (int *)calloc(1, sizeof(int));
 t->test02 = (char *)calloc(2, sizeof(char));
 if (!t->test01 || !t->test02)
  exit(3);
 *t->test01 = n;
 t->test02[0] = c;
 t->test02[1] = '\0';
}

int main ()
{
 struct Test *test = calloc(3, sizeof(struct Test));
 int i;

 Test_new(&test[0], 10, 'a');
 Test_new(&test[1], 20, 'b');
 Test_new(&test[2], 30, 'c');
 for (i=0; i<3; i++) {
  printf("%d %s\n", *test[i].test01, test[i].test02);
 }

 return 0;
}
293デフォルトの名無しさん:02/07/10 20:01
プログラム中でファイルの内容を配列に読み込みたいが、
ファイルの大きさが事前に分らないため配列のサイズを正確に予測できない場合、
どうしたらいいのでしょうか。何か関数とかあるのですか
294超初心者:02/07/10 20:07
どなたか知っていましたらレベルの低い質問ですがお願いします。
floatのデータ型を確かめようと下記のソースをコンパイル&実行したところ

0.123457
1234567.000000
1234567.125000

と出力されました。
期待した結果は
「1234567.1234567」
だったのですが何故小数点以下が「.125」になったか超初心者なので解りません。
環境 kernel 2.4.17 + gcc2.95.3

------------------------------
#include <stdio.h>

main()

{

float a,b,c;
a=0.1234567;
b=1234567;
c=a+b;
printf("%f\n",a);
printf("%f\n",b);
printf("%f\n",c);

}
------------------------------
>>293
malloc
>>293
最初適当な大きさでmallocしておき、足りなくなったらreallocでまた
拡げればよい。
297265:02/07/10 20:08
>>287-292
本当にありがとう!
書いてもらったソースをすべて試させてもらいました。
すべて、正常にコンパイルが通って正常処理をしてくれました。

う〜ん、本をもう一度読み返してちゃんと勉強します(汗

本当に、ありがとうございました〜!

>>293
適当に配列を伸ばしながら(大きめに確保してコピーを繰り返す)読み込む
>>294
floatだから有効桁数が足りない。doubleにすればよい。
300デフォルトの名無しさん:02/07/10 20:11
300
301294:02/07/10 20:16
>>299 レス有難う御座います。

本で読んだのは有効桁数7桁と読んだのですが
整数7桁と小数点以下7桁の両方が存在した場合にどう再現されるか知りたく
粗探しをしたのですが、ハンパに小数点以下が残っているのが気になって....。
>>293
これでどう?
fp はオープン済みのファイルポインタ。エラー処理省略。
あと、テストしてない

unsigned len = 0;
while ( getc(fp) != EOF ) len++;
char *str = (char *) malloc( sizeof(char) * (len+1) );
fseek( fp, 0L, SEEK_SET );
fread( str, sizeof(char), len, fp );
str[len] = '\0';
303293:02/07/10 20:24
ありがとうございます!!
304デフォルトの名無しさん:02/07/10 20:28

a[i] = i++;
というコードはうまく作用しないという話を聞きました。
その理由としてi++は副作用をもたらすという理由があるから
と聞きましたがどのような副作用なのでしょうか?
解説おねがいします。
>>304
なんかこの質問って定期的に出てくるんで、
本当に知りたいのかネタなのか分からんべ。
SEEK_ENDとftellの組み合わせは?
何か問題があるという話を聞いたような気もしないでもないけど…
>>307
ASCIIモードで開いたときの問題かな?
コンパイルも問題なく済んだけど、
特定の場所で何故かエラーが起きる。
printfをかけまくって、エラーになっているラインは探し当てたけど、
どーーーーしても
なんてことないその処理がエラーを出している原因がわかりません。

UNIXgccのCGIで作ってますが、エラーのログとか確保する方法はないんでしょうか?
がいしゅつだったらすいません。
310デフォルトの名無しさん:02/07/10 20:48
printfでデバッグ出力してるのだったら、
% ./a.out > err.log
でいいんじゃないか。
311japh ◆J.5V8ta6 :02/07/10 20:48
>>309
stderrをfreopen()するとか、管理者に頼んでhttpdのエラーログ見せてもらうとか。
>>309
あ、ごめん。CGIなのね。デバッグ出力用の関数作って、
えーとたとえば、

#define DEBUG_LOG = "~/debug.log"

void debug_printf(char *format, ...) {
va_list ap;
FILE *fp = fopen(DEBUG_LOG, "a");

if (!fp)
exit(3);
va_start(ap, format);
vfprintf(fp, format, ap);
va_end(ap);
fclose(fp);
}

とかいうので出力しといて、シェルから
% tail -f ~/debug.log
とやっとけばいいんじゃないの。
ビットの
2の補助表現とか浮動小数点表現
についてのっているサイト教えてください
314デフォルトの名無しさん:02/07/10 22:37
>>309
printf("Content-Type:text/html\n\n");
この行はある?text/htmlじゃなくてもいいけど。
>>313
んなこたぁGoogle先生に聞けよ。
ちなみに ×補助→○補数 な。
>>313
基本情報処理のテキストを買え。
317313:02/07/10 23:05
今日買ってきましたよ
のってるのかな?
318313:02/07/10 23:07
載っていた。ありがとん。
ポカーン
#include <stdio.h>

typedef struct{
char a:2;
char b:2;
}KOU;

KOU k;

void main()
{
k.a=2;
k.b=1;

printf("%d %d\n",k.a,k.b);
}

なぜかk.aが-2が表示される。なんで?
00000010
だから2が表示されるんじゃないの?
>>320
ビットフィールドは無条件でunsignedになります。
>>320
じゃなかったスマソ、signed charだからこそマイナスになるんだ。
aには2ビットしか与えられていない。ここに2を代入すると、最上位
ビットが立ってしまう。つまりsigned charからすると、マイナスの値
になってしまう。

printfする時にintに拡張されて、この符号ビットが伸びてしまう。
#include <stdio.h>

typedef struct{
char a:2;
unsigned char b:2;
}KOU;

KOU k;

void main()
{
k.a=2;
k.b=2;

printf("%d %d\n",k.a,k.b);
}

これだと、bはunsigned charなので、intになる時に符号拡張が起きない。
従って2が表示される。
というよりも、ANSI C ならビットフィールドは
signed int か unsigned int のみでは?
gcc -pedantic -Wall だと warning が出る。(gcc 2.95.2)

char でも long でもよいのは C++ だろう。
326デフォルトの名無しさん:02/07/10 23:57
だれか、ダイ=ワーフ問題について答えられる人いますか?
327320:02/07/11 00:38
ありがとん
昨日NULL の話題が出ていたので、前々々…スレから転載

NULL

・定数の "0" は、文脈によってヌルポインタ、または整数の 0 として解釈される。ただし、可変長引数、またはプロトタイプをもたない関数の引数に現れた場合は整数の 0 として解釈される。
また、整数型とポインター型とで多重定義している関数の引数では、解釈は実装依存となる(C++ 限定)。
・ヌルポインタのビットパターンは実装依存である。
・条件式にヌルポインターが現れた場合、偽となる。
・ヌルポインタとヌルポインタとは等しい。
・ヌルポインタとその他のポインタとは、常に等しくない。
・ポインタ型によりヌルポインタのビットパターンが異なる場合があるが、コンパイラは(騙されない限り)正しい型を知っているので、比較は正しく行われる。

・NULL は 定数 "0" がヌルポインタとして解釈される場合のみ、定数 "0" の代わりに使用できる。他の文脈では、結果が実装依存となる。(NULL を整数 0 の代わりに使用してはいけない)
・NULL の定義方法は処理系に依存する。
>>312
> #define DEBUG_LOG = "~/debug.log"
これが示すものは、カレントディレクトリにある"~"というディレクトリの下
の"debug.log"というファイルであって、ホームディレクトリにある
"debug.log"ではない。Cの標準ライブラリで~を展開するものはない。
330312:02/07/11 02:22
>>329
そうでした。恥ずかしい。
ちなみに、ライブラリが~をホームディレクトリに展開してくれたとしても、
CGI実行時のホームディレクトリ(普通ない)と
シェルでのホームディレクトリ(/home/login id)の位置は
一般に異なるんで、みられないっすよね(意味のない議論)。

でもいいたいことは伝わったんじゃないかな、と(必死だ)。
>>330
> 一般に異なるんで、みられないっすよね(意味のない議論)。
みられないっすよ(意味のない同意)。

> でもいいたいことは伝わったんじゃないかな、と(必死だ)。
伝わっちゃいるがね。
332332:02/07/11 18:08
332
333333:02/07/11 18:08
333get!!!!!!!!!!!!!
>>333
そんなチップとかPCとかあるの?
>>331
どうでもよいが唐揚げよこせ。
Pentium333MHz
337デフォルトの名無しさん:02/07/11 19:16
すいません。超初心者なんですけど、
VCのソースをnmakeするとwin32.makがありませんと出てきます。
VC持ってないんで、Bolandか.Netでのコンパイルの仕方ご存じないでしょうか
>>337
スレ違い。
win32.mak の中に nmake で実行する内容を記述するんじゃなかったっけ?
よく知らないけど。
340デフォルトの名無しさん:02/07/11 19:26
>>338
どこで聞けばいいでしょうか
MSDNのサンプルはMakefileに全部
!include <win32.mak>
と書いてあって、先にすすまないんですよ
せめてその辺のことがわかるサイトだけでも・・・
>>340
ただで使えるBorland〜スレ
342デフォルトの名無しさん:02/07/11 19:31
どうもです。
#include <stdio.h>

typedef struct{
char a:2;
char b:2;
}KOU;

KOU k;

void main()
{
k.a=2;
k.b=1;

printf("%d %d\n",k.a,k.b);
}

なぜかk.aが-2が表示される。なんで?
00000010
だから2が表示されるんじゃないの?

↑最上位ビットだから。という事は,0と1を入れたい場合は,2ビットではなく3ビットでなくてはならないんですよね?
win32.makはwindowsの環境とか標準的なマクロを定義してある。
コンパイルしたければ、win32.makをincludeしないで、自分で
必要な分を定義すれば.netで使えるはず。

win32.makって再配布可能とされていないので、内容を書くことは出来ません
343の言ってることがよく分からんのは私だけ?
>>345
安心しろ。俺もだ。
特に最後の行は全く意味が分からん。

>>343
2ビットのchar(恐らくsigned char)がintに型変換される時に
最上位ビットが立ってる=負数だから型変換の結果も負数になったのでは。
typedef struct{
unsigned char a:2;
unsigned char b:2;
}KOU;
または
printf("%d %d\n",k.a & 3,k.b & 3);
でいけると思う。後者推奨。
>>343
0と1だけなら1ビットでいいに決まってるじゃん。ただその値はintに拡張
すると0と-1になるから、unsigned intにキャストして使えば0と1になる。
343は解決済みじゃなかったか?
349デフォルトの名無しさん:02/07/11 20:14
>>344
どうもありがとうございます。
とりあえず、341さん御紹介の
BCCスレの過去ログでwin32b55.makなるものを発見。
それから.Net勉強してみます。感謝!
グルーバル変数をなるべく使うなと,書いているのをよく目にするのですが,
ゲームを作っているとどうしてもグローバル変数を使わなければならなくなるのですが。
実際のところどのようにしてる?
ほんとうに、どうしても使う必要があるなら、使うよろし。
Singletonをグローバルと言い張るならグローバルを使うことになるが、
そうでないならSingleton一つ設置しておくだけだな。
353デフォルトの名無しさん:02/07/11 21:40
たとえば、どっかのソースに、
static int hoge;
という変数があって、この変数にアクセスするのに
GetHoge(), SetHoge() のような関数を使うとするでしょ。

これって、グローバルにアクセスしてるのと大差ないような気が
するんだけど、これでいいの?
どっかのソースにstatic int hogeなんて置かないもん。
>>353
モジュール変数
プログラム全体で通用するようなグローバル変数(errnoとか)じゃなければあまり怖くないな。
357デフォルトの名無しさん:02/07/11 22:25
>>353
呼び出し側(ソースファイルが異なる)でhoge=0;とやっても大丈夫だもん。
358357:02/07/11 22:27
でもextern int hoge;と書かなければ大丈夫か・・・
アクセスうんぬんじゃなくスレッドアンセーフ(再入不可能)になることが問題なんじゃなかった?
>>グルーバル変数をなるべく使うなと,書いている
>>353
assertと併用するといい感じになる。
>>358
定義側でstaticにしてなかったらダメだろ。
362デフォルトの名無しさん:02/07/11 23:58
public,privateなんて、自分ひとりでプログラム作ってる限り、
そんなに関係ないだろ。

ライブラリや、多人数作業の時は必須だけど。
>>362
それを言ったら個人で使うなら何をやっても良いと思われ。
>>362
んなこたぁ〜ない。
365デフォルトの名無しさん:02/07/12 00:10
>>363
つまるところ、そうだろ。
公開ライブラリ作るとか、仕事でモジュールを作るとかだったら気をつかうけど、
自分でつかうオナーニプログラムでそんなには気にしないだろ。
とりあえず動けばおーけーで。
>>365
まぁ、同意。
いざ、誰かに見せる段になって恥かくかも知れないけどね。
367デフォルトの名無しさん:02/07/12 00:13
>>365

いや、普段からそうしてると、業務でもコーディングが
荒れてきちゃうよ。
個人的には、其の辺りをプライベートでもきっちりやる
のがアマとプロの違いだと思っておりますですハイ
一人で作っても保守性って問題があるからな。
369デフォルトの名無しさん:02/07/12 00:23
>>353
static int hoge;はヘッダに書く必要はないだろ?
それはつまりhogeの存在を隠蔽出来るってことだ。
規模とか、それを何回くらい使うかによるね。
371デフォルトの名無しさん:02/07/12 01:01
errnoは参照するだけで自分で書き換えたりしない方がよいですか(自作ルーティンのエラー番号を設定する時とか)?
というのもPerlの本にerrnoはUNIXシステムコールが返すエラー番号だと書かれていましたので。
基本的にはそうね。
>>371
書き換えていいかどうか自分で判断できるまで我慢しる。

>UNIXシステムコールが返すエラー番号だと書かれていましたので。
これは表現が正確じゃないな。
っつーか、perl の本を読む前に K&R なり企画書なりを読めYO!
374デフォルトの名無しさん:02/07/12 01:32
>>372
ありがとうございます。

>>373
K&Rは全てではないけど読みました。
375デフォルトの名無しさん:02/07/12 01:57
while(1){
for(i=0;i<2;i++){
if((msglen[i] = read(s[i+1],&str[i],1)) < 0){
perror("read");
exit(1);
}
}
if((strncmp(&str[0], &str[1], 1)) == 0){//引き分けの場合
printf("%s\n",buf2);
printf("a1");
for(i=1;i<3;i++){
write(s[i],buf2,strlen(buf2));
}
continue;
}else{
exit(0);
}
}

以上のwhile文のところで、思うような動作をしてくれません。
ifの条件をみたした時、こっちとしては普通にもう一度はじめから動作して
欲しいのですが、なぜか全部3回繰り返した後、こっちの動作を受け付けるように
なるんですけど、なぜでしょうか?
>>375
あ?
1文字ならstrncmpを使う必要はないと思う。
&str[1]ってみにくいね。str+1にして。
醜い
見難い
>>375
s[0]は使わんの?

> 以上のwhile文のところで、思うような動作をしてくれません。
> ifの条件をみたした時、こっちとしては普通にもう一度はじめから動作して
> 欲しいのですが、なぜか全部3回繰り返した後、こっちの動作を受け付けるように
> なるんですけど、なぜでしょうか?
whileの中にforがあって、その中でcontinueしてるから。
381デフォルトの名無しさん:02/07/12 02:34
>>375
readとwriteのパラメータってこれでいいの?
配列sにはopen(2)で返ってきたファイルディスクプリタが入ってるのかな。

あとcontinueはいらないし。どうせelseせずwhileまで落ちるんだし。

>>380
>whileの中にforがあって、その中でcontinueしてるから。
それはねえだろ。forの中でcontinueしてないよ。
382デフォルトの名無しさん:02/07/12 02:35
>>380
s[0]は親プロセスで使ってます。これは子プロセスなので。
長すぎたので省略しました。
continueをはずしても同じように3回繰り返されてしまいました。
383デフォルトの名無しさん:02/07/12 02:37
>>381
配列s[1]と[2]にはacceptしたファイルディスクリプタが入っています。
384デフォルトの名無しさん:02/07/12 02:46
>>375
その前に「思うような動作」ってなに?
回答者の解釈をあてにするな。
385デフォルトの名無しさん:02/07/12 02:48
>>383
なるほど、ソケットか。

えと、3回繰り返されるってのは、
printf("%s\n",buf2);
printf("a1");
が3回、えーとたとえばbuf2が"hoge"だったとして、
hoge
a1
hoge
a1
hoge
a1
と出ているってこと?
386375:02/07/12 02:51
>>385
そうです。本当は、
hoge
a1
だけかかれて、read()に戻ってほしいのですが、そうなってしまうんです。

>>384
すいません。上のような動作をしてほしいです。
387デフォルトの名無しさん:02/07/12 02:57
>>386
なるほど。えと、ソケットの向こう側で1文字送ってるつもりが
3文字送ってた、なんてことは、いくらなんでもないかな(w

printf("%s\n",buf2);

printf("%s: %02x: %02x\n",buf2, msglen[0], msglen[1]);
に置き換えたらどうなるだろう。
>>381
> >whileの中にforがあって、その中でcontinueしてるから。
> それはねえだろ。forの中でcontinueしてないよ。
forは二つあるんだが。
389375:02/07/12 03:03
>>387
: 01: 01がbuf2の後に三回出力されました
390デフォルトの名無しさん:02/07/12 03:04
>>388
うん。どっちもforの中でcontinueしてないよ。
とりあえず、整形してインデントあわせて見てみたけど。
391デフォルトの名無しさん:02/07/12 03:15
>>389
むー、わからんなあ。コード自体はおかしなところないようだし。
さっきも書いたけどソケットの向こう側で1文字のつもりが
3文字書いていたのでなければお手上げだ。
392375:02/07/12 03:20
>>391
3文字書いてはないのですが、さっきのプログラムのwhileの直後に
printf("str[0]:%c\n", str[0]);
printf("str[1]:%c\n", str[1]);
をいれて試してみたところ、やはり2回目と3回目では
str[0]とstr[1]には何も入ってなく、そのままif文にとんで繰り返して
いるみたいでした。
けど3回くりかえすのはなんでなんでしょう・・・?
>>392
最初のifが変。
394375:02/07/12 03:49
どのように変なのでしょうか?
>>394
それで期待した値がmsglenに入ってる?
と思ったけど、違うような気もしてきた。スマソ
printf("a1");

printf("a1\n");
に変えたらどうなるだろう?と言ってみるテスト
3回目までは同じ値が返ってきてるだけじゃないかな・・・
readがどんな値を返してるのか調べてみたら?
398初心者なんですが:02/07/12 05:17
ここで質問してもいいんですか?
a〜xまでの順列のパターンを列挙させたいんですが、C言語で
どうつくったらいいんでしょうか?
関数とかありますか?ヒントをいただけたらと思うんですが。

例 ABC,ACB,BAC,BCA,CAB,CBA
399デフォルトの名無しさん:02/07/12 05:27
char str[] = "***";
for(str[0] = 'A'; str[0] <= 'X'; str[0]++)
for(str[1] = 'A'; str[1] <= 'X'; str[1]++)
for(str[2] = 'A'; str[2] <= 'X'; str[2]++)
printf("%s\n", str);
>>398

char str[4];
str[3] = '\0';
for(str[0] = 'A'; str[0] <= 'X'; str[0]++)
 for(str[1] = 'A'; str[1] <= 'X'; str[1]++)
  if ( str[0] == str[1] )
   continue;
  else
   for(str[2] = 'A'; str[2] <= 'X'; str[2]++)
    if ( str[0] == str[2] || str[1] == str[2] )
     continue;
    else
     printf("%s\n", str);

もっとスマートな方法ないのかな〜?
401初心者なんですが:02/07/12 06:09
>399-400
ありがとうございます。
>399
すいません、同じ値が出てきてしまいます。
>400
「使用できない文字があります。」となってしまいます。どうしてかなぁ?
自分で探せばいいんですが。

ちょっと説明が足りなかったんですが、順列の値をもとに計算とかの処理をさせて
最小の値の順列を求めるということをさせてみようと思ったんですが、
配列とfor文駆使すればいいのかな?知識がないんで頭が痛いです。

402デフォルトの名無しさん:02/07/12 06:39
>>401
順列生成だったら「c言語による最新アルゴリズム事典」
とかにも書いてあるよ
403394:02/07/12 06:55
すいません。
acceptしたファイルディスクリプタからの入力を読みとりたいのですが、
whileで何度も読みとりたいのですが、1回目は読みとれるのですが、
2回目以降読みとらずに、勝手に進んじゃいます。
もしかして、一回ずつacceptしなおさないといけないのでしょうか?
404394:02/07/12 07:13
あと、forkとselectって同時に使えますか?
>>390
スマソ。グチャグチャなインデントにだまされた。
>>403
何度もってのが接続ごとにという意味なら当然そのたびにaccept()が必要だが、
どういう風にやってるのかソースを出すべし。

>>404
同時にってどういうことよ? fork()してからselect()は当然可能だが。
407デフォルトの名無しさん:02/07/12 08:39
>>400
スマートかどうかわからんけど、より汎用的なのを作ってみた。
はじめは、[a-x]に24文字あるから、24進数3桁の数字を111から
カウントしていくってコードを思いついたけど、
汎用にしたらオーバーフロー起こしそうな感じだったので
再帰で実装してみた。

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

void rgenerate(unsigned int digit, const char *seed, char *buf)
{
int i;

if (!digit) {
puts(buf);
return;
}
for(i = 0; i < strlen(seed); ++i) {
buf[digit - 1] = seed[i];
rgenerate(digit - 1, seed, buf);
}
}

int generate(unsigned int digit, const char *seed)
{
char *buf = (char*)malloc(digit + 1);
if (!buf) {
return -1;
}
buf[digit] = '\0';
rgenerate(digit, seed, buf);
free(buf);
}

int main(int argc, char * argv[])
{
generate(3, "abcdefghijklmnopqrstuvwx");
return 0;
}
>>407
インデント無しでその括弧付け・・・
409デフォルトの名無しさん:02/07/12 08:48
>>408
すまん、emacsからそのままコピペ。
行頭の半角スペースは見えなくなっちゃうのよね…
2chでソース晒すとそうなっちゃうんだよね。
そういう時は、エディタにコピーしてインデント付けながら読むとえ〜よ。
2ch用ブラウザで見るとちゃんと見えるよ。navi2chとか。
>>411
かちゅは無理
書き込むときに連続するスペースを全角にするとか、
&nbsp;にするとかいう機能があるといいかもね。
>>412
ん?>407はかちゅでちゃんとインデント付いて見えたけど
ポップアップだと見えるけど、そうでないなら見えない
416デフォルト名無しさん:02/07/12 16:27
以下のプログラムを実行すると、6文字以上打ち込んでも
返してくれます。
変数"ss"は5文字と指定しているのに。
どうしてなのでしょうか?
教えてください。


int main()
{
char ss[5];
cin >> ss;

cout << ss << '\n' << ss << '\n' ;

return 0;
}
>>416
単に配列ss[]がオーバーフローしているだけ。関数を呼び出したりしてから
表示するとバグる可能性大。
よくわかんないんだけど4文字じゃなくて5文字なの?
ってーかC++だし。
>>418
うむ。4文字までだな。'\0'を入れて5文字まで。
>>416
それ、8文字以上でも大丈夫か?
ダメだろうな。たぶん表示した後でコケると思われ。
もっと大量に打ち込むと表示するときにコケるかも試練。
fgetsでええやん
423416:02/07/12 18:50
試しに10文字以上適当に打ち込んだら
エラーという反応だった。

ところで416に書いたプログラムがC++とどうしてわかったん???
スレ違いと分かっていて聞いたのね。
Cにoperator>>()もstd::cinもない
425Pennis M.Ritchie:02/07/12 18:53
ふざけんな
426デフォルトの名無しさん:02/07/12 18:53
>>423
おいおいそんなことぐらいわかるよ、 ね。
427416:02/07/12 18:54
>424
マジで解らんかった。。。
このレベルならCもC++も同じなんだろうな、くらいの
感覚でここに書き込んだ。
迷惑だったらスンマソン
>>68
違反おきなかったら逆に怖くない?
C言語で,ユーザーに名前を入力させてそれを使っていきたいんだけど(MS-DOSではないです),
win32API使わないと入力欄とか作れないのかな?
うん
431デフォルトの名無しさん:02/07/12 21:11
>>429
MS-DOSではないものを作る=ウィンドウズプログラムを作る
つーこと?

ウィンドウズプログラムを作るは、win32APIはほぼつかうです。

432デフォルトの名無しさん:02/07/12 22:06
>>428
違反が起きないこともありうる。
randが返してきた値をポインタに変換したとき、
偶然スタックを指してたとかヒープを指してたとか。
書いた場所がスタックにある関数の戻りアドレスだったり、
レジスタを退避した場所だったりしたら一見関係ない場所で大抵クラッシュするだろうけど、
そうじゃない場合もありうる。

まあ大抵は違反が起きてくれるだろうけど。

だからこの種のポインタの値が腐ってるコードが一見うまく動くように
偶然なってしまった場合、非常に見つけ出すのが困難なバグになる。
433デフォルトの名無しさん:02/07/12 22:27
点 P(x、y)があったとして。
i=0;i<30;i++
というループのなかでちょうどよくその点を中心に横半径RX 縦半径RY の円を描く様な点を求めるにはどうコーディングすればよいのでしょう?
>>433
いいなおしてくれ
435433:02/07/12 22:40
>434
すみません。つまり、

int rx=40,ry=30;//半径40、30の楕円
int x=100,y=100;//中心
int p_x[30];//点を格納する配列
int p_y[30];//同上
for(int i=0;i<30;i++){

//ここで、rx,ryの円を描くように繰りかえし回数と等しい変化の割合で上限30個の点を求めたい。

}
>>435
12度ずつ角度をつけて(cos,sin)で半径rxの正円を書いてから、
縦に(ry/rx)倍して最後に(x,y)だけ平行移動
437436:02/07/12 22:44
ちょっといびつになるが。
438433:02/07/12 22:50
>436
なるほど!形の綺麗さにはこだわらない部分なので大丈夫です。どうもありがとうございました。
>>378
おいらどっちかと言えば str+1 よりも &str[1] の方が好き。
440デフォルトの名無しさん:02/07/13 00:20
みなさん、関数プロトタイプって書いてますか?
441デフォルトの名無しさん:02/07/13 00:27
>>440
規模の小さいプログラムなら関数の定義の順番を工夫して
書かないで済ませることもあります。

しかしソースを複数に分割するような場合は必ずプロトタイプをヘッダに書いてincludeします。
ちょっとした労力でバグが入る可能性を大きく減らせますから。
しかもプロトタイプがないと、コンパイラは関数の返す値をintと仮定しちゃうので、
いろいろ面倒なことも起こりがちですし。

staticな関数の場合はプロトタイプ書かないことが多いです。
442デフォルトの名無しさん:02/07/13 00:28
ハァ(゚Д゚)?
443デフォルトの名無しさん:02/07/13 00:37
ハァ(゚Д゚)?
444デフォルトの名無しさん:02/07/13 00:39
>>440
当然だ。
externならヘッダーファイルに、staticなら同じファイルに書いている。
445デフォルトの名無しさん:02/07/13 00:42
整数計算の桁数をdoubleより大きくすることはできないんでしょうか?
バイト長を指定できたりとかはしませんか?double(=8バイト)では足りないのです。
始めたばかりで何も分からずすいません。
>>445
long doubleが使えるかも。
整数計算とdoubleに関係が?
ハイハイ。
449446:02/07/13 00:45
>>447
なんかひっかかると思ったら、doubleで整数ってなんじゃ〜
450デフォルトの名無しさん:02/07/13 00:48
longをつけても変わりませんでした。
整数計算なんですが、x^255などというでかい数字を計算するもので、unsignedなどでは桁が全然足りないのでdoubleを使ったのです。
それで、無限桁数であればいいなと思ったのです。
>>450
xが0か1ならcharで大丈夫(ワラ
long longとか使えば?
後は文字列にするとか、
多売長にするとか。
>>441>>444
アリガトゥー。
454デフォルトの名無しさん:02/07/13 00:56
>451
(^_^;)
>452
long long と書いたら蹴られました。
多倍長のやりかたが分かりません…すいません…
多倍長しかないだろ。
456デフォルトの名無しさん:02/07/13 00:58
>>454
マァヴ(^_^;)
>>454
C++なら多倍長クラスがあるがどうよ?
458デフォルトの名無しさん:02/07/13 01:01
>>454
このスレか前のスレにbignumについて書いてあるから、それみてみれ。
Cで使えるbignumライブラリについてのポインタがあったと思ったぞ。
459デフォルトの名無しさん:02/07/13 01:03
>456
聞いたことあります。携帯板かどこかで見たような?
>457
Cでやってます。何も知らなくてすいません。
>458
探してみます。ありがとうございます。

しばらくいろいろやってみます。ありがとうございます。
>>454
long longが跳ねられる…VCか?
__int64とか。
>>460
それでも全然桁が足りないらしい。
462デフォルトの名無しさん:02/07/13 01:23
>>460
255乗する必要あるんだから、64bitでは全然足りんのではないか。
2^255でさえ、255bit必要だし。
そもそも^255する必要があるのか?
いったい何をするんだろ?
しらね
466デフォルトの名無しさん:02/07/13 01:41
>>464を攻撃します
素晴しい!
468デフォルトの名無しさん:02/07/13 01:44
fopenでファイルを開くときに、exeとは別のフォルダの中にあるファイルを開くことってできませんか?
絶対パス指定とかしてもだめっぽいんですが・・?
469デフォルトの名無しさん:02/07/13 01:46
>>468
無理。
>>468
まさか\マークを2個重ねてないとかそういうことか?
但しDOS/Windowsの話だが。
471デフォルトの名無しさん:02/07/13 01:54
¥は二つ重ねてるよ。
やっぱ無理かね
じゃあ、やっぱ無理なのかもしれないね
473デフォルトの名無しさん:02/07/13 02:01
もう一度言ってみてください。
わけわからん
絶対パスを指定しても駄目ってことあるのかな。
ファイルが無いとかじゃなく。
476デフォルトの名無しさん:02/07/13 02:09
>>1-1001
無理なモンは無理
>>471
んなこたーない。
>>468の脳味噌に無理がある
479デフォルトの名無しさん:02/07/13 09:52
>>477
確かにんなこたーない。
うちでもちゃんと動く。

絶対の話があがってるけど、相対はどうなん?
相対でも絶対でも開けるだろ。
ちなみにVCだとdebugとかreleaseとかのフォルダにexeがあるが、
VC上で動かすときはその一つ上のフォルダにexeがあるようなイメージになっているので
相対パスの指定がそんなかんじ。
481デフォルトの名無しさん:02/07/13 10:18
相対のときはカレントディレクトリがどこに設定されてるかで
結果が変わってきませんか?
482デフォルトの名無しさん:02/07/13 10:23
C言語ってDOS窓で動くんですか?
>>482
いいえ、コンピュータで動きます。
たまたま標準出力がそこにあるだけ。
484デフォルトの名無しさん:02/07/13 10:50
>>482
C言語は動かないです。C言語で作られた実行モジュールが動きます。
ネタはマ板でやってくださいです。。
486デフォルトの名無しさん:02/07/13 11:02
>>482 コンソールモードでコンパイルすれば DOS窓で動くアプリが作れますよ。
>>481
あたりまえだろ。そんなことをここで聞くな。
488わからない:02/07/13 16:39
どう説明していいかわからないのですが、「a^63をコンピューターに計算させようとしたとき、最低何回乗算すれば求まるか」という問題で、僕は答えが8回だと思ったのですが、解答を見ると10回になっていました。
↓具体的に考えた例を挙げておきます。

a^3 = a^1 * a^1 * a^1
a^7 = a^3 * a^3 * a^1
a^21 = a^7 * a^7 * a^7
a^63 = a^21 * a^21 * a^21

↓模範解答ではこうなっていました。

a^1 * a^1 = a^2
a^2 * a^2 = a^4
a^4 * a^4 = a^8
a^8 * a^8 = a^16
a^16 * a^16 = a^32
a^32 * a^16 = a^48
a^48 * a^8 = a^56
a^56 * a^4 = a^60
a^60 * a^2 = a^62
a^62 * a^1 = a^63

一体僕の解答のどこがおかしいのか教えてください。
>>488
6回でできるよ。

a^3 = a^1 * a^1 * a^1
a^9 = a^3 * a^3
a^7 = a^3 * a^3 * a^1
a^63 = a^7 * a^9
7回だった。逝ってきます・・・・・・

a^3 = a^1 * a^1 * a^1
a^9 = a^3 * a^3 * a^3
a^7 = a^3 * a^3 * a^1
a^63 = a^7 * a^9
491デフォルトの名無しさん:02/07/13 17:02
とりあえずツッコミ・・・
a^7 * a^9 は a^16 っす・・・
・・・・と思ったけどやっぱり6回でできるね。

a^3 = a^1 * a^1 * a^1
a^6 = a^3 * a^3
a^9 = a^6 * a^3
a^7 = a^6 * a^1
a^63 = a^7 * a^9
>>491
ガーン
494デフォルトの名無しさん:02/07/13 17:05
Cとなんの関係があるのだろうか。
495わからない:02/07/13 18:54
あ、すいません。すれ違いでした。
宿題スレに行って来ます。
496わからない:02/07/13 19:01
みなさんありがとうございます。でもやっぱり分かりません。僕の答えと模範解答の違いがよく分からなかったのです。
497デフォルトの名無しさん:02/07/13 19:29
1回できますよ.
a^63 = a ^ 1 * a ^ 1 * (中略) * a ^ 1
です.↑でa ^ 1は63回出てきます.
>>497
62回じゃん
>>497
つかそれ乗算ありすぎ。
500デフォルトの名無しさん:02/07/13 21:10
C言語って、どのくらいで習得できるん?
501さくら:02/07/13 21:12
カイジっておもしれーな。
>>500
串打ち三年・割き八年・焼き一生
503500:02/07/13 22:59
>>502
真面目に答えろ!
>503
天才なら3日
505デフォルトの名無しさん:02/07/13 23:09
Cって乱数発生の関数ないの?
506デフォルトの名無しさん:02/07/13 23:11
>>488
0回で出来た。

pow(a,63);
>>505
rand
習得って?
509デフォルトの名無しさん:02/07/14 00:17
>>505
疑似乱数生成関数ならあります。
510デフォルトの名無しさん:02/07/14 00:51
あのぅ、fork()とpipe()をつかってnkfに漢字変換をさせたいと考えて
ますが、nkfにデータを渡す際、パイプを閉じているにもかかわらず、
nkfがデータの終わりを待って、デッドロックが発生します。

どのようにすればいいんでしょう?
511デフォルトの名無しさん:02/07/14 01:00
>>503
>>502が真実を語ってると思われ。
経験がものを言う世界だからな。本だけ読んでもどうにもならない。
513デフォルトの名無しさん:02/07/14 01:05
>>510
親プロセスが、ちゃんと EOF まで nkf の出力パイプを読みきってあげていますか?
514デフォルトの名無しさん:02/07/14 01:15
>>513
親プロセスのwait()でひっかかっていて、nkfの出力パイプを読めるところまでいっていません。

nkfの出力パイプを試しに標準出力にしてみてみると、入力待ちをしているようです。

nkfへの出力パイプにはwriteして、最後にclose()を呼び出しています。なので、パイプは切れているはずですが、なぜに待ち続けるnkf・・・。
515デフォルトの名無しさん:02/07/14 01:38
ゴメソ。できた。
パイプは2個つかうのね・・・ドキュソぶりを発揮してしまった罠。
516デフォルトの名無しさん:02/07/14 05:00
(a)^=(b), (b)^=(a), (a)^=(b)
どうしてこれが置換になるのですか?
1番目の式でaに aとbの違い が代入される。
2番目の式でbに aとbの違い とb の違いが代入される。これはもとのa。
3番目の式でaに aとbの違い とa の違いが代入される。これはもとのb。
GUI処理と内部ロジックは,分けろといわれたんですが
GUI処理って画像の表示とかでしょうか?
>>519
グラフィカルなユーザインタフェースとかでしょう。
「コメントがなくてもわかるようにかく・・・」
ゲーム作っていればむりぽなのだが
xorってこんなことにも使えるんだ。ビット反転くらいにしか使わなかったが・・・
それでいいって・・
>>521
どのへんが?
1の補数とか2の補数って何の考えで使うんだろう?
みんな覚えている?
覚えていた方がいい?
>>525
確か引き算に使ったような、違うかな
swapなら
a=a+b-(b=a);
もアルネ。

>>525
引き算に使うというか。CPU内では
10 - 5 は 10 + (-5)
と処理されます。
引き算の命令なんかほんとは無いんですよ。
その正の数を負にするのが2の補数。
知ってて得したことは無し。
でもビット反転~は知っとこう。
負の整数は2の補数で表現される。
でもって、2の補数は1の補数+1だ。
1の補数は全部のビットを逆にしたやつ。
>>526-528
役に立ちました
参考書以上に理解できました
実数型には通用しない事が多いからそこんとこヨロ。
>>527
わかってるとおもうけど、ないのは減算命令じゃなくて減算器。
なお、普通は整数演算は加算とビット演算はひとつの演算器になってる。

たまーに、負数の内部表現が2の補数であることを(無意識に)仮定して、
ワードの全ビットを1にするのに-1と書いてあるコードがあるけど、
正しくは~0(うるさくいうと~((unsigned)0))。
>>531
~0u
どっちもおなじやん
>普通は整数演算は加算とビット演算はひとつの演算器になってる。
おれはこの日本語が分からん。不定形だ。

ところで型接尾子u、UはANSI規格内じゃなかった気が
するんだけど、どうなん?
>>534
はじめてのCから勉強し直してきなさい
整数演算は→整数の
537デフォルトの名無しさん:02/07/15 11:00
入門書で、copy コマンドのようなもの
を作るといSAMPLEがあってコンパイ
ルしてみたんですけど、.exeファイル
がコピーできません。
なぜでしょう??
テキストファイルしかCOPYできないん
です。
538デフォルトの名無しさん:02/07/15 11:21
ファイルをバイナリモードで開いてないから
539デフォルトの名無しさん:02/07/15 18:50
fgetsからintを使うfgetcにしたら解決しました。
>>539
もしかして copy のサンプルがその本ではfgets()で書いてあったのか!?
そんな本捨てろよ。
541ロリ:02/07/15 18:59
VC++で聞こうか迷ったんですが、
とりあえずVC++6.0の環境で、
#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
char value;
value = 1042*1042*1042;
printf("%d\n",value);
return 0;
}

をビルドすると警告のみで済み(エラーなし)、
実行すると「-56」と出ます。
何故???
コンパイルの時点でエラーが出ない事がそもそも不思議ちゃん。
ロリは帰れ
543デフォルトの名無しさん:02/07/15 19:05
scanf("%d",&a);
で数値を入力させるといちいちEnterキーを押さないといけませんよね。
なんとかEnterキーを押さずに数字入力したいのですが
どうすればいいのでしょうか?
>>543
難しいですね
1 と
12 と
120 をどうやって区別するんでしょうか
>>544
超能力で見分ける。
546ロリ:02/07/15 19:26
低レベルなボケ(プ
547デフォルトの名無しさん:02/07/15 19:32
>>541
本を読め。死ぬほどよめ。
死ぬまで
549デフォルトの名無しさん:02/07/15 19:34
>>543
まずは
>>1であげられてる
・C FAQ 日本語訳
を読め。
>>541
明らかにネタとわかるネタはやめて。
551デフォルトの名無しさん:02/07/15 19:36
>>544
一桁の数字なら方法はありますか?
>>551
標準ライブラリでは無理(なはず)。
windowsならgetcheでできたような・・・
553デフォルトの名無しさん:02/07/15 19:41
554デフォルトの名無しさん:02/07/15 19:56
cygwinでncurses使ったらどう?
555543:02/07/15 19:59
>>544 >>549 >>552 >>553
ありがとうございました。
C FAQ 日本語訳 システム依存までは読んでませんでした。
回線で首つって逝って来ます。
>回線で首つって逝って来ます。
意味わかってんの?

557デフォルトの名無しさん:02/07/15 20:22
>>556ワラタ
>>556
マジレスつまらん
下手に通ぶるのも痛い罠。
>>541
1042が、微妙に天然のヨカソ
>>560
ワラタ
あごが外れるかとオモタよ
>>560
気がつかなかったよ
563デフォルトの名無しさん:02/07/15 23:14
ioctl()をラップする関数ってどうやって書くの

...の部分をどうしたらいいかわかりません
564デフォルトの名無しさん:02/07/15 23:19
みなさん、こんにちわ。
C言語を勉強中なんですけど分からないところがあります。ぜひ、教えてください。
MS VC++6.0でCのソースを開いてコンパイルして使っています。
配列を多く使うとエラーになってしまうんですがどうしてでしょうか?

char ss[1024][1024][1024]; ←これだと大丈夫。

char ss[4096][4096][4096]; ←これだとだめ。(c2133エラー)サイズが不明です。が出てしまいます。
36bit個だぞゴルァ!
>564
なんのために、そのような暴挙を?
1024*1024*1024 = 0x40000000
4096*4096*4096 = 0x1000000000

なっ
そういうもんだから。
569564:02/07/15 23:25
すいません、

>char ss[1024][1024][1024]; ←これだと大丈夫。
これでは、エラーは出なかったけど実行出来ませんでした。

ータル イメージ サイズ -2147278848 が最大値 (268435456) を越えています;
570564:02/07/15 23:28
多く配列が欲しい場合どうすればいいのでしょうか?

出来れば char ss[16384][16384][16384]ぐらい欲しいのですが…。
無理でしょうか?
まじで、なにをするのよ?
>>570
Cとしては正しいよ。
あと50年くらいすれば実行できるんじゃない?
>>564
そのタイミングでそのネタは、アレだよ…
>570
それってテラバイトいってないか?
つーか、汎用機でもそんなにメモリ積んでない
576 ◆JAPH9PWA :02/07/15 23:34
メモリを400TBもつかって何するつもりなんだか…。
>>574
4TBだね。流体シミュレーションでもしようってのかな。
578 ◆JAPH9PWA :02/07/15 23:40
間違えた…ウワァァァン
( ´,_ゝ`)
580マグマ大便:02/07/15 23:54
64ビットCPUと対応するコンパイラがないと無理じゃないの?
OSから必要と思われ。
(´-`).。oO(きっと地球趣味レータで動かすんだよ)
あのー、俺は double [100000][100000][100000][100000] 必要なんですけど
どうすればいいですか?逝ってよしですか?

超対称性理論を実証するのに必要なんですけど・・・・・
整数でやれば?
char[100000][100000][100000][100000]
585デフォルトの名無しさん:02/07/16 00:37
>583
心配しなくても、計算が終わる頃にはそれくらい当り前にできるようになってるよ。
586584:02/07/16 00:39
ああ、前スレ読んでなかったよ。。
これでもオーバーフローするんだね。(鬱

>>583
あらためて。
PS3買ってグリッドコンピューティングでもすれば?
PS3はcellを搭載しませんが、何か?
64bit対応コンパイラでも無理なのかな(sparcとかalphaとか)
アドレス空間は64bit,longも64bitでもintが32bitだと無理かも
589デフォルトの名無しさん:02/07/16 01:01
char ss[2][2][2][2]でもオーバーフロウします。。。
char ss[1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1];
で代用してください。
あのー、ほんとに基本で申し訳ないんですけど、
標準入力からの文字と数字の見分け方ってどうすればいいんですか?

ほんとにすいません。
でもとりあえず教えてくださいお願いします。
教えてもらったらキーボードのカドに頭ぶつけて二度と来ないんで、
これだけは教えてください。
>>591
なぜそんなに謝るんだね?
ん?何をしたんだい?言ってみなさい。
大丈夫、秘密は絶対誰にもしゃべらないから。
593デフォルトの名無しさん:02/07/16 04:02
int main(void)
int main()
main()
などがありますが、どれを使ったほうがいのですか?
>>593
void main(void)
が正解です。
>>594
それは環境による。大概のOSは int main(void) が正解。
>>591
標準入力から流れてくるのは文字列だけ?
そうなのだったら、ctype.hの各関数(マクロ)を調べるとよい。
>>593
規格上はint main()が正解。int main(void)は同じ。プロトタイプだと話は変わってくるけど。
スレとしてはvoidが正解
FILE *main()
600デフォルトの名無しさん:02/07/16 04:29
>>595
つか規格上は、mainはintを返さないとまずい。
まずいというか、intを返さなければならない。
601591:02/07/16 05:02
>>596
標準入力からは、文字列のみ、または数字のみです。
文字列と数字が混ざることはありません。
この場合、どんな関数で受け取るのが都合がいいのかも
あわせて教えてもらえるととてもありがたいです。
602デフォルトの名無しさん:02/07/16 05:14
>>601
isdigit()
603593:02/07/16 05:15
いろいろな返答ありがとうございます。
とりあえず、
int main()
int main(void)
のどちらかをつかっておけば、無難ということでOKですか?
604デフォルトの名無しさん:02/07/16 05:25
>>603
うん。あとは、
int main(int argc, char **argv)
も使う。とにかくmainはintを返しとけ。
605591:02/07/16 06:00
>>602
それだ!!
ありがとうございます。
ではお約束通りキーボードのカドに頭ぶつけて逝ってきます。
>>601
お前の定義じゃ数字は文字列に含まれないのか小一時間
>>606
議論する抽象化の度合いが違うんでは?
608デフォルトの名無しさん:02/07/16 07:20
はい、唐突に質問です。パスワードを暗号化して記録しておくためにハッシュを行いたいんです。
crypt()を用いてDESハッシュはできたのですが、暗号文が短いのでちょっと不安。

そこでmd5ダイジェストを実装しようとしたのですが、コンパイルが上手く行きません。
現在Vine Linux環境で、コマンドラインの指定が間違ってると思うのですがアドバイスをお願いします。
エラーメッセージは↓(次に続く)
609608:02/07/16 07:22
必要なやつをリンクさせる気がするのですが…

$gcc -o main.c md5_crypt.o
/usr/lib/crt1.o: In function `_start':
/usr/lib/crt1.o(.text+0x18): undefined reference to `main'
md5_crypt.o: In function `md5_crypt':
md5_crypt.o(.text+0x45): undefined reference to `MD5Init'
md5_crypt.o(.text+0x64): undefined reference to `MD5Update'
md5_crypt.o(.text+0x83): undefined reference to `MD5Update'
md5_crypt.o(.text+0x93): undefined reference to `MD5Final'
collect2: ld returned 1 exit status
610608:02/07/16 07:24
失礼、↑ちょっと訂正。

$gcc -o md5 main.c md5_crypt.o
>>609
そのmain.cとmd5_crypt.oはどっから持って来たもの?

> $gcc -o main.c md5_crypt.o
もしかして、本当にこうやってmain.cを壊したとか。
612608:02/07/16 08:03
さっきのはここに書くときに間違えただけなのでmainは無事です。
main.cは関数を呼ぶだけでmd5_crypt.c、md5_crypt.hはmd5暗号化処理を行う関数の実体を記述してます。

で、MD5Init、MD5Update…とかはjman md5で調べたら<openssl/md5.h>を
インクルードして使うらしいので全部ライブラリを流用しました。
なんか、これらmd5関連の関数の実体をリンカで結べばいい気がするのですが、どこにある何をもってこればいいのかワカリマセン
-lcrypto
614608:02/07/16 08:30
>>613
試してみたけど先程と同じエラーがでます。うーむ

$gcc -o md5 -lcrypto main.c md5_crypt.o
md5_crypt.o: In function `md5_crypt':
md5_crypt.o(.text+0x45): undefined reference to `MD5Init'
md5_crypt.o(.text+0x64): undefined reference to `MD5Update'
md5_crypt.o(.text+0x83): undefined reference to `MD5Update'
md5_crypt.o(.text+0x93): undefined reference to `MD5Final'
collect2: ld returned 1 exit status
>>614
$ gcc -o md5 main.c md5_crypt.o -lcrypto

-lオプションは順序を考えないと。
616608:02/07/16 09:44
何度も申し訳ない。順序を換えても変化なしです…。
うおお、謎ッ!
$ gcc -print-file-name=libcrypto.so
でlibcrypto.soを確認して、
$ rpm -qf /path/to/libcrypto.so
とか
$ nm /path/to/libcrypto.so | grep MD5
ってやったらなんか出て来る?

(/path/to/libcrypto.soはgccで表示されたファイル名)
618デフォルトの名無しさん:02/07/16 14:28
>>616
手元のマニュアル見ると、
MD5_Init
みたいにアンダーラインが入ってるようだけど?

gcc に -Wallオプションつけて未宣言関数を呼び出そうとしてないかチェックしてみたら?
>>618
> みたいにアンダーラインが入ってるようだけど?
あ、気づかなかった…。伐つ出汁。
ド素人な質問はここでいいんでしょうか…?
621デフォルトの名無しさん:02/07/16 15:23
>>620
C言語なら
622620:02/07/16 15:28
>>621
即レスしていただきありがとうございます。
でも聞く前にもうちょっとがんばってみようと思いますので。
どうしようもなくなった時はまたお願いします。

まあただ単に、配列に関数どかどかならべて順番に実行したいだけなんですが。
623デフォルトの名無しさん:02/07/16 16:26
int型の変数aとbがあったとして、このaとbの符号が異なっている場合にtrueを得るにはどうすればスマートでしょうか?
if文で比較するような、泥臭い方法しか思い付きませんでした... (TT)
最上位ビットの排他的論理和をとる
>>623 aとbを掛けて、正か負か
つか、すなおにif文つかうのが、スマート。
627デフォルトの名無しさん:02/07/16 16:40
>625
オーバーフローは大丈夫か?
どっちかが0だとダメ。
>>623
その部分がボトルネックになることが分かってから考えたら?
うーん、自分があふぉなんだと思ってたんだけど...
スマートな方法が思い付かないんじゃなくって、そんな方法は無いのかな。

>>624
int型のサイズを決め打つような方法は採りたくないんですよ。
最上位ビットのマスクを求めるようなコードを書くのなら、if文の方がマシなような...

>>625
おぉ、プラスになれば符号は同じ、マイナスになれば符号が違ったって事ですね。
思い付かなんだ... (恥)

>> 627
オーバーフローしても、符号自体は保持される筈ですね。


今はif文で書いてあるんですけど、ちょっとテストしてから書き直してみます。
ありがとうでした。
>>629
確かにボトルネックになる部分ではありますが、それよりは「このコード格好悪いなぁ」という方が問題かも... (w

if( is) {
a = 1;
} else {
a = 2;
}

と書くよりは

a = is ? 1 : 2;

って書きたいですよね? 漏れだけかな...


>>628
ご指摘の通りです、書くときに考慮します。
4バイトだとして
0x80000000 * -1 = 0x80000000
じゃなかったっけか
本当にボトルネックになってるのなら、そういう基本操作はアセンブラでやったほうが速くなるかも。
うーむ。個人的には624に結構感動したのだが。一番速いと思うし。
>>633
この程度なら、まともなコンパイラならちゃんと最適化してくれるから、
自分でアセンブラ書くのはやめといたほうがいいかと。
int f(int a, int b)
{
 return ((a & (1<<(CHAR_BIT*sizeof(int)-1))) ^ (b & (1<<(CHAR_BIT*sizeof(int)-1)))) != 0;
}
int g(int a, int b)
{
 return ((unsigned)a >> (CHAR_BIT*sizeof(int)-1)) ^ ((unsigned)b >> (CHAR_BIT*sizeof(int)-1));
}
int h(int a, int b)
{
 return (a < 0) != (b < 0);
}
クリティカルな部分に使うなら、gを使ってhの内容をコメントに書いておく
ん?
return (a^b)>>(CHAR_BIT*sizeof(int)-1);
の方が良くない?
だんだんトリッキーになりつつある
鳥ッキー
640デフォルトの名無しさん:02/07/16 17:30
>>631
無理にif文を使わないようにする方が格好悪い。
まあ三項演算子のほうが生成される実行ファイルが小さくなりやすいだろうが。
>637がベストだ。気がつかなかった。
あと、(a^b)をunsignedにキャストしないと、
結果がうまく0or1にならないかもしれないね(処理系依存)。
0と比較するなら構わないけど。

個人的には、普通に(無理に)ifや?:を使うより、
(a < 0) != (b < 0)
の方がよっぽど見やすいと思う。
>>642
コメントは書いておいた方がいいと思う。
あと、関数じゃなくてマクロにするといいかも。
(a^b)<0は間違い?
645デフォルトの名無しさん:02/07/16 17:39
Cのビットシフトってsignedの値にやった場合は算術シフトに、unsignedの値にやった場合は論理シフトになるんでしたっけ?
>>644
gcc -O2 -S でコンパイルしてみたが一緒。そっちの方が分かりやすくて良いかも

>>645
同じくコンパイルしてみたが一緒だった
>>644
素直なコンパイラだと分岐命令に展開される

>>645
signedだろうがunsignedだろうが、実装依存
648646:02/07/16 17:53
>>645
悪い。違った。
signedだと sarl (算術シフト)
unsignedだと shrl (論理シフト)
でした
649645:02/07/16 17:55
>>646-647
情報ありがとう。
実装依存か。じゃあCから算術、論理を選択してビットシフトする(標準的な)方法はないんだ。
てゆーか、まあ、最初から負数が2の補数表現であることに依存してるわけで。


面白かったけど。
651デフォルトの名無しさん:02/07/16 18:12
>>650
(a < 0) != (b < 0) のどこが依存しているの?
>>651
なにが?
2の歩数だろ
>>645
unsignedおよびsignedで正であるときにのみ
a<<b⇔a*2^b
a>>b⇔a/2^b
であることが決まっている。(ただしbはaのビットサイズ未満かつ0以上)
その他は未定義や実装依存
便乗質問ですが、
整数をqsort()でソーティングするときに渡す比較関数は、
みなさんはどのように実装してます?
とりあえず、
int compar(int *a, int *b) {
return *a-*b;
}
は良くないということなので、私はif分岐でしてるんですが、
何か良い方法ありますか?
良くないことはないとおもうが
657608:02/07/16 19:32
md5に悩んでいた608です。問題の箇所は"MD5_Init"のアンダーバー入れ忘れでした。
アンダーバーを書いて(↓)でうまくいきました。
カラアゲうまうまさん、名無しさんありがとうございました!

$gcc -o md5 main.c md5_crypt.o -lcrypto

658655:02/07/16 19:34
>>656
オーバフローするので大きい数字扱えません
659デフォルトの名無しさん:02/07/16 19:38
無名共用体って合法かつポータブルですか?
Cでは非合法
>>659
てか、使い道あるのですか?
>655
オーバーフローの可能性があるなら
return -(*a < *b) + (*b > *a);
にでもしといたら
663659:02/07/16 20:02
やはりCではサポートされていないんですね。

>>661
struct{
 union{
  struct{
   ...
  } C;
  
  struct{
   ...
  } D;
 } B;
} A;
のような構造体を定義した場合、
A.B.C, A.B.Dというように毎回Bを指定するのは冗長です。
無名共用体使ってA.C, A.Dと書けば多少すっきりするので
たまに使います。
664デフォルトの名無しさん:02/07/16 20:40
age
>659
union {
 struct{... } C;
 struct{... } D;
} A;
じゃだめなのかな?
666デフォルトの名無しさん:02/07/16 21:18
>>663
grep 'define.*addr.*\.' /usr/include/netinet/*
667デフォルトの名無しさん:02/07/16 22:17
C て、変数を漢字で記述できるのですか

>>667
多分、できないと思われ
669デフォルトの名無しさん:02/07/16 22:22
お、これは、できるツールツクッチャエ ビジネスチャンス
既にあったりして
671デフォルトの名無しさん:02/07/16 22:30
いい、m(._.)m
>>667
英字と数字と_のみ。先頭は数字であってはならない。
673デフォルトの名無しさん:02/07/16 22:36
>>670
デバッグできねーじゃん。
674デフォルトの名無しさん:02/07/16 22:38
>>670 すげぇ・・・やってのけているな
675デフォルトの名無しさん:02/07/16 22:38
VBでは(Javaも?)変数名に2バイト文字を使えるけど、使う人はいないよね。
>>673
ご、ごめんなさい
677デフォルトの名無しさん:02/07/16 22:39
>>676==作者
678676:02/07/16 23:40
デバッグ用に識別子を戻すフィルタを急いでつくったので、よかったら
お試しください。失礼いたしました。
679 :02/07/17 01:07
>>678
つーか、デバッガが使えないだろ。
680uk:02/07/17 02:55
sprintf(str,"<html>\n<head>\n<title>うんこですがイ可か</title>\n</head>\n
<body>\n<h1>うんこ画像</h1>\n<br>\n<img src="http://www.unko.com/img/unko.jpg">\n</body>\n
</html>") ;

当方VC++6.0
こんな感じでstrにhtml記述をぶち込みたいのですが、やり方が激しく分かりませんです
まず <img src="unko.jpg"> のダブルクォートでsprintf(str,"…"unko.jpg"…")
となってしまうのは問題なのでしょうか
さらに http://www.unko.com/… の//以降がコメント扱いされるくさいので、
\\\ に変えてみたところ、「不要な箇所に、エスケ-プシ-ケンスが付いています。」とVCに吐き捨てられますた。
どなたか解説おながいします(;´Д`)
<img src=\"unko.jpg\"> みたいにしてみそ。
そうすれば // があっても無問題。

src=" の部分で文字列が終わってしまうのね。
で、// で C++ 式のコメントが始まってしまうというわけ。
682uk:02/07/17 03:24
>681さん
即レスあがとうございます
ものごっつ普通に実行出来ますた(;´∀`)
心の底からありがとうございます
>>676
どっちかというと、これが気になる。

> まあ、水谷カスタムとはいっても、flex win32用実行バイナリ内の
> 文字列リテラル( 多分 .simpleファイルか何かに相当 ) を
> 直接 ほんの十数バイト書き換えただけなので、簡単な
> わずかの修正で対応できると思います。
684名無し:02/07/17 14:36
質問です。
メモリ関数と構造体を使用して、簡易データベースを作りたいのですが
構造体にメモリを割り当てるにはどうすればいいんですか?

構造体宣言を
struct main_deta{
int deta_id;//データID
char deta_name;//データネーム
int deta_value;//データヴァリュー(数値)

}*p;//確保したメモリのアドレス。データの格納先

このように書いて

p = calloc(w, sizeof(struct main_deta));
printf("データIDを入力してください。   :");
scanf("%d",&p[i].deta_id);
printf("データネームを入力してください。  :");
scanf("%s",&p[i].deta_name);
printf("データヴァリューを入力してください。:");
scanf("%d",&p[i].deta_value);

この形で入力して表示させようとすると
「"0x0040832c"の命令が"0x00000031"のメモリを参照しました。
メモリが"rezd"になることはできませんでした」と、でてきます。

このエラーは何なんですか?

よろしくお願いします。
とりあえず、%sをcharで受けるのは無謀
どうでもいいが、data?
687677:02/07/17 14:52
>>678
ワラタ 本当に作者だったのか。
>>684
char data_nameはchar data_name[n]の間違いか?
689名無し684:02/07/17 15:03
>>684
%cで受けると入力ができないのですが
>>688
そうでした。間違えてました。
>>689
%sが間違っている意味ではない。
deta_nameに&をつけているし、charに名前を入れる気なんだろうなぁ
と思って。
691first time:02/07/17 15:09
初めての仕事で、Warning 除去を行っているのですが、なかなか時間がかかってしまいます。勉強にはなるのですが・・。
692デフォルトの名無しさん:02/07/17 15:11
693デフォルトの名無しさん:02/07/17 16:24
>>690
そうでしたか。
>>693>>684という前提で聞くけど、解決したんすか?
695timer:02/07/17 17:29
PC-9821Xa10 TCC4
でタイマー(割り込み)を500ms以下にしたいんですができますか?
500msはできました。
696デフォルトの名無しさん:02/07/17 18:53
構造体の名前が長くて書くのめんどくさいときに
defineみたいなやつありませんでしたか?
697695 timer:02/07/17 18:55
>>695
自己レス。できますた。
timerの仕組みをもう少し勉強しなきゃ。
>>696
#define s struct long_long_long_name_struct
typedef struct long_long_long_name_struct s;
699デフォルトの名無しさん:02/07/17 19:06
>>696
コピペ汁。
Xa・・・懐かしい響きだ。
701デフォルトの名無しさん:02/07/17 19:18
>>696
初心者板で答えただろ・・・
702真性包茎:02/07/17 21:36
dosのプログラミングにも飽きたので、
そろそろwindowsアプリにも挑戦しようかなって思ったんだけど
コンパイルがうまくいきません
ソースが間違ってるのかな?…↓
#include <windows.h>

int WINAPI WinMain(HINSTANCE Inst, HINSTANCE Prev,
LPSTR Cmd, int Show)
{
int hoge;
hoge = MessageBox(NULL,
(LPCSTR)"逝ってよし?",
(LPCSTR)"2ch",
MB_YESNO);
if(hoge = IDYES){
system("rundll user.exe,exitwindows");
}
return 0;
}
誰かうまく逝った方教えてください
>702
なにがしたい?
704真性包茎:02/07/17 21:42
>>703
できた〜?
>>702
実行しちまったがな

GUIプログラムとしてコンパイルしないと
(WinMainを呼ぶライブラリをリンクしないと)
だめだよ。それから
#include <stdlib.h>
とif(hoge = IDYES)は
==の間違い
706真性包茎:02/07/17 21:48
レスありがd
でも僕包茎なので
リンクって何か分かりません
どうやってやるんですか?
module2つ以上作ったことありません
コンパイラが何か知らんが
例えばborland c++ならば
bcc32 -tW hoge.c
とか
708真性包茎:02/07/17 21:56
>>707
コンパイルできたんだきど
パソコン止まります。
その名前を変えてくれ。
なんか見ていていやだ。

#俺が、って突っ込みはなしの方向で(ちがうけどw
710684:02/07/17 22:14
>>694
遅レスすいません。
何とか解決しました。
711仮性包茎:02/07/17 22:16
変えてみましたン
>>708の答え教えてほしいです。
なんでおとなしくメッセージループを作らないの?
713仮性包茎:02/07/17 22:21
>>712
意味がわかんないです。
教えてください♥
聞くとしたらここかなぁ?
http://pc3.2ch.net/test/read.cgi/tech/1023361418/l50
715仮性包茎:02/07/17 22:25
レベルが高すぎてついていけませんでした。

ヽ(`Д´)ノ ウワァァァン
じゃあ、ここは?
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index_sdk.html

717仮性包茎:02/07/17 22:39
>>716
returnの前に付け足すってことですか?
DOSは基本的に入力を受け付けるプログラムは同時にひとつしか
動いていなかったけど、windowsでは複数動作することがあるので、
メッセージドリブンというか、メッセージと呼ばれる要求をいったん
蓄えておいてそれを取り出して処理を行わなくてはならない。
最後のreturnの前のwhileやGetMessageは、そのメッセージをとりだして
Dispatchで処理するルーチンに送る。
719仮性包茎:02/07/17 22:50
>>718
ありがとう
http://vitaltrack.hoops.ne.jp/midi/dqlvup.mid
702は皮が1mmむけた
720デフォルトの名無しさん:02/07/17 22:53
>>702
こんな感じ?
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR s,int nShow)
{
int rc = MessageBox(NULL,
TEXT("逝ってよし?"),TEXT("(* ゚Д゚)"),MB_ICONQUESTION | MB_YESNO);

if(rc==IDYES){
 // 以下 NT,2000の処理
 TOKEN_PRIVILEGES tp;
 HANDLE hToken;
 // アクセストークンを開き、遮断特権のLUIDを得る
 if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken)
 && LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tp.Privileges[0].Luid)){
  // 遮断特権を使用可能にする
  tp.PrivilegeCount=1;
  tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hToken,FALSE,&tp,NULL,NULL,NULL);
 }
 // ここまで NT,2000
 // 遮断 user.exeを使わず、自力で逝く
 if(! ExitWindowsEx(EWX_SHUTDOWN | EWX_POWEROFF,0)){
  MessageBox(NULL,TEXT("逝けませんでした"),NULL,MB_OK);
 }
}
return 0;
}
721デフォルトの名無しさん:02/07/18 00:23
質問です。
gcc で作ったオブジェクトファイルと、
g++で作ったオブジェクトファイルはリンクできませんか?
よろしくお願いいたします。
たとえば、
gcc -c aaa.c
g++ bbb.cpp aaa.o
とかできませんか?
722デフォルトの名無しさん:02/07/18 00:24
>>721
やってみたらいいじゃん。
やったことないから知らんが、できるんじゃないかな?
ていうか、やってみたらいい
724721:02/07/18 00:25
なじぇか、シパーイします。
aaa.oを見てくれません・・・
g++のかわりにgcc -lstdc++は?
726721:02/07/18 00:32
>>725
ありがとうございます。
なるほどー
やってみますね。
gcc でちょっとしたwarningで済んだものが
g++では厳しくなってますから・・
Cで書いた関数をC++で使いたいってときは、
いい方法があるのでしょうか・・・
>>724
エラーメッセージ等を張りたまい。
728 :02/07/18 00:42
>>726
extern "C"
729721:02/07/18 00:47
>>727、728
おぉ、ありがとうございます。
extern "C" 調べたら載ってましたー。
調査が足りませんでした・・・
ある時刻(例:2000年05月10日14時02分45秒を入力)から
ある時刻(例:2001年10月03日06時10分10秒を入力)までの
経過時間を、○年○月○日○時○分○秒の形式で出力する
プログラムを作りたいんですけど、どうしたらいいでしょうか?
お願いします。
作ればいいんじゃない?
>>730
mktimeで秒にしてから差を取ってlocaltimeで・・・・・
という方法ではうまくゆかないな(鬱
733730:02/07/18 14:26
関数やアルゴリズムについて教えて下さい。
734デフォルトの名無しさん:02/07/18 14:27
>>730
なんでsage?
735730:02/07/18 14:28
>>732
助言ありがとうございます。
その方法でやってみます。
>>735
だめだってば。
737730:02/07/18 14:38
>>736
ではどうしたらいいでしょうか?
>>737
さぁ・・・
意地悪じゃないよ。
739デフォルトの名無しさん:02/07/18 15:01
Cでファイルを開く時、fopenを使いますよね?
使い方がよく解らないのですが…教えていただけませんか?
>>739
ヘルプ見ろ
>>730
ふつーに差を60で割って、60で割って、・・・とやればいいのでは?
>>739
それぐらい本を買って来い。>>1のK&R買っとけ。
743730:02/07/18 15:09
では入出力を○時○分○秒形式で、どなたか作れませんか?
>>743
いくら出す?
>>742
うるう年とか2月は28日までとかをいれると面倒だな。
mktimeの値の差分に2000年1月1日のmktimeの値を
足して、localtimeに放り込めばできるだろ。
年からのみ2000を引いておけ。
>>739
標準関数は
http://www.linux.or.jp/JM/
のセクション3より検索。
747739:02/07/18 15:19
>740
ヘルプ…持ってないです。
BCCを使ってるので…以下無いとダメですか?
748747:02/07/18 15:21
>746
ありがとうございます!
こんなページがあったんですね。
つか、出力の○年○ヶ月方式やったら、
一ヶ月30日方式で計算するんと違うん?
>>749
うむ、そう思った。
時刻の差のうるう年とか大の月小の月っていったい何なんだよと不思議な気分(w
30日だと30*12=360、で5日足りないのは(゚Д゚)マズーくないか?
752デフォルトの名無しさん:02/07/18 16:07
Cに環境変数は無いのか?
自分(EXE)の場所とかの。
無い
>751
12ヶ月->1年に繰り上がらないならいいのでわ?
1年は365.24日で、31556736秒として、そのあまりを
30で割って、ヶ月にする。そのあまりを、、、と続ければ。

>752
そういうのは環境変数っていうのか?
755デフォルトの名無しさん:02/07/18 16:10
1/1と2/1と3/1は一ヶ月ずつ違うが
日単位でいえば等間隔ではない
このあたりを定義してくれ
と皆は言っている
2001-2000で1年
2001/09/10-2001/05/10で4ヶ月
2001/10/02-2001/09/10で22日
翌06:10:10-14:02:45で16時間7分25秒
ってことじゃないか?
「地球衝突まで後1235日!」
とかいう記述はあるけど
「地球衝突まで後3年4ヶ月と20日!」
とかいうのはあまり聞かないな、実際・・・。

>>754
それやると、1日が23時間58秒、とかにならない?
実のところ正しいやり方はないのでわ?
じゃ、
2002/2/28 〜 2005/1/1 までは?
759デフォルトの名無しさん:02/07/18 16:55
ちと教えて。

extern int hogehoge( void );


extern int hogehoge( void )
{
  return( 0 );
}

ってコードって、どう解釈されるの?
externで外部参照宣言しておいて、自分の中にexternで関数を書くのって
C言語的には普通に問題なく解釈されるものなの?

もう会社から消えた先輩のソースを見て、疑問でまくりの1つです。
760デフォルトの名無しさん:02/07/18 17:03
>>759
大馬鹿者のコード。かもしくはソースファイルがひとつだけのプログラム。
761デフォルトの名無しさん:02/07/18 17:06
>>752
自分自身のファイル名やコンパイルした日時を表す定義済みマクロならあるけど。
762デフォルトの名無しさん:02/07/18 17:06
文字列入力について教えてください。

void main()
{
char c;

/*c=getchar();*/  ←これを入れると
ms();
}

void ms()
{
char ss[10];

gets(ss);       ←文字列入力が出来ません。
printf(ss);
printf("なんで出来ないんだよ〜"); ←これは表示されます。
}

この場合、どうすれば文字列入力飛ばされずにすむでしょうか?
>>762
getcharで一文字取り出したあとに改行コードがバッファに残るから、getsでそれを呼んでしまい、getsで入力待ちにならない。





getsなんて使うな。printf(ss)はやめろ。printf("%s",ss)にしろ。
764763:02/07/18 17:11
getcharのところでEnterキーだけ入力してみな。
765759:02/07/18 17:11
>>760-761
どうも。
あるドライバの複数のソースファイルの1つです。
ドライバなので、おそらくドライバ起動時に外部から呼び出されているはずなんですが・・・
以前作られたドライバを組み込もうとしたら起動しないので、原因調べてくれっていわれて
既に存在しない先輩のソースを見てたんですけど、今までこんな記述見たことないので
おかしいな、と思ったんですよ。

結果として、ライブラリの関数でこういう記述をしておいて、外部からちゃんと呼び出せるんでしょうかね?
766デフォルトの名無しさん:02/07/18 17:12
winでbccでWinAPIの勉強をしようと、
「猫でも」の「SDK1」を見に行ってコンパイルしてみているのですが、
うまくいきません。

何かbcc32にひきすうを渡さないとだめですか?

もうひとつ。
bcc32ではC++はコンパイルできませんか?
×getsでそれを呼んでしまい
○getsがそれを読んでしまい
>>766
bcc32は元々C++用コンパイラ。
それとここではスレ違い。
>>768
非道いな。
770デフォルトの名無しさん:02/07/18 17:15
>>765
あ、>>759は間違いじゃないぞ。
ただ、こういうものはヘッダーファイルに書いてインクルードする。
だいたい、「うまくいきません」と書いてあるだけで
何故うまくいかないのかわかったら超能力者だ。
どんなエラーになるかぐらいかけや。
次スレは圭子たんでよろしこ
関数はデフォルトでexternだってつい最近見たような
逆に、関数内でローカルに宣言することもできるけどね
int main()
{
 char buff[100];
 int strcpy(char *p, const char *dst);
 int a = strcpy(buff, "abc");
}
とかの矛盾した宣言でも
774759:02/07/18 17:19
ん。
そのhogehogeという関数が呼び出せないか呼び出し時にエラーが起きる、という話でした。
ドライバ起動時の初期化関数なんすよね。

>>770
そうなの? ありがとー。
でも、思いっきりソースファイルに書いている。
そのソース(init.c)内の関数は、このexternか

static int ahya(void);

static int ahya(void)
{
 /*処理*/
  return( -1 ) ;
}

みたいなのばっかり。
775デフォルトの名無しさん:02/07/18 17:19
>>773
K&Rのサンプルに局所的なプロトタイプ宣言があったよ。
思った通りその関数の中でしか通用しないね。
>>774
staticならプロトタイプはヘッダーファイルに書いてはならないけど、
他のファイルから参照するexternな関数ならプロトタイプはヘッダーファイルに書くべき。
いちいち書いても間違いじゃないけどね。
それと、変数宣言時につけるexternとはちょっと意味が違うよ。
777776:02/07/18 17:22
変数宣言時じゃねーよ。外部参照を宣言するときだよ(鬱
778デフォルトの名無しさん:02/07/18 17:24
>>768
後半部分は特にすれ違いだった。スマソ。

で、前半部分は、Cで書いたのでそれをやろうとしているのですが、
すれ違い?
>>778
特定のコンパイラの使い方についての質問は一応スレ違いということになっているみたいだけど、いいんじゃネーノ?
俺は分からないけど。。。。
>>778
エラーメッセージを貼った方がいいよ。

リンクエラーな気がする。
>>779
奴の言いぐさはそれはC++のコンパイラだから駄目って話では?
782759=774:02/07/18 17:29
>>776
externの書き方はわかってるつもりです。
気にしてんのは、extern切ってる関数が自分自身にあり、
その宣言部分にexternが付いていることなんですが・・・

 ・外部参照宣言している関数が自分自身にあり、他のソースにはない
 ・extern int hoge(void) という書式から始まる関数の宣言は可能なのか

ということでした。
>>773さんの言うとおりなら、可能ではあるようですが、なんか普通と違うような。。
783デフォルトの名無しさん:02/07/18 17:29
おい!おまいら教えやがれ。
gethostname()を使わないでIP取得するにはどーすれば良いんだ。

てゆーか、教えてください。
スレ違いならスマソ。
自分自身?
785デフォルトの名無しさん:02/07/18 17:31
>>782

関数の場合はいいんだってば。
ちなみにデフォルトでexternだから、int hoge(void)とextern hoge(void)は同じだよ。
>>781
やつって>>768のこと?
>>766から読み直したら?
>>783
DNSにでも聞け。
>783
OS依存になると思うのだが。
>>787
すごい言いぐさだが的を射ている。
>>787
(・∀・)オトコラシイ!
791788:02/07/18 17:41
gethostname() を
gethost*by*name() と
混同しているのでわ……
792名無し783:02/07/18 17:50
>>787
そのとーりデス。スマソ

>>788
OS依存??
gethostname()が使えない環境なので・・・
VC++暦2週間なので、もう少し簡単におながいします。
gethostnameってUNIXのシステムコールじゃん・・・
794759=774:02/07/18 17:55
>>785
サンクス!
これで落ち着いて残業できます(T-・ノ

でもその先輩、やるならやるで徹底しろよ・・
ソースによってコーディングルールむちゃくちゃだ。
795788:02/07/18 17:55
>792
gethostname()はWinsockに有りますが何か。

>The gethostname function retrieves
>the standard host name for the local computer.
796783:02/07/18 18:02
>>795
えーと説明不足でした。

win98以降では、gethostname()で自機のIPを取得できるのですが、
win95でgethostname()を使うと、”プログラム開始エラー”で起動出来ないのです。

ので、gethostname以外で、取得方法がないモノかと・・・
797デフォルトの名無しさん:02/07/18 18:04
>>796
それって単にWINSOCK.DLLが入っていないだけでは?
あちきの手元のヘルプ(bcb4付属の古い奴)だとgethostname()は
WindowsNT Yes
Win95    Yes
Win32s   Yes
Import Library  ws2_32.lib
となってるんで、多分Winsock2が入ってないんだね
解決法は知らん
ネットワークのスレで聞くよろし
800783:02/07/18 18:27
>>797
いえ、バージョン違いで・・・。

>>798
依頼者が、「winsock2をUpしたくない。」と。

>>799
逝って来ます。

みなさま、ありがとうございました。
ネットワークに逝って来ます。
strtokじゃ物足りなくなってきたので
これを改良したものを作りたいのですが、
strtokのソースってどこにあるんでしょうか
何をする関数かわかっているなら、自力で作って、そこから改良するべし
>>801
って言うかスタティック変数使う関数なんぞ使うなよ・・・。
805801:02/07/18 20:23
>>802
>>803
ありがとうございます。頑張ってみます。
>>804
それに不満があるから自作しようとしているのですが…。
(他にもありますが)
>>801
strtokよりもperlのsplitを流用した方良いかも。
807デフォルトの名無しさん:02/07/18 20:58
ちょっと質問。

C で文字列の値渡しってできるの?

int
testfunc(char args[2][10]){
return 0;
}

int
main(){
char s[2][10] = {"string1", "string2"};
int retval;

retval = testfunc(ここがわからない);
return 0;
}

ここでsをtestfuncに値渡しすることは可能?
「するな」とか言わないで。
sを構造体にしてしまうのがはやいとおもう。
809デフォルトの名無しさん:02/07/18 21:02
>>807
するな云々の前に、できない。
>>807
> C で文字列の値渡しってできるの?
Cでは配列の値渡しを行うことはできません。
よって、文字配列である文字列の値渡しは不可能です。

ただし、構造体の値渡しは可能なので
文字配列だけをメンバにもつ構造体を定義し、
それを値渡しすることは可能です。
811807:02/07/18 21:10
>>808
いや構造体にすればOKなのはわかるんだけど
ふと疑問に思ったから。
>>809
やっぱり不可能?
こんな感じね

typedef struct {
char s[2][10];
} Test;

int testfunc( Test a ) {
return 0;
}

int main() {
Test a;
strcpy( a.s[0], "string1" );
strcpy( a.s[1], "string2" );
testfunc( a );
}
813デフォルトの名無しさん:02/07/18 21:17
お(=^o^=) や(=^O^=) す(=^。^=) みぃ(=^-^)/~~
はやっ
815807:02/07/18 21:18
>>812
普通に書くときはそうやるんだけど
試しにtestfunc(char args[2][10])を書いて
コンパイルしたら通ったから
呼び出す方法があるのかな?と思ったの。
す な お に ポインタで受け止めろ。
>>815
それはchar (*args)[10]と同じ。
す な お に Pascalに移行しろ。
819デフォルトの名無しさん:02/07/18 21:20
す な お に Perlに移行しろ。
す な お に VBに移行しろ。
こうして並べてみるとそういうことができる言語にはろくなのがないね。
>>821
じゃあほとんどの言語はろくなもんじゃなくなるじゃん。
>>822
ああそうだ。
C以外は糞だ。アヒャヒャヒャヒャヒャヒャ
す な お に Rubyに移行しろ。
825823:02/07/18 21:26
>>824
唯一まともな言語があったか・・・
>>823
Cプログラマってみんなこんなやつ?キモッ
827807:02/07/18 21:28
なんか煽られてる?(w

>>816
sをポインタで渡したいときはどうするの?

なんか俺 どんどん厨な質問になっていくなぁ。
828823:02/07/18 21:28
>>825
騙るな。ボケェ。アキャキャキャキャ
829デフォルトの名無しさん:02/07/18 21:29
char [10]を要素にもつ配列へのポインタ。
831デフォルトの名無しさん:02/07/18 21:36
もしコンパイラをつくったとして、それに付けるライブラリを作成するとき、qsortを再帰を使って書くのはまずい?
832807:02/07/18 21:40
もう混乱してよーわからん。

char s[2][10] = {"string1", "string2"};
retval = testfunc(s);

を受けるようなtestfunc()ってどう定義するん?
>>800
gethostnameはws2_32.dllにもwsock32.dllにもあるみたいだから
wsock32.dllのgethostnameを呼べばwin95でも動くかも(もちろん未確認)
834デフォルトの名無しさん:02/07/18 21:41
>>832
void testfunc(char (*_807)[10])だっていってんだろうが。
835デフォルトの名無しさん:02/07/18 21:42
>>832
testfunc(char (*p)[10])
testfunc(char s[][10])
testfunc(char s[2][10]) /* 2はコンパイラに無視される */
どれでも可です
>>832
>>830で分かるでしょ?
char s[2][10] = {"string1", "string2"};
の時、sの「型」が何なのか、よく考えればわかると思うけど。
838807:02/07/18 21:53
試しに書いてコンパイルしてきた。
int
testfunc(char (*args)[10]){
printf("%s:%s",*args, *(args + 1));
return 0;
}
してみたらちゃんと表示されてた。

なんか頭の中だと(*args)が10個並んでるイメージだったから。
元のイメージではchar [10]が2個並んでるイメージで。

すまんな。
>>807
int testfunc(char **p)
いいから、ここ読んどけ。
http://www.catnet.ne.jp/kouno/c_faq/c6.html
>>1からリンクされてるだろ。
842762:02/07/18 22:00
>>763 さん
ありがとうございます。
>>getcharで一文字取り出したあとに改行コードがバッファに残るから、
>>getsでそれを呼んでしまい、getsで入力待ちにならない。

c=getchar();
printf("%c",c);

gets(ss); ←ボツ
printf("%s",ss);

両方使いたいんですけど残った改行コードをクリアする方法を
どうかみなさん教えてください。m(_;)m

>>838
> なんか頭の中だと(*args)が10個並んでるイメージだったから。

それはchar *args[10]
>>842
int c;
while((c=getchar())!='\n')
;
845デフォルトの名無しさん:02/07/18 22:02
>>842
c=getchar();
printf("%c",c);

gets(ss);
gets(ss);
printf("%s",ss);
846デフォルトの名無しさん:02/07/18 22:07
念のため
int c;
while((c=getchar())!='\n'&&c!=EOF)
;

の方がいいか。
847762:02/07/18 22:13
>>845 さん

わーい。
ありがとうございました。
おかげで文字列入力出来るようになりました。

848844:02/07/18 22:15
俺は無視か(鬱
849845:02/07/18 22:20
>>848
おれのほうは一行コピペするだけで簡単だからな。
気にすんな、ブラザー。
850デフォルトの名無しさん:02/07/18 22:47
C言語の関数って、printfやscanfやせいぜいfopenくらいしか知らん。
関数を自作しまくり。
関数のリファレンスって、何かいいやつないかな。
>850
man
>851
manて何だよ。man womanかよ。
man printf
って入力してみろ
>>853
相手がUNIX使いとは限らないぞ。
http://www.linux.or.jp/JM/
>853
man 3 printf
>>855
だな。セクション1にもprintfがある。
fopenしてfcloseしない人ハケーン
>>850
www.holomorphy.com/~wli/doc/ANSI+ISO+IEC+9899-1999.pdf
859デフォルトの名無しさん:02/07/18 23:03
多謝(ワラ
861デフォルトの名無しさん:02/07/18 23:22
ねーねー。みんななんて読んでる?
for フォー
strcpy エスティーアールコピー
malloc エムアーロック
hoge ほげ
>861
無駄な一行レスが続くのでこちらへどうぞ
http://pc3.2ch.net/test/read.cgi/tech/1014987555/
http://pc3.2ch.net/test/read.cgi/tech/1005578173/
863デフォルトの名無しさん:02/07/19 01:16
時刻Aと時刻Bの差の時間を、時・分・秒にするプログラムを教えてください。
>>730に戻り無限ループ
865ここは素敵なインターネット:02/07/19 01:37
みんなこれ理解できるかい?

#include <stdio.h>

char* hello(void)
{
return "hello";
}

char* (*f1)(void) = **hello;
char* (*f2)(void) = *hello;
char* (*f3)(void) = hello;
char* (*f4)(void) = &hello;

/*
char* (*f5)(void) = &&hello; これはエラー
*/

int main(void)
{
printf("%s\n", f1());
printf("%s\n", f2());
printf("%s\n", f3());
printf("%s\n", f4());
return 0;
}
f1 と f2 はエラーにならないの?
環境は?
>>865
2つ疑問がある。
stdio.hをincludeしているのはなぜか?
helloの戻り値の型と、実際の戻り値で型が違うのはなぜか?
868ここは素敵なインターネット:02/07/19 01:50
>>866
エラーにならないのだよ。どの環境でも。

>>867
>stdio.hをincludeしているのはなぜか?
printfを使うために必要ね。常識。

>helloの戻り値の型と、実際の戻り値で型が違うのはなぜか?
うーむ。もっと勉強しなさい。
>>866
&hello==hello (Cの関数ラベルに対する仕様)
hello==*&hello (当然)
よって
hello==*(&hello)==*hello
*hello==*(hello)==*(*hello)==**hello
同様にして
&hello==hello==*hello==**hello==***hello==****hello==(以下略
何故同じようにして
hello==&hello==&(&hello)とはならないの?
&helloにおけるhelloと(&の付かない)helloは評価が違う。
(前者はLバリューで後者はRバリュー)
だから&helloのhelloについてhelloから&helloへの置き換えは出来ない。
>>869
だから void (*pf)(void);
なんて関数へのポインタがあった時、
pf();でも(*pf)();でも(**pf)();でも(**********************pf)();でも
同じ関数を呼べちゃうんだよね(w
エキスパートCだっけか、あの本に出てて笑っちゃったよ。
873866:02/07/19 05:02
そうだったのか……勉強になりますた。
>>872
でないと古い形式で書かれたソースが通らない。
875ms:02/07/19 11:46
昨日も書いたのですが、
C言語のプログラムのWARNING除去を行っております。
環境はGNUです。
ほとんどが、コメントアウトなのですが、
他のWARNINGの対処法がいまいち読み取れません。
参考になるサイト、本などはございますでしょうか?
コメントアウトして除去したら、
機能を果たさなくなるんじゃない?
ワーニングメッセージを書いてください
878デフォルトの名無しさん:02/07/19 12:25
テキストファイルを開いてその内容を表示させるサンプル書いて下さい。
879ms:02/07/19 12:49
ワーニングメッセージは、
"suggest parentheses around + or -in operand of &"

*(byPtr1 + 4 + 15) |= ((((BYTE)(U_HANDLE & 0x0f)) << 4) & 0xf0)
>>878

#include <stdio.h>

main(int argc, char** argv)
{
 freopen(argv[1], "r", stdin);
 while ( putchar( getchar() ) != EOF);
}
>>879
> *(byPtr1 + 4 + 15) |= ((((BYTE)(U_HANDLE & 0x0f)) << 4) & 0xf0)
*(byPtr1 + 4 + 15) |= ((((BYTE)((U_HANDLE) & 0x0f)) << 4) & 0xf0)
これでも消えるとは思うが、
おそらくマクロと思しきU_HANDLEを()で括った方がいいと思われ。
つーか加算式そのまんまマクロにするようなヴォケは逝ってよし。
>875
コメントアウトしてるって何を?
883ms:02/07/19 13:50
ありがとうございます。
もうひとつ!
"array 'name' assumed to have one element"

ソースの関連する部分出せよ。
885ms:02/07/19 14:10
inttp_keiyu_tbl[];
これなんです。
ところで>881さん
どういうワーニングメッセージなんですか?
直訳とは違うような・・・。

みなさんすみません。
886デフォルトの名無しさん:02/07/19 14:20
誰か教えてください。
for(i1=0 ; i1<50 ; i1++)
{
printf("<%d>", data[i1]);
}
で、data[0]からdata[49]全体の値(つまり50個の値)とある一つの値とを
比較する方法ってありませんか?
よろしくお願いします。
for (i1=0;i1<50;i1++)
{
 if (data[i1]==比較したい値や変数) {
  break;
 }
}
if (i1==50) {
全部一致;
}
どこかが不一致;
888881ではないが:02/07/19 14:25
>885
どーゆーって、つまりだな。
600+5&0x0f という式があるとするわな。
これは演算子の優先順位からいって(600+5)&x0f
なんだが、ひょっとすると、優先順位を間違えてて、
ホントは600+(5&0x0f)とやりたかったのかもしれない。
だから、紛らわしい式には()を付けて明らかにしろよ、
ちゅうことなわけよ。
昔は無駄な括弧を付けるなと怒られた物だ…
890デフォルトの名無しさん:02/07/19 14:36
>>887
ある値を50個の配列リストに入ってるかどうかです。
だから、1つずつ比較するのではなくてってことです。
誤解をまねいて申し訳ありません。
そんな方法ありますかね?
>>887は==じゃなくて!=な。

>>890それは単なる探索の問題じゃないか。
一つずつ比較して、一致があった時点で終了すればいい。
892ms:02/07/19 16:19
lnl.batを押して、
修正したファイルだけをコンパイルかけているのですが、
DOSプロンプトにエラーがいっぱい表示されてしまいます。
1画面ずつ表示したい場合、どのような手順を
とればよろしいのですか?
>>892
リダイレクト
>>889
そりゃお前んとこだけだよ。BASIC って言うなら話はわかるが...。
895デフォルトの名無しさん:02/07/19 16:37
>>889
お前は小学生か
896デフォルトの名無しさん:02/07/19 17:01
この条件式を短くできないものか?

if(data[x][y]!=41 && data[x][y]!=42 && data[x][y]!=51 && data[x][y]!=52 && data[x][y]!=6)
>>896
他の変数にdata[x][y]を代入しておいてそれと比較する。
>>894
余計な括弧を付けると、演算子の優先順位をしっかり覚えていない証拠だとか言われて、
括弧を省くように言われていたんだが。10年近く前の話だけどね。
899デフォルトの名無しさん:02/07/19 17:24
>>898
なんか、もうだめぼな会社/先輩としか思えない。
いずれにしろ、そう言うこと言ってんのはお前んとこだけだから、もうで
てくんなよ。
900デフォルトの名無しさん:02/07/19 18:00
for( red = 0 ; red <= 255 ; red++ )
{
 printf("#%X0000\n",red) ;
}

redが15以下の時でも%Xが二桁になるような変換文字はないのでせうか
>>900
%02X
>901
どうもです
>>902
おまえはヘルプとかmanとかを見る習慣は無いのか。
904専門士 ◆.t4dJfuU :02/07/19 21:50
C言語だけで、パチ屋にあるようなスロットゲームって作れますか?
905pp:02/07/19 21:57
このサイトにはトヨゾウの被害はありませんか
906デフォルトの名無しさん:02/07/19 22:03
>>903
うるさいボケ。
ちゃんとここのヘルプの奴らを利用してやったじゃないか
役に立ってよかったと自己満足でもしてろ
ヘルプの奴らか。
909デフォルトの名無しさん:02/07/20 00:17
>>904
できるよ
>>896
if (!strchr(")*34\6", data[x][y]))
911デフォルトの名無しさん:02/07/20 01:23
>>910
6をエスケープ?
912911:02/07/20 01:24
8進数は3桁だよな・・・
913902:02/07/20 01:53
>907
絶対出てくると思った(ワラ
>903
マジレスすると、ヘルプファイル無い&man知らんかったです
とりあえずmanが何かは分かったので気付けます
つーか漏れが持ってる本には%02Xとか載ってなかったんだypヽ(`Д´)ノ
914デフォルトの名無しさん:02/07/20 01:57
>>913
初心者過ぎる本には載ってないことが多い。
さらにいうなら、formatは

%<<digit>><<l or h>>type

という形を覚えておくといいかモナー。(ほんとはもっと複雑だけど)
>>908
スマソ、ワロタ。
哀愁漂ってる(;´Д`)
916c初心者:02/07/20 03:28
あのー、質問なんですけど、

以下のファイルがありました。
@カンマ区切り(CSV形式)のデータが格納されているファイルで、
Aレコードの区切りに改行コードがなく、全レコードが物理的な1レコードで構成

このようなファイルを、固定長の構造体に格納するには、
どうしたら良いのでしょうか?

以下の2点を考えてみましたが、どちらもイマイチです。
案1)レコードの区切りが無いから、一定サイズずつ読み込んで、
ごりごり構造体に格納して、格納しきれなかった分は、
領域の先頭に持ってきて、その後ろ分のデータをまたreadする。
(これは効率悪そうだし、テストが面倒だし、バグ多そう)

案2)fscanfを使って、カンマ区切ごとに構造体の各要素にreadする。
(これも、1項目の内容に空白があった場合、次の項目としてみなされ
 てしまうので名称等の項目はNG。)

なれないC言語で、しかも開発要因が一人で、期限も厳しいのでどうか
お助けください。
全部読みこむかmapして
memchrなどで区切りを探し
memcpyでコピーする

ただし、ファイル全体が読みこめるアドレス空間があることが確実な場合のみ
要素数が決まっているのならfscanfでいいと思うけど。
919デフォルトの名無しさん:02/07/20 08:56
1から99の乱数を生成したいんですけどどうやるんでしょう?
rand()*99+1
rand()%99+1
srand(time(NULL));
rand() * 99L / (RAND_MAX+1L) + 1
x = rand_from_1_to_99();
924881:02/07/20 10:47
>>885
> inttp_keiyu_tbl[];
これはexternもついてないし、関数の引数でもないんだよな?

Cでは空の配列ってものは定義できないから、
「とりあえず要素が一個あるものとみなすよん」
という警告。

>>879の意味は>>888氏の解説してくれた通り。
で、>>881の後半の意味は、たとえば
#define U_HANDLE 1+0
なんてなってたときに U_HANDLE * 100 とかを考えてみれば分かるだろう。

基本的に、マクロ式やマクロの引数は、式のどこに置かれても意味が変わらな
いようにカッコをつけるべき。
925デフォルトの名無しさん:02/07/20 10:49
(rand() >> 8) % 99 + 1
99面のサイコロをほうり投げる。( -∀-)ノ ◆
◆←6面ダイス
●←99面ダイス
>>927
100面ダイスってまだ売っているのだろうか?

懐かすぃ。
int kaesuyo_ransu(void)
{
 getchar();
 return (time(NULL)%99)+1;
}
static unsigned Ransu;

void initRand(unsigned u){ Ransu = u; }

unsigned uRnd(void){
Ransu = Ransu * 0x343fdL + 0x269ec3L;
Ransu &= 0x7fff;
returnRansu;
}

main(){
int x;
initRand(1 | time(NULL));
x = 1 + 99 * uRnd() / 0x8000;
}
VC++6.0のrandはRAND_MAXが小さすぎ。
>>928 100面ダイスってほとんどジョークグッズだよな
10面ダイス色違いで2ケ振ったほうがよっぽど実用的だと当時から思った。
933_:02/07/20 14:52
% 演算子ってdoubleには使えないの?
使えない。
935_:02/07/20 15:11
残念。ってよく考えたら当然か・・・
最下位の桁を得たいときみんなどうしてるのかな?
整数なら%10で簡単に得られるよね。
普段小数使ってなかったから学校の宿題困ってます。
(int)でキャストしる。
>>935
fmod()
938デフォルトの名無しさん:02/07/20 15:46
>>935

char s[32];
double f;
int result;

f = 123.45
sprintf(s, "%f", f);
result = *(strchr(s, '.') - 1) - '0';






本気にすんなよ(w
939デフォルトの名無しさん:02/07/20 15:54
void main (void)と
main
はどう違うんですか?
940_:02/07/20 16:24
>>936
doubleの範囲で値がとれるようにパワーアップせよ、みたいな問題だったので・・

>>937
さすがCライブラリなんでもあるなー。車輪の再発明するところだった。

>>938
あはは。いいですね。全部標準関数だし。

937さんの方法でやってみます。みんなありがとー!
941_:02/07/20 16:30
>>939
void main(void)とmain()では?
意味はいっしょだと思うけど、なんか古い人は前者の書き方するみたい。
私がCを始めた頃はちょうどvoidって導入されて
void使う方がいい書き方って本で習ったけど・・・
>941
そんなクソい本は投げ捨ててしまえ。
>>941
voidが導入されたのってANSI draftあたりからだろ?

> void使う方がいい書き方って本で習ったけど・・・
なのにこれか? そんな本捨てちまえ。つーか書名/著者は?
>>941
返値の型省くとint扱い〜。
945 ◆JAPH9PWA :02/07/20 16:35
>>941
いや、全然違うよ。
戻り値を省略するとintになる。
だからmain()はint main()と同じこと。(奨励はされないだろうけど)
void main(void)はダメでしょ。引数のvoidはともかくmain()は値を返すべき。
946_:02/07/20 16:52
>>942, 943
ああmainの話じゃなくて引数です。省略しないでvoid書いた方がいいと。

>>944, 945
そうなんですか。省略したことがないので知らなかった(w;
もちろんmain()はいつもintかえしてますけど。(make とか困るので)
こことかニュースグループとか、niftyのFCなんかも含めて、ネット上で
これだけ言われてるのにいまだにvoid main()と書いてる本があるという
のはある意味すごいな。
void main()なんざ知ってるかどうか、の問題だろ。
本質にはまったく関係ない。
こんなので初心者呼ばわりするのは正直カコワルイ
初心者呼ばわりしてるんでなくて、本の話でしょ?
main関数の構文は以下の通り。

int main(int argc,char **argv); もしくは int main(int argc,char **argc,char **envp);

多少とも意味のあるプログラムを造るのに、argcやargvを使わないことは考えられない。
また、main関数は、終了ステータス(正常終了、異常終了)を返す必要があるため、
戻り値を必要とする。以上。
>>948
初心者じゃないね。もぐりだね。
>>950
>argcやargvを使わないことは考えられない。

どうします?これ。
953デフォルトの名無しさん:02/07/20 17:41
>>950
envpは規格外。
int main(void)かint main(int argc,char *argv[])。
>>952
ほっとけば? 必要ないときだってあるんだし。

とりあえずうちのエディタは main C-l と打つと

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

}

まで入力してくれるんで、argcとargvがいらないときでもつけてる。
あっても害はないしな。

warning levelあげたら文句言ってくるコンパイラがあるかもしらんけどな。
そんときははずすわ。
955ボラれ王:02/07/20 18:22
Cから勉強したいんですけど
とりあえずボーランドC++ビルダー6購入しました。
インストールしたまではいいんですけど
#include<stdio.h>
main()
とかやるには一体どうしたらいいんですか?
教えてください。
>>955
くれ
957ボラれ王:02/07/20 18:46
>>956
教えてください!
>>957
6は持ってないからわからないけど、新規作成でコンソールウィザードって無い?
IDE使わないでbcc32使ってもいいけど。

それより、くれ。
959デフォルトの名無しさん:02/07/20 18:51
>>957
メモ帳に書くの。
960デフォルトの名無しさん:02/07/20 18:54
処理の高速化とメモリーの消費量(使用量)削減はどちらを優先すべきですか?
ものにもよるでしょうけど、一般的にということで。
961デフォルトの名無しさん:02/07/20 18:55
>>955
新規作成にある項目すべて試せばわかるよ。
>>955
まだユーザー登録していなかったら、アンインストールして俺にくれ。
一般的には、dでもなく遅かったり、
dでもなくメモリ喰ったりしないかぎり、
好きな方を選べばいい。
>>962
あふぉか、俺は質問に答えたし最初にくれと言ったのも俺だ。

>>955
お れ に く れ
>>963
そうですか。
今、ある機能を持った関数を書いていまして、2つ書いたんですけどどちらを取ろうか迷っていたんです。

じゃあ消費目盛りの少ない方を取ろうかな・・・コードもすっきりしているし。
両方とも満たすコードをかければいいんですけどね(^_^;)
966965:02/07/20 19:02
目盛りじゃないメモリー(^_^;)
970の人、次スレよろしくね
968ボラれ王:02/07/20 19:06
>>959
あっ、メモ帳に書くんですか!?全然知りませんでした。

>>961
そすですよね。でもそれはかなりめんどくさそうです。

>>962
もうユーザー登録してしまったと記憶しています。

>>964
もっと教えてください。
なんで市販のBCBなんて買っちゃうかな〜
970デフォルトの名無しさん:02/07/20 19:10
>>968
ぼられたのか?
>>965
一般的には早い速度もメモリ消費もさほど考えずに、
すっきりとしたコードを書くことを心がけたほうがいいと思うぞ。

勿論あまりにもメモリを消費しすぎたり
(今現在だと100MBの配列をどんと取るのはよした方がいいと思う)
非常識に遅いアルゴリズムを使ったり(バブルソートとか)
するのはよくないけどな。

プログラムはまず正しく動くことが重要で、
それから性能に問題があれば最適化していくとよい。
すっきりとしたコードは大抵最適化しやすい。
悪くない選択だ
>>970
次スレよろぴく〜。ビシっとしまる名前で頼むよ
974デフォルトの名無しさん:02/07/20 19:14
>>973
逝ってくる。
びしっとしまる名前か。どんなのがいいだろうか。
975ボラれ王:02/07/20 19:16
>>969
やっぱりフリーコンパイラを使うべきですか?
でもダウンロードしたんですけど
パスの設定でつまづいて購入に至りました。

>>970
購入しても、捜査がわからず、
ボラれた気分で日々を過ごしています。
>>975
マニュアルよめ
>>975
よし!元は取らにゃぁな。
今から本屋で「やさしいボーランドC++の使い方」とかいう本を買ってくるんだ。
それでも駄目だったら「初心者でも分かる『やさしいボーランドC++の使い方』」を
買ってくる。それでも駄目だったら・・・

C言語なら、俺に聞け! <27>
http://pc3.2ch.net/test/read.cgi/tech/1027160374/
979デフォルトの名無しさん:02/07/20 19:21
980デフォルトの名無しさん:02/07/20 19:24
>>975
ボーランドが喜ぶね。
1000ゲトー\      \∧_ヘ    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧∧ ≡≡.\    / \〇ノゝ∩< 1000取り合戦、いくぞゴルァ!!
(゚ー゚*) 、 ≡≡\  /三√ ゚Д゚) /  \__________
O┬Oc )〜≡≡\/三/| ゚U゚|\      \オーーーーーーーッ!!/
(*)ι_/(*) ≡≡\   ∧∧∧∧∧―――――――――――
――――――――――< 予 合 千 > __〃      ヽ lv
い、今だ1000ゲットォ!! < 感 戦 取 > ヽ\ .ノノノ)ヘ))〉ヽ' / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 .∧ ∧ =-       <. !! の り >_!(0.)! (┃┃〈リ / < はわわー。1000げっとです〜
 (゚Д゚;) ≡=-     /∨∨∨∨∨\ Vレリ、" lフ/ ./ \ \________
 ⊂┯⊂)  ≡=-   / 1000 ∧_∧\―――――――――――
 (ヽ\ ヽ ) ≡=-  / ゲット ( ´Д` ) \今だ!1000ゲットォォォォ!
   し\J   =- / しますた /,  /   \    ∧∧   ) ズザーーーーーッ
  (( ̄(◎) ≡=-/      (ぃ9 |      \⊂(゚Д゚⊂⌒`つ≡≡≡(´ ;;;≡

982ボラれ王:02/07/20 19:38
>>976
マニュアルは決して初心者に向けたものでは
ありませんネ。
やっぱり苦労して読むべきでしょうか?

>>977
じゃあ明日本屋へ行ってきます!
記念パピ子川-_-川
記念パピ子川-_-川
__stdcall とか _cdecl とか、関数呼び出し規約が一つの規約に統一
されていないのは何故なのでしょうか。逆に言うと、なぜ規約が複数
存在するんでしょうか。
効率とか互換性とかいろいろ。
WINDOWSにおいて__cdeclが標準でないのは、
コードサイズの縮小のため。
わざわざ処理系に__cdeclが用意されているのは、
可変長引数を実現するため。
>>985
_cdecl   可変個の引数を取り、呼び出し側でスタックを回復する。
_stdcall 固定個の引数を取り、呼び出された側でスタックを回復する。

1つの関数が何回も呼び出されるケースでは、_stdcallの方が全体のサイズが
小さくなり、動作も速い(だったはず)。
WindowsのAPIの場合、おおかた_stdcallで wsprintf() などの可変個の引数をとるものだけ、
_cdecl だったはず。
985
>>986-987 さん
可変長引数を実現するのが _cdecl だったんですね。
呼び出し規約がサイズに影響することも知りませんでした。
ご解説ありがとうございました。
989989:02/07/21 11:46
あと11!!
余裕の990get
埋め立てると見れなくなるのでコソーリ沈ましておこう・・・しばらくは。
992デフォルトの名無しさん:02/07/21 17:35
ヽ(´ー`)ノ埋め立てないと間違ってこっちに質問する人が居る罠
>>992
つってわざわざアゲて間違えたらどうすんだ、ホゲ
994デフォルトの名無しさん:02/07/21 20:12
>>993 ヽ(´ー`)ノ言ってる間に埋めろヴォケ
995__:02/07/21 20:18
 
996 :02/07/21 20:25
1000
997 :02/07/21 20:26
100
998 :02/07/21 20:26
10
999 :02/07/21 20:26
1
1000デフォルトの名無しさん:02/07/21 20:27
aye
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。