C言語なら俺に聞け! Part 91

このエントリーをはてなブックマークに追加
1v(^o^i)d
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

各種リンク、関連スレは>>2-13あたり

C言語なら俺に聞け! Part 90
http://pc5.2ch.net/test/read.cgi/tech/1094025471/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/

2デフォルトの名無しさん:04/09/15 01:46:20
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/

【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
3デフォルトの名無しさん:04/09/15 02:01:37
前スレの982-983が馬鹿すぎて哀れ
4デフォルトの名無しさん:04/09/15 02:23:53
>>1


>>3
引きずるな ボ ケ
5デフォルトの名無しさん:04/09/15 10:03:43
hosh
6デフォルトの名無しさん:04/09/15 12:16:50
Linuxでシリアル制御のプログラムを作成してるのですが、CTS/ RTS制御について
確認したい事があるので教えて下さい。
RTS信号をON・OFFするにはioctlを使用すれば良いことは分かったのですが、
実際にRTS信号をON・OFFするタイミングはこちらがreadのときはOFF、受信を
止めて送信を開始したい場合はONにするという事でいいのでしょうか?

7デフォルトの名無しさん:04/09/15 14:37:58
age
8デフォルトの名無しさん:04/09/15 15:12:57
>>6
いいえ。
9デフォルトの名無しさん:04/09/15 15:41:24
もう一個のスレに書き込んだけど,
こっちが本スレ?

Cでファイル入力を行うとき,
100,200,300
のような書式でデータが並んでいる場合fscanfを使えば
fscanf(pFile,"%d,%d,%d",&data1,&data2,&data3);
のように簡単に分割して取得できるのですが,
char str[128]="100,200,300"の用に変数にデータが入っていた場合も
同様に簡単に分割して取得できないでしょうか?
10デフォルトの名無しさん:04/09/15 15:42:46
>>9
sscanf(str,"%d,%d,%d",&data1,&data2,&data3);
11デフォルトの名無しさん:04/09/15 17:37:02
マス.ヘッダってカタカナで書くとなんかエロいね。
12デフォルトの名無しさん:04/09/15 17:45:29
>>8
おまえ、ホントは分かってないだろ
13デフォルトの名無しさん:04/09/15 17:50:19
>>12
おまえ、ホントに分かってないだろ
14デフォルトの名無しさん:04/09/15 17:58:53
>>13
オマエモナ
15デフォルトの名無しさん:04/09/15 18:02:56
>>14
>>6が正しいのであれば正しいという証拠言ってみろ
16デフォルトの名無しさん:04/09/15 18:05:51
>>15
>>6が間違ってるのであれば間違ってうという証拠言ってみろ
17デフォルトの名無しさん:04/09/15 18:07:39
>>16
プッわからないからってその手には乗らない
18デフォルトの名無しさん:04/09/15 18:18:56
>>17
>>8みたいな意味の無いレスしか出来ないならレスすんなよ。
19デフォルトの名無しさん:04/09/15 18:21:15
>>16
板間違ってるよ。
20デフォルトの名無しさん:04/09/15 18:21:41
>>18
8はちゃんと質問に過不足無く答えてるようだが・・・
21デフォルトの名無しさん:04/09/15 18:30:43
>>20
過不足無ないがその後のレスを見る限り性格は相当悪そうだな。
22デフォルトの名無しさん:04/09/15 18:35:51
>>21
12がつっかかってるから売り言葉に買い言葉なんだろう
23デフォルトの名無しさん:04/09/15 23:40:59
質問があります。よろしくお願いします。
VC++6.0で作っているのですが、2次元データを読み込む配列を作るために関数で、

data=(float**)malloc((N+1)*sizeof(float));
data+=1;
data[0]=(float*)malloc((N*L+1)*sizeof(float));
data[0]+=1;

for(i=0;i<N;i++)
 m[i]=m[i-1]+L;   

という方法で作っているのですが、sizeof(float)ではメモリを参照できないという
エラーが出て、sizeof(double)で確保すると動きます。
読み込むデータはfloat型で充分ですし、確保する配列のデータ数も読み込むデータ数と
合っています。なぜfloat型でメモリを確保するとエラーが出るのか分かりません。
よろしくお願いします。
24デフォルトの名無しさん:04/09/15 23:42:18
4 aaa
2 bbb
3 ccc
2 ddd
という感じでランダムなインデックスの付いた膨大な配列をインデックスでソートしたいのですが、
このとき、同じインデックスが現れた場合、元の配列の後ろに位置しているデータを
優先として前の配列は削除するようにしたいのです。(配列も縮める)
どのようなアルゴリズムがベストでしょうか?
一旦別の一意のインデックスを付けてクイックソートしてから削除した方が良い?
どなたかアドバイスをお願い。
25デフォルトの名無しさん:04/09/15 23:58:40
Printfを自作したいのですが、どうやればできますか。
26デフォルトの名無しさん:04/09/16 00:00:58
>>25
そのPrintfはどんな機能なんですか。
27デフォルトの名無しさん:04/09/16 00:01:48
28デフォルトの名無しさん:04/09/16 00:17:05
数行かぁ
29デフォルトの名無しさん:04/09/16 00:20:26
でけた?
#define Printf(...) printf(__VA_ARGS__)
30デフォルトの名無しさん:04/09/16 00:23:55
>>24
クイックソートできるってことはメモリに収まるってことだよね。
ソートしてから重複削除すれば?
31デフォルトの名無しさん:04/09/16 00:26:45
>>30
メモリにはなんとか収まります。
やっぱりソート後の削除がベストですかね〜。。
32デフォルトの名無しさん:04/09/16 00:32:48
>>24
大抵の場合は、一旦ソートしてから処理した方が速い。
ただ、クィックソートって安定じゃなかったような気が。
33デフォルトの名無しさん:04/09/16 00:34:45
クイックソートは安定ではないので単純にやるのであれば
別の安定したソートアルゴリズムを。

実際に各要素をコピーしたりしないで、そのアドレスを配列にしたものを
ソートしてみては?
34デフォルトの名無しさん:04/09/16 00:35:05
>>32
何が安定じゃないのか言ってもらわないとな
35デフォルトの名無しさん:04/09/16 00:36:42
はぁ…
36デフォルトの名無しさん:04/09/16 00:37:36
あとは、挿入ソートしつつ重複キーがあったら削除とかかな。
ただ、要素数が多いのならソートの時間が支配的になるので
速くて安定したソートを選んだほうがいいと思う。
37デフォルトの名無しさん:04/09/16 00:39:06
>>34
クイックソートは難しいけどデバッグしっかりやれば大丈夫だろ。
38デフォルトの名無しさん:04/09/16 00:40:09
不安定=ソートキーの値が同じとき順序が特定出来ない
39デフォルトの名無しさん:04/09/16 00:40:22
>>37
そう言う意味?
40デフォルトの名無しさん:04/09/16 00:41:12
>>38
それは不安定じゃなくて仕様でしょう
クイックソートが悪いわけじゃない
41デフォルトの名無しさん:04/09/16 00:42:01
へんなことを言う人ガイルなぁ
42デフォルトの名無しさん:04/09/16 00:42:34
>>40
はぁ…
43デフォルトの名無しさん:04/09/16 00:52:21
>>40
一般的に不安定と呼んでいます
44デフォルトの名無しさん:04/09/16 00:52:35
ちょっとテストするね☆
45デフォルトの名無しさん:04/09/16 00:52:43
もう面白いことを逝ってくれるひとはいないのか?
46デフォルトの名無しさん:04/09/16 00:53:37
>>40
単に、安定じゃないソート方法というだけ。
敢えて悪いか悪くないかを言うならば、安定かどうかも知らずに使う奴が悪い。
47デフォルトの名無しさん:04/09/16 00:55:01
libcなどを使わず単体で実行できるputs文を作りたいんですけど
どんな感じに書けばよいでしょうか?
48デフォルトの名無しさん:04/09/16 00:56:27
>>47
環境依存。
49デフォルトの名無しさん:04/09/16 00:56:36
"仕様"か…
50デフォルトの名無しさん:04/09/16 00:57:21
アルゴリズムに仕様もへったくれもあるか!
と、妹が言っております。
51デフォルトの名無しさん:04/09/16 00:58:34
はい、そうです。
52デフォルトの名無しさん:04/09/16 00:59:34
>>48
リアルモードx86のブート時を想定してます。
よろしくお願いいたしまんこ
53デフォルトの名無しさん:04/09/16 00:59:45
配送です。
54デフォルトの名無しさん:04/09/16 01:00:19
スレちがいなのでx86なら俺に聞けスレに逝って下さい。
55デフォルトの名無しさん:04/09/16 01:02:01
>>52
BIOS経由でいけたような気もするし、VRAMに直接書いてた気もする。
いずれにしてもCとは関係ないので他の適切なスレへどうぞ。
56デフォルトの名無しさん:04/09/16 01:02:08
そうさせて頂きます。
ありがとうございまんこ
5724:04/09/16 01:25:33
参考になりました。
とりあえず、安定したソート(マージソート辺り)で
最後の結合でうまく重複しないようにしてみます。
どうもありがとうございます。
58デフォルトの名無しさん:04/09/16 01:28:59
マジ?なんでマジソートをエラんだのか…
5924:04/09/16 01:35:53
>>58
クイックソートだと最後にデータの重複チェックをするのですが、
データがでかいのでクイックソートの意味がないくらい時間がかかります。
マージソートで重複チェックしつつソートだけやった方が時間が短縮できそうな
気もしなくもないですが、値がランダムなので微妙です。
何がいいでしょうか。。
60デフォルトの名無しさん:04/09/16 01:41:13
詳しいことはわからないけど、
安定したソートはだいたい線形的に要素をなめていくパターンになるので
あんまり大差ないような...データの偏り方にもよるし。

1要素の大きさはどうなの?
これもデータの特性(というかサイズ)次第だけど、
要素の内容を入れ替えするときのコストのほうが大きいのではないかと思っているんだけど。
61デフォルトの名無しさん:04/09/16 01:45:21
クイックソートは本当にクイックかどうかわからないよ。
ワーストケースが酷い。
6224:04/09/16 01:46:49
>>60
1要素はインデックス用の4バイトと200バイトのバッファの構造体です。
これが大体20万要素くらいあります。
6324:04/09/16 01:49:36
>>61
ほぼランダムなので、正順列、逆順にはなりにくいので
クイックで割りと高速にソートします。
64デフォルトの名無しさん:04/09/16 01:51:30
一般論だけど、おそらく各要素のアドレスの配列を作ったほうが良さそう。

ソート中に
4+200 バイトの要素の入れ替え→アドレス配列上でアドレスの入れ替えだけ
になる差は大きいと思う。
6524:04/09/16 01:54:58
>>64
そうですね。データのコピーはなくしてみます。
ありがとうございます。
66デフォルトの名無しさん:04/09/16 02:06:22
ちょっとテストするね☆
67デフォルトの名無しさん:04/09/16 07:42:18
さ、今日も一日がんばるぞ、っと。
6825:04/09/16 11:51:30
>>26
出力機能て奴かなぁ。


>>27
ありがとうございます!
でも何かじっくりみないとよくわがんね〜です。

単に Printf("ああああ:%D%D%D",a,b,c)とかでどうやって値を渡しているのか気になったのと、
自作関数作成中でしてPrintfにどういう渡し方をすればいいのか分からなかった物で
自作したいと言うよりは解析したい、と言った感じでした。
Printfは("%D%D%D%D%D%D"a,b,c,d,e,f)等が出来て型にはまっていないので自作関数を作る際に苦労します。
69デフォルトの名無しさん:04/09/16 18:47:47
1+(1+2)+(1+2+3).....(1+2+3+4+5+6+7+8+9+10)を計算するプログラムをお願いします。
テストで出たけど分からなかったorz
70デフォルトの名無しさん:04/09/16 18:48:51
>69
氏ねクソマルチ野郎
71デフォルトの名無しさん:04/09/16 18:53:30
>>69
>>1
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
と書いてあるのに。
72デフォルトの名無しさん:04/09/16 18:56:33
>>69
#include<stdio.h>

int main(int argc, char** argv)
{
char str[100];
int n;

printf("n=");
fgets(str, 97, stdin);
n = atoi(str);
printf("%d\n", n*(n+1)*(n+2)/6);
return 0;
}
73デフォルトの名無しさん:04/09/16 19:54:34
質問はしてませんが、このスレのおかげで問題が解決しました。
ありがとうございました。
74デフォルトの名無しさん:04/09/16 20:05:42
>>72
何で97バイトにしてんの?
75デフォルトの名無しさん:04/09/16 22:09:48
>>74
改行コードが最長の場合で2バイト("\r\n")と、最後にヌル文字 '\0' が代入されるから。
76デフォルトの名無しさん:04/09/16 22:10:49
モード変更が見当たらないが・・・
77デフォルトの名無しさん:04/09/16 22:13:46
ハァ?
78デフォルトの名無しさん:04/09/16 22:39:18
>>75
fgetsは改行文字を含めて(2番目の引数の値) - 1までしか読み込まない。
そして文字列の最後にナル文字をセットするのでfgets(str, sizeof str, stdin);で平気。
それとCでの改行文字は常に'\n'1文字。
79デフォルトの名無しさん:04/09/16 22:49:08
75みたいなのがいるから前スレの982みたいなことをいわれるんだよ。
80デフォルトの名無しさん:04/09/16 23:01:34
>>78
>fgetsは改行文字を含めて(2番目の引数の値) - 1までしか読み込まない。
>そして文字列の最後にナル文字をセットするのでfgets(str, sizeof str, stdin);で平気。
今実験してみたらその通りだった。スマソ。

>それとCでの改行文字は常に'\n'1文字。
Cで生成すれば普通は'\n'1文字になるが、ネットワークを通した場合や他の処理系で生成されたテキストデータの場合は、
必ずしも改行コードが '\n'='\x0a' で終わるとは限らない。
実際、"\r\n"の場合もあるし、それこそN88BASICで作られた(遺跡のような)データの場合は
改行コードが'\r'になっている。確か、VisualBasic も'\r'だった希ガス。
81デフォルトの名無しさん:04/09/16 23:04:17
>>79
ハァ? 実際に改行コードが統一されていないために苦労したことがあるから慎重になっただけですが何か?
82デフォルトの名無しさん:04/09/16 23:09:55
>>81
慎重になるのなら、まずfgetsの仕様調べたら?
83デフォルトの名無しさん:04/09/16 23:13:47
「 !! 」って演算子はどういう意味?
84デフォルトの名無しさん:04/09/16 23:15:18
>>83
おおっとびっくり。
85デフォルトの名無しさん:04/09/16 23:15:29
>>83
!がふたつ。
86デフォルトの名無しさん:04/09/16 23:19:07
>>82
高々3バイト程度だったら、余計にバイト数を取るに越したことは無い。
ヌル文字の分を fgets が自動で差し引いてくれる仕様だということを忘れても、
文字列領域を1バイト余計に確保してしまう以上の実害はない。

>>83
論理の2重否定=何も効果が無い
8786:04/09/16 23:21:00
>>83
正確には、前置記法のみ許される演算子で、
論理式の前→効果なし
数値の前→0を int型の0に、非0を int 型の 1 に変換する。
88デフォルトの名無しさん:04/09/16 23:22:11
ネタで言っていると信じたい
8983:04/09/16 23:22:50
>>84-86
即レスサンクス。やはり単なる否定の否定って事だよね。
90デフォルトの名無しさん:04/09/16 23:26:19
!!2 == !!3 てことじゃ
91デフォルトの名無しさん:04/09/16 23:27:05
>>86
関数の仕様も確認せずに自己流の対応取るような奴はプログラマとして信用できない。
92デフォルトの名無しさん:04/09/16 23:28:03
>>90

つまり0は1に、0以外の数値は1になるって事ですね?
9392:04/09/16 23:30:08
まちがえた、0は0ですね。
94デフォルトの名無しさん:04/09/16 23:34:34
#include <stdio.h>
int main(void)
{
printf("!0 = %d, !!0 = %d\n", !0, !!0);
printf("!1 = %d, !!1 = %d\n", !1, !!1);
printf("!2 = %d, !!2 = %d\n", !2, !!2);
return 0;
}

!0 = 1, !!0 = 0
!1 = 0, !!1 = 1
!2 = 0, !!2 = 1
95デフォルトの名無しさん:04/09/16 23:35:44
>>86
書いてる本人が現状を把握してない →いま実害出てるかどうかは問題外
96デフォルトの名無しさん:04/09/16 23:36:36
>>94
有難う。俺も試してみたかったんだけど自宅PCにコンパイラ
入ってなくて試せなかったんですよ。
97デフォルトの名無しさん:04/09/16 23:48:38
>>91
全ての関数の仕様を完璧に把握しているプログラマの方がむしろ少数派だと思うのだが。
必要な時に必要なだけ掘り下げるのがプログラマとして正しい姿勢だと思うが?
IEEE の浮動小数点型の構造を、指数部と仮数部のビット数を1ビット違わず完璧に暗記していなくても、
普通の浮動小数点計算のプログラムを作る上では何の支障もない。
マシンイプシロンが問題になるような微妙なプログラムを作る段階になって始めてビット数の配分を調べればいい。
>>72のプログラムは飽くまでも適当な長さの文字列を入力する意図でfgetsを使ったまでで、
1バイトが問題になるような微妙な問題など一切発生しない。
だから、厳密な仕様が分からなくても差し支えないような対応策を取っただけのこと。

ちょっと printf を使うのにわざわざ完全な仕様を調べる馬鹿がどこにいる。

>>95
少なくとも、引数に97を指定すれば高々100バイトまでしか読み込まないという現状を把握していて、
実際にその推論は正しかったわけだが?
98デフォルトの名無しさん:04/09/16 23:48:44
>86みたいなのがいるからバグで列車が止まったりするんだろうな。
「高々3バイト」? 自分の無知、怠慢、頑迷を棚に上げてよく生き残ってこれたな。
99デフォルトの名無しさん:04/09/16 23:50:50
>>97
単なる逆切れに見えるからもうやめとけ
100デフォルトの名無しさん:04/09/16 23:51:57
char str[100];としてsizeof strとした場合、str[100]以降に書き込まれることはない。
101100:04/09/16 23:52:32
sizeof str

fgets(str,sizeof str,stdin);
102デフォルトの名無しさん:04/09/16 23:53:03
>>97
わかんなければ、調べればいいじゃん。
勝手に仕様を想像して作ってもしょうがないだろ。
103デフォルトの名無しさん:04/09/16 23:54:00
>>98
「高々」という言葉を怠慢だと思う香具師は数学も知らないDQNプログラマ。
「高々〜」というのは「〜以下」と同じ意味。
文字列領域を 10^8 個くらい確保する必要があるプログラムとかだったら
1バイトの違いが命取りになる可能性もあるが、
>>72のプログラムで3バイトが命取りになるとでも言うのか?

>>98は中学校程度の英語の文を訳すのに学者でも滅多に使わない辞書を熟読する馬鹿と同じレベル。
104デフォルトの名無しさん:04/09/16 23:55:26
>>72のプログラムじゃ問題にならないけど、
「fgetsの仕様知らないんで、大丈夫だと思う方法で使いました」
は問題ありすぎ。
105デフォルトの名無しさん:04/09/16 23:55:39
75がアホなことを言うからでは?
106デフォルトの名無しさん:04/09/16 23:58:06
>>99
逆切れも何も、必要なときに必要な深さまで掘り下げるのが真のプログラマの素質だと主張しているのだが?

>>102
少なくとも>>72のようなプログラムを書いて困ったことは一度もない。
普段使うのに必要な程度の仕様は理解しているし、
間違っていても高々3バイト程度の誤差だし、原子炉を制御するような慎重さを要するプログラムを想定していない。
107デフォルトの名無しさん:04/09/16 23:59:46
>>106
正しい使い方すれば無駄な苦労せずに済むのに?
108デフォルトの名無しさん:04/09/17 00:01:01
>>104
知らないというより、最近使っていないから忘れていた。
一度だけちゃんとした仕様を見たような気がする。
109デフォルトの名無しさん:04/09/17 00:02:13
>>106
自分の馬鹿さを認めろよ、もう。
110デフォルトの名無しさん:04/09/17 00:02:26
>>108
そうだね。仕様忘れてたら問題ないもんね。
111デフォルトの名無しさん:04/09/17 00:04:55
>>107
こういう場合と勘違いしていた。

名前のフィールドが100バイトの場合、一時的に読み込みに使用する文字列変数の長さは
何バイト必要か?
という問題。
さっき fgets を使ってみたら自動的に'\n'が削除されていたから、
コンソール入力の場合は 101 バイト、ファイルからの読み込みの場合でも 102 バイトというのが正解だが、
それを '\n' も入力されるものと勘違いして 103バイトと思っていた。
112デフォルトの名無しさん:04/09/17 00:09:20
fgets()の第2パラメータはバッファサイズと同じでいいなんてことは、いろはのいのようなもの。
仮令忘れていようともマニュアルページを一瞬でも見れば思い出すような種類の内容だね。
つまり、「忘れるはずもないようなことも知らない」無知と「忘れているのに確認せずに使う」
怠慢と「指摘されても自分の非を認めない」頑迷さか。

しかも、未だ判っていないで御託並べてるよ。
その御託から察するに、実験的に仕様を確認する能力にも欠けている様子。
「正解」なんてわざわざ書かないでいればただのお馬鹿さんで済んだのにねぇ。
113デフォルトの名無しさん:04/09/17 00:11:44
str+3のコーディングは問題ないけど、削除されたかどうかの方は重要じゃない?
114デフォルトの名無しさん:04/09/17 00:13:06
97と112は同じ思想だね。
115デフォルトの名無しさん:04/09/17 00:14:56
>>113
ぜんぜん重要じゃないよ。int上限超えてる事にくらべたら。
116デフォルトの名無しさん:04/09/17 00:15:17
あとはケッペキさんたちがどう思うかでネタが続くか決まりそうだな
俺はどこまでいっても確証ってのはヒューリスティックなものに過ぎないと思うがね
プログラマの資質論・道徳論じゃなくてもうちょっと現実的なとこで話そうぜ
117デフォルトの名無しさん:04/09/17 00:16:29
>>109>>112
だから、高が数値を入力するのにわざわざ仕様を調べる必要はなかったと言いたいのだが。
scanf を使うよりマシだと思って fgets を使ったに過ぎない。
別に、

(前略)
char str[100000];
(中略)

fgets(str, 100, str);
(以下略)

とかでも本質的には問題ない。
118デフォルトの名無しさん:04/09/17 00:16:29
仕様の通りにしようというのは資質論・道徳論?!
119デフォルトの名無しさん:04/09/17 00:16:53
>>115
削除されてなかったらそのまま残っちゃうんだよ?
int上限「超えてる」ってのが何の話かもよくわかんないんだけど。
120デフォルトの名無しさん:04/09/17 00:18:56
>>118
費用対効果や個別ケースを想定せずに、常に完全を求めるのが徳論ってことじゃないのか?
121デフォルトの名無しさん:04/09/17 00:19:33
>>113
削除されたかどうかを知らなくても、どちらでも差し支えないようなプログラムを書ければ問題は無い。
何らかの理由でバイナリモードで開く必要があった場合、'\n'は自動的には削除されない。

>>118
全ての関数の厳密な仕様を完璧に把握しようとすれば誰だってノイローゼになる。
普通は、必要なだけの深さまで掘り下げて理解する。
122デフォルトの名無しさん:04/09/17 00:19:59
仏陀に聞いてみれば誰の考え方が正しいか分かるぜきっと。
ハイ、仏陀↓
123デフォルトの名無しさん:04/09/17 00:20:38
hebi?
124デフォルトの名無しさん:04/09/17 00:20:47
>scanf を使うよりマシだと思って fgets を使ったに過ぎない
そもそもそんな思想の香具師にプログラムなんて書いて欲しくない。
あー、書くのは構わないな、他人の趣味までどうこうする気はないから。
他人の使うプログラムを書かず、無知を晒さず、引き篭もっててくれればいいよ。
125デフォルトの名無しさん:04/09/17 00:21:20
質問です。
H8マイコンのLCDに表示についてです。

void lcdo4(unsigned char d)
{
d=d | E_SIG;
P3DR=d;
d=d & 0xdf;
P3DR=d;
wait()
}
なのですがお願いします。
なにぶん初心者なので・・・。
126デフォルトの名無しさん:04/09/17 00:22:13
>>122
ワシはゴータマ・シッダールタじゃ!!
127デフォルトの名無しさん:04/09/17 00:24:59
128125:04/09/17 00:26:13
なるほど。すいませんでした。
129デフォルトの名無しさん:04/09/17 00:26:45
>>124
そもそも stdio.h の関数自体が欠陥だらけなのだが?
Windows などのプログラムを組むのに、わざわざそんなことを考える必要は無い。
ぶっちゃけた話、>>74の例では、数値が入力できれば何でもいいだろ。
130デフォルトの名無しさん:04/09/17 00:27:31
>>127
下二つはひでーw
131デフォルトの名無しさん:04/09/17 00:27:33
>>74の例の間違い。スマソ
132デフォルトの名無しさん:04/09/17 00:28:14
>>72の間違いだった。
133デフォルトの名無しさん:04/09/17 00:28:29
使い方をまちがってますよと言っただけなのに、ここまで逆切れされるのもどうかと
134デフォルトの名無しさん:04/09/17 00:35:20
>>129
リスク評価って言葉がそいつの辞書にはのってないんだよ。

>>133
潔癖な奴は潔癖だし、適当な奴は適当なままだからな。
で、二人が出会うと反発しあって二人とも自分の方の極へ猛ダッシュして
返ってこなくなっちゃう、と。
135デフォルトの名無しさん:04/09/17 00:36:52
わざわざ仕様に沿わない使い方をする意味がないだろ
必死にこのケースは問題ないとか言ってるし
始めから仕様に沿った使い方してればそもそもケースを考慮する必要もないだろ
136デフォルトの名無しさん:04/09/17 00:37:18
>>79みたいな書き込みがなければ「スマソ」で終わっていたのに、
わざわざ神経を逆撫でする>>79以降の香具師が悪い。
137デフォルトの名無しさん:04/09/17 00:38:29
>>135
同じことの反対の側面にあたる考え方だな
興味深い
138デフォルトの名無しさん:04/09/17 00:39:00
>>136
いやさ、適当に構うとますます墓穴掘るから面白くてね。
139デフォルトの名無しさん:04/09/17 00:39:11
>>135
少なくとも仕様に反した使い方をした覚えは無い。
140デフォルトの名無しさん:04/09/17 00:40:47
>>138
問題を解決するという意味では何一つ間違っていないだろ。
どこが墓穴を掘っているのか説明してみろゴルァ
141デフォルトの名無しさん:04/09/17 00:41:21
自作自演うぜえ
142デフォルトの名無しさん:04/09/17 00:42:07
>>141
そもそもが代理戦争だからなあ
14372 ◆opz3iyLiAc :04/09/17 00:42:46
>>141
少なくとも漏れは自作自演をした覚えはない。
144デフォルトの名無しさん:04/09/17 00:46:19
ヒューリスティックな判断はマなら誰でもやることだろうけどさあ、





とりあえずsageない?
part87のほうのレス数も無事追い抜いたことだし、、。
145デフォルトの名無しさん:04/09/17 00:48:05
>>144
さして爆発力のあるフレームじゃないし、もう息切れじゃね?
146デフォルトの名無しさん:04/09/17 00:48:11
このスレは常時ageだろ?
147デフォルトの名無しさん:04/09/17 00:50:12
>>145 せっかくトリップつけたのに ´Д`)
148デフォルトの名無しさん:04/09/17 01:11:07
gcc TEKITOU.cpp -lstdc++ -lm
のmakefileの作り方教えてください。

環境はwin2k、C:\MinGW\lib\gcc-lib\mingw32\3.2.3です。
TEKITOU.cppはmainが一つだけです。
149デフォルトの名無しさん:04/09/17 01:15:29
>>117
その割には、わざわざ(あの例では大して意味の無い)改行を気にしてるあたりがねぇ。
細かなこだわりは通すけど、大局は見ないタイプだな。
15072 ◆opz3iyLiAc :04/09/17 01:25:01
>>149
不確実な知識の中で、安全かつ最小の数値を fgets の第二引数に指定したまでのこと。
151デフォルトの名無しさん:04/09/17 01:28:29
最小? 整数値を入力するのに? 何ビットCPUを想定しているの?
だから無知蒙昧を曝け出すだけだというのに……
152デフォルトの名無しさん:04/09/17 01:31:35
ヒューリスティック的な捉え方すると、あれで100文字も入れる奴はいないし
たとえバッファあふれしても大問題になる可能性はまず無いな。
scanfで十分なんじゃない?
153デフォルトの名無しさん:04/09/17 01:35:12
>>150
知識も無いのに、安全で最小だということがわかるんだ。
154デフォルトの名無しさん:04/09/17 01:43:14
atoi使うのに100文字だの安全だの言うかねぇ、、、
155デフォルトの名無しさん:04/09/17 01:50:44
>>151
64ビットだとしても高々(十進法で)20桁、128ビットだとしても高々39桁しか必要としない。
だが、トリビアルなプログラムのためにわざわざ厳密な桁数を求める必要はない。
100桁とするのは適切な判断だと思うが?

>>152
scanfだと固まる可能性もあるし、あえてscanfを使う必要も無い。

>>153
バイト単位の厳密な部分を忘れていただけで、本質は把握していたわけだが?
156デフォルトの名無しさん:04/09/17 02:09:05
>>155
あえて3を引く必要もないよね。
157デフォルトの名無しさん:04/09/17 02:13:02
行入力時に、改行がどう扱われるかってのは本質的な問題だろ。
本質的な問題を無視するのなら理解できるけど、間違っちゃたのを
「動けば良いじゃん」と開き直るのはかっこ悪いよ。
158デフォルトの名無しさん:04/09/17 02:19:35
規格を読んでそれぞれが判断すればよいだろうに(反実仮想)

1. 概要
#include <stdio.h>
char *fgets(char * restrict s, int n, FILE * restrict stream);

2. 解説
fgets関数は、nによって指定される文字数より高々1少ない文字数を、
streamによって指されるストリームから、sによって指される配列に
読み込む。改行文字の後(これは保持される)、またはEOFの後には
文字列は追加されない。最後の文字が読み込まれた直後には
ヌル文字が書き込まれる。

(from ISO/IEC 9899:1999)
15972 ◆opz3iyLiAc :04/09/17 02:26:23
>>156
3を引いても動きます。

>>157
void chomp(char* str)
{
while (*str) {
if (*str != '\r' && *str != '\n') {
*str = '\0';
break;
}
str++;
}
}

こういう関数でも作れば万事解決。
fgets で読み込んでから、chomp すればいい。
160デフォルトの名無しさん:04/09/17 02:30:57
なんで27を引かなかったのかを知りたい。
16172 ◆opz3iyLiAc :04/09/17 02:32:08
>>160
162デフォルトの名無しさん:04/09/17 02:34:40
>>161
お前もういいよ、お前の居場所は寧ろこっちだ。
http://pc5.2ch.net/test/read.cgi/tech/1090324689/

得得と>159のようなコードを書いているようじゃね。
163デフォルトの名無しさん:04/09/17 02:35:39
言い訳する前に書いておくが、この程度のコードでTypoするようなら
それを見つけられないという時点でやっぱり恥だ。
164デフォルトの名無しさん:04/09/17 02:36:20
>>159
さすが、本質を理解してる人はすばらしいプログラムを書くね。
165デフォルトの名無しさん:04/09/17 02:36:56
こんな時こそあの重複スレを使うといいかもな。
166デフォルトの名無しさん:04/09/17 02:41:22
つーかお前らまとめて移動しろよ
延々と馬鹿かっつーの
167デフォルトの名無しさん:04/09/17 12:25:09
>>166
ハゲ同
168デフォルトの名無しさん:04/09/17 17:21:59
jpegのファイルを配列に読み込みたいんですがfreadだと駄目でした。
fgetcでもやってみたのですが1バイト読み込んだところで
feofで0以外の値が返ってきました。
どうやって読み込めば良いんですか?
169デフォルトの名無しさん:04/09/17 17:31:41
>>168
バイナリモードにするとどうなる。
170168:04/09/17 18:07:48
"rb"で試して168の結果になりました。
171デフォルトの名無しさん:04/09/17 18:13:51
そのファイルが1バイトだったとか。
172デフォルトの名無しさん:04/09/17 18:33:22
JPEG(JFIF)のヘッダは
FF D8 FF E0 00 10 4A 46 49 46 00
なんで、何か違うファイルか変な使い方をしていると思う。
173デフォルトの名無しさん:04/09/17 18:59:00
ファイルはこれですhttp://up.isp.2ch.net/up/d82cc8ea338b.jpg
ヘッダは>>172のようになってました。
読み込む部分のソースです。

unsigned char *f(FILE *fp)
{
unsigned long size;
unsigned char *p;
if (fseek(fp, 0, SEEK_END))
return NULL;
if ((size = ftell(fp)) == -1)
return NULL;
if ((p = (unsigned char *)malloc(f_size)) == NULL)
return NULL;
memset(p, 0, size);
if (fread(p, size, 1, fp) != 1)
return NULL;
return p;
}
174デフォルトの名無しさん:04/09/17 19:01:06
インデントが無くなってますが自分のソースではif (...) {...}となってます。
175デフォルトの名無しさん:04/09/17 19:02:16
ファイルの最後まで移動しちゃ、当然それ以上は読めないわな。
176デフォルトの名無しさん:04/09/17 19:05:50
if (fseek(fp, 0, SEEK_START))
あとmemsetはその後freadで上書きされるので要らない。
177デフォルトの名無しさん:04/09/17 19:18:12
fgetcのソースです。
1バイト読んだところで終わるのは先頭にseekするのを忘れていたからでした。
修正して試しましたが、gdbですが
$5 = (unsigned char *) 0xa0423a0 "�リ�・
で読み込めてませんでした。
unsigned char *f(FILE *fp)
{
unsigned long size;
unsigned char *p;
long long ll = 0;
if (fseek(fp, 0, SEEK_END)) {
return NULL;
}
size = ftell(fp);
if ((p = (unsigned char *)malloc(size)) == NULL) {
return NULL;
}
memset(p, 0, size);
if (fseek(fp, 0, SEEK_SET)) {
return NULL;
}
while (!feof(fp)) {
p[ll] = fgetc(fp);
if (ferror(fp)) {
}
ll++;
}
return p;
}
173のソースはmalloc(size)です。
178デフォルトの名無しさん:04/09/17 19:24:17
>>175>>176
すれ違いってしまいましたが
>>177の通りfreadの方でも先頭に戻しましまたが
(unsigned char *) 0xa0423a0 "�リ�・
という風に>>177と同じでした。
179デフォルトの名無しさん:04/09/17 19:27:30
>>178
落ち着け、gdbで表示されているのはpのアドレスじゃないか?
pの中身は期待通りになってるのか確認してみろ。
180デフォルトの名無しさん:04/09/17 19:28:43
>>177
$5って書かれても、gdbで何を表示したらそうなったのかわかんないんだけど。
181デフォルトの名無しさん:04/09/17 19:48:07
そのまま他のファイルに書き込んでみたら、同じファイルができたので読み込めてました。
お騒がせしてすんませんでした。
gdbではある程度配列の中身が表示されて...とつくのに�リ�・だけだったのと、
%sで表示したときも�リ�・だけ表示されたので駄目だと思ってしまいました。

>>179
�リ�・はjpegファイルの先頭の部分でした。

>>180
p 引数 というコマンドで出てきました。
何なのか自分も解りませんでしたが
$の後の数字はどうやらpのコマンドを実行したの回数のようです。
182デフォルトの名無しさん:04/09/17 20:06:23
下記のプログラムがどうも思い通りに動いてくれません

--------
int a = NULL;

do {
if (a != NULL) {
printf("入力された文字>> %c\n\n", a);
}
printf("キーを入力して下さい\n");
a = getchar();
} while (a != -1);
---------------------

最初の1回目は a = getchar(); この部分で入力待ちが起こるのですが、
2回目の a = getchar()の行ではそのまま素通りされているような実行結果が
出てしまいます。

----------------------------
キーを入力して下さい
a
入力された文字>> a

キーを入力して下さい
入力された文字>> 


キーを入力して下さい
--------------------------

このような結果になるのですが、2回目のa = getchar()では入力待ちで待機されないのでしょうか?ご指摘お願いします。
183デフォルトの名無しさん:04/09/17 20:10:51
>>182
getcharの後にダミーのgetcharを置かないと連続した2回目のgetcharには
リターンが入ってしまいますよ
184デフォルトの名無しさん:04/09/17 20:15:44
a\nがバッファに入力される。
バッファからaの一文字が変数aに書き込まれる。
2回目のgetcharでバッファに残ってる\nが変数aに書き込まれてる。
185デフォルトの名無しさん:04/09/17 22:07:47
まぁ、fgets()でも使っとけってこった。
186182:04/09/17 22:22:27
>>183-185

ありがとうございます。

なるほど、内部ではそうなっているんですか。
なんとなく、1回目の処理が終った後も、
ゴミみたいなのが残ってて2回目がおかしな処理になっているんだろうと思ったんですが
解決には至りませんでした。

fgetsで試してみます。ありがとうございました。
187デフォルトの名無しさん:04/09/18 00:12:57
要は標準ライブラリの仕様がわからんという質問が多いな。
188デフォルトの名無しさん:04/09/18 00:16:10
質問者はそんなもんだろう
解答者でそのレベルなら痛いがな
189デフォルトの名無しさん:04/09/18 00:32:14
何をやろうとしているか、感じ取ってもらえるといいのですが、
下に書いたような処理をしようとしています。
hoge1を呼び出そうとしましたが当然エラーです。

#include<stdio.h>
#define HOGE(item) hoge##item
void hoge1(void)
{
printf("hoge1\n");
}
void hoge2(void)
{
printf("hoge2\n");
}
main()
{
int a='1';
HOGE(a)();
return 0;
}

文字列連結の##ってやつ、どういった時に使うのかわかりません。
何の役に立つかもわかりません。
このような処理を実行させるのはCでは無理でしょうか?
190デフォルトの名無しさん:04/09/18 00:34:15
hoge の定義はどこにあるの?
191デフォルトの名無しさん:04/09/18 00:46:24
>189

HOME(1)();
HOME(2)();

と必要に応じて書く
defineを解釈するのはプリプロセスの段階だということを意識できると
いいんだが
192デフォルトの名無しさん:04/09/18 00:47:16
HOMEと書いてしまったorz
193デフォルトの名無しさん:04/09/18 00:48:02
>>189
HOGE(1)();
194デフォルトの名無しさん:04/09/18 00:48:39
関数ポインタ使えって感じだな
195デフォルトの名無しさん:04/09/18 00:51:04
>>189
実行時に変数の内容で呼び出す関数を振り分けたいなら、
関数ポインタの配列を使いなさい。

void (*hoge[2])(void) = {hoge1, hoge2};
int a = 0;
hoge[a]();
196デフォルトの名無しさん:04/09/18 02:05:33
ういっす (`^´)ゞ

>>190-195 返答ありがとうございました!
197デフォルトの名無しさん:04/09/18 16:45:27
初期化処理(環境設定ファイル読み込み処理)
環境設定処理を読み込み、環境設定情報を環境設定情報管理テーブルに
保持するってどーゆー意味ですか?
198デフォルトの名無しさん:04/09/18 17:02:07
>>197
int main(int argc, char* argv[], char** envp)
というふうにmainの引数は3つあるわけなのですが、
envpは環境変数が書き込まれており、
それをテーブルに入れるって言うことなのかな?
199デフォルトの名無しさん:04/09/18 17:19:45
「環境設定処理を読み込み」なんだから、スクリプトか動的ライブラリを
読み込んで実行して、環境設定情報を環境設定情報管理テーブルに書き込
むんじゃないの?
200デフォルトの名無しさん:04/09/18 17:28:02
まぁ、仕事の悩みなら一番ましそうな先輩にでもするもんだ。
#どうせそのプロジェクト内でしか通じないローカル語だろ。
201デフォルトの名無しさん:04/09/18 17:36:08
gnome-configみたいなやつのことを言っているのかな?
それを自前で作っても知れているけど。
202デフォルトの名無しさん:04/09/18 20:04:55
#defineOUTPUTSHELTER_1
#defineOUTLENSHELTER_2

#define OUT( x , y )\
for( short cnt=0 ; cnt < OUTLEN ; cnt ++ )\
printf( "%c" , *( OUTBUF + cnt ) )

#defineSHELTER_1OUTPUT
#defineSHELTER_2OUTLEN

こんな感じで、OUTの時だけ文字列置換を行いたいんですけど、
もっと他のうまいやり方ないですか? どなたかお手本お願いします。
203197:04/09/18 21:20:35
みなさんご回答ありがとうございます。
プログラムを作る実習で初期化設定のモジュール作成
の担当になったのですが、何を作ればいいのかわからず、
困っています。
204デフォルトの名無しさん:04/09/18 21:26:46
>>203
初期設定というからには本番の処理で何が必要になるかがわかっていなければならない。
ファイルだのレジストリだの環境変数だのの手段よりもまず、要求定義しないと書きようがないのは当たり前。
205デフォルトの名無しさん:04/09/18 21:32:57
>>203
設定ファイルを開いて、一行ずつ読み込んで、トークンに分けて、…
206デフォルトの名無しさん:04/09/18 21:35:50
Cから派生した言語って
どういうものがあるんですか?
207デフォルトの名無しさん:04/09/18 21:38:36
>>206
そんな事を聞いてどうする
208デフォルトの名無しさん:04/09/18 21:38:44
>>206
C++ D Java C# csh
209デフォルトの名無しさん:04/09/18 21:40:30
>>208
レスありがとうございます

Cを覚えてからだと
それらの習得も効率が良かったりしますか?
210デフォルトの名無しさん:04/09/18 21:42:43
>>209
むしろCが後だ。
211デフォルトの名無しさん:04/09/18 21:46:16
>>209
やりたいのから逝け。
小さなメリット・デメリットより、本人のやる気が支配的な条件。
212デフォルトの名無しさん:04/09/18 21:50:30
オーバーフローしたかどうかわかる関数ってありますか?
213デフォルトの名無しさん:04/09/18 21:50:49
>>209
Cを覚えてからだとC++を理解するのは非常に楽。
だってCの拡張言語なんだもん
同じようにJavaもすぐに理解できるようになる。Javaは若干違うんだけどね。
214デフォルトの名無しさん:04/09/18 21:51:20
>>211
他の言語に比べて
C言語が得意とする仕事や処理っていうのはどんな感じでしょうか

例えばBASICとかは
自分の中では、自然科学とかの分野で
グラフの演算とかのイメージが強いんですが・・
215197:04/09/18 21:52:06
>>204>>205
ありがとうございます

まずはその意味を理解しないと無理ですよね
216デフォルトの名無しさん:04/09/18 21:52:54
>>212
そういうのは無いから、
オーバフロしないように論理的にプログラムしないとだめ。
もしくは、その型の最大値、最小値の間に収まっているか調べないとだめ。
217デフォルトの名無しさん:04/09/18 21:54:34
218デフォルトの名無しさん:04/09/18 21:54:57
>>214
少しレスしてたけど、君はスレ違い気味だね。
↓に行くといいよ
http://pc5.2ch.net/test/read.cgi/tech/1034505166/
http://pc5.2ch.net/test/read.cgi/tech/1092932484/
219デフォルトの名無しさん:04/09/18 21:56:19
>>214
>他の言語に比べて
>C言語が得意とする仕事や処理っていうのはどんな感じでしょうか

余り気にすることはない。そもそも、あんたの中のイメージが間違っているから。
220デフォルトの名無しさん:04/09/18 21:57:58
>>212
アセンブラ
221デフォルトの名無しさん:04/09/18 21:58:36
222202:04/09/18 22:05:38
すみません。途方もなく馬鹿な勘違いをしていました。
自己解決です。意味不明な事でスレ汚しすみません。
223デフォルトの名無しさん:04/09/18 22:05:41
>>214
もともとOSを作るための言語だったのは知ってるか?
色んな分野あるけど、それも「やりたいのから逝け」。
俺なんぞ、モーターが動いたり光に反応したりと、そーゆーのが好きだが
おまえさんにはおまえさんの興味があるだろ。

Cの得意分野というより、Cは守備範囲の広さが売り。
224デフォルトの名無しさん:04/09/18 22:07:53
>>217
ありがとうござます
そちらできいてみます
225デフォルトの名無しさん:04/09/18 22:08:26
>216>220
ありがdございます。
226デフォルトの名無しさん:04/09/18 23:50:30
ありがございます。
227デフォルトの名無しさん:04/09/18 23:52:44
サンクス!
228デフォルトの名無しさん:04/09/18 23:53:37
どもども^^
229デフォルトの名無しさん:04/09/19 02:00:20
Thank goodness^^
230デフォルトの名無しさん:04/09/19 10:44:17
i = i++;
これがなぜいけないのか私には分かりません
どなたか説明して頂けませんか?
231デフォルトの名無しさん:04/09/19 11:22:29
展開しろよ
232デフォルトの名無しさん:04/09/19 11:28:29
fwrite(list_inst, sizeof(char), sizeof(list_inst), stream);

in_buff = ((pattern_length<<24) & 0xff000000)|((pattern_length<<8) & 0xff0000)
|((pattern_length>>8) & 0xff00)|((pattern_length>>24) & 0xff);
fwrite(&in_buff, sizeof(int), 1, stream);

in_buff = ((list_count<<24) & 0xff000000)|((list_count<<8) & 0xff0000)
|((list_count>>8) & 0xff00)|((list_count>>24) & 0xff);
fwrite(&in_buff, sizeof(int), 1, stream);

in_buff = 0x1000000;
fwrite(&in_buff, sizeof(int), 1, stream);

in_buff = 0;
fwrite(&in_buff, 4, 1, stream);
fwrite(&in_buff, 1, 1, stream);


fwrite(list, sizeof(short), list_count, stream);

fclose( stream );

すいません、このコードの解説お願いできないでしょうか?辞書引いてもどうにもこうにも意味が
よく分かりませんです・・・
233デフォルトの名無しさん:04/09/19 11:28:31
extern int a[];
extern unsigned int u[10];

unsigned short *s;
int i, t = 0;

s = (unsigned short *) u;
for (i = 0; i < 20; i++)
t += a[s[i]];

unsigned int *をunsigned short *にキャストしてますが
これの結果は何が起こるか分からないとかいうものですか?
それとも正しいコードですか?
234デフォルトの名無しさん:04/09/19 12:07:20
>>233
そのコードだけではなんとも言えないが、正しく動く可能性は充分ある。
まぁ、sizeof(unsigned short) * 2 == sizeof(unsigned)という前提は必要だが。

>>232
・list_instを書き出し
・4バイト整数値pattern_lengthをエンディアン変換して書き出し
・4バイト整数値list_countを…(以下同文
・4バイト整数値1を…(以下同文
・4バイト整数値0を書き出し
・1バイト0を書き出し
・listを書き出し
・書き出したstreamを閉じ

>>230
iのインクリメントと代入のタイミングが特定できない。
235デフォルトの名無しさん:04/09/19 12:07:35
>>232
in_buff = ((pattern_length<<24) & 0xff000000)|((pattern_length<<8) & 0xff0000)
|((pattern_length>>8) & 0xff00)|((pattern_length>>24) & 0xff);
fwrite(&in_buff, sizeof(int), 1, stream);

pattern_length(おそらく4byte int)の
ビッグエイディアンをリトルエイディアンの配置(或いは逆)に置き換え、
in_buffに入れて出力している様です。

どうもint型におけるメモリ格納状況を見たい感じです。
236デフォルトの名無しさん:04/09/19 12:21:35
>>233
sを初期化していないから何が起こるか分からない。
237デフォルトの名無しさん:04/09/19 12:22:55
>235も>236もよく読んでから投稿汁
238デフォルトの名無しさん:04/09/19 12:24:00
>>236
externだから、0に初期化されているんでは?
239デフォルトの名無しさん:04/09/19 12:27:31
>>238
ローカル変数でしょ。
intはextern intの省略。
240238:04/09/19 12:28:34
>>239
失敬した
241232:04/09/19 12:39:15
>>234
マジありがとうございます!うーんそういうことだったのか・・・
もっと勉強しますね
242232:04/09/19 12:42:58
>>235
235さんも丁寧にどうもありがとう!
243デフォルトの名無しさん:04/09/19 12:50:48
>>238
もしそうだとしてもNullPointerException、誰かにガッされて終わる。
244デフォルトの名無しさん:04/09/19 12:50:57
intはauto intの省略じゃないのか?
245デフォルトの名無しさん:04/09/19 13:36:52
だからsはuで初期化されてるだろ。
uがどこなのかは兎も角。
246デフォルトの名無しさん:04/09/19 17:26:44
で結局、
>intはextern intの省略 は
intはauto intの省略の間違えって事でOK??
247デフォルトの名無しさん:04/09/19 17:51:13
いいえ、間違いです。
248デフォルトの名無しさん:04/09/19 18:16:39
どういう事なのですか?
>>239 さんの書き込みが私にはイマイチ理解できませんでした。
という事は、普通にintと宣言したらそれはextern auto int の省略なのですか?
検索してもなかなかわかりません。

それと、調べているうちもうひとつ疑問にぶつかりました。
http://www.komonet.ne.jp/~c/chap21.htm のページで
『2.関数プロトタイプと関数の引用記述で引数の数が不一致の場合は、文法エラーとなります。ただし、プロトタイプで数不定( ... )が指定してある場合は、数のチェックは行われません。』
>ただし、プロトタイプで数不定( ... )が指定してある場合
プログラムで書くならばどういう事でしょうか。

親切な方、解説キボソ
249デフォルトの名無しさん:04/09/19 18:33:51
250デフォルトの名無しさん:04/09/19 18:53:11
>>249
いや、extern の意味ぐらいわかりますが・・・
残念ながらそこには求める答えはないようです。
251デフォルトの名無しさん:04/09/19 18:56:05
stdarg
252デフォルトの名無しさん:04/09/19 19:15:12
>>251さんの書き込みがヒントになったようで(?)、宣言の仕方はわかったけど、
こうする事のメリットがわからんー!。・゚・(ノД‘)・゚・。
#include<stdio.h>
void hoge(...)
{
printf("aaa") ;
}
int main(void)
{
int a = 5 ;
hoge() ;
return 0 ;
}
253デフォルトの名無しさん:04/09/19 19:20:36
あ、数のチェックが行われないのか。これこそ書いてあった、失敬。

>>238-240の人のやり取りがわかんないYO だれかHelp...
254デフォルトの名無しさん:04/09/19 19:22:39
>>253
intがextern intの省略(書いても書かなくても同じ)というのは間違い。
だから気にしなくてもいい。
255デフォルトの名無しさん:04/09/19 19:31:02
なんか様子がおかしかったのでこっちに書き込みます

int a=1;
int b=3;
int c=a/b*b;

これで実行するとcは0になってしまいます
doubleやfloatを使わずにcを1にすることは可能でしょうか?
c=a/b*bの式の変数の順番や演算子は変えずにお願いします
256デフォルトの名無しさん:04/09/19 19:31:31
>>254
そ、そうですよね。。。なんか安心しました。
どうもです。
257デフォルトの名無しさん:04/09/19 19:39:13
>>255
変数の順番や演算子を変えればいいじゃん。
何でそんなくだらないものにこだわるわけ?
258デフォルトの名無しさん:04/09/19 19:45:39
>>255
プログラム的に様子はおかしくない。

お前の思考の様子がおかしいと言っておこう。
259デフォルトの名無しさん:04/09/19 19:49:32
>>257-258
宿題なのですが…
ないなら問題にけちをつけようかと思っているのですが…
260デフォルトの名無しさん:04/09/19 19:51:09
>>259
>>1すら読めないお前は頭いかれてるよ
261デフォルトの名無しさん:04/09/19 19:51:15

動的引数の質問です。

http://publications.gbdirect.co.uk/c_book/chapter9/stdarg.html

ここで動的引数の最大値を返す関数を紹介していますが、
第一引数で対象となる引数の数を入れなくてもいい方法はありませんか?

maxi(4, 2, 1, 0, 6); -> 6
maxi(2, 2, 5, 3); -> 5
maxi(0, 0, 1); -> 1

このような感じのものを期待しています。
ご教示願います。

262デフォルトの名無しさん:04/09/19 19:51:36
> ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
と書いてるのが読めないのか。
263デフォルトの名無しさん:04/09/19 19:54:58
>>255
宿題ぐらいの問題なら型キャスト使えばええんちゃうの?
int c=(int)((float)a/b*b);
264デフォルトの名無しさん:04/09/19 19:55:41
>>263
使わずにと書いてるのが読めねえのかよぼけ
265デフォルトの名無しさん:04/09/19 19:56:44
>>261
ありません
266デフォルトの名無しさん:04/09/19 19:57:11
>>264
だから宿題ぐらいって書いてるじゃん
おめぇが読めねぇのか ぼけ
267デフォルトの名無しさん:04/09/19 19:57:23
>>262
> ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
日本語としておかしいので、もっと厳密に書いて欲しい。
268デフォルトの名無しさん:04/09/19 19:58:09
どいつもこいつも
269デフォルトの名無しさん:04/09/19 19:58:14
ソース丸投げ、宿題、書籍に関しての話 は専門の別スレがあるのでそこへ。
270デフォルトの名無しさん:04/09/19 20:01:48
>>266
使うなと書いてるのに使うな池沼
271デフォルトの名無しさん:04/09/19 20:03:21
>>261
たとえば、
printfも引数の数は可変だけど、第一引数の中で%dとか%sとかを書くので
引数の数と型は第一引数から判断がつくよね。
272271:04/09/19 20:04:25
>>271
つくよね。→つけているんだよ。
273デフォルトの名無しさん:04/09/19 20:05:11
>>261
グローバル変数で数を指定すればいい。
274デフォルトの名無しさん:04/09/19 20:05:31
>>273
逝ってよし
275261:04/09/19 20:05:35
>>271
> >>261
> たとえば、
> printfも引数の数は可変だけど、第一引数の中で%dとか%sとかを書くので

目から鱗です。
ありがとうございました。

276デフォルトの名無しさん:04/09/19 20:06:08
>>266
宿題だからこそ使っちゃまずいだろ。
277265:04/09/19 20:06:16
あたしは無視かい
278デフォルトの名無しさん:04/09/19 20:07:26
279デフォルトの名無しさん:04/09/19 20:08:08
280デフォルトの名無しさん:04/09/19 20:08:39
>>277
あんただれ?
281261:04/09/19 20:16:29
>>277=265
悪い。見落としてました。
ご助言感謝します。

282デフォルトの名無しさん:04/09/19 20:25:30
>>261
第一引数が嫌だったら、最後の引数を特殊な数(例えば、-10000など)にする方法がある。
-10000になるまで大小比較を繰り返し、-10000になったら終了するようにする。
283デフォルトの名無しさん:04/09/19 20:32:08
>>255
b=3; を b=1; に変更するよろし。
284デフォルトの名無しさん:04/09/19 20:34:08
今更そんなレスかい
285デフォルトの名無しさん:04/09/19 20:43:26
>>283
あ、それ正解っぽいぞ
出題ではaやbの値を変えたらだめって書いてないし。
286261:04/09/19 20:59:16
>>282
今回期待しているものとはちょっと違うのです。

でも番兵の方がスマートなときもあると思うので、
そのときまた考えます。tnx.

;; 7 行で中置記法の四則演算ができないかと思案中です。

287デフォルトの名無しさん:04/09/19 21:45:56
お聞きしたいのですが(初心者です)、
構造体の中に倍精度の変数6個とintが1個入っていて、
その構造体を
a[1520][380]
だけ定義して使っているのですが、どうやら多すぎるようなのです。

gcc 3.3.2を使っています。
どなたか、このようにたくさんのものを定義できるような方法をご存知の方が
おられましたら、お教えください。
288デフォルトの名無しさん:04/09/19 21:48:28
ヒープ使え
289デフォルトの名無しさん:04/09/19 21:50:50
>>287
struct kouzoutai** a;

a=(kouzoutai**)malloc(1520*sizeof(kouzoutai*));
for(i=0;i<1520;i++)
a[i]=(kouzoutai*)malloc(380*sizeof(kouzoutai));
290デフォルトの名無しさん:04/09/19 21:52:36
そして、aをもう使わないようになったら、
for(i=0;i<1520;i++)
free(a[i]);
free(a);
をする。
291デフォルトの名無しさん:04/09/19 22:04:27
>>289 >>290
どうもありがとうございます。さっそくやってみます。
292デフォルトの名無しさん:04/09/19 22:04:37
>>287
別に多いとは思わないが、スタックに取ろうとしてるんじゃないのか?
293デフォルトの名無しさん:04/09/19 22:09:18
>>292
その程度の人はお帰りください。
294デフォルトの名無しさん:04/09/20 00:14:03
ポインタを使う利点って何ですか?
295デフォルトの名無しさん:04/09/20 00:29:53
関数渡しで内容書き換え
296デフォルトの名無しさん:04/09/20 01:51:07
>>294
わざわざ他人に聞く必要などさらさらない
わかるまであらゆる処理をポインタなしで書いてみれ
297デフォルトの名無しさん:04/09/20 02:37:53
>>296
ポインタ無しで書けないプログラムはありません。
298デフォルトの名無しさん:04/09/20 02:46:25
>>297
malloc書いてみろ
299デフォルトの名無しさん:04/09/20 02:52:51
>>298
最初から配列を確保すればそれで済みます。
300デフォルトの名無しさん:04/09/20 02:54:05
それがmallocといえるのか?
301デフォルトの名無しさん:04/09/20 03:06:18
>>299
その配列を定義してみせろ
302デフォルトの名無しさん:04/09/20 03:29:52
>>301
型が分かっていれば、

Type array[10000];

 糸冬 了
303デフォルトの名無しさん:04/09/20 03:36:02
おまえの脳味噌の型がな・・・
304デフォルトの名無しさん:04/09/20 03:48:13
でもやっぱりGCはあった方が便利だよ。
D言語では動的配列が普通に配列と同じように生成できるし、freeいらないし便利そう。
305デフォルトの名無しさん:04/09/20 09:38:49
ポインタ無しじゃfopen使えないじゃん
306デフォルトの名無しさん:04/09/20 10:35:57
printf, putsすら使えないじゃん
307デフォルトの名無しさん:04/09/20 12:00:09
>>304
じゃ、作れよGC
そーゆーことのための道具だけ持ってて
結局なにも作んねーやつを bogus つーんだよ
308デフォルトの名無しさん:04/09/20 12:11:25
EscとかShiftなどのキーが押下された事を検知するには
環境依存の方法しかないのでしょうか?
309デフォルトの名無しさん:04/09/20 12:15:44
>>308
yes
310デフォルトの名無しさん:04/09/20 12:20:18
ポインタの話ってjavaへの誘導ですか?
311デフォルトの名無しさん:04/09/20 12:31:39
Ruby >>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<C
312デフォルトの名無しさん:04/09/20 12:31:44
>>307
なんで君が突っかかってくるのかよくわからないんだけど?
私が何も作ってないと言い切っているところが電波というかDQNというか…
313デフォルトの名無しさん:04/09/20 12:39:01
Rubyで全て解決!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
314デフォルトの名無しさん:04/09/20 12:53:34
>>312
304のような発言こそ電波満載
315デフォルトの名無しさん:04/09/20 12:58:57
304 名前:デフォルトの名無しさん[sage] 投稿日:04/09/20 03:48:13
でもやっぱりGCはあった方が便利だよ。
D言語では動的配列が普通に配列と同じように生成できるし、freeいらないし便利そう。
316デフォルトの名無しさん:04/09/20 13:04:37
304 名前:デフォルトの名無しさん[sage] 投稿日:04/09/20 03:48:13
でもやっぱりGCはあった方が便利だよ。
Rubyでは動的配列が普通に配列と同じように生成できるし、freeいらないし便利そう。
317デフォルトの名無しさん:04/09/20 13:13:18
318いなむらきよし:04/09/20 13:26:47
奇形にもキケー!
319デフォルトの名無しさん:04/09/20 14:07:11
>>302

なぜ 10000 で十分なんだ?
もっと必要なんだが(w
320デフォルトの名無しさん:04/09/20 14:11:52
だまれ 小僧!
壷でマウスパッドがもらえると言ってるだろう(早い者勝ち)

これで素敵な2ちゃんねるライフをすごせます。。。
321デフォルトの名無しさん:04/09/20 16:22:43
>>319
状況によって違います。メモリが十分にあるんだったら、

#include <limits.h>
・・・
Type array[INT_MAX];

これでおk?
322デフォルトの名無しさん:04/09/20 16:26:24
つまらん
323デフォルトの名無しさん:04/09/20 16:54:06
FILE* fp;なんか使わなくても、open, close を使えばポインタなしでプログラムが書ける。
荒業だけど、文字列だって
typedef struct {
char s[1000];
} String;
とかすればポインタを使う必要がない。
324デフォルトの名無しさん:04/09/20 16:57:20
>>323
じゃ、それで環境費依存で汎用のソートマージ作ってみろ

# お前らさっきから口ばっかりで何も作ってない
325デフォルトの名無しさん:04/09/20 16:57:34
何でこういう奴に限って例外なくageてるんだろ。不思議。
326デフォルトの名無しさん:04/09/20 16:57:43
s/費/非/
327デフォルトの名無しさん:04/09/20 16:58:06
>>325
話そらすな、さっさと作れ木偶の坊
328デフォルトの名無しさん:04/09/20 17:04:45
>>323
そのopenでファイル名渡しに使うのはポインタなんですよ。
329デフォルトの名無しさん:04/09/20 17:05:20
何を言っても無駄です。
330デフォルトの名無しさん:04/09/20 17:19:25
>open, close を使えばポインタなしでプログラムが書ける。

ワラタw
331デフォルトの名無しさん:04/09/20 17:35:13
cgiでフォームの各要素を時刻をファイル名に持つファイルに
書き込むことを考えています。
struct field{
char* name;
char* value;
}
フォームをこのような構造体に分割し、
void make_file_name( char* file_name )
{
time_t now;
struct tm *tm_now;
now = time(NULL)
  ・
  ・
}
こんな感じの関数でファイル名を作成します。
フォームを分割し、
make_file_nameを"呼ばずに"fieldの値を参照すると問題なく分割されているのですが
分割後、make_file_nameを呼んでからfieldの値を参照するとsegmentation fault
が出てしまいます。どのような理由が考えられるでしょうか?
どなたか回答お願いします。
332デフォルトの名無しさん:04/09/20 17:39:38
>make_file_nameを"呼ばずに"fieldの値を参照すると問題なく分割されている
>分割後、make_file_nameを呼んでからfieldの値を参照する
ここのソースを晒せ
3331/2:04/09/20 17:45:11
>>324
typedef union {
char c;
int i;
float f;
double d;
/* とにかく、最初から実装されている型すべて */
} anytype;

typedef struct {
int len;
anytype array[100000];/* 十分な長さ */
} anyarray;

int cmp(anytype a, anytype b, int typecode)
{
switch (typecode) {
case 1: if (a.c < b.c) return -1; else if (a.c > b.c) return 1; else return 0;
/* この要領で全ての型について書く */
}
}

3342/2:04/09/20 17:46:24
anyarray margesort(anyarray a, int typecode)
{
anyarray b, c, r;
int i, j, k=0;

if (a.len == 1) {
return a;
}

/* 分割 */
for (i=0; i<a.len/2; i++) b.array[i] = a.array[i];
b.len = a.len/2;
for (j=0; i<a.len; i++, j++) c.array[j] = a.array[i];
c.len = a.len - a.len/2;
b = margesort(b, typecode);/* 各々をマージソート */
c = margesort(c, typecode);

/* マージ */
i=0; j=0;
while (k<a.len) {
if (cmp(b.array[i], c.array[j], typecode) < 0 || j==c.len) {r.array[k++] = b.array[i++];}
else {r.array[k++] = c.array[j++];}
}
return r;
}
335デフォルトの名無しさん:04/09/20 17:50:35
>anytype array[100000];/* 十分な長さ */

なぜ十分だと分かる?
もっと必要だろヴォケ!
336デフォルトの名無しさん:04/09/20 18:02:14
array[i] は *(array+i) のシンタックシュガーです
337デフォルトの名無しさん:04/09/20 18:03:53
なので i[array] でも同じです
338デフォルトの名無しさん:04/09/20 18:25:42
>>333
マージソートとは別に言っていないが、それは置いといて・・・


>/* この要領で全ての型について書く */

数学的に破綻してるんだよアフォ
それと、ユーザにソースの修正を毎回させるんだな?
339デフォルトの名無しさん:04/09/20 18:27:37
>>332
汚いですが・・・
void make_file_name( char* file_name )
{
char temp[5];
time_t now;
struct tm *tm_now;
now = time(NULL);
tm_now = localtime( &now );
sprintf( temp,"%d",tm_now[0].tm_year+1900 );
strcat( file_name, temp );
if( (tm_now[0].tm_mon + 1 ) < 10 )
strcat( file_name,"0" );
sprintf( temp,"%d",tm_now[0].tm_mon+1 );
strcat( file_name, temp );
if( tm_now[0].tm_mday < 10 )
strcat( file_name, "0" );
sprintf( temp, "%d",tm_now[0].tm_mday);


 スンマセン、略します。この後tm_now[0].tm_secまで
 文字列を連結します。

}

make_file_name単独ではきちんと日付を出してくれます。
この関数内でfield構造体に触れることはなく、
何が原因なのかさっぱりです。
340デフォルトの名無しさん:04/09/20 18:35:40
>>335
だから、そんなに文句があるんだったら INT_MAX を使えばいい。
メモリを2GB積んでいるパソコンは今のところそんなに多くないから。
型の大きさが1MBくらいある場合も十分考えられる。

>>336-337
マジレスすると、
+:(char)×(char)→(char)
+:(unsigned char)×(unsigned char)→(unsigned char)
+:(int)×(int)→(int)
+:(unsigned int)×(unsigned int)→(unsigned int)
+:(long)×(long)→(long)
+:(unsigned long)×(unsigned long)→(unsigned long)
+:(long long)×(long long)→(long long)
+:(unsigned long long)×(unsigned long long)→(unsigned long long)
+:(float)×(float)→(float)
+:(double)×(double)→(double)
+:(long double)×(long double)→(long double)
+:(anytype*)×(int)→(anytype*)(char*, int* などについても同じ)
は定義されているが、
+:(int)×(anytype*)→
は定義されていない。
341デフォルトの名無しさん:04/09/20 18:40:44
>だから、そんなに文句があるんだったら INT_MAX を使えばいい。
>メモリを2GB積んでいるパソコンは今のところそんなに多くないから。

面白い?笑えないんだけど
342デフォルトの名無しさん:04/09/20 18:48:12
>>341
同感
ヤクでもキメてんじゃねえの、こいつ?
343デフォルトの名無しさん:04/09/20 19:05:56
>339
ポインタ

ポインタが指している領域

(ある領域に)格納されている値

について小一時間勉強しなさい。

たぶん make_file_name( ) を呼び出している所のパラメータに問題あり。
344デフォルトの名無しさん:04/09/20 19:06:49
>>341
ハァ?一体どれだけ確保すれば納得するわけ?
100000じゃ少ないというから INT_MAX=2^31-1 を出したんだろ。
だったら、
(int)((100000LL+(long long)INT_MAX)/2LL)
個の要素を確保する。これで文句ないだろ。
まともな人間であれば、31回以内の質問で適切な数に収束する。
345336:04/09/20 19:06:49
>>340
だからなに?
346デフォルトの名無しさん:04/09/20 19:07:38
香ばしいですな
秋ですね
347337:04/09/20 19:08:49
>>340
だからなに?w
348デフォルトの名無しさん:04/09/20 19:08:53
>>344
要求定義は?
349デフォルトの名無しさん:04/09/20 19:08:55
>>344
そんないい加減な確保の仕方で起動できるソース書けるのか?
寝言は寝て言えよ
350デフォルトの名無しさん:04/09/20 19:14:30
>>345,347
理解できないんだったら仕様書を小一時間嫁、ヴォケ

>>348
相手が満足する数。int型で表される正の整数の中に、十分でかつ過剰でないと感じる数が存在しなければ基地外。

>>349
だから、最初から定数を配列に書けばいい。
それに、文法が間違っていたり致命的なエラーを起こさない限り、
起動できないソースを書くほうが難しい。
351デフォルトの名無しさん:04/09/20 19:15:12
>>344
もう一つ配列作りたいんですけど、どうしたらいいでしょうか。
352デフォルトの名無しさん:04/09/20 19:15:36
ポインタ使ってんじゃん
353デフォルトの名無しさん:04/09/20 19:16:14
>>350
汎用といったはず
多すぎても少なすぎてもダメ
354デフォルトの名無しさん:04/09/20 19:22:20
ほんと、ばっかだなぁ・・・
355デフォルトの名無しさん:04/09/20 19:23:24
>>351
開始する要素番号を保持する。
int start_of_1starray = 0;
int start_of_2ndarray;
start_of_2ndarray = sizeof(array)/(2*sizeof(anytype));
356デフォルトの名無しさん:04/09/20 19:23:33
>>340
Segmentation faultと怒られました。
357デフォルトの名無しさん:04/09/20 19:25:05
>>355
途中で配列の大きさを変えることはできないのですか?
358デフォルトの名無しさん:04/09/20 19:27:22
>>353
だから、多すぎず少なすぎない数が少なくとも1つ存在するはず。
1だとどう考えても少ない。
INT_MAX だとどう考えても多い。
ということは、1<n<INT_MAX となる n の中に適切な数がある。
1<n≦(INT_MAX+1)/2 か、(INT_MAX+1)/2<n<INT_MAX のどちらかしかありえない。
そのように絞り込むと、必ず適切な n が現れる。
だから、(int)((100000LL+(long long)INT_MAX)/2LL)ではどうかと聞いた。
これが多いと答えるか、少ないと答えるかで次の質問が決まる。
359デフォルトの名無しさん:04/09/20 19:28:20
>>358
そんな事を考えないでも使えるようにしろよ
360デフォルトの名無しさん:04/09/20 19:28:35
>>358
1で十分ですが。
361331:04/09/20 19:31:40
>>343
すみません、”ある領域”とは?
ググるにしてもキーワードがさっぱり。
ポインタについては理解しているつもりです。
何か詳しいサイトなどありましたら
教えて欲しいです。
362デフォルトの名無しさん:04/09/20 19:33:00
>>356
だったら、もっと少ない数を指定するか、プラグマを使って場合わけする。

>>355
start_of_2ndarray の値を変更する。
データが入っているときは、その都度移動する。
363デフォルトの名無しさん:04/09/20 19:34:36
>>359
考える脳みそがないんだったらプログラムを組む必要はない。

>>358
その理由を聞きたい。
364デフォルトの名無しさん:04/09/20 19:35:08
>>362
プログラムを、別のパソコンにコピーしたらいきなり落ちちゃいました。
365デフォルトの名無しさん:04/09/20 19:38:51
>>363
mallocは考えなくても使えるぞ?
366デフォルトの名無しさん:04/09/20 19:40:06
うわぁ
367デフォルトの名無しさん:04/09/20 19:40:24
>>363
二分法を使ってみたいんじゃないの?
368デフォルトの名無しさん:04/09/20 19:40:34
いい加減に諦めて「ポインタ無しで書けないプログラムはありません」って発言撤回しろよ
369デフォルトの名無しさん:04/09/20 19:48:09
ポインタが無い言語も内部的には使いまくりだからな
370デフォルトの名無しさん:04/09/20 19:48:54
だからポインタ使ってるって。既に。
371デフォルトの名無しさん:04/09/20 19:50:17
ポインタなんかいらね
372デフォルトの名無しさん:04/09/20 19:51:44
この手の「ポインタ無くても工夫すれば他のもので代用可能」っていう奴は
たまに出てくるけど、面白かった事など一度も無い。
373デフォルトの名無しさん:04/09/20 19:54:10
このスレ始まって以来、面白かった事など一度も無い。
374デフォルトの名無しさん:04/09/20 19:54:46
無くてもとは言ってない、すがるほどのものではないと言ってるだけ
375デフォルトの名無しさん:04/09/20 19:56:06
ポインタなんていつ使ったよ?
376デフォルトの名無しさん:04/09/20 19:56:45
>>375
いいからmalloc作れ
377デフォルトの名無しさん:04/09/20 19:58:34
悪いことは言わないからC++にしとけ
378デフォルトの名無しさん:04/09/20 20:00:14
都合のいいときだけC++を使うのがベター
379デフォルトの名無しさん:04/09/20 20:02:20
C言語スレで何言ってんだ?こいつら
380デフォルトの名無しさん:04/09/20 20:05:53
>>375
Cは自己記述可能な言語だ
あんたがCを使ったことがあるなら
そこですでにポインタを使ってるんだよ

文句あるならポインタ抜きで
Cの翻訳処理系を作ってみろ
381デフォルトの名無しさん:04/09/20 20:13:39
>>374
配列よりはすがりがいがあるだろ。
382デフォルトの名無しさん:04/09/20 20:38:10
>>364
荒業だが、配列を関数内部に組み込む。

#define SIZE_OF_ARRAY 1000000 /* 気に入らなかったら他の数値に直す */

typedef union {
/*略*/
long double ld;
} anytype;
typedef struct {
int code;
anytype a;
} status;

status access_array(int n, int mode, anytype a)
{
static anytype arrray[SIZE_OF_ARRAY];
int i; status s;
if (n < 0 || n >= SIZE_OF_ARRAY) {s.code = -1; return s;}
s.code = 0;
switch (mode) {
case 0:
for (i=0; i<SIZE_OF_ARRAY; i++)
array[i].ld = 0;/* long double 型がanytypeのメンバ内で最も大きい場合、自動的に全てのビットが0にセットされる */
break;
case 1: s.a = array[n]; break;
case 2: array[n] = a; break;
}
return s;
}
383デフォルトの名無しさん:04/09/20 20:48:36
>>364
main関数で残りメモリを参照して、少なかったら終了する。
残りメモリ参照にはポインタを使わない。

>>365
malloc と比べてそれほど多く考える必要はない。

>>367
二分法である必要はない。
384デフォルトの名無しさん:04/09/20 21:04:28
>>383
初心者は、プログラムがmainからそのまま開始すると勘違いしてるんだよな。
385デフォルトの名無しさん:04/09/20 21:05:58
>>383
自分で二分法出しといて二分法である必要ないと言われても。
386デフォルトの名無しさん:04/09/20 21:40:14
>>384
どこからでもいいから、とにかく配列の定義がmainになくて、
関数を呼び出したときに初めて確保されるようになっていればいい。
処理系によっては WinMain から始まることもあるが、普通は main から始まる。
何段階呼び出した後でもかまわない。
そんなこといちいち断らなくても伝わると思ったからあえて言わなかっただけで、
そんなことは百も承知。
というか、本質的でないことにこだわり杉

>>385
二分法はあくまでも例。
最初の段階で、二分法あるいはニュートン法(この場合どうやって適用すればいいのか謎だが)、
もしくはその他の方法とか言ったら回りくどいから、二分法をひとつの例として出しただけ。
要は文句の出ない数値が一つ決まればいいだけで、その決め方は本質的ではない。
387デフォルトの名無しさん:04/09/20 21:44:46
>>386
どうでもいいからmalloc作れ。話はそれからだ。できるまで来るな。
388デフォルトの名無しさん:04/09/20 21:51:11
>>387
支持する
389デフォルトの名無しさん:04/09/20 21:51:57
Ruby!!!! >>>>>>>>>>>>>>>>>>> ぽいんた
390デフォルトの名無しさん:04/09/20 21:53:59
なんだか知らないけどここにツール置いときますね
ttp://pukapuka.s1.x-beat.com/img-box/img20040920215205.lzh
391デフォルトの名無しさん:04/09/20 21:56:01
392デフォルトの名無しさん:04/09/20 21:56:31
ウィルスきたわぁ
393デフォルトの名無しさん:04/09/20 21:59:13
GCひとつ作れない超低脳ばっかり
394デフォルトの名無しさん:04/09/20 22:01:39
なんでGCの話がでてくるんだ?
395デフォルトの名無しさん:04/09/20 22:05:40
結論:ポインタは大いに使いましょう。
396デフォルトの名無しさん:04/09/20 22:06:52
>>387
うpローダー気本。
397デフォルトの名無しさん:04/09/20 22:08:26
なんだか知らないけどここにウィルス置いときますね
ttp://pukapuka.s1.x-beat.com/img-box/img20040920215205.lzh
398デフォルトの名無しさん:04/09/20 22:08:34
399デフォルトの名無しさん:04/09/20 22:10:10
坊やだからさ!
400デフォルトの名無しさん:04/09/20 22:12:45
ちんこだからさ!
401デフォルトの名無しさん:04/09/20 22:17:05
>>394
[Ctrl] + F
402デフォルトの名無しさん:04/09/20 22:18:47
>>401
もう一度聞く。
ポインタの話してるのになんでGCの話が出てくるんだ?
403デフォルトの名無しさん:04/09/20 22:22:43
まったく、ばっかだなぁ・・・
404デフォルトの名無しさん:04/09/20 22:23:32
405デフォルトの名無しさん:04/09/20 22:25:04
>>404
理由になっていない。
406デフォルトの名無しさん:04/09/20 22:27:04
本人は理由のつもりなんだろ
407デフォルトの名無しさん:04/09/20 22:28:39
>>406
GCがあればポインタはすべて解決するんだよ、きっと。
408デフォルトの名無しさん:04/09/20 22:28:47
409デフォルトの名無しさん:04/09/20 22:30:18
>>408
お前自身の事ですか。あきれちまうな。
410デフォルトの名無しさん:04/09/20 22:31:40
どいつもこいつも
411デフォルトの名無しさん:04/09/20 22:33:20
412デフォルトの名無しさん:04/09/20 22:34:31
>>411
きちがいだ
413デフォルトの名無しさん:04/09/20 22:37:14
プログラムの引数を使いたいんだけど
ポインタ使わずに
414デフォルトの名無しさん:04/09/20 22:37:19
415デフォルトの名無しさん:04/09/20 22:38:02
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
416デフォルトの名無しさん:04/09/20 22:39:47
>>414
反論できなくなったら勢い無くなったな
417デフォルトの名無しさん:04/09/20 22:40:41
>>416
それはお前
418デフォルトの名無しさん:04/09/20 22:42:08
別に自分にできないことを人にやれと言っているわけではない
こっちにはちゃんと答えがあって言っていることだ

はやくやってみろ
419デフォルトの名無しさん:04/09/20 22:43:49
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
420デフォルトの名無しさん:04/09/20 22:44:33
>>418
ログ見るのが面倒だから見ないが
なにをやるんだ?
421ハバネロ:04/09/20 22:45:12
失礼いたす。拙者、暴君ハバネロと申す。質問は特に無い。続けくれ
422デフォルトの名無しさん:04/09/20 22:45:19
Rubybyyyyyyyyyy
423デフォルトの名無しさん:04/09/20 22:45:26
>>386
やっぱり、mainやWinMainの前のことは考えられないんだ。
スタックも知らないみたいだしネタを語るには力が足りないよ。

ところで、「本質的」という言葉を好む奴にろくな奴はいないな。
424デフォルトの名無しさん:04/09/20 22:45:27
>>420
ポインタ抜きで malloc と GC 作って
ポインタが無用かどうか証明して見せろ
425デフォルトの名無しさん:04/09/20 22:46:50
>>424
オレはそんな物つれないので、それが証明できる人に言ってくれ
426デフォルトの名無しさん:04/09/20 22:47:36
>>425
これから日本語で話していただいて結構ですから
427デフォルトの名無しさん:04/09/20 22:48:32
>>426
mallocがポインタ返すのにポインタが無用だって?なんだそりゃ
428デフォルトの名無しさん:04/09/20 22:49:28
ポインタが有用とか無用とか、
お前ら本当に無駄な話し合いが好きだなw
429デフォルトの名無しさん:04/09/20 22:50:15
ポインタ無くてもなんでも作れるとか言った馬鹿が一番わるいんだろうな
430デフォルトの名無しさん:04/09/20 22:50:19
malloc_without_pointer でもいい、とにかく同等の機能を持つ関数を作ってみろ
431デフォルトの名無しさん:04/09/20 22:51:31
>>429
頭は悪そうだが、ここでの善悪では善だ
432デフォルトの名無しさん:04/09/20 22:51:58
>>428
まぁネタスレだし。
今回のネタはつまんないけど。
433デフォルトの名無しさん:04/09/20 22:52:55
敗北宣言出たようだな
434デフォルトの名無しさん:04/09/20 22:53:24
>>431
頭が悪ければ悪だろう。
435297:04/09/20 22:53:57
はいはい。参りました・・・と
436デフォルトの名無しさん:04/09/20 22:54:14
>>434
おー厳しいな
437デフォルトの名無しさん:04/09/20 22:55:39
>>435
偽者は黙ってろ
438デフォルトの名無しさん:04/09/20 22:56:28
早くトリップ付けろよ(藁
439デフォルトの名無しさん:04/09/20 22:58:12
もう本人いないし、出てきても反論できないだろうし、
かわいそうだよ。
お前たち、おやめ!
440デフォルトの名無しさん:04/09/20 23:00:48
>>439
かわいそうには思えないな。
441デフォルトの名無しさん:04/09/20 23:03:16
>>439がいちばんかわいそう
442デフォルトの名無しさん:04/09/20 23:15:48
443デフォルトの名無しさん:04/09/20 23:33:26
とりあえず、全ての配列にanytype型を使い、複数の配列をハンドル番号で管理すれば、
ポインタを一切使う必要がない。実装は時間の問題。
デバッグの時間も考えて、明日までには完成する。

ポインタレスmallocが完成した時点で、ポインタの存在意義は消える。
極論を言えば、全ての関数をポインタレスmallocに対応させることで、
全ての関数からポインタを排除することが可能になる。
444デフォルトの名無しさん:04/09/20 23:37:04
配列にどうやってアクセスすんの?
445デフォルトの名無しさん:04/09/20 23:41:16
ひでぇ。
ポインタ=mallocが返すもの
と勝手に定義されちゃってるし。
446デフォルトの名無しさん:04/09/20 23:41:43
>>443
時間の無駄だから止めとけ。
447デフォルトの名無しさん:04/09/20 23:44:45
ただのポインタもどき
448デフォルトの名無しさん:04/09/20 23:48:05
配列を関数に渡そうとするとポインタになるわけだが、それもハンドルにする気なのか?
ポインタ排除=配列排除だよな。
449デフォルトの名無しさん:04/09/20 23:50:46
単に独自のmallocを作るだけじゃん。
450デフォルトの名無しさん:04/09/20 23:55:53
見落としていた。
>>423
だから、main 以外の関数内部にstaticで配列を確保すれば、
その関数funcを呼び出す以前の煩雑な処理は一切考える必要はない。
funcを呼び出す以前のことは、たとえmain関数のことであっても知る必要がない。
スタック領域が最初に確保されるのは、グローバル変数とmain関数内の変数のみ。

>>444
関数内部にstaticで保持し、引数によって読み書き出来るようにする。
451デフォルトの名無しさん:04/09/20 23:57:51
>>448
1つの関数の内部に配列を保持し、引数を適当に与えることで自由にアクセスできるようにすれば、
配列の引渡しをする必要がない。
452デフォルトの名無しさん:04/09/21 00:05:23
ひでぇ実装(ゲラ
malloc使った方が、普通に便利だ
453331:04/09/21 00:10:39
どなたか暇な人
>>361
回答お願いします。
空気読めなくてスマソ。
454デフォルトの名無しさん:04/09/21 00:10:48
>>450
プログラム書いたこと無いのバレバレ。
それとも、具体的なプログラムは本質的ではないのかな?
455デフォルトの名無しさん:04/09/21 00:10:59
>>452
C言語でありながらカプセル化が可能で、しかも常に引数チェックをするので
不正なメモリアクセスやメモリエラーを起こすことがない。
セキュリティーホールになりかねないmallocより数倍マシ。
456デフォルトの名無しさん:04/09/21 00:11:21
457デフォルトの名無しさん:04/09/21 00:14:09
>>454
C言語でちゃんと実務的なプログラムを書いたことがありますが何か?
で、まだ呼び出していない関数内部の配列の大きさが問題になるプログラムってどこにあるの?
458デフォルトの名無しさん:04/09/21 00:15:37
意固地になってるだけだろ。
気の済むまで自分の世界の中でやってりゃ良い。
459デフォルトの名無しさん:04/09/21 00:16:46
>>457
想像で語ってないで、実際に書いてみたら?
460デフォルトの名無しさん:04/09/21 00:21:05
>>459
何も問題が起こりませんが何か?
461デフォルトの名無しさん:04/09/21 00:21:56
>>460
問題起こりましたが、何か?
462デフォルトの名無しさん:04/09/21 00:22:55
UNIXプログラミング質問すれ Part3で自作自演をしているのはここの住人だろ?
463デフォルトの名無しさん:04/09/21 00:23:42
#include <stdio.h>
#include <limits.h>

void func(void)
{
static int array[INT_MAX];

array[0]=1;
}

int main(int argc, char** argv)
{
if (0) func();
printf("Hello, world.\n");
return 0;
}

さあ、問題を起こせるもんなら起こして下さい。
464デフォルトの名無しさん:04/09/21 00:26:27
>>463
そもそもコンパイルできないけど、配列の大きさを小さくしても
Segmentation fault (core dumped)
だね。
465デフォルトの名無しさん:04/09/21 00:30:07
>>463warata
466デフォルトの名無しさん:04/09/21 00:33:25
array[i]
これポインタと同義
467デフォルトの名無しさん:04/09/21 00:37:19
>>466
んなこたぁない。
468デフォルトの名無しさん:04/09/21 00:38:22
無知は黙ってて下さい
469デフォルトの名無しさん:04/09/21 00:40:29
>>464
配列の大きさを1にしてもエラーになるんだったら、コンパイラに欠陥があります。
最新版をインストールしましょう。
470デフォルトの名無しさん:04/09/21 00:53:53
いつまでやってんだよマンチンカス
471デフォルトの名無しさん:04/09/21 03:26:43
配列のとりうる最大のサイズってINT_MAXだっけ?
472デフォルトの名無しさん:04/09/21 03:28:49
UINT_MAX
473デフォルトの名無しさん:04/09/21 03:46:42
>453

343 :デフォルトの名無しさん :04/09/20 19:05:56
>339
ポインタ

ポインタが指している領域

(ある領域に)格納されている値

について小一時間勉強しなさい。

たぶん make_file_name( ) を呼び出している所のパラメータに問題あり。
474デフォルトの名無しさん:04/09/21 03:53:43
array[0] はデータが入ってる変数だよね?
array[1] も変数だよね?

じゃあ array は何?(´・ω・`)
475デフォルトの名無しさん:04/09/21 03:54:54
配列の先頭
476デフォルトの名無しさん:04/09/21 03:55:26
はあ?
array は配列か配列の先頭へのポインタかどっちかだろ
477デフォルトの名無しさん:04/09/21 03:58:37
>453
473(343)の"ある領域"って、ポインタが刺している領域の事なのでは?
478デフォルトの名無しさん:04/09/21 05:35:39
>>477
ポインタは刺さない。今時刺すのはNEVADAくらいなもんで。
479デフォルトの名無しさん:04/09/21 06:22:10
>>474
arrayは>>463の場合int[INT_MAX]型。
ただし、配列は知っての通り式の中ではポインタにされてint *型になる。
&arrayの結果の型はint (*)[INT_MAX]になるなど例外もあるが。
480デフォルトの名無しさん:04/09/21 06:23:06
刺す刺す刺す刺す刺す
いえ〜い
481デフォルトの名無しさん:04/09/21 06:34:48
なんだか知らないけどここにもウィルス置いときますね
ttp://pukapuka.s1.x-beat.com/img-box/img20040920215205.lzh
482デフォルトの名無しさん:04/09/21 08:55:31
array[3] = *(array + 3)
array[0] = *(array + 0)
array = const ポインタ
483 ◆FIcNi4f8js :04/09/21 09:00:10
&array[0] =
&array =
484デフォルトの名無しさん:04/09/21 09:23:13
array[i] も使ってはいけないんだったら、最後の手段として、

int func(int data, int n, int mode) {
int a0, a1, a2, a3, a4, (ry

if (mode == 1) {
switch (n) {
case 0: return a0;
case 1: return a1;
case 2: return a2;
・・・・・
}
} else if (mode == 2) {
switch (n) {
case 0: a0 = data; break;
case 1: a1 = data; break;
case 2: a2 = data; break;
・・・・・
}
}
return 0;
}

とすればいい。
485デフォルトの名無しさん:04/09/21 10:06:29
まだやってたw
486デフォルトの名無しさん:04/09/21 13:20:12
if ( c == '#' )ってどういう意味ですか?
#ってどんな効果かググっても見つかりませんでした
487デフォルトの名無しさん:04/09/21 13:22:28
質問の意味がわかりません
488デフォルトの名無しさん:04/09/21 13:22:54
>>486
cに#という文字が入ってるかどうかってだけ
489デフォルトの名無しさん:04/09/21 13:35:08
#include<stdio.h>
typedef struct _LIST{
struct _LIST* p_next;
char data;
}LIST;
int main(void)
{
LIST hoge[3];
LIST* test_p;
LIST* obj;

test_p =& hoge[0];

hoge[0].p_next =& hoge[1];
hoge[1].p_next =& hoge[2];

hoge[0].data = 0;
hoge[1].data = 1;
hoge[2].data = 2;

obj = (LIST*)(*test_p);//ここでエラーが発生

printf("%p\n",&hoge[0]);
printf("%p\n",test_p);
printf("%p\n",*test_p);

return 0;
}

すみません、以上のようなプログラムがあった時、なんとかアロー演算子を使わずに
hoge[0]->p_nextのアドレスを obj に入れる事は出来ないでしょうか?
ご教授オネガイシマス。
490489:04/09/21 13:45:36
環境は Visual C++ 6.0 です。
やはり無理でしょうか・・・
491デフォルトの名無しさん:04/09/21 13:47:29
>>484
>int a0, a1, a2, a3, a4, (ry
は、
 static int a0, a1, a2, a3, a4, (ry
の間違い。
492デフォルトの名無しさん:04/09/21 13:56:05
じゃ、ここに最新版ウィルス置いときますね
ttp://pukapuka.s1.x-beat.com/img-box/img20040921084521.lzh
493デフォルトの名無しさん:04/09/21 13:59:19
>>489,490
obj = *(LIST**)(test_p);
494489:04/09/21 14:07:38
>>493
まじすごいっす!
漏れこれで昨日一日悩んでました。
ありがとうございます"(ノ_・、)
495デフォルトの名無しさん:04/09/21 14:28:44
特定の演算子を使ってはいけないとか、演算順序を変更してはいけないとかいう
意味のない宿題が流行ってるのかねぇ。
496331:04/09/21 15:00:27
あれ?うまくいった。make_file_name()は関係なく
malloc()したfieldとfile_nameをfree()するときに
落ちているみたいでした。これってどういうことなんでしょう?
ともあれ原因は特定できました。レス下さった方本当にありがとうございます。
497デフォルトの名無しさん:04/09/21 17:47:29
C言語の本をにはたいていmallocしたメモリーをもう使わない
なら放っておけば終了時に自動的に解放されるので明示的に
freeしなくても良いと書いてあるのですが、先日ある雑誌を
見ると明示的にfreeしないとメモリーリークになると書かれ
ていました。どちらが正しいのでしょうか。
498デフォルトの名無しさん:04/09/21 17:54:36
>>497
過去ログを参照してください。語り尽くされていますから。
499デフォルトの名無しさん:04/09/21 18:01:07
>>497
環境依存です。
開放するOSもあればメモリリークするOSもあります。
だから、環境依存しないコーディングをするのなら、きちんとfreeしないと
いけませんし、
たとえ、放っておいても開放してくれるとしても、freeするのはマナーです。
freeが面倒ならC言語に似ている言語であればD言語やJava言語のような
ガベジコレクション付きの言語を使えばよろしい。
500Ruby最強!!!!:04/09/21 18:08:39
オレの通ってるホールには小柄で目の大きい可愛い店員がいる。
その子は最初見た時は(少し遊んでるのかな?)って感じの子だったけど、
挨拶はしっかりしてて、客が呼び出しランプを付けるとすぐに駆けつけて
笑顔で接客する子だった。重そうなコインも頑張って運んで、たくさん出した
人には「おめでとうございます。たくさん出て、良かったですね。^^」って
言ってくれる子です。

オレが何度か通ううちに相手も覚えてくれたようで少しずつ話すようになり、
店でオレを見つけると「あっ」て感じの顔をして笑顔で会釈してくれるようになった。
コイン補給を頼む時や換金する時も、オレの時は必ずその子が来てくれて
「今日もたくさん出てますねっ。良いなぁ^^」って言ってくれて、明らかに他の客とは
違う態度で接してくれるようになった。オレもだんだんその子が気になるように
なって、その子に会いたくてホールに通うようになった。
501Ruby最強!!!!:04/09/21 18:10:40
ある朝、開店直後に店に入るといつものように挨拶してきて、
「今日も来てくれたんですかぁ〜」って言ってきたので
「いや〜お姉さんに会いたかったから、来ちゃいました^^;」と冗談まじりで返した。
すると彼女は一瞬ビックリした顔をしたが、みるみる顔が赤くなっていき
「私も・・○○さん(オレの名)が来てくれると嬉しいですよっ」と照れながらも言ってくれた。
普段から気になってたオレは凄く嬉しくて舞い上がってしまった。

いつか絶対誘おうと思っていたのだが、気が弱いオレはそれを言い出せず、
ただそのホールに通う事しか出来ず、そんな状態がしばらく続いた。
ある日、オレがいつものように行くと、彼女の姿が無い。(いつもはこの時間は
必ず入っているはずなのにな・・・・何か用事かな?)と思っていたが、
次の日も、2日後にも彼女はいなかった。オレは気になって仕方なかったので、
他の店員に聞いてみると、「あ〜あの子なら先週やめましたよ」と返ってきた。
502Ruby最強!!!!:04/09/21 18:13:24
オレは呆然として、もうその日は打つ気力も無くなりトボトボと家に帰った。
なんだかもうその店に通う気力が無くなり、いつしか行かなくなってしまった。
そして一ヶ月後・・ドライブしてたオレは家の近くで偶然彼女を見つけた。
その子は歩道を歩いていて、コンビニに入っていった。「あの子だ!!」

オレは焦ってUターンしてそのコンビニに止めると、車の中から彼女の様子を
うかがった。彼女は立ち読みをしている。オレは意を決して店に入り、
思い切って声を掛けてみた。「こんにちは。」
彼女は驚いてオレの方を見た。オレは(覚えていてくれなかったらどうしよう・・。)
と声を掛けた後で後悔したが、彼女はオレの事を覚えていたらしく、すぐに
「あ〜っ、○○さん!!久しぶりです!」と言ってくれた。

良かった・・覚えていてくれた・・。  オレがホッとしていると、
「この近くに住んでたんですか?知らなかった〜。会えたら良いな〜って思ってたんですよ」
と彼女は言った。続けて、「今ヒマですか?良かったらちょっと遊びません?」
と言った。オレはこのおいしい展開にとまどいつつも、「じゃあオレんち来る?」と
聞いてみた。彼女は一瞬考えたような顔をしたが、照れながらも「はい・・。」
と答えた。
503Ruby最強!!!!:04/09/21 18:17:02
オレの家に着くと、彼女はオレの手に自分の手を乗せてきた。
オレはもう我慢できずに彼女を抱き寄せた。彼女は抵抗せず、オレに
体を預けた。「良い・・?」と聞くと彼女はオレの顔は見ずに黙ってうなずいた。

彼女の服をゆっくりと脱がし、彼女の胸にキスをすると、彼女は可愛い吐息を
上げてオレを挑発した。オレは野獣のように彼女の体を堪能し、
その日はずっと抱き合って寝た。
目が覚めると彼女は隣におらず、オレは夢だったのか?と思って一瞬落ち込んだ。

顔を洗おうと台所に行くと、彼女は・・・いた。「おはよう。ずい分寝てたね」と言い、
それを聞いたオレは(ああ・・夢じゃなかったんだ・・)となんだかとても嬉しかった。
彼女は、「これからも・・よろしくね・・」とはにかみながら言った。


















そんなシチュエーションのAVはありますか?とオレがビデオ屋で聞くと、
無精髭を生やしたイカツイ店長は、にこやかにオレの肩に手を乗せ「帰れよ」と言った。
504デフォルトの名無しさん:04/09/21 18:22:17
rubyオワッタナ
505デフォルトの名無しさん:04/09/21 18:23:17
>>498
あなたの対処は正しいと言える。が、一方で
>>499
>たとえ、放っておいても開放してくれるとしても、freeするのはマナーです。
こういう俺マナーを押し付ける奴がいると
>>497 は過去ログなんか読まず信じちゃうんじゃないか、と危惧したりもする。
506デフォルトの名無しさん:04/09/21 20:00:05
最近始めたのですが。
〜略〜
printf("%-6s",moji[10])
〜略〜
の『-6』の意味を教えてください。
507Ruby最強!!!!:04/09/21 20:05:12
左詰め
508デフォルトの名無しさん:04/09/21 20:06:58
ちゃんと検索して下さい
509506:04/09/21 20:24:50
なるほど、数値の値だけ幅が与えられるわけか。
スマンカッタ、ありがとう。
510デフォルトの名無しさん:04/09/21 21:57:16
1
12
123
1234
12345
123456
1234567
511デフォルトの名無しさん:04/09/21 22:03:57
free しろ。ガタガタ言うな。それが情報隠蔽だ。
512デフォルトの名無しさん:04/09/21 22:20:56
>>511
低脳。
513デフォルトの名無しさん:04/09/21 22:44:54
>>512
低脳のフリをするのが情報隠蔽だ。
それがわからん奴が真の低脳だ。
514デフォルトの名無しさん:04/09/22 00:32:06
またか。
515デフォルトの名無しさん:04/09/22 00:33:10
お前ら過去スレ全部読んでから言え。
516デフォルトの名無しさん:04/09/22 00:39:44
>>515
90515レスも読めるか!
517デフォルトの名無しさん:04/09/22 03:04:59
そっか。
このスレだけでも10万近いレスを、みんなが集まって書いたんだなあ。
2ch全体だけでも、途方もない数の言葉が集まったんだろうな。

なあ、もし、漏れたちみんなで力を合わせたらさ、




('A`)ノ なんでもない。
518デフォルトの名無しさん:04/09/22 05:58:52
scanfとかfreeとか空白とか繰り返してたよね・・・
519デフォルトの名無しさん:04/09/22 07:03:15
空白とかぼけは最近からのような気もするけど
520デフォルトの名無しさん:04/09/22 13:16:46
それでもポインタは要らない。
521デフォルトの名無しさん:04/09/22 14:05:31
>>520
おまえ、もう要らない。
522デフォルトの名無しさん:04/09/22 14:10:08
printf("ポインタが要らないということは既に証明されただろ。\n");
free(>>521);
523デフォルトの名無しさん:04/09/22 14:51:14
関数ポインタってありますよね。
あれと、普通の関数の違いがわかりません。

普通の関数
呼び出しと同時に
スタックに領域作成

関数ポインタ
作成した瞬間に
スタックに領域作成?

こんなんでもう6年もコーダーやってます。
はぁ・・・
524デフォルトの名無しさん:04/09/22 14:59:04
最後の二行にビックリですよ
525デフォルトの名無しさん:04/09/22 15:06:04
fopen()で新規ファイルを作るときにNULLしか返してくれません。
何がおかしいんでしょうか?
526デフォルトの名無しさん:04/09/22 15:06:13
>>523
関数ポインタ
関数のアドレスを入れる、ただの変数
527デフォルトの名無しさん:04/09/22 15:13:34
>>525
NULLが帰ってきた後にperror実行してみたら?
528525:04/09/22 15:19:46
>>527
perrorって初めて知りました。
こういうのがあるんですね。
早速やってみます。ありがとうございました。
529デフォルトの名無しさん:04/09/22 15:23:08
ObjectiveCって何ですか?
530523:04/09/22 15:42:14
どうも。
でしたら、アクセス?だけで
関数ポインタって利用されてるんですか?
利用の意義がまったく見出せません。

仕事向いてないのかな・・・
ハァ・・・
531デフォルトの名無しさん:04/09/22 15:46:27
とりあえずqsort使っとけ。
532523:04/09/22 17:08:24
あ、確かに関数ポインタ使ってますね。
これだけの為かorz
533デフォルトの名無しさん:04/09/22 17:15:50
なんで?便利じゃん
534デフォルトの名無しさん:04/09/22 17:31:57
コンパイル時じゃなくて実行時に呼ぶ関数を決めたい、っていうだけで
すぞ>関数ぽいんた

535523:04/09/22 17:39:42
dllみたいな事がしたいと?
536デフォルトの名無しさん:04/09/22 17:42:34
いや、ポリモーフィズムだ。
537デフォルトの名無しさん:04/09/22 17:48:01
同じシグネチャの関数であれば差し替えて処理できるので便利

538デフォルトの名無しさん:04/09/22 17:48:11
コールバック関数とか使ったことないのか?
6年もやってて?マジで?
ある意味すごいな
539デフォルトの名無しさん:04/09/22 17:50:10
>>523
変数の内容によって、飛び先変えれるとか・・・

int FuncA(int n);
int FuncB(int n);
int FuncC(int n);

int main(void){
   int (*hoge[3]) = {FuncA, FuncB, FuncC};
   int a, b, n;
   n = 0;
   a = hoge[n](b);  //FuncA
   n = 2;
   a = hoge[n](b);  //FuncC

   
540539:04/09/22 17:51:25
○   int (*hoge[3])(int) = {FuncA, FuncB, FuncC};
541デフォルトの名無しさん:04/09/22 17:52:44
>>539
そういうのはあんまり本質的じゃないな。swich使ってもあまり変わらんし
542デフォルトの名無しさん:04/09/22 17:55:01
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
 char *s;
    
 while(1){
  s = malloc( sizeof(char)*20 );
   if(s==NULL){
     fprintf(stderr,"メモリ確保ミス\n");
     exit(1);
   }
  printf("%d\n",sizeof(s));
    
  fgets(s,sizeof(s),stdin);
  printf("%s\n",s);
  free (s);
 }
 return 0;
}

mallocをつかってずーっと文字を入力させていっては表示させるプログラムを作りたいのですが、
s = malloc( sizeof(char)*20 );
でs[20]みたいな感じにはならないのでしょうか?
3文字入力したら改行が施されてうまくいきません。
そこでsizeof(s)をみると4となることまでは確認できました。
543デフォルトの名無しさん:04/09/22 17:55:59
>>541
switchと違って、関数を呼び出す側が詳細を知らなくてもいい
という点が大きく違うな。
544デフォルトの名無しさん:04/09/22 17:57:49
>>542
sはポインタだ。
> そこでsizeof(s)をみると4となることまでは確認できました。
ポインタの大きさが4バイトということだろう。
545523:04/09/22 18:02:44
ちょっと整理したいんですが、
私がお聞きたいのは関数ポインタの利点です。
特筆べき利点です。

>switchと違って、関数を呼び出す側が詳細を知らなくてもいい
通常の関数でも引数に△いれれば■が戻り値ですとコメント書いておけば
同じようなもんですよね?

アクセスが早いとか、無駄な領域割かなくていいとかは
ないんですか?
546デフォルトの名無しさん:04/09/22 18:06:17
> アクセスが早いとか、無駄な領域割かなくていい
君のレベルでは、そのようなことを気にする必要はない。
547523:04/09/22 18:07:38
>>546
ははは。ナイスレスですね。
でもしりてぇっす。
548542:04/09/22 18:08:18
>>544
なるほどそうですね。
mallocは542のソースにあるような使い方はしないということでよろしいでしょうか?
549デフォルトの名無しさん:04/09/22 18:11:40
>>545
ライブラリとして提供するとする。
それで利用者に関数を用意させる必要がある(qsortのように)とき
どうするんだ?
550548:04/09/22 18:14:14
すいません
548のことはスルーしてください。
551デフォルトの名無しさん:04/09/22 18:20:14
>>545
パフォーマンス上の利点はほとんど無いだろう。
タイトループの中での switchよりは速くなるかも知れないけど。
主な利点は、設計が楽になる可能性があること。
552523:04/09/22 18:29:43
#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
char *s,*t;

while(1){
s = (char *)malloc( sizeof(char)*100 );

if(s==NULL){
fprintf(stderr,"メモリ確保ミス\n");
exit(1);
}

printf("%d\n",sizeof(s));
fgets(s,100,stdin);
t = s;
printf("%s\n",e);
free (s);
}
return 0;
}

動けばいいの?
解説いるの?
553デフォルトの名無しさん:04/09/22 18:30:46
>>539 の例が悪すぎる
554523:04/09/22 18:31:31
↑宣言していない変数が・・・(w

関数ポインタ場合により有用になるってことですか。
んむむむ
555デフォルトの名無しさん:04/09/22 18:37:06
回答してるの?質問してるの?
556デフォルトの名無しさん:04/09/22 18:37:29
>>553
ナイスな例よろ
557デフォルトの名無しさん:04/09/22 18:39:21
>>545
int func_a(void) {
  :
  :
}
int func_b(void) {
  :
  :
}
だとして、

static int (*ftable[])(void) = {
    func_a,
    func_b,
    func_b,
    func_a,
};

    int state, ret;
        :
        :
    ret = ftable[state]();
とか。
558523:04/09/22 18:39:54
542のが動けばいいのかと思ってソース書き直したけど
変な変数が存在してます。ごみんなさい。
559デフォルトの名無しさん:04/09/22 18:41:21
実行効率は悪いけど、

static struct {
    char ch;
    int (*func)(void);
} ctable[] = {
    {'*', func_a},
    {'+', func_b},
};
#define numberof(v)        (sizeof (v) / sizeof *(v))

    char symbol;
    int ret;
        :
        :
    for (int i=0; i<numberof(ctable); i++)
        if (symbol == ctable[i].ch)
            ctable[i].func();

とか。
560デフォルトの名無しさん:04/09/22 18:53:53
だからね、初めっからどんな関数があるのか分かってんだったら
テーブルじゃなくても switch 文で実現できるから本質的でないん
だって(保守性の問題とかはあるにしても)。
問題は汎用的なデータを扱うライブラリ(Hash Table とか)を作る
とき。ライブラリ作る時点では、(ライブラリの)ユーザがどんなデータ
を入れるか分からんから、データに依存する部分の処理はユーザ
が自分で関数書いて渡せるようにするの。
561デフォルトの名無しさん:04/09/22 20:19:53
>>523

sage() { }
main()
{
auto (*age)() = sage;
sage();
age();
printf("%u", sizeof sage);
printf("%u", sizeof age);
sage++;
age++;
}

1行ずつ、結果について考察してみれ。
562デフォルトの名無しさん:04/09/22 20:37:57
質問です。
関数ポインタ(* increment)()をつくっといて
object->increment();
みたいなことをしたらobject(構造体)の特定のレコードの値を変更させることはできますか?
もしできるんならどう書けばいいんでしょう?
object->increment(object);
だったらできるんだけど、なんかカコワルイ。。
563デフォルトの名無しさん:04/09/22 20:42:07
ここに完全版ウィルス置いときますから好きに使って下さいね^^
http://pukapuka.s1.x-beat.com/img-box/img20040922204002.lzh
564デフォルトの名無しさん:04/09/22 20:44:36
>>562
(関数ポインタで実行される)関数にレコードへのポインタが与えられていないので出来ません。
どうしてもやりたいのなら、レコードをグローバル変数にするか、C++を使いましょう。
565デフォルトの名無しさん:04/09/22 21:19:36
static で構造体の二重配列を渡そうとしてるんですが、
受け側でうまく処理できません。
strudt A {....}

struct A AST[10][10]; ここで sturuct A** として渡しますが
受け側では同じプロトタイプで受けてるにも関わらずArg[n]のアドレスが
オカシイのです。
566デフォルトの名無しさん:04/09/22 21:36:32
>>565
[] と * を同一視したがるパラダイムが見当違い
[10][10] を ** では受け取っても正しく処理できない

struct A a[10][10];

main()
{
f(a);
}

f(x)
struct A **x;
{
printf("%p", &a[0][0]);
printf("%p", &a[0][1]);
printf("%p", &a[1][0]);

printf("%p", &x[0][0]);
printf("%p", &x[0][1]);
printf("%p", &x[1][0]);
}

1行ずつ、結果について考察してみれ。
567565:04/09/22 21:56:54
>>566
まだ考察はしてませんが、コードには[ ]ばかりでなくキャストに
sizeof、考えられる手段を試してみましたがどうも腑に落ちません。
というのも、ある値が文脈でアドレスと見なされた場合、それに加算される
数値は(インクリメントは当然としてsizeofで計算した値も)正確な
アドレスとして評価される筈です。
568デフォルトの名無しさん:04/09/22 21:58:23
>>567
その「正確なアドレス」を正確な日本語で言ってみろ
569デフォルトの名無しさん:04/09/22 22:00:53
ちゃんと考察して、何が必要らしいかがわかってきたら、もっぺん聞くか自分で調べれ
570565:04/09/22 22:05:16
>>568
その「正確なアドレス」とは、「アドレスと見なされる値」からの
型として設定される値のオフセットで計算される、でよろしいですか。
571デフォルトの名無しさん:04/09/22 22:07:31
>>564
やっぱり無理なんですね。
ありがとう。
572デフォルトの名無しさん:04/09/22 22:08:03
>>570
値から型はとれない。ポインタには値しか格納できない。
だから x は 10 に従わない。
573565:04/09/22 22:13:57
>>572
わかるようなキモしますが、だからこそ、といか、そもそも型がわからない
コードはコンパイルを通らないですよね。そこで上位のアドレスを型変換
した場合にデフォで型を継承してもらわない事には話しにならないと思うのは
私だけでしょうか。
574デフォルトの名無しさん:04/09/22 22:24:36
struct a[][10]
として渡せ。
575デフォルトの名無しさん:04/09/22 22:27:48
ttp://www.cl-lab.com/index.html
更新されてるようなのになんでいまだにvoid main()とか書くの?
576デフォルトの名無しさん:04/09/22 22:32:32
古めの人だからだろ。
577デフォルトの名無しさん:04/09/22 22:54:19
void hoge(char *foo)
{
foo に文字列などを入れる処理
}
main()
{
char buf[128];
hoge(buf);
printf("%s", buf);
}
このようなコードでbufのサイズが50のときはうまく表示、100の時は変な文字記号がまじる、
200の時はうまく表示、1000の時は変な文字記号が・・・の様なことがおこります。
悩んだ末、ふと static char buf[128]; のようにしたところ常にうまく表示されるようになりました。
staticで確保しないとメモリがアヒャヒャなことになるという結論に達したのですが、どうもすっきりしません。
これってプログラムを書く上で当たり前のことなのでしょうか?どなたかバッサリヤってください。
578デフォルトの名無しさん:04/09/22 22:56:29
>>577
マシンはちゃんとアヒャってるんだが
おまいもしっかりアヒャってるんで、気が付かない・・・
わかりる? この相対性理論
579デフォルトの名無しさん:04/09/22 22:57:00
>なんでいまだに

void で無問題な処理系だから
580デフォルトの名無しさん:04/09/22 22:58:16
>これってプログラムを書く上で当たり前のことなのでしょうか?

常識
581577:04/09/22 23:03:15
>>580
どうもっ。
582デフォルトの名無しさん:04/09/22 23:17:14
>>573
こいういのがお好き?

#include <stdio.h>

struct ABC{
   int a;
   int b;
};

void disp(void *s){    
   printf("%d \n", (*(ABC (*)[5][10])s)[4][5].b );
}

int main(void){
   ABC s[5][10];
   s[4][5].b = 3;
   disp(s);
   return 0;
}
583デフォルトの名無しさん:04/09/22 23:18:54
>>574
からけ嫁
584デフォルトの名無しさん:04/09/22 23:18:55
>>577
文字列の最後に'\0'いれてる?
585デフォルトの名無しさん:04/09/23 00:10:09
全角英数字、半角英数字を使っている文字列がるとします。
文字は半角、全角まざっててもいいし、いろいろです。

こういった種類の文字列が複数あって
ソートしたいとします。

qsortでソートしたかったのですが
比較関数でstrcmpを使うと、うまくソートできません
原因はstrcmpが半角にしか通用しないからです。

どのようにすればいいのでしょうか?
助言おねがいします。
586デフォルトの名無しさん:04/09/23 00:12:10
>>585
比較関数を作る
587デフォルトの名無しさん:04/09/23 00:17:14
>>585
どういう基準でソートしたいかによる。
文字コードで比較したいのなら strcmp で十分のはず。

ア→ア→イ→イ→・・・・

などの順序でソートしたいのなら、>>586にあるように比較関数を作るしかない。
そのためには、漢字コードの表などを使って、自分で比較関数を作るしかない。
588デフォルトの名無しさん:04/09/23 00:31:44
64bit整数の加算やシフト演算を実行しているのですが、
単純な加算のループをそれぞれ実行してみると64bitの方が2倍近く遅くなっていました。
Pentium系列の32bitCPUだと64bitの演算は32bitの演算と比べると低速なんだと思いますが、
なんとか64bitの演算を高速(32bit演算並)に実行できないものでしょうか?
VC++6.0 SP6でCPUはPen4を使っています。
589デフォルトの名無しさん:04/09/23 00:35:23
インラインアセンブラでMMX使ってみたら
590デフォルトの名無しさん:04/09/23 00:35:31
>>588
スレ違い
591デフォルトの名無しさん:04/09/23 00:41:04
>>589
アセンブラの経験はないのですがこれを機に勉強してみます。

>>590
Cのコードを最適化している過程でこの問題にぶつかったので、
この板で質問してみたのですが、こういう話題はアセンブラの話になるのでしょうか・・・。
592デフォルトの名無しさん:04/09/23 00:46:34

int a[4][5];
int (*p)[4][5];
p = &a;

×(コンパイルエラー)
int a[4][5];
int (*p)[4][5];
p = a;

ここまでは理解できるのですが、


int a[4][5];
int (*p)[5];
p = a;

これが通る理由が良く分かりません・・・
593デフォルトの名無しさん:04/09/23 00:53:49
>>592
typedefでもして試せば一目瞭然の気もするが。

最後の例は、
aはintが5個の配列が4個並んだ配列で、
pはintが5個の配列へのポインタ。
言い換えれば、
aはある型のオブジェクトが4個並んだ配列で、
pはその型へのポインタ。
ある型が仮にcharなら、char a[4]; char *p; p = a; となり、
いくらなんでもこれはお馴染みだろう。
たまたま型が配列だっただけなのだよ。
594デフォルトの名無しさん:04/09/23 01:00:10
>>593
わかりました!
595デフォルトの名無しさん:04/09/23 01:40:08
プロのプログラマの方々にお聞きしたのですが、
ビットとかって、実際に仕事で頻繁に使うものなんでしょうか??
使うとしたら、どういったところで使用するのでしょうか??
できれば、初心者にわかるような解説をお願いします。
596デフォルトの名無しさん:04/09/23 01:46:46
>>595
画像処理とか音声処理とかセンサー読んだりフラグ入れたり色々。
597デフォルトの名無しさん:04/09/23 01:49:46
>>596
なるほどなるほど。計算なんかで使用することってありますか?
598デフォルトの名無しさん:04/09/23 02:08:51
>>597
ビットを操作する計算なら使用するだろ。
599デフォルトの名無しさん:04/09/23 02:48:55
符号は最上位ビットを見るとかか?
600デフォルトの名無しさん:04/09/23 04:24:58
>>598
お答え頂き、ありがとうございました☆
勉強になりました!
601デフォルトの名無しさん:04/09/23 06:11:01
>>562
C++勉強しな。そういうこともできるぞ。
602デフォルトの名無しさん:04/09/23 10:20:17
ほんと素人で申し訳ないんですが、
整数xを入力し、xを8倍するプログラムを乗用演算子を
用いずにつくる場合はどんな風にすればいいんですか?
603Ruby最強!!!!:04/09/23 10:22:48
<<3
604デフォルトの名無しさん:04/09/23 10:23:56
>>603
やっぱりそれでいいんですね。10倍なら<<4
でいいんでしょうか?
605デフォルトの名無しさん:04/09/23 10:24:01
>>602
x=x+x+x+x+x+x+x+x;
606デフォルトの名無しさん:04/09/23 10:25:30
>>604
いいかどうかは実際に確かめてみれば分かるだろ。
607デフォルトの名無しさん:04/09/23 10:25:37
int func(int x){
for(int i=1;i<=8;i++)
x +=x;
return x;
}
608デフォルトの名無しさん:04/09/23 10:27:03
forループの中で足す
609デフォルトの名無しさん:04/09/23 10:27:33
Ruby>>>>>>>>>>>>>>>>>>>>>>>>>整数
610デフォルトの名無しさん:04/09/23 10:30:16
>>609
おまえはそんなにRubyの評価を落としたいのか?
611デフォルトの名無しさん:04/09/23 10:30:53
>>605
>>607
>>608
なるほど、それでもできますね。ありがとうございました。
>>606
そうですね。すみません
612デフォルトの名無しさん:04/09/23 10:56:09
10倍
x = x<<3 + x<<1
613デフォルトの名無しさん:04/09/23 11:01:17
>>612
ありがとうございます。
614デフォルトの名無しさん:04/09/23 11:03:24
cout << 3 + x << 1;
615デフォルトの名無しさん:04/09/23 11:30:46
char buf[16];
sprintf(buf, "%d0", x);
x = atoi(buf);
616デフォルトの名無しさん:04/09/23 18:19:33
strcat( char* hoge, char* foo )
をしたとき文字列の連結は成功するのですが
fooの示す文字列が2バイト左にずれてしまいます。
foo自身の値がインクリメントされているわけでもないようです。
どなたか指導お願いします。
617デフォルトの名無しさん:04/09/23 18:22:28
>>616
hogeに十分な空きが無いんだろう。
618616:04/09/23 18:33:44
>>617
おお! すごい!!
どうもありがとうございます。
でもなんでだろう?
小一時間考えてきます。
619デフォルトの名無しさん:04/09/23 19:47:45
char hoge[7] = "aiueo";
char foo[5] = "foo";
strcat(hoge, foo);

メモリ上のイメージ(0…終端コード, ?…不定値)
[a][i][u][e][o][0][?][t][e][s][t][0]
        ↓strcat
[a][i][u][e][o][t][e][s][t][0][0][0]
↑hoge       ↑foo
620デフォルトの名無しさん:04/09/23 19:48:50
すまん、メモリ上のイメージの最後の[0][0][0]は[0][t][0]の間違いだ。
621616:04/09/23 19:56:54
>>619
うおおぉぉ!感動!
なるほど、この場合hoge[]とhoo[]が
偶然近い位置に配置されていたということも
原因に挙げられますよね。
というか変数の宣言ではそのように配置されてしまうものなのかな?
ちょっと調べてきます。
本当にありがとうございます!
622デフォルトの名無しさん:04/09/23 19:58:28
>>601
ありがとう。
オライリーから出てるC++プログラミング入門が良さそうなんで
それでも読んでみます。
623デフォルトの名無しさん:04/09/23 22:10:26
クローンコードをなくしたいのですが、たとえば下記のようなコードって関数にするのがいいのですか?
それとも関数マクロでしょうか?

if(function(x)){
printf("Function is Success\n");
}else{
printf("Function is Failed\n");
function_error_process();
}
624デフォルトの名無しさん:04/09/23 22:16:54
>>607だと256倍になりそう・・・
625デフォルトの名無しさん:04/09/23 22:17:16
>>623
頻出なら関数、一度しか出てこないならそのまま。
関数マクロは副作用があるから使わない方が良い。
626デフォルトの名無しさん:04/09/23 22:38:31
>>623
あまりに頻出で定型なら
functionとfunction_error_processのアドレスを受け取って処理するとか。
627デフォルトの名無しさん:04/09/23 23:32:53
>>607
int main() {
for (int i=0; i<10; i++) puts("test");
return 0;
}
とすると
error: `for' loop initial declaration used outside C99 mode
なメッセージがでるよ??
628デフォルトの名無しさん:04/09/23 23:35:07
#define PRINTMSG(dst) {if(dst){printf("Function is Success\n");}else{printf("Function is Failed\n");function_error_process();}}

で十分だろ
629デフォルトの名無しさん:04/09/23 23:37:03
C99でなければ for (int i=0; i<10; i++) ... ってできない
630デフォルトの名無しさん:04/09/23 23:38:37
関数マクロの副作用?
631デフォルトの名無しさん:04/09/24 00:39:16
>>629
__VA_ARGS_の機能使ったときはコンパイルで何も文句いわれなかったから
気づかなかったけど、C99使うときはgcc -std=c99 hoge.cなんてするんだな。
632デフォルトの名無しさん:04/09/24 05:39:31
BOOL型のサフィックスのIsって何の略ですか?
633Ruby最強!!!!:04/09/24 05:41:36
632 is baka
634デフォルトの名無しさん:04/09/24 05:58:32
昔ジャンプでやってたあれ
635デフォルトの名無しさん:04/09/24 16:51:26
俺は今日初心者未経験やる気がある人を重視しますという広告につられ
面接にいった・・俺はCをたしなむんだが、普通に基礎をマスタしてるぐらいだが
しかし、いきなり適正検査をしますと・・だされた問題はもろ昔の算数
Aさんは時速なんとかBさんはなんとか距離はいくらとか
Aの濃度は%Bの濃度は%とか、こんな問題が延々と一時間やらされた
はっきりいってまったくできなく残念ですが、Eです
今回は採用をみなおしますといわれた
あ??やるき重視じゃねーのかボケ。。余計な時間とらせやがって
社長がまたいやな感じのやつでよ・・ほんとにあの適正検査ってやつは
あてになるのか俺は理系じゃないが、時間をかけたらアルゴリズムとかも
理解できるとおもってる。。あ???
理系のやつのみってかけやボケが・・・とメールでおくってやった
636デフォルトの名無しさん:04/09/24 16:55:50
>>635
文型なのに酷い文章だな。
637デフォルトの名無しさん:04/09/24 16:57:58
文系でもそれぐらい出来とけよ。
638デフォルトの名無しさん:04/09/24 17:04:55
その程度の問題が解けないなら知障レベルだぞ
639デフォルトの名無しさん:04/09/24 17:16:49
文系未満はどこにも就職できないよ。
640デフォルトの名無しさん:04/09/24 17:39:57
理系も未満の使い方覚えないと就職できないよ。
641デフォルトの名無しさん:04/09/24 18:36:24
それで文系名乗られると文系全体が可哀想だ
642デフォルトの名無しさん:04/09/24 18:43:00
c言語↓
643デフォルトの名無しさん:04/09/24 18:43:44
#include <stdio.h>

int main()
{
  puts("Hello, world!");
  return 0;
}
644デフォルトの名無しさん:04/09/24 19:06:08
>>635
オマエは世間を知らなさ杉
母数をでかくするのは募集側が当然考えること
母数がでかければオマエより魅力的な奴もそれだけ増える
極めつけは試験の意図がオマエにはわからなかった
それで通ったら却って薄気味悪い
645デフォルトの名無しさん:04/09/24 19:09:35
ここのNew Virusってやつのコード痛くないか?

スレッド違いで失礼だが、お願いしたい。

迷惑ですからやめてください

そもそもソースおかしいぞ

君たちは冷たいね・・・・・。

......底抜けのバカか?

http://security.ten.thebbs.jp/1093151279/
http://security.ten.thebbs.jp/1094827887/
646デフォルトの名無しさん:04/09/24 19:35:46
↓二進数
647デフォルトの名無しさん:04/09/24 19:53:48
1
648デフォルトの名無しさん:04/09/24 20:39:46
構文のチェックをするフリーのツールはありませんか?
gccでsyntax error at end of inputだけが出るけど何所が間違っているかわからん。
649Ruby最強!!!!:04/09/24 20:41:18
google
650デフォルトの名無しさん:04/09/24 20:41:57
>>648
英語の辞書買うほうが先だ
651648:04/09/24 20:55:54
いや言葉の意味はわかります。
具体的に何が間違っているのかがわからない。
ので、親切にどう間違っているのか教えてくれるツールがないかなと思ったしだいです。
652デフォルトの名無しさん:04/09/24 20:57:09
>>651
言葉の意味、わかってないんじゃん。
653648:04/09/24 21:12:58
そのまま入力の終わりに構文エラーだと思っています。

$ gcc a.c b.c -Wall
a.c: In function `main':
a.c:225: error: syntax error at end of input

a.c
221  free(buf);
222  fclose(fp);
223  return EXIT_SUCCESS;
224 }
225

これで入力の終わりに構文エラーだと意味がわからないので
正確な意味を教えてください。
654デフォルトの名無しさん:04/09/24 21:17:21
独習C読んでると、fopenのたびに
if((fp=fopen("txt","w"))==NULL){…
という風にエラーチェックしてるんですが、これって普通なんでしょうか?
655デフォルトの名無しさん:04/09/24 21:19:00
>>653
ソースがそれだけでは解からないよ。

;の付け忘れとかよくあるけど…
656デフォルトの名無しさん:04/09/24 21:21:04
>>654
エラーチェックしなかったらファイルオープンできたかどうか分からないじゃん。
657デフォルトの名無しさん:04/09/24 21:21:12
>>654
エラーが考えられる場所ではエラーチェックするのが普通です。
たとえば、txtというファイルが無い場合はfpを使った処理がうまくいきません。
658デフォルトの名無しさん:04/09/24 21:21:26
>>654
普通
659デフォルトの名無しさん:04/09/24 21:24:34
>>653
gcc は知らんが、{ と } の不整合とか?
660デフォルトの名無しさん:04/09/24 21:25:20
>>653
lintとかあるけど、色表示してくれるエディタ使ったほうが早いと思うよ。
あとは変なところに全角スペースが入ってるとか。
661648:04/09/24 21:33:40
>>655,659,660
{と}の不整合でした。
ありがとうございました。
括弧の対応を探すと最後の行までいかないといけないから最終行でエラーがになるのかな。
662デフォルトの名無しさん:04/09/24 21:33:42
>>653
入力の終わりに構文エラーだからって、原因が入力の終わりにあるとは限らない。
エラーが露呈したのが入力の終わりなのであって、原因はもっと前にあることが多い。
663デフォルトの名無しさん:04/09/24 21:34:47
生まれて初めてみたときは一瞬考えるよね、このエラー。
まあすぐに終わりにシンタクスエラーがあるんじゃなくて、
終わりでエラーになったと分かるけど。めったにないけど、
これがでるとifなんかを全部みなおさなきゃならんので
ちょっといらっとくる。
664デフォルトの名無しさん:04/09/24 21:41:04
最近C始めたばかりなんですが、少し疑問に思うことがあります。
変数って、プログラム書いてるうちに必要に応じて増やすもんなんですか?
それとも、使う変数は最初から考えておくんですか?
665デフォルトの名無しさん:04/09/24 21:43:02
>>661
>>663
自動整形機能のあるエディタ使ってないの?
666デフォルトの名無しさん:04/09/24 21:43:26
>>664
そりゃもちろん必要に応じて使うものだが・・
667デフォルトの名無しさん:04/09/24 21:43:54
>>665 分かった分かった。
668デフォルトの名無しさん:04/09/24 21:46:50
>>664
Cはとくにだが、ブロックの頭でまとめて宣言することが多い。それだけ
669デフォルトの名無しさん:04/09/24 22:22:33
>>668
つーかふつうブロックの先頭でしか宣言できんやろ。
670デフォルトの名無しさん:04/09/24 22:25:00
ふつう

# 含蓄あるな・・・
671デフォルトの名無しさん:04/09/24 22:43:24
C99でなけりゃ常にブロックの先頭でしか宣言できんはずだが?
672デフォルトの名無しさん:04/09/24 22:44:21
だから何?
673デフォルトの名無しさん:04/09/24 22:53:05
初心者です。
教則本に則って、ギコ、モナー、ジエンの成績を入力し、合計と平(ry
というプログラムを書いてみたのですが、while()だらけになっちゃいました。
これは格好悪いかな?
初歩はこんなもんかなのな?
674デフォルトの名無しさん:04/09/24 22:54:20
>>673
だらけの程度にもよる
675デフォルトの名無しさん:04/09/24 22:58:27
>while()だらけになっちゃいました

だからってfor()にすんなよ
676673:04/09/24 23:01:01
>>674
まんだらけクラスです
677デフォルトの名無しさん:04/09/24 23:28:04
>>674
処理毎にです。
配列使って、出来るだけ簡潔にしようとしたら大変なことに。
678Ruby最強!!!!:04/09/24 23:38:18
とにかくソースを晒してミンカイ
679 ◆M4.E2.dTu. :04/09/24 23:50:14
でわ後日ネカフェよりうpします。
そんときはよろしくお願いします。
一応仮のトリを
680デフォルトの名無しさん:04/09/25 00:36:01
>>635だが
はっきりいって、大学入試のほうが簡単だったぞ・・・
まじで・・・ちなみに俺のいってた大学は中の上の文学部だ
あんなのは解けん・・・
681デフォルトの名無しさん:04/09/25 00:40:25
>文学部
文系の中でもド底辺じゃんw
682デフォルトの名無しさん:04/09/25 00:45:41
>>680
算数じゃない数学力は超重要
大学出ててこれわかんねーやつ悲惨すぎ
683デフォルトの名無しさん:04/09/25 00:51:57
文学部卒を大卒扱いしちゃダメだろ
684デフォルトの名無しさん:04/09/25 00:54:15
問題を出す側から言わせて貰えば、
解けない問題に直面したときの対応の仕方を観察させてもらういいチャンスな訳です。
#こっちはお茶してられるしね。
解ける能力があるならよし。対処できる能力があるならそれはそれでよし。
#>635の件もそうなのかは知らんが。
685デフォルトの名無しさん:04/09/25 00:56:30
学歴もEランク、適性試験もEランク、書き込み見る限りじゃ人間性もEランク

ここまで徹底している奴も珍しいw
686デフォルトの名無しさん:04/09/25 00:59:04
っていうかハジキの問題って一般教養じゃないの?
大卒って言ったら中学までのことは完璧に出来ないと「マジ?」って思われるよ。
687デフォルトの名無しさん:04/09/25 01:11:53
CでRPG作りたいんですが、正直難しいと思います。
でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド)
ぐらいなら作ったことあります。
今のところ、オープニングまで作ったのですが、どなたか僕に
Cの基礎からすべてを叩き込んでくれませんか??
お願いします。
688デフォルトの名無しさん:04/09/25 01:15:14
女を連れてきてからだ。
689デフォルトの名無しさん:04/09/25 01:18:41
C厨は全員道程
690デフォルトの名無しさん:04/09/25 01:23:18
>>687
人月あたり100万からだねー
691デフォルトの名無しさん:04/09/25 01:24:56
>>689
が何言ってるのかわかりません。
誰か訳して頂けないでしょうか?
ついでに池沼ってどういう意味ですか?
692デフォルトの名無しさん:04/09/25 02:05:03
>>691
○○社の池沼社長のことです。
693デフォルトの名無しさん:04/09/25 02:29:29
>>635
よくわからんけど、小学校からやり直したほうがいいのでは?
694デフォルトの名無しさん:04/09/25 05:09:02
v(^o^i)d
695デフォルトの名無しさん:04/09/25 05:10:43
未経験者OKなところなんてないよ。
696デフォルトの名無しさん:04/09/25 05:22:56
業務経歴なんて誰も調べねえから適当に査証しとけ。
697デフォルトの名無しさん:04/09/25 05:27:30
その代わり相応の実力がないと意味がない。
698デフォルトの名無しさん:04/09/25 06:24:52
うちはマジで未経験者OKよん。
その代わり、1ヶ月社内で研修(≒放置)したあと
人月単価が低い案件に放り込むけど。
699デフォルトの名無しさん:04/09/25 07:49:02
ないよりは良いと思って、今日もご飯を食べるのです。
700デフォルトの名無しさん:04/09/25 08:11:20
コマンドラインプログラムでイベント工藤ってできるのでしょうか?
701デフォルトの名無しさん:04/09/25 08:12:52
できるけど。
702デフォルトの名無しさん:04/09/25 08:19:19
工藤か。マジで200勝で引退なんじゃないかと。
703デフォルトの名無しさん:04/09/25 08:45:29
>>635だが
文学部だが、一応国立なんだけどセンターで数1と数2も受けてきたんだけど
はっきりいって、まじ難しいんだって
704デフォルトの名無しさん:04/09/25 08:49:03
センター試験を元に採用するわけじゃないからなぁ。
705デフォルトの名無しさん:04/09/25 08:57:35
問題言ってみ。
706デフォルトの名無しさん:04/09/25 09:09:32
俺が思うに微分積分の問題とかのほうがはるかに簡単だ
まぁいまじゃそれも全く解けないが、ようは数学って公式とかだろ
その問題も公式さえわかってれば解けるやつばかりなんだよ
俺はもうその手の問題やってないから解けなかったんだけど
まぁはっきりいって、あそこの社長のいやがらせだな。
一緒にうけてたおっさんなんて途中でトイレいったままもどって
こなかったぞ
707Ruby最強!!!!:04/09/25 09:21:02
ここで自分の惨めな体験を垂れ流す理由は何。
708デフォルトの名無しさん:04/09/25 09:21:29
〜だが、〜だが、〜だけど、〜だけど

頭悪そう
709デフォルトの名無しさん:04/09/25 09:26:55
スレ違いな話ばかりだな。
710デフォルトの名無しさん:04/09/25 09:33:20
あの、C言語のソースを書いて、コンパイルしようと思って
コマンドプロンプトを開いたんですけど、cd c:/←このスラッシュの左右逆向きが打てないんですけど
どうやって打つんでしょうか?
711デフォルトの名無しさん:04/09/25 09:36:19
スレ違い
712デフォルトの名無しさん:04/09/25 09:37:45
>>710
どうやって打つんでしょうねぇ。
日本なら cd c:\でもできるよ。
713デフォルトの名無しさん:04/09/25 09:38:18
>>710
=の右
714デフォルトの名無しさん:04/09/25 09:40:26
>>710
715デフォルトの名無しさん:04/09/25 09:42:58
>>710
shiftの左
716デフォルトの名無しさん:04/09/25 09:45:25
どうもです。
\でもできるんですか。
ありがとうございました。
717デフォルトの名無しさん:04/09/25 09:45:54
718デフォルトの名無しさん:04/09/25 10:01:39
>>710
US.BAT
又は
CHCP 437
コマンドを使用する。
719デフォルトの名無しさん:04/09/25 10:10:19
fclose()でsegmentation faultが起きます。
ファイルも存在していますし。fopen()の後
何も入出力をしなくても落ちます。何ででしょう?
720デフォルトの名無しさん:04/09/25 10:13:55
FILE *fp;
fopen("test", "r");
fclose(fp);

と、予想してみる。
721デフォルトの名無しさん:04/09/25 10:21:58
>>718
そんなために chcp するやつはアフォが伝染るからあっち池
722デフォルトの名無しさん:04/09/25 10:23:38
fpがNULLになってないか確認しろ
723719:04/09/25 10:28:16
こんな感じで開いています。

//---- ファイルを指定されたモードで開く関数
int open_file( FILE* fp, char* file_name, char* mode )
{
fp = fopen( file_name, mode );
if( fp == NULL )
die_with_message("file open error");  // メッセージを出力して死ぬ
lockf( fileno( fp ), F_LOCK, 0 );
return 0;
}

入出力なんかも問題なくできます。
なんなんでしょう?
724デフォルトの名無しさん:04/09/25 10:36:53
int open_file( FILE* fp, char* file_name, char* mode )
{
fp = fopen( file_name, mode );

何のためにfp渡してるの?
使ってないじゃん。



関数部
int open_file( FILE** fp, char* file_name, char* mode )
{
*fp = fopen( file_name, mode );
/* 以下同様に *fp */

呼び出し側
FILE *fp;
open_file(&fp, ...

こういう風にしたいの?
725デフォルトの名無しさん:04/09/25 10:41:52
>>721

ププ
726719:04/09/25 10:44:49
>>724
できました。なんか勘違いしてたみたいすね。
助かりました。ありがとうございます。
727デフォルトの名無しさん:04/09/25 14:13:37
C言語の構造体のメンバはデフォルトではプライベートですか?
728デフォルトの名無しさん:04/09/25 14:15:18
>>727
C言語にそんな概念ないよ。
729デフォルトの名無しさん:04/09/25 14:25:59
>>727
あえて言えば全てpublicで、面罵関数を持つことは出来ません。
730デフォルトの名無しさん:04/09/25 14:36:36
>>727
それだとメチャクチャ困るだろw
731デフォルトの名無しさん:04/09/25 14:47:20
>>728-729
あ、そうなんですか
構造体はあるってきいたんで
732デフォルトの名無しさん:04/09/25 15:20:43
>>731
構造体はあるが、メンバ関数なんて概念はないし必然的にprivateって概念もない。
733デフォルトの名無しさん:04/09/25 18:11:16
remove( char* file )に失敗してしまいます。
とりあえず以下は確認しました。
 fileの終端に\nがついていたので\0をつけました
 file はfopen()されていません。
 file をファイル名に持つファイルは存在しています。
 remove()の戻り値は-1です。
 対象となるファイルのパーミッションは644。
 ディレクトリのパーミッションは751。新規ファイルの作成はできます。
どのような原因が考えられるでしょうか?
734デフォルトの名無しさん:04/09/25 18:25:57
>>733
perror()をつかってみたらどうなるの?
735733:04/09/25 18:36:55
>>734
no such file of directry
とでました。うーん。
736733:04/09/25 18:52:40
すみません、ファイルのパスではなく
ファイル名だけでアクセスしていました。
しかもofじゃなくてorだし。
マジですみません。吊ってきます。
737デフォルトの名無しさん:04/09/25 20:08:16
さらにスレ違い。
738デフォルトの名無しさん:04/09/25 20:12:09
さて、どのスレor板が妥当か?
739デフォルトの名無しさん:04/09/25 20:19:49
740デフォルトの名無しさん:04/09/25 20:29:32
>>738
普通にウニ板だろうが、
犬板に隔離措置を希望。
741いなむらきよし:04/09/25 21:14:43
どっちにしろ俺が奇形なのは変わりないキケー!
742デフォルトの名無しさん:04/09/25 22:24:41
構造体について教えてください
743デフォルトの名無しさん:04/09/25 22:26:10






























744デフォルトの名無しさん:04/09/25 22:31:07
>742
クラスからメンバ関数、アクセス指定子、継承などを取り除いたもの
745デフォルトの名無しさん:04/09/25 22:44:02
>>744
クラスについて教えてください。
746デフォルトの名無しさん:04/09/25 22:52:20
>745
C++またはJavaスレで聞いてください
747デフォルトの名無しさん:04/09/25 23:02:38
>>746
おいおい>>745>>744>>742 に対してクラスを使ったから
あえてクラスについて書いたのであって、そういうことではないだろう。
748デフォルトの名無しさん:04/09/25 23:10:36
>>745
構造体にメンバ関数、アクセス指定子、継承などを加えたもの
749デフォルトの名無しさん:04/09/25 23:13:24
>>744>>748をまとめると、構造体は
「構造体にメンバ関数、アクセス指定子、継承などを加えたものから
メンバ関数、アクセス指定子、継承などを取り除いたもの」

らしいw
750デフォルトの名無しさん:04/09/25 23:16:55
ネタにいちいちマジ反応するなよ
751デフォルトの名無しさん:04/09/25 23:21:00
構造体について知りたきゃ本やweb見ろよ。
その上でわからないことがあったら答えるから。
752デフォルトの名無しさん:04/09/26 11:38:21
int hikaku(int a, int b)
{
int z;
if(a>b)z=a;
else z=b;
return z;
}
int main(void)
{
int a, b, z;
printf("aを入力してください\n");
scanf("%d", &a);
printf("bを入力してください\n");
scanf("%d", &b);
z=hikaku(a,b);
printf("大きいほうは%dです\n", z);
return 0;
}

こんなエラーが出ましたが、教えてください
dim03.c 11: Warning: function 'printf' undefined -- assumed to be int
dim03.c 12: Warning: function 'scanf' undefined -- assumed to be int
753デフォルトの名無しさん:04/09/26 11:39:33
#include <stdio.h>
754デフォルトの名無しさん:04/09/26 11:41:34
エラーと警告の区別もつか(略
755752:04/09/26 11:41:47
>>753
初歩的なミスですね^^
ありがとうございました。
756デフォルトの名無しさん:04/09/26 11:43:31
> function 'printf' undefined
コンパイラが吐くメッセージにしてはいいかげんだな。
757デフォルトの名無しさん:04/09/26 11:59:03
(´-`).。oO(“コンパイラが吐くメッセージにしては”?)
758デフォルトの名無しさん:04/09/26 12:07:17
初心者な質問ですみません。基本情報の勉強しててわからなかったので
どうか教えてくださいませ。

main()
{
char *days{}={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
int i;
for(i=0;i<7;i++)
printf("%d:%s\n",i,★);
}

SanからSatまで出力するプログラムなんですが、★にはいるのは
days[i]か*(days+i)になるとのことですが、
%sで出力する場合は文字列の先頭アドレスを指定するんですよね??
それなのに何でdays+iではなく実体を表す*(days+i)になるんですか?

759デフォルトの名無しさん:04/09/26 12:16:23
>>758
days は、文字列のポインタのポインタです。

days   :文字列へのポインタのポインタ

*(days+i):i番目の文字列へのポインタ
*(*(days+i)+j):i番目の文字列の j 番目の文字

days[i]:i番目の文字列へのポインタ
days[i][j]:i番目の文字列の j 番目の文字

最初は混乱するかも知れません。
760デフォルトの名無しさん:04/09/26 12:38:17
>>759

なるほど。ポインタを表すということですか!
*がつくから、*(days+i)はSunやMonなどの直接の
文字列を表すものだと思っていました。
そういうものなんだなぁと割り切って覚えることにします!ありがとうございます!
761デフォルトの名無しさん:04/09/26 12:38:48
char *days[];
と宣言したなら、実体も同じ様に
*days[]
762デフォルトの名無しさん:04/09/26 12:41:25
>>757
define と declare の区別もつか (ry
763デフォルトの名無しさん:04/09/26 12:46:27
764デフォルトの名無しさん:04/09/26 12:53:08
>>758
どうでもいいがそれだとエラーでるぞ。 一応つっこみ
765758:04/09/26 13:14:55
>>764
ですねー。*days{}→*days[]でした。
ポインタ配列むずかしー
766デフォルトの名無しさん:04/09/26 13:19:02
>>758
勉強中ということだが、
文字列リテラルは const であるという突っ込みは入れたほうがいいのだろうか?
767デフォルトの名無しさん:04/09/26 13:23:50
>>766
758を見る限り traditional C を勉強中のようだが
768デフォルトの名無しさん:04/09/26 13:25:42
>>766
何のために?
769デフォルトの名無しさん:04/09/26 22:32:49
言語仕様や『はじめてシリーズ』ではなく、
おすすめの C の問題集があれば教えてください。

770デフォルトの名無しさん:04/09/26 22:45:52
#!/bin/cci
#include <stdio.h>
...
とかやっといてインタプリタで実行してくれる処理系ってないの?
771Ruby最強!!!!:04/09/26 22:46:23
るby!!!!!
772デフォルトの名無しさん:04/09/26 23:42:36
パスが "c:\UNKO\CHINKO\12345678.txt" のテキスト名[12345678]だけを取り出したいの
ですがそのような関数あるのでしょうか?なければどなたか教えてください。
773デフォルトの名無しさん:04/09/26 23:49:34
後ろから '\'および'.'を探せ
strrchr()
774デフォルトの名無しさん:04/09/26 23:52:31
>772
MS系ならsplitpath()
775デフォルトの名無しさん:04/09/27 01:46:08
数値をバイナリに変換したい場合どうすればいいんですかね
776デフォルトの名無しさん:04/09/27 01:49:14
>>775
バイナリ形式でファイルに保存したいってこと?
777775:04/09/27 02:03:13
バイナリ形式というのか...例えば数字が1だったら31に変換して保存したいんですよね。
778デフォルトの名無しさん:04/09/27 02:06:07
わけわかんね。
文字コード?
"0123456789"[number]
ってのが一般的だろうな(numberが一桁の場合)
アスキーでいいなら
number+30 で十分だろ(同上)
779デフォルトの名無しさん:04/09/27 02:25:12
それはバイナリ化ではなく、文字コードの取得というのでは・・・
780デフォルトの名無しさん:04/09/27 03:01:43
>>779 うむw
atoiとかstrtolとか使え。
781デフォルトの名無しさん:04/09/27 05:31:49
C の初歩習ってるところなんですが、
繰り返しでfor文とwhile文ってありますよね
for文でしかできないことってなんですか?
よろしくお願いします
782Ruby最強!!!!:04/09/27 05:34:41
そんなものはない
783デフォルトの名無しさん:04/09/27 06:37:49
ワナビーと言われてよっぽど悔しかったと見えるw

>>781
for (exp1; exp2; exp3) {
 exp4;
}

はつねに

exp1;
while (exp2) {
 exp4;
 exp3;
}

と書き換えることができる。なのでforでできることはwhileでもできる。
784デフォルトの名無しさん:04/09/27 06:42:15
>>781
int i;
for (i = 0; i < N; i++) {
 〜
}

int i = 0;
while (i < N) {
 〜
 i++;
}
こういう具合にforを使っているコードは全てwhileを使うコードに書き換えられる。逆も然り。
785デフォルトの名無しさん:04/09/27 06:52:14
>>781
forは一定の回数繰り返す、whileは条件があっている間繰り返す と
言う感じに使い分けるといいよ。

for (i = 0; i < N; i++)
while (i < N)

の N がループ内で変化しないとき(外で変化するのはOK)はfor、変化するときはwhile。
言語によってはforだとNがキャッシュされてループ内で変更しても
最初のNを使用するのもあるし。
786デフォルトの名無しさん:04/09/27 06:52:29
但し例外があって、

for (expr1; ; expr3) {
 expr;
}



expr1;
while () {
 expr;
 expr3;
}

とは書き換えられない。この場合は

expr1;
while (1) {
 expr;
 expr3;
}

などとする。
787デフォルトの名無しさん:04/09/27 07:00:43
for (exp1; exp2; exp3) {
 exp4;
}
上のコードを下のように書き換えることも。
exp1;
Loop:
if (exp2) {
 exp4;
 exp3;
 goto Loop;
}
788デフォルトの名無しさん:04/09/27 11:32:57
予約語たくさんあるHPあれば教えて下さい。(80ほど)
789デフォルトの名無しさん:04/09/27 11:57:04
>>783-787
お前らconti(略
790デフォルトの名無しさん:04/09/27 14:43:24
continental consaltant
791デフォルトの名無しさん:04/09/27 15:01:57
>>790
consultantだろと小一時間(略
792デフォルトの名無しさん:04/09/27 15:24:36
793デフォルトの名無しさん:04/09/27 16:04:39
exeファイルをエジタに関連付けたら、
エクスプローラでダブルクリックしても
プログラムが動かなくなってしまいました。
どうやって元に戻したら元通りになりますか?
794デフォルトの名無しさん:04/09/27 16:13:48
エジタとは?
795デフォルトの名無しさん:04/09/27 16:19:24
>>793
鼬害
796デフォルトの名無しさん:04/09/27 16:20:54
>>793
Windows板へどうぞ。
http://pc5.2ch.net/win/

>>794
editorじゃないの
797デフォルトの名無しさん:04/09/27 19:45:03
798798:04/09/27 22:38:21
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define POW_OK 0
#define POW_NOTHING 1

int most_simple_algorism(
unsigned long int x,
unsigned long int y,
unsigned long int * n)
{
unsigned long int i;
double p;

if (x == 0 && y == 0) return(POW_NOTHING);
if (x < 2 && y > x) return(POW_NOTHING);

for (i = 0; ; i++) {
p = pow(x, i);
if (p < y) continue;
*n = i;
break;
}

return(POW_OK);
}
799798:04/09/27 22:38:40
int main(
int argc,
char * argv[])
{
int print, ret;
unsigned long int x, y, xm, ym, n;

if (argc < 3) {
printf("usage: %s x y [print]\n", argv[0]);
exit(0);
}

xm = atol(argv[1]);
ym = atol(argv[2]);
print = (argc > 3);

for (x = 0; x <= xm; x++) {
for (y = 0; y <= ym; y++) {
ret = most_simple_algorism(x, y, &n);
if (!print) continue;
printf("%ld^n >= %ld ... n = ", x, y);
if (ret == POW_OK) {
printf("%ld\n", n);
} else {
printf("Nothing!\n");
}
}
}
}
800798:04/09/27 22:40:52
800ゲトー。

高卒で数学の解法もよく分からないので教えていただきたいのですが、
x と y が与えられているときに、x^n <= y を満たす n を求めたいのです。

現時点では >>798-799 の most_simple_algorism で実装している
超初歩的なアルゴリズムしか思いつきません。
for で n を一つずつ増やしていっているだけです。

このコードを Cygwin + Windows 2000 上で実行したところ、

$ gcc myalgo.c && time ./a.exe 100 100000

real 0m12.399s
user 0m12.108s
sys 0m0.015s

という結果になりました。

何かいいアルゴリズムがあれば教えてください。数学関係のキーワードでも構いません。
なにしろ全く想像もつかないので。。。

よろしくお願いします。
801798:04/09/27 22:45:07
あ、あとできれば
n と y が与えられているときに、x^n <= y を満たす x を求める方法
も分かればありがたいなぁ、と。

やりたいことは複数階層のディレクトリを作って
大量のファイルを散りばめたいといったことなんですが、
こういうアルゴリズムを使えれば面白いかな、と思ったわけです。
802デフォルトの名無しさん:04/09/27 22:45:52
(int)(log(y)/log(x))
803798:04/09/27 22:48:47
>>802
ありがとうございます。
それで求まるんですか?
ちょっとウェブで調査してから
コードをいじくってみます。
804798:04/09/27 23:00:19
>>798-799>>802 さんの log を使って書き換えてみました。

< for (i = 0; ; i++) {
< p = pow(x, i);
< if (p < y) continue;
< *n = i;
< break;
< }
---
> *n = (unsigned long int)(log(y)/log(x));

そしたらめちゃんこ早くはなったんですが、

$ time ./a.exe 100 100000
real 0m2.960s
user 0m2.796s
sys 0m0.015s

結果がちょっと変です。

$ ./a.exe 2 10 print
2^n >= 2 ... n = 1
2^n >= 3 ... n = 1 <--- 2 のはず
2^n >= 4 ... n = 2
2^n >= 5 ... n = 2 <--- 3 のはず

なぜでしょう? 私の組み入れ方が間違ってるんだと思いますが。。。
805デフォルトの名無しさん:04/09/27 23:01:49
x^n=y
n=log_x_y
n=(log_e_y)/(log_e_x)
n*log_e_x=log_e_y
log_e_x=log_e_y^(1/n)
x=y^(1/n)
でねーのか?
高校の参考書引っぱり出して計算してみたんだが間違ってるかも。
806デフォルトの名無しさん:04/09/27 23:06:05
x=y*e^(1/n)
807798:04/09/27 23:09:13
>>805-806
こんなの高校で習うんでしたっけ。。。

えーと、具体的にどうコードに落とせばいいんでしょうか。

e って何ですか?
808デフォルトの名無しさん:04/09/27 23:11:41
e=ネイピア数
809デフォルトの名無しさん:04/09/27 23:11:49
>>807
eでググれ
810デフォルトの名無しさん:04/09/27 23:12:51
>>809
あほあほあほ
811デフォルトの名無しさん:04/09/27 23:17:46
>>810
節穴だまれ
812798:04/09/27 23:20:38
>>809
「log 数学」で調べたら分かりました。

http://www8.plala.or.jp/ap2/shinraisei/shinraiseisuugaku.html
e=2.718281828459045...
っていう定数なんですね。まだよく分かりませんけど。

なるほど、こういうときはlogを使えば何とかなりそうだ、
というところまではとりあえずつかめました。
813デフォルトの名無しさん:04/09/27 23:29:18
>>812
>e=2.718281828459045...
>っていう定数なんですね。
…本当に高校出ているのかと。
814805:04/09/27 23:30:30
>>806
見直してみたんだが
x^n<=y
となる最大のxは
x=y^(1/n)
で、eはいらないと思う。
815デフォルトの名無しさん:04/09/27 23:35:45
>798
そもそもおまいさん、言ってることとやってることが違うだべさ。
>800 「x^n <= y を満たす n を求めたいのです。」
>804 「2^n >= 2 ... n = 1」

(log(y)/log(x)) で x^n == y となる n が求まるので int で
切り捨てれば x^n <= y になる。(x>1, y>1 と仮定)
不等号の向きが逆だとおかしいのは当たり前。

なお、x の方は >805 が正しくて >806 は間違い。
つか、n 乗根とれば一発な罠。

数学的な説明としてはこの辺でも見てみれば?
http://ja.wikipedia.org/wiki/%E3%83%8D%E3%83%94%E3%82%A2%E6%95%B0
http://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E9%96%A2%E6%95%B0
http://ja.wikipedia.org/wiki/%E5%AF%BE%E6%95%B0%E9%96%A2%E6%95%B0
816デフォルトの名無しさん:04/09/27 23:38:30
>>814
x^n<=y
から
x<=y^(1/n)
を導くのにあれだけのステップを踏める(しかも結果が合ってる)君に感動した。
817798:04/09/27 23:44:29
分かりました!

>>804は切り上げればよかったみたいです。

< *n = (unsigned long int)(log(y)/log(x));
---
> l = log(y)/log(x);
> *n = (unsigned long int)l;
> if (l - *n > 0) *n += 1;

これで少なくとも x = 2, 0 <= y <= 10 まではうまくいきました。
818805:04/09/27 23:46:54
>つか、n 乗根とれば一発な罠。
気づかなかったよ..orz
つーかアホ棚俺。。
819798:04/09/27 23:49:27
>>815
あれれ? どっちが正しいんだろう。。。

y が合計ディレクトリ数で、x が max_depth で、
n が max_branch だから、、、
max_dir = x^n になるわけで、max_dir >= total_dir
でなきゃいけないから、

・・・すみません。

「x^n <= y を満たす n」

「x^n >= y を満たす n」
の間違いでした。
820デフォルトの名無しさん:04/09/27 23:51:08
yが正ならね。
821デフォルトの名無しさん:04/09/27 23:58:30
n>=log_x_y
822798:04/09/28 00:00:37
じゃあきっと
>>801「n と y が与えられているときに、x^n >= y を満たす x を求める方法」
ってのも

x = (unsigned long int)pow(y, 1/n);

みたいな感じでうまくいくかもですね。
切り上げとか切り下げとかはやってみなきゃ分からないけど。

>>813
高校卒業したけどたぶんlogだのネイピア数だの習ってません。
高校二年のときは一学期100点で三学期0点でしたし、
三年のときはもう数学は捨てることにして、一番簡単な
医療・看護系受験対策用の数学しか選択しませんでしたから。

数学オンチのくせにプログラマ (普段は C++ しか触りませんが)
やってる高卒DQNのしょうもない質問にお答えいただきまして
本当にありがとうございました!
823デフォルトの名無しさん:04/09/28 01:24:14
やってないから知らなくていいとか言う奴師ね
824781:04/09/28 01:37:34
遅くなりましたが、〜787までの方々ありがとぅございました

825デフォルトの名無しさん:04/09/28 02:07:41
>>823
誰もそんなこといってない罠。
826デフォルトの名無しさん:04/09/28 02:11:17
妄想癖キモいね
827デフォルトの名無しさん:04/09/28 02:42:30
unsigned char *buf[] = {
"\xFF\x00\xFF........................."
"..............................................................."
.
.
"...............................................................",
"..............................................................."
.
.
"................................................................",
(中略
};

clコンパイラで /Zm2000 などを指定しても C1063エラー などになってコンパイルできません。
かなり巨大な文字列をコンパイルするにはどうすればよいのでしょうか?
細かくコンパイルしてリンク??
828デフォルトの名無しさん:04/09/28 03:29:55
外部ファイルに出してリンク時にリンカでまとめるとか。
clコンパイラ知らないんで、できるかどうかわからないけど。
829デフォルトの名無しさん:04/09/28 05:11:24
>>828
知らないなら書くなドアホ
830デフォルトの名無しさん:04/09/28 06:42:49
831827:04/09/28 09:17:00
イッテキマス。
832デフォルトの名無しさん:04/09/28 18:48:36
指定のディレクトリ以下のファイルを読み込む方法てありますか?
833デフォルトの名無しさん:04/09/28 18:51:12
あるでしょうけどスレ違いですね
834デフォルトの名無しさん:04/09/28 19:00:42
>>833
相談室いってきます。
835デフォルトの名無しさん:04/09/29 04:51:49
if(...){
aaa();
}

if(...)
{
  aaa();
}
に展開してくれるツールありませんか?
836デフォルトの名無しさん:04/09/29 05:13:13
>>835
unix系ならindentってコマンドがあるはず。
他は知らん。
837Ruby最強!!!!:04/09/29 05:18:31
Rubyで自分で書け。
Ruby!!!!!!!!!!!!!!!!!!!!!!!!!!
http://gnuwin32.sourceforge.net/packages/indent.htm
838デフォルトの名無しさん:04/09/29 05:50:36
>>837
楽しそうだね。おれはRuby使うけど、君には使えそうもないね。
839デフォルトの名無しさん:04/09/29 06:15:14
どこへでも出張してきて迷惑な話だ。
840デフォルトの名無しさん:04/09/29 06:45:30
>>835
高度なオートインデント機能のあるエディタならマクロでも組んで自動化できそうだが。
#少なくともemacs系ならできる。
それはいいが、スレ違いだろう。
841デフォルトの名無しさん:04/09/29 09:38:18
DLLの中に画像ファイルをいれることはできますか
842デフォルトの名無しさん:04/09/29 09:40:20
REN *.bmp *.dll
843デフォルトの名無しさん:04/09/29 10:03:54
>>841
ツールの使い方を知りたいのなら、そのツールのスレへ
C言語から入れる方法を知りたいのであれば、Win32 API スレなどへ
844デフォルトの名無しさん:04/09/29 10:07:42
>>842
.soかもしれないだろ!
845デフォルトの名無しさん:04/09/29 10:18:34
そーですか。
846デフォルトの名無しさん:04/09/29 13:21:27
質問です。

#include <stdio.h>

const char* komastr[2][8]={{
" ", "FU", "KY", "KE", "GI", "KI", "KA", "HI",
"OU", "TO", "JU", "NK", "NG", "", "UM", "RY"},
{"", "fu", "ky", "ke", "gi", "ki", "ka", "hi",
"ou", "to", "ju", "nk", "ng", "", "um", "ry"}};

int main(int argc, char** argv)
{
int i, j;

for (i=0; i<2; i++)
for (j=0; j<2; j++)
printf("%s ", komastr[i][j]);
return 0;
}

(エラーメッセージ)
Error array2d.c: 5 too many initializers
Error array2d.c: 7 too many initializers
2 errors, 0 warnings

それほど多くの要素数でもないのに too many initializers なのは何故でしょうか?
847デフォルトの名無しさん:04/09/29 13:28:10
>>846
2*8しか用意してないのに32個も入れるなよ
それをやるなら[2][16]
848846:04/09/29 13:42:16
>>847
そうでしたorz ありがとうございますm(_ _)m
849デフォルトの名無しさん:04/09/29 13:53:27
"ab"がchar[3]であることには誰も突っ込まないのか?
850デフォルトの名無しさん:04/09/29 13:57:02
「const char*」、アンタバカデスカ
851デフォルトの名無しさん:04/09/29 14:20:58
>>849
そこはおかしいとはいいきれない。

char [2] = "ab";

は正しいから。それが意図してる物かどうかは別として。
2文字分の場所が取られてaとbの文字が順番に入ってる配列が定義される。
852デフォルトの名無しさん:04/09/29 14:26:01
それ以前にchar型へのconstポインタの二次元配列だから
853デフォルトの名無しさん:04/09/29 15:39:35
#include<stdio.h>

int main(void)
{
int min = 5 ;
int max = 10 ;
int input ;

printf( "Plese input \"0\" or \"1\" ! \n" );
scanf("%d",&input)

if( input )
#define CHANGE <
else
#define CHANGE >

if( min CHANGE max )
printf("MAIN\n");
else
printf("__NO__\n");

return 0;
}

もちろんエラーですが、こういう事をやりたいんです。
入力した数字によって、ある部分を置き換える処理…
なんとかできませんでしょうか? どなたか知恵をお貸しください。
onegaisimasu
854デフォルトの名無しさん:04/09/29 15:42:46
激しくネタっぽい
855デフォルトの名無しさん:04/09/29 15:49:19
大真面目ですが…
当たり前の事で低級な質問だったとしても、
聞かなきゃわからないこともあると思うんです。
856デフォルトの名無しさん:04/09/29 15:53:17
インタプリタなら出来る道もあるんかね
まぁ、やりたい事は条件分岐で実現出来ないのかと疑問だがね
857デフォルトの名無しさん:04/09/29 15:55:04
inputの値によってmaxとminを交換して<(か>)で比べればいい。
858デフォルトの名無しさん:04/09/29 16:04:01
if ( (max-min)*(input*2-1)>0 ) printf("MAIN\n");
859デフォルトの名無しさん:04/09/29 16:08:23
int cmpflg;
int cmp(int n1, int n2)
{
    return cmpflg ? n1 < n2 : n1 > n2;
}

inta main()
{
...
if( input ) cmpflg = 1;
else cmpflg = 0;

if(cmp(min, max))
printf("MAIN\n");
else
printf("__no");
return 0;
}
860デフォルトの名無しさん:04/09/29 16:13:56
質問です。
以下のページを参考にlinuxでシリアル通信を行っています。
http://www.linux.or.jp/JF/JFdocs/Serial-HOWTO.html

受信データが空の状態でread()してしまうとその部分でロック
してしまいます。read()せずにデータが来ているかどうか(でき
れば何バイト来ているか)調べるにはどうすればいいのでしょう
か?

よろしくお願いします。
861デフォルトの名無しさん:04/09/29 16:16:04

う〜ん、、、純粋な文字置換はやっぱ無理っぽいですね。
けど、こんな馬鹿な質問に答えていただきありがとうございました。
嬉しかったです。
862デフォルトの名無しさん:04/09/29 16:16:04
> GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
863デフォルトの名無しさん:04/09/29 16:44:30
>>861>>862
実況スレ並の同時書き込みだ。
864hana:04/09/29 17:49:44
for(i=0;i<=X_NO;i++)
for(j=0;j<=Y_NO;j++){
if( a > b)
printf("big\n");
}else if ( b < a ){
printf("small\n");
}
}

このプログラムだと、for文が画像を一点ずつ読んでいるため
SMALLがいくつも表示されてしまうのですが、
これを ひとつの表示にまとめたい場合 どうすればいいですか?
865デフォルトの名無しさん:04/09/29 17:59:30
>>864
人に説明する気はあるのかね
866デフォルトの名無しさん:04/09/29 17:59:59
867hana:04/09/29 18:05:02
すいませんでした移動しました
すれ違いでしたか、、、
868デフォルトの名無しさん:04/09/29 19:45:10
>>867
つまり君がその問題ごと悩んでいる点を全てさらけ出せって言ってるんだよ.
言ってる意味が分からんのだよ
>>860
forkしたら?
870860:04/09/29 20:53:11
>869
fork()ですか・・・。もっと簡単に、関数の返値で受信サイズ調べられるとうれしいんですが・・・。

>862
逝ってきます。

ありがとうございました。
871デフォルトの名無しさん:04/09/29 21:31:04
文字列変数に別の文字列変数から代入するにはどうすればよいのでしょうか?

#include<stdio.h>

void main()
{
char a[4][5];
char b[4][5]={"ぬる","ぽガ","っ!","!!"};

a[0] = b[0];
}
とすると一番下の式の左辺に値が必要というエラーがでます。
872デフォルトの名無しさん:04/09/29 21:35:03
>871
フツーにstrcpy()では?
strcpy(a[0],b[0]);
873デフォルトの名無しさん:04/09/29 21:36:30
for(i=0;i<4;i++)strcpy(a[i],b[i]);
874デフォルトの名無しさん:04/09/29 21:37:50
>>871
配列=ポインタと思ってるだろ
875デフォルトの名無しさん:04/09/29 21:41:04
>>874
いや、始めたばっかだからポインタは詳しくやってない。
ポインタ使わないとダメなんですね、
>>872-874
ありがとう!
876デフォルトの名無しさん:04/09/29 23:55:54
お前らCで配列の代入が出来ない理由知ってるやついますか?
サイズが同じ配列へなら代入してもかまわんと思うが。
関数から返せないのも痛すぎる。
構造体に入れれば出来るというのがわけわからん・・・。
今まで出来なかったことを出来るようにするだけだから仕様変更しても誰も困らんと思うし・・・。
実はC99では出来るようになってたりするのか?
877デフォルトの名無しさん:04/09/29 23:58:20
ソフトしかわからん奴の限界
878こちらへ誘導されたので:04/09/30 00:04:42
C言語初心者です。
すいませんどうか助けてください。

ファイルから読み込みそれを別にファイルに書き込む基本的なことしてるんですが、
条件がありまして、
@fgetc(fp)で順次読み込んだ文字がリターンキーなら次に文字を見る。
Aその文字が 0 〜 9 か 'ー' 〜 '九' ならファイルをcloseする。

という仕様なんですが文字列操作がうまくいきません。
かな文字や関数字の判定ができません。
イメージとしては

while ((ch = fgetc(fp)) != EOF)
{
fputc(ch,fwp);

if (ch == 13) ← リターンキーのasciicode
{
ch = fgetc(fp); ← これで次にすすめているのか怪しい

以下不明・・
}
}

すいませんが文字をすすめたり漢数字の'一'判定のために
どのようなコードを書けばよいかわからないので
どなたか教えてください・・
879こちらへ誘導されたので:04/09/30 00:07:56
すいません
条件Aの修正。
Aその文字が 0 〜 9 か 'ー' 〜 '九' ならリターンキーに戻って
fcloseです。

880デフォルトの名無しさん:04/09/30 00:24:01
>>876
ポインタの代入ができなくなるからダメ。
881デフォルトの名無しさん:04/09/30 00:25:48
>>860
ああ、おいらも同じ問題で困ってた。ちょっと調べたところ
CTS信号の状態をみればデータが来てるかどうか分かるらしいんだけど
CTSがHiになってるときにreadするようにすればいいんだろうか?
882デフォルトの名無しさん:04/09/30 00:29:38
Bその文字が 0 〜 9 か 'ー' 〜 '九' でなかったらそのまま
読み進める、でいいの?
だったら break を使えばいいのではないかな。思いつきだけど。
文字コードが数字であり、尚且つ連番になってることを利用する。
while ((ch = fgetc(fp)) != EOF) {
//リターンキーの場合
if (ch == '\n') {
ch = fgetc(ch, fwp); //次の文字を読む
//終了条件チェック。真なら終了。
if ((ch >= '0' && ch <= '9')
|| (ch >= 'ー' && ch <= '九')) {
break;
//続く場合は処理続行
} else {
fputc('\n', fwp);
fputc(ch, fwp);
}
//リターンキーでない場合
} else {
fputc(ch, fwp);
}
}
fclose(fp);
fclose(fwp);
883デフォルトの名無しさん:04/09/30 00:33:46
ごめん、fgetc() の引数はファイルポインタだけだった(fgets() しか
つかってないからつい)。
あと、終了のbreak;の前に fputc('\n', fp); で改行はしておかない
といけないのかな。
884デフォルトの名無しさん:04/09/30 00:34:57
>>882
> ch = fgetc(ch, fwp);
fgetcってこんな引数だったっけ?

> || (ch >= 'ー' && ch <= '九')) {
これって、成立することあるの?
885デフォルトの名無しさん:04/09/30 00:38:59
>881
このスレで聞いてどうするという気もするしもっとローレベルな話なのかもしれないが、
ノンブロックモードは助けにならんかい?
ttp://www.linux.or.jp/JF/JFdocs/Serial-Programming-HOWTO-3.html#ss3.3
886デフォルトの名無しさん:04/09/30 00:41:10
>>884
漢数字の「一」(いち)じゃなくて音引きの「ー」でいいのかなあ…
いや、元の質問からそうなんだけど。
887881 :04/09/30 00:49:17
>>885
すいません、すれ違いだとは思ったんですが同じような疑問持った人のレス
があったもんで。ちなみにこの手の質問はどのスレが適当なんでしょうか?
888デフォルトの名無しさん:04/09/30 00:56:30
>887
多分ここ↓
UNIXプログラミング質問すれ Part4
ttp://pc5.2ch.net/test/read.cgi/tech/1095843584/

もしくはここ↓
【初心者歓迎】C/C++室 Ver.9【環境依存OK】
ttp://pc5.2ch.net/test/read.cgi/tech/1094494997/
889888:04/09/30 00:59:51
>887
場合によってはここ↓かもしれない
制御系なら俺に聞いてもいいぜ(5)
ttp://pc5.2ch.net/test/read.cgi/tech/1079102543/
890887:04/09/30 01:00:06
>>888
Linux板はチェックしてたんですがUNIX板の方にプログラムスレがあったとは
気づきませんでした。有難うございます。
891デフォルトの名無しさん:04/09/30 01:00:35
>>878
nkf -w を噛ませた上で
Javaを使う。
893デフォルトの名無しさん:04/09/30 01:06:42
>890
残念、そこはム板のUNIXスレだ。
894デフォルトの名無しさん:04/09/30 01:14:05
>>882
文字コードをそのままあつかわない方がよいよ
895デフォルトの名無しさん:04/09/30 11:38:31
>>894
扱わないほうがいいとかいうレベルじゃなく
>(ch >= 'ー' && ch <= '九')
ぶっちゃけありえな〜い。
896デフォルトの名無しさん:04/09/30 12:00:56
いや、ありうるだろ
897デフォルトの名無しさん:04/09/30 13:10:46
>>896
意味無いけどな。
898デフォルトの名無しさん:04/09/30 13:12:05
一や九が2byteな環境なら、その式だけ抜き出せばアリかもしれんが、
getcでナニを受け取る気だという意味でアリエナーイ
899デフォルトの名無しさん:04/09/30 13:16:35
べつにcharsetのいかんによっては、ありうるかもしれん
ってことだろ
900デフォルトの名無しさん:04/09/30 13:42:53
'九' の型が unsigned int になるなんて知らなかった…。
型は環境にもよるんでしょうけど。 というか、'' の中には
1バイト文字を1文字しか入れられなくて、 Cでは常にintで
文字コードが返されるもんだと思ってた。 1文字どころか
'ab'なんてのも許されるんですね。この場合エンディアンの
影響も受けるんですかね。''がよく分からなくなってきた。
901デフォルトの名無しさん:04/09/30 15:18:20
902デフォルトの名無しさん:04/09/30 18:13:44
>>900
一応、ANSI だと
  ・単純文字定数は int 型。
  ・1バイトを超えるときの値は、処理系定義。
因みに fgetc は
  ・ストリームから文字を unsigned char 型として取り出し
  ・int に変換して戻す。
903デフォルトの名無しさん:04/09/30 18:50:59
fgetcたん萌え
904デフォルトの名無しさん:04/09/30 21:22:19
VBとかにあるタイマーコントロールをCで実現するにはどうすりゃいいの?
905デフォルトの名無しさん:04/09/30 22:10:16
fopenでweb上のファイルって開けますか?
906デフォルトの名無しさん:04/09/30 22:22:50
>>904
Win32環境ならSetTimer()で。

>>905
できない。
907905:04/09/30 22:29:15
>>906
やっぱできないですか。Cでweb上のファイルを開くやり方ってあるんでしょうか?
908デフォルトの名無しさん:04/09/30 22:36:32
本当はSafeStrでも使えばいいんでしょうけど、
とりあえず社内で使うテストツールということで、
簡易的なチェックを入れることにしました。
あふれそうだったら不正な値なのでエラー終了決定です。

で、こんなの作ってみたんですけど・・・。

#define my_strcat(tgt_char, const_char, max_size) \
assert(strlen(const_char) <= max_size - strlen(tgt_char)); \
strncat(tgt_char, const_char, strlen(const_char));

#define my_strcpy(tgt_char, const_char, max_size) \
assert(strlen(const_char) <= max_size); \
strncpy(tgt_char, const_char, max_size);

char foo_str[MAX_FOO];
char tmp[MAX_NUM]; /* あくまで例です */
snprintf(tmp, MAX_NUM, "%d", num);
my_strcpy(foo_str, "test number=", MAX_FOO);
my_strcat(foo_str, tmp, MAX_FOO);
my_strcat(foo_str, "\n", MAX_FOO);

こんな感じにしてるんですけど、変なところありますか?
あと、あまり複雑or大規模にならずにもっとうまい方法があれば
ご教示いただけますか?

よろしくお願いします。
909デフォルトの名無しさん:04/09/30 22:36:53
C言語なら(ちょっとは調べてから)俺に聞け! Part 91
910デフォルトの名無しさん:04/09/30 22:42:49
>>906
出来ないとは限らないぞ。
出来る環境があるとは思えないが。
911デフォルトの名無しさん:04/09/30 23:04:11
VBなら・・・
912デフォルトの名無しさん:04/09/30 23:45:32
質問なんですが、VC++ってネットにつながないと使えないのですか?
913デフォルトの名無しさん:04/09/30 23:46:09
>>908
そのマクロ、if や else の後ろで { } なしに使っちゃダメだぞ!
それと、戻り値を見てもいけない!お兄さんとの約束だ!
914デフォルトの名無しさん:04/09/30 23:48:19
>>912
そんなこたぁない。
915デフォルトの名無しさん:04/09/30 23:48:20
>>912
そんなこたーない
916デフォルトの名無しさん:04/09/30 23:49:35
>>914
>>915
幸せになってね
917デフォルトの名無しさん:04/09/30 23:51:01
(´-`).。oO(危うく「そんなこたーない」って書いたのを送信するところだった…)

>>912
詳しくは
  ★初心者にVisual C++を教えるスレ★ Part14
  http://pc5.2ch.net/test/read.cgi/tech/1093672937/l50
で訊くよろし。
ところで、
  1. >1 なんか読んでいない。
  2. >1 は読んだが、意味が解らなかった。
  3. スレ違い上等!
どれ?
918デフォルトの名無しさん:04/10/01 00:34:34
while((cGet = fgetc(fp)) != EOF)

で、ファイルポインタであるfpのアドレスがずっと不変なのはなぜですか?
次々文字を読み込むからfpのアドレスが進んでいると思ったのに実際は違っていました。
ということはfpのなかにあるポインタらしきもののアドレスが動いているということなのかな?
教えて天才さん。
919Ruby最強!!!!:04/10/01 00:36:47
rruuuuuuuuuuuuuuuuuuuuuuuuuubjjjjjjjjjjjjjjjjidffffffffffuuuuuuuuuuuuuuuuuuuuddiiiyyyyyyyyyyyyyyyyyyy
920デフォルトの名無しさん:04/10/01 00:37:14
>>918
ファイルポインタは何だか分かってますか
921デフォルトの名無しさん:04/10/01 00:43:52
fopenしたファイルの中の文字列だとおもって早3年。

実際はどーゆーもんですか??
922デフォルトの名無しさん:04/10/01 00:51:54
VCでは

struct _iobuf {
    char *_ptr;
    int _cnt;
    char *_base;
    int _flag;
    int _file;
    int _charbuf;
    int _bufsiz;
    char *_tmpfname;
};
typedef struct _iobuf FILE;

こんな感じ。
923デフォルトの名無しさん:04/10/01 00:52:45
>>921
ファイルを指すポインタです。
924デフォルトの名無しさん:04/10/01 01:10:23
>>918
おまえが言っているファイルポインタはFILE型構造体へのポインタではないのかと
925デフォルトの名無しさん:04/10/01 01:30:02

                 , ─ヽ
________    /,/\ヾ\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|__|__|__|_   __((´∀`\ )< 結局・・・わかりやすく説明してくれる神は現れなかったとさ。
|_|__|__|__ /ノへゝ/'''  )ヽ  \_____________________
||__|        | | \´-`) / 丿/
|_|_| 从.从从  | \__ ̄ ̄⊂|丿/
|__|| 从人人从. | /\__/::::::|||
|_|_|///ヽヾ\  /   ::::::::::::ゝ/||
────────(~〜ヽ::::::::::::|/ 

926デフォルトの名無しさん:04/10/01 01:39:31
独習Cで勉強してるんだけど、練習問題が面倒で解く気しない。
こんな場合、さっさと次の単元に進んじゃっていいのかな?
927デフォルトの名無しさん:04/10/01 01:48:38
>>926
まあそういわずやってみれ。
その本は読んだことないから一般的なことしか言えんが、
そこでやったことを理解できてるかどうか計る目安になる。
読む速さを競ってるわけじゃないんだから一旦立ち止まってみれ。

「こんな問題簡単ジャーン、なんかやる気しねーなー、もう頭に答浮かんでるし」
と思って実際に解こうとしたら意外な伏線があったりしててこずったりするもんだ。
928デフォルトの名無しさん:04/10/01 02:09:22
>>926
練習問題そのままは(たいがいつまらないから)やらなくていいと思うけど、
自分流にアレンジして見ると面白くなる。
萌オタなら萌える問題に勝手に書き換えてみ。
創造的な学習は上達も早い。
929デフォルトの名無しさん:04/10/01 03:04:57
 |<memory>
 │
 │          (1)確保           (2)確保
 |            FILE構造体の実体   読み込みbuffer
 | fp ← fopen() ←┌───────┐ ┌→┏━━━━━━━━┓
 |   (4)返却    ├            ┤  │ ┃            ┃
 |           ├ (3)初期設定 ←┼─┘ ┃            ┃
 |           ├  関連付け等 ┤    ┃            ┃
 |            ├           ┤    ┃            ┃
 |           └───────┘ .   ┃            ┃
 |                            ┃             ┃
 |                            ┗━━━━━━━━┛
 │

>>925
じゃ、大雑把に教えてヤル。イメージはこんな(↑)感じ。

fopen()を呼ぶと、メモリのどっかにFILE構造体の実体(細い□)と読み込みバッファ(太い□)を
確保して、FILE構造体にもろもろ情報をセットしてから、その先頭アドレスを返す。(1)〜(4)
んでfgetc()やfgets()などを呼ぶと、適宜ファイルの内容を読み込みバッファに読み込みつつ
そこから文字(列)を拾って、FILE構造体の中の変数を更新して返す。

ネ?fpに入れたポインタ、つまりFILE構造体の実体の先頭アドレスがコロコロ変わるハズが無いでしょ?
930デフォルトの名無しさん:04/10/01 06:22:59
ヘッダ覗けば解る事を「教えて」とか言う人には
説明してもわからないでしょ。
931デフォルトの名無しさん:04/10/01 14:31:41
非論理的。
932900:04/10/01 16:03:23
>>902
なるほど、1バイト以上の文字を囲んだ場合は処理系定義
(implementation-defined?)なんですね。移植性は失われると
933デフォルトの名無しさん:04/10/02 00:37:52
>>907
socketでソケットをオープンしてHTTPリクエストを送り、HTTPレスポンスヘッダを読み終えた直後で
fdopenするという方法は?
934デフォルトの名無しさん:04/10/02 01:19:25
そもそも文字が1バイトかどうかが処理系定義じゃないか?
935デフォルトの名無しさん:04/10/02 01:25:18
918の人じゃあないけど、お陰様で思わぬお勉強になりました。
自分はFILEポインタなんて弄くった事のない厨房です。今日初めて使ってみました。
で、ひとつちょっとした疑問が浮かんだんですけど、fscanf()呼ぶと\nとかの改行まで
読み込んでくれるんですか?
レベルの低い質問ですみません。
936デフォルトの名無しさん:04/10/02 01:29:57
そりゃ指定したフォーマットに従って読み込みますわな、
そういう関数なんだし。
937デフォルトの名無しさん:04/10/02 01:38:12
なるほど。もう少し突っ込んだ質問をさせてください。
ちょっと迷惑ですが、ソースを投下します。

#include<stdio.h>
void main( int argc ,char **argv )
{
FILE *sfp ,*lfp ;
char st[200] ;
if( argc < -1 )
{
printf( "ドラッグしな!" ) ;
}
else
{
sprintf( &st[0], "%s.bak" , *(argv+1) ) ;
lfp = fopen( * ( argv+1 ) ,"r" ) ;
sfp = fopen( &st[0], "w" );
while( fscanf( lfp, "%s" ,&st[0] ) != EOF )
{
fprintf( sfp, "%s\n", &st[0] ) ;
}
fclose( sfp ) ;
fclose( lfp ) ;
}
}
938デフォルトの名無しさん:04/10/02 01:45:27
void main はちょっと恥ずかしいかもしんないけど。
で、>>937なんですけど、確か1年前学校で習いました。
作ったって言ってもそれ引っ張り出して、ちょっと改良しただけですけど、

学校ではこう習いました。

 fscanf( lfp, "%s" ,&st[0] で、\0まで文字列を読み込んで、
 fprintf( sfp, "%s\n", &st[0]  で、●●.bak(ファイル名)に書き出す。
そんで、lfpが次の行に移動して、また\0まで読み込んで、を繰り返す。

 けど、これでは明らかに説明の食い違いを感じましたのです。
 918の人もきっと同じような解釈をしていたという事でしょうか。

結論として、lfpが次の行に移動するわけではなく、\nを読み込んで
次の行に行くって事で良いですか??
長文・・・どうか大目に見てください。
 
939デフォルトの名無しさん:04/10/02 02:03:54
 
printf( "ドラッグしな!" ) ; ←自分用に作ったんでこうなってます(鬱

俺の解釈・・・間違ってますか?
先生に習った解釈をかえるのって結構不安なんですょ。
最後の頼りになるはみなさんの意見や指摘だけ。
 
940デフォルトの名無しさん:04/10/02 02:10:40
それはストリームの概念が理解できていないのではないか?
[00][01][02][03][04][05][06][07][08][09][10][11][12][13][14][15]...
このような情報の「流れ」(まさに「ストリーム」)を考える。最初に[00]を読む。
一度[00]を読むと次は[01]の順番。[01]を読んだら次は[02]の順番。FILE
構造体にはこのような、次に読み取る位置の情報が記憶されていると思えば
いい。(実際、手元の実装では、struct FILEにpositionというフィールドがある。)
fscanfはこの読み取り位置を更新する。実際にファイルポインタのポインタと
しての値を操作しているわけではない。だから*lfpは更新されているけれども
lfpは変わらない。
941デフォルトの名無しさん:04/10/02 02:16:39
if( argc < 2 )
942デフォルトの名無しさん:04/10/02 02:22:31
>>937
> lfpが次の行に移動するわけではなく、\nを読み込んで
> 次の行に行くって事で良いですか??
まぁそう。
つか、マニュアルにどういう動きをするのかきちんと書いてある。
「先生に習った解釈では〜」とか言う前に、まずマニュアルを参照すること。
943デフォルトの名無しさん:04/10/02 02:24:43
なるほど。おっしゃるとおりでストリームって概念が自分は理解できていなかったようで。。。
いま初めて聞きました。
読み込んだデータをズラーっと横に並べる感じかとイメージしている現在です。
ということは、読み込むbufferの領域は結構でかそうですね。
なにはともあれ、少々勉強不足の気がいたします。
貴重な解説ありがとうございました!
あと自分は環境を明示してなかったけど、VCです。インクルードファイル調べたら>>922
と同じのがありました。
見てもあんまわからなかったけど、次に調べるべきキーワードとか発見できてよかったっす。m(._.)mペコ
944デフォルトの名無しさん:04/10/02 02:31:12
>>942
そうですね、返す言葉もないっす。次から・・・というか、気をつけるようにはしています。
けどマニュアルってなんかわかりにくいです(;´Д`)
慣れるまで辛そうですが、頑張ってみます^^
お二方ともアリガトウです!!
945デフォルトの名無しさん:04/10/02 02:48:40
>>943
ただ、インクルードファイルの内容を前提にプログラム組むなよ。
FILE構造体のメンバに直接アクセスしようとは思わないことだ。
946デフォルトの名無しさん:04/10/02 03:19:01
mallocで取得したメモリー領域は4バイトアラインメントだと思っていたんですが、
ググってたら、 GNU libc のmalloc() は常に 8 バイトにアラインメントされたメモリアドレス
を返すとありました。でも
typedef struct {
int a;
int b;
char c;
} tmp_t;

とやって printf("%d\n", sizeof(tmp_t))
とやると12バイトと表示されます。
8バイトアラインメントだとすると16バイトになる気が
するのですが、これはやっぱり8バイトアラインなんでしょうか?
947デフォルトの名無しさん:04/10/02 03:24:00
その構造体とmallocって関係あるの?
948デフォルトの名無しさん:04/10/02 03:26:07
mallocが8バイトアラインメントの領域のアドレスを返すということと、
スタックに確保した自動変数領域がそのように確保されるかどうかと
いうのは別の話なのでは?
949デフォルトの名無しさん:04/10/02 03:28:02
>>946
mallocと全く関係ない。
> とやって printf("%d\n", sizeof(tmp_t))
> とやると12バイトと表示されます。
構造体のアライメントが4バイト単位だったということだろう。
950946:04/10/02 03:33:25
>>947-948
ああ何か混乱して書いてました、すみません。
tmp_t*p = (tmp_t*)malloc(sizeof(tmp_t));
した時、 sizeof(tmp_t)で計算された12バイトという値がmalloc
に渡ったとします。その場合、malloc(12)は 16バイト分の
メモリ領域を取り、その先頭ポインタをpに返すという事になる
のでしょうか?
951デフォルトの名無しさん:04/10/02 03:40:03
>>950
先頭アドレスが8で割り切れるように12バイト分のメモリ領域を取り、
そのアドレスを返す。13バイト目移行のアクセスによる影響は不定。
952946:04/10/02 03:41:52
>>951
どうもありがとうございます。大変良く分かりました。
953デフォルトの名無しさん:04/10/02 09:55:58
関数からの返り血を2つ3つに増やせませんか?
954デフォルトの名無しさん:04/10/02 09:58:09
>>953
増やせません
引数をポインタで渡すか、グローバル変数を使うしかして
955デフォルトの名無しさん:04/10/02 10:01:45
構造体じゃだめなん?
956デフォルトの名無しさん:04/10/02 10:03:08
てかね、「関数」の定義って数学ではそういうもんですから。
その意味では関数、というかfunctionてネーミングはぴったし。
957デフォルトの名無しさん:04/10/02 10:15:11
別に、一つの関数で二つ以上の値が決定してもいいんじゃ?
直積を考えれば一つになるけど。
958デフォルトの名無しさん:04/10/02 10:17:10
>>953
仮にそのようなことが出来たとして、

x = f(a); /* f(a) は 2 と 3 を返す関数 */

って書いたとき、x には何が入れば気が済むの?

(しかし、世の中には2つや3つどころではなく、
無限の返り血を持つ関数を作る事が出来る言語が
あるのも事実だけどな)
959デフォルトの名無しさん:04/10/02 10:18:49
>>958
リスト形式で。
960デフォルトの名無しさん:04/10/02 10:19:43
(x, y) = f(a);
きっとこんな感じ
961Ruby最強!!!!:04/10/02 10:24:30
Rbuby ,?>>>>>>>>>>>>>>>>>>>>>>>>>」Cghengpo えっっっっっっっっw
Rbuy細工世婦!!!!!!!!
Rubysaikyou !」

Rubyty!!!!!!!!
962Ruby最強!!!!:04/10/02 10:26:44
誇らしいですね。Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>Ruby .?????????>>>>>>>>>>>Ruby!
963デフォルトの名無しさん:04/10/02 10:38:09
>>Ruby厨
作者が異常なまでにプライド持っている言語は
ユーザまでその言語を崇拝しだすのか。
964デフォルトの名無しさん:04/10/02 10:38:55
>>959
ではリストを一つ返せばいいのでは?

返り血一つで足りるだろ?
965デフォルトの名無しさん:04/10/02 10:42:40
>>963
961=962=963
荒らしたいだけの無能
966Ruby最強!!!!:04/10/02 10:44:46
Rubyのためなら死ね
967デフォルトの名無しさん:04/10/02 11:16:51
自分が何がわからないのかわかりません。
どうしたらいいですか?
968デフォルトの名無しさん:04/10/02 12:05:47
究極の質問にこたえてくだちいこのボケども

float a;
float b;
float c;

と延々とかくのと

float a,b,c,・・・;

と書くのはどっちが良いのか教えてくれにょ
どちらもかわらないのかにょー?
969デフォルトの名無しさん:04/10/02 12:08:08
>>968
あんたはどっちがいいと思うんだ?
先ずはそれを聞かせてもらおうじゃないか。
970デフォルトの名無しさん:04/10/02 12:09:20
時と場合に寄りますが何か?何か問題でも?
971デフォルトの名無しさん:04/10/02 12:11:48
>>968
まとまりごとに書くのがよろしい。
ただし、ポインタは一行ごとに書くのがよろしい。
このようなコーディングルールは必ず定めるようにしましょう。
また、定められたコーディングルールには必ず従いましょう。
float count1, count2;
float a, b, c;
float tmp;
float x, y;
float* test1;
float* test2;
float* test3;
972デフォルトの名無しさん:04/10/02 12:20:04
>>969-971
ちゃんと答えてくださいボケども
973デフォルトの名無しさん:04/10/02 12:21:03
こういうのはやめて欲しい。
float count1, count2,
   a, b, c,
   tmp,
   x, y,
   *test1, *test2, *test3;
#実際いるんだ。10年選手なんかで。
974デフォルトの名無しさん:04/10/02 12:23:47
cで読み込める最大テキスト量って決まってるんですか?
975デフォルトの名無しさん:04/10/02 12:26:34
>>974
No
976デフォルトの名無しさん:04/10/02 12:33:40
>>974
無限のテキストでも対応可能です。
977デフォルトの名無しさん:04/10/02 13:20:24
>>973
止めて欲しいなら直接言えよ。

言えないのか?(w
978デフォルトの名無しさん:04/10/02 13:26:50
>>977
>973ではコメントしなかったが、その10年選手には指摘したよ。
その他のごみためのようなコーディングスタイルと併せて。
979デフォルトの名無しさん:04/10/02 13:37:48
LPFLOAT test1, test2, test3;
980 ◆FIcNi4f8js :04/10/02 13:53:59
>>973
countをfloatで宣言してるのはどうかと思う。
981デフォルトの名無しさん:04/10/02 14:02:24
>>980
>971に言ってくれ。
982デフォルトの名無しさん:04/10/02 14:52:06
983デフォルトの名無しさん:04/10/02 16:54:07
>>971
>float* test1;

うわ、キモ!
ホントに居るんだ、こんな書き方するやつ。
984デフォルトの名無しさん:04/10/02 17:03:51
わざわざ auto をつけてる人いますか?
985デフォルトの名無しさん:04/10/02 17:12:29
* auto テレポーター *
986デフォルトの名無しさん:04/10/02 17:14:44
いしのなかにいる
987デフォルトの名無しさん:04/10/02 18:14:01
>>984
おれおれ
988デフォルトの名無しさん:04/10/02 18:14:22
>968
WIZネタかよw
989974:04/10/02 18:19:22
975,976ありがとうございます。
ショボノートPCで1GBほどよませるよていです。
990デフォルトの名無しさん:04/10/02 18:21:39
#include<stdio.h>
int main(void)
{
int *p,*q;
int a,b,c;
printf("数A:");
scanf("%d",&a);
printf("数B:");
scanf("%d",&b);
p=&a;
q=&b;
c=*p;
*p=*q;
*q=c;
puts("2つの値を交換しました");
printf("数A:%d\n数B:%d",a,b);
return(0);
}

ポインタを使って2つの数字を交換するCプログラムなんですけど、
これ以上工夫する事は出来ますか?教えてください。
991デフォルトの名無しさん:04/10/02 18:25:48
int a, b, c;
c = a;
a = b;
a = c;
992991:04/10/02 18:26:21
しまった、見間違えた。
忘れてくれ。
993デフォルトの名無しさん:04/10/02 18:28:06
>>989
お好きにどうぞ。
C言語では扱えるけど、君のマシンのメモリが足りない可能性はあるよね。
994デフォルトの名無しさん:04/10/02 18:44:10
>>990
#include<stdio.h>
int main(void)
{
int *p,*q;
int a,b,c;
char s[]="数A:";
char t[]="数B:";
char u[]="2つの値を交換しました";
char v[]="%d";
char w[]="%s%s";
char x[]="\n";
char y[256];
char z[256];
printf(s);
scanf(v,&a);
printf(t);
scanf(v,&b);
p=&a;
q=&b;
c=*p;
*p=*q;
*q=c;
puts(u);
sprintf(y,w,w,x);
sprintf(z,w,y,w);
sprintf(y,z,s,v,t,v);
printf(y,a,b);
return(0);
}
995デフォルトの名無しさん:04/10/02 19:07:09
#include<stdio.h>
#define p printf
#define s scanf
main(){int a,b;char*x="数A:",*y="数B:";return p(x),s("%d",&a),p(y),s("%d",&b),p("2つの値を交換しました\n%s%d\n%s%d",x,b,y,a),0;}
996ビル・ジョブス:04/10/02 19:40:16
#include<stdio.h>
int main(void)
{
int a, b;
int *pA = &a,*pB = &b;
printf("数A:");
scanf("%d", pA);
printf("数B:");
scanf("%d", pB);
*pA ^= *pB;
*pB ^= *pA;
*pA ^= *pB;
printf("2つの値を交換しました\n");
printf("数A:%d\n数B:%d\n", a, b);
return 0;
}
997ビル・ジョブス:04/10/02 19:46:51
a,bがunsignedじゃないからダメダメですね。oO
逝ってきます。
998デフォルトの名無しさん:04/10/02 19:56:40
んや。
問題になるのはマクロにしたときa,bが同じ変数の場合。
999デフォルトの名無しさん:04/10/02 20:03:46
1000?
1000!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。