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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は専門の別スレッドがあるのでそこへさようなら。

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

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

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
C言語なら俺に聞け! Part 121
http://pc8.2ch.net/test/read.cgi/tech/1138409094/
2デフォルトの名無しさん:2006/02/10(金) 20:19:30
3デフォルトの名無しさん:2006/02/10(金) 20:58:26
echo 乙
4デフォルトの名無しさん:2006/02/10(金) 21:01:52
>>1
薔薇乙女
5デフォルトの名無しさん:2006/02/10(金) 21:08:26
>>1
美しき野獣乙
6デフォルトの名無しさん:2006/02/10(金) 21:11:16
>1
GJ!
7デフォルトの名無しさん:2006/02/10(金) 22:07:27
>>1
セブーン セブーン セブーン♪
8デフォルトの名無しさん:2006/02/10(金) 22:13:30
C言語のうまい使い方を教えてください
9デフォルトの名無しさん:2006/02/10(金) 22:25:50
>>8
C++の中から味わう。
10デフォルトの名無しさん:2006/02/10(金) 22:37:47
>9
C言語って日常生活ではどんなところに使われてるんでしょうか
11デフォルトの名無しさん:2006/02/10(金) 22:58:39
>>10
C言語でプログラムするとき
12デフォルトの名無しさん:2006/02/10(金) 23:12:18
>>10
お前の身の回りの家電にでも使われてるんでないの?
知らんけど
13デフォルトの名無しさん:2006/02/10(金) 23:42:06
>>10
プレステのOS
14デフォルトの名無しさん:2006/02/10(金) 23:49:33
>>1
乙鰈
15デフォルトの名無しさん:2006/02/11(土) 00:09:26
>>10
OS 作るのに
16デフォルトの名無しさん:2006/02/11(土) 00:12:02
>>10
そうだなあ。俺の日常の場合、たとえば今これ書くのに使っている
Linux とか X Window System とかは C だ。

この前自宅に2台目の玄箱を買ったが、当然これも Linux だ。
つまりこの中もCだらけだ。

ということで俺の日常はCなしでは成り立たない。
17デフォルトの名無しさん:2006/02/11(土) 00:15:55
Cはぼちぼち使えるようになってきたんだけど
C++にはどうやって移行するのがいい?
なんかきっかけがつかめなくて
18デフォルトの名無しさん:2006/02/11(土) 00:34:04
>>17
すっぱりJavaから入るといい
19デフォルトの名無しさん:2006/02/11(土) 00:57:28
Cは高級アセンブラ
別にCでコンピュータさんが動いてるわけじゃない
最後に動くのは機械語なんで、>>10はちょっと聞き方変えたほうが良いと思う
20デフォルトの名無しさん:2006/02/11(土) 01:00:14
>>17
じゃあ、今日から使ってみよう。
21デフォルトの名無しさん:2006/02/11(土) 01:10:05
共用体の有効な使用方法教えてください
22デフォルトの名無しさん:2006/02/11(土) 01:16:58
おしえてください。
if( )の( )の中には
if( (a==1 || a==2) && (b!=1 && b!=2) )
このように数式みたいに書いてもいいものなんでしょうか?
23デフォルトの名無しさん:2006/02/11(土) 01:19:45
つか前スレ埋めろよw
24デフォルトの名無しさん:2006/02/11(土) 01:19:48
ネタは結構です
25デフォルトの名無しさん:2006/02/11(土) 01:21:21
つーか共用体の存在価値を教えてください
26デフォルトの名無しさん:2006/02/11(土) 01:22:41
>>22
そんくらい試せよ
はいはいOKです帰れ
27デフォルトの名無しさん:2006/02/11(土) 01:25:50
>>21
ネタに使う

>>25
知ってる人が少なめっぽい気もするから
知識だけ自慢できる
28デフォルトの名無しさん:2006/02/11(土) 01:44:24
>>21
Direct Xの構造体でたまに見かけるな。

直交座標と極座標のいずれでも表現できるがいずれか一方しか必要ないってときに
同じ名前の変数を別の使い方するのでなく、名前は別だが余分なメモリは使わない
みたいな、そういうひどい使われ方をしてたりする

あとは即値を見たいときとか、アライメントに抵抗するときとかか
29デフォルトの名無しさん:2006/02/11(土) 02:13:09
メモリやプロトコルをケチるときだな
30デフォルトの名無しさん:2006/02/11(土) 02:21:28
PCで動かすなら共用体なんか要らん
31デフォルトの名無しさん:2006/02/11(土) 02:29:14
Undo/Redoで共有体をうまく使ってたライブラリを見たことがある。
32デフォルトの名無しさん:2006/02/11(土) 02:55:00
unionてつづりはなんかカッコイイ
33デフォルトの名無しさん:2006/02/11(土) 03:24:36
>>29
ケチるためとも言えるが、無駄を省くためとも言える。
34デフォルトの名無しさん:2006/02/11(土) 03:25:24
union {
 int i;
 unsigned char ch[sizeof (int)];
} n;

n.i = 0x1389A39B;
for(i = 0; i < sizeof n.ch; ++i) {
 printf("%d\n", n.ch[i]);
}

とかやって遊べる。
35デフォルトの名無しさん:2006/02/11(土) 03:31:06
そしてそれを教授に見せて殴られる
36デフォルトの名無しさん:2006/02/11(土) 04:13:40
// 乙
3792年のソース:2006/02/11(土) 05:03:03
Cで書かれたプログラムをBoland5.5でコンパイルしようと
したのですが、

#include<graphics.h>
#include<dir.h>

が無い様で、コンパイルできずに困っています。
どなたか、この2つのファイルを含むコンパイラーを教えて下さい。

よろしくお願いします。
38デフォルトの名無しさん:2006/02/11(土) 05:07:37
TurboC 2.0
TurboC++ 1.01
3992年のソース:2006/02/11(土) 05:12:12
>>38

早速のお返事ありがとうございます!!。
4092年のソース:2006/02/11(土) 05:48:10
度々すみません。

どうも、TurboC 2.0も、TurboC++ 1.01も

もう手に入らない様なのですが、

他に何か手に入りそうなものでは無いのでしょうか?。

41デフォルトの名無しさん:2006/02/11(土) 05:58:44
42デフォルトの名無しさん:2006/02/11(土) 06:04:06
>>40
ttp://www.mitewakaru.com/c/cgi/chamber.cgi?template=replies.hct&board=free&NO=53
インストールや設定に関してはスレ違いなのでここで聞かないように。
43デフォルトの名無しさん:2006/02/11(土) 06:54:18
めちゃくちゃ懐かしいな、おい。
44デフォルトの名無しさん:2006/02/11(土) 10:18:13
realloc はそのまま伸ばせない場合は再確保&コピーになりますよ、と。 >前スレ最後
45デフォルトの名無しさん:2006/02/11(土) 10:32:26
fseekやftell関数って4GB以上のファイルに使っては駄目ですか?
46デフォルトの名無しさん:2006/02/11(土) 10:49:47
64 ビット環境なら大抵 long が 64 ビットになって大丈夫だと思うけど、
32 ビット環境だと難しい。

環境依存で 64 ビットで取得/設定できる代替関数があるとおもうんで、
それを使うがよろし。
47デフォルトの名無しさん:2006/02/11(土) 12:59:23
無限ループをリダイレクトしたらなかなか終わらず、
途中で無理やり終わらせたら83.1MBのテキストファイルができた(´・ω・`)ショボーン。
48デフォルトの名無しさん:2006/02/11(土) 13:02:36
for(;;) printf("(´・ω・`)ショボーン");
(´・ω・`)ショボーン(´・ω・`)ショボーン(´・ω・`)ショボーン(´・ω・`)ショボーン
49デフォルトの名無しさん:2006/02/11(土) 13:09:01
なぁ>>47のリダイレクトをすれば復元ソフトでデータを復元できなくなるんじゃないのか?
5049:2006/02/11(土) 13:14:55
今実験してみてるんだがフォルダが1つだけでそれ以外復元されていない。
51デフォルトの名無しさん:2006/02/11(土) 13:14:55
>>49
どの程度の復元ソフトを望んでるのかわからん(´・ω・`)がな
rewriteされたようでされていないなんてザラにあるで
5249:2006/02/11(土) 13:21:52
>>51
今きずいたが同時に書き込みされてますね。
53デフォルトの名無しさん:2006/02/11(土) 13:24:26
素数を1GB分出力させたことがあったなぁ。
54デフォルトの名無しさん:2006/02/11(土) 13:27:57
そっすか
5549 ◆3ixoa4Kz5w :2006/02/11(土) 13:37:37
さっき復元というフリーソフトで復元しようとしたんですが、
元のテキストファイル以外の復元は無理でした。
でも0バイトのソフトは何個か出てきました。
これなんかに利用できませんかね?
56デフォルトの名無しさん:2006/02/11(土) 13:38:56
>>55
ソフト ×
ファイル ○
57デフォルトの名無しさん:2006/02/11(土) 16:11:07
素数を表示するプログラムってどうやって作るのですか?
58デフォルトの名無しさん:2006/02/11(土) 16:13:07
>>57
妙な事を聞くんだな

int main(){printf("素数");return 0;}
5957:2006/02/11(土) 16:14:45
>>58
お前よく俺の考えていたことがわかるな。
6057:2006/02/11(土) 16:15:31
>>58
そういう意味ではなく
61デフォルトの名無しさん:2006/02/11(土) 16:17:01
int main(){printf("2");return 0;} 
6257:2006/02/11(土) 16:18:49
ではユーザーの入力した数字を素数かどうか出すプログラムってありますか?
63デフォルトの名無しさん:2006/02/11(土) 16:21:50
素数判定 などのキーワードでぐぐれば出てくるような質問ですか?
64デフォルトの名無しさん:2006/02/11(土) 16:27:01
int main(){ getchar(); printf("数 '字' はNaNです\n"); return 0; }
65デフォルトの名無しさん:2006/02/11(土) 16:27:34
>>62
つ「エラトステネスのふるい」
よしっ、行け。
66デフォルトの名無しさん:2006/02/11(土) 16:37:18
>>62
こんな感じでよろしいでしょうか
#include<stdio.h>
int main()
{
int in;
printf("数字を入力してください>");
scanf("%d",&in);
printf("%d は素数ですか?\n",in);
return 0;
}
67デフォルトの名無しさん:2006/02/11(土) 16:38:37
>>62
> 数字を素数かどうか出すプログラムってありますか?
日本語でおk
68デフォルトの名無しさん:2006/02/11(土) 16:54:47
この流れワロタww
が、ひでぇwww
69デフォルトの名無しさん:2006/02/11(土) 16:59:39
int main(void)
{
int in, i=2,;
printf("数字を入力してください。"
scanf("%d", &in);
if(in <= i) printf("そっすね。");
else printf("続きを読むにはここをクリックしてください。");

return 0;
}
70デフォルトの名無しさん:2006/02/11(土) 17:10:04
>>68
ひどい事は無い
みんなちゃんと質問に答えてる
7157:2006/02/11(土) 17:19:52
いいなぁIDが表示されない板は。
おかげで楽しく釣れたよ。
72デフォルトの名無しさん:2006/02/11(土) 17:28:29
ああ、釣られてしまった!
くやしい!
73デフォルトの名無しさん:2006/02/11(土) 17:29:03
ここまで俺の自演
74ぼるじょあ ◆yBEncckFOU :2006/02/11(土) 17:29:47
(・3・) エェー 自演は疲れますNE
75デフォルトの名無しさん:2006/02/11(土) 17:35:06
#define A100
#define BA
#undef A

void main( void ) {
int hoge = B;
}

上記のようなプログラムで、
Aは削除されBは100に置き換わることを期待したのですが、
ダメのようです。何か上手い方法はないでしょうか?
76デフォルトの名無しさん:2006/02/11(土) 17:38:27
>>75
関数の後ろで #undef A 
77デフォルトの名無しさん:2006/02/11(土) 17:39:27
 
78デフォルトの名無しさん:2006/02/11(土) 17:42:51
>>76
説明足らずですいません。例えば、
void main( void ) {
int hoge;
hoge=A;
hoge=B;
}
としたときhoge=Aの方だけエラーが発生するようにしたいのです。
これはCの仕様的に無理なのでしょうか?
79デフォルトの名無しさん:2006/02/11(土) 17:47:21
>>78
関数の手前で
#ifdef A
#error ?
#endif
80デフォルトの名無しさん:2006/02/11(土) 17:49:05
>>78
その手の変態ライブラリならC++だけど
boost/preprocessor/slot
これが参考になる。
プリプロセッサしか使ってないからCでも多分使える
8180:2006/02/11(土) 18:00:39
boost/.../slotのやってることは本質的な内容に絞ると
#if X%10==0
 #define _1 0
#if X%10==1
 #define _1 1
...
#if X%10==9
 #define _1 9
#if X/10%10==0
 #define _2 0
...
#if X/10000000%10==9
 #define _7 9

#define VALUE _1##_2##_3##_4##_5##_6##_7

こんな感じ。
#ifを利用した。力技ですなw
82デフォルトの名無しさん:2006/02/11(土) 18:01:58
おっと、間違えた
#define VALUE _7##_6##_5##_4##_3##_2##_1
だな。

実際にはもっと長い識別子使ってるけどね
8392年のソース:2006/02/11(土) 18:29:00
>>41
>>42

お礼が遅れてすみません。

何とかコンパイルできました。

お力添え、本当にありがとうございました。

84デフォルトの名無しさん:2006/02/12(日) 02:56:57
素数かどうかの判定は、その数未満の素数で割って割り切れるか
どうかで判定すればいいだけ。
85デフォルトの名無しさん:2006/02/12(日) 03:28:13
その数の平方根以下の素数で十分だろ
86デフォルトの名無しさん:2006/02/12(日) 03:39:20
面倒くさいから、2から順に割ってみればよくね?
割り切れた時点で素数じゃねーし。
87デフォルトの名無しさん:2006/02/12(日) 03:48:35
それだったら最初から配列にフラグ立てた方が早い
88デフォルトの名無しさん:2006/02/12(日) 05:36:20
>>85
平方根以下? 9が入力されたら3から調べるのか?
89デフォルトの名無しさん:2006/02/12(日) 05:53:05
>>88
2から始めて3まで調べる。
素数の二乗≦その数 な素数で判定すればいいだけ。
90デフォルトの名無しさん:2006/02/12(日) 07:30:31
確かに、平方根越えたら割った商は越える前に試した値と重複しますね。
勉強になるます。
91デフォルトの名無しさん:2006/02/12(日) 08:54:04
平方根よりエストラテネス使うの方が速い。
92デフォルトの名無しさん:2006/02/12(日) 09:23:04
>>91
エラストテネス
93デフォルトの名無しさん:2006/02/12(日) 09:23:38
ノストラダムス
9491:2006/02/12(日) 09:41:45
>>92
ごめんなさい。
95デフォルトの名無しさん:2006/02/12(日) 13:01:00
if(条件)
{
  処理
}
else
{
  /* コメント */
}
このようなつくりですと、デバッガでelse文のコメントにブレークをはれません。
そこで処理をしない処理?みたいなのってできますか?
それともただ単に ; をつければいいだけですか?
96デフォルトの名無しさん:2006/02/12(日) 13:21:49
マクロ
97デフォルトの名無しさん:2006/02/12(日) 13:34:10
>>95
最適化の内容によるんで完全に処理系依存だが
例えば
volatile int i = 0;
関数() {
if(条件)
{
  処理
}
else
{
i++;
}
}
とか
if(条件)
{
  処理
}
else
{
asm("nop");
}
とかやってもだめか?
98デフォルトの名無しさん:2006/02/12(日) 13:52:47
>>95
そんなもん else ブロックなんか作るなよ。見てて気持ち悪いから。
ブレークポイント作りたいなら次の文の先頭に付ければいいじゃ
ねえか。関数の最後だというのならその最後の } の所にできる
だろ? もしできねえデバッカだったらそれはクソだから捨てろ。
99デフォルトの名無しさん:2006/02/12(日) 14:09:37
>>98
デバッガがクソなのかオプティマイザが利口すぎるのか
ここで確定的に論じることは困難と思われ
100デフォルトの名無しさん:2006/02/12(日) 14:16:00
そういうのって素敵やん?
101デフォルトの名無しさん:2006/02/12(日) 15:32:12
デバッガを使おうってときに最適化をかけたままなユーザへの評価にあえて触れていないことは言うまでもない
102デフォルトの名無しさん:2006/02/12(日) 16:06:19
c=c;とか入れとくのは?
103デフォルトの名無しさん:2006/02/12(日) 16:34:05
>そんなもん else ブロックなんか作るなよ。見てて気持ち悪いから。
気持ち悪くても付けろといわれれば付けざるを得ない。
それが仕事なんだよ。

95がどういう意図でelseを付けているかはわからんが・・・
104デフォルトの名無しさん:2006/02/12(日) 16:39:16
Noと言えない奴はプロとして失格
105デフォルトの名無しさん:2006/02/12(日) 16:55:48
Noと言っても抑えても失格かどうかはクライアントが決めること
くだらん定義にこだわってないで金とるに値する仕事をしろ
106デフォルトの名無しさん:2006/02/12(日) 16:57:53
>>104はプロじゃないから
107デフォルトの名無しさん:2006/02/12(日) 16:58:58
ちなみに真実は>>101が既に到達しているので、>>102以下は何を言っても遅い
108デフォルトの名無しさん:2006/02/12(日) 17:00:33
平方根を求めるのって関数sqrtですよね?
これを使えるようにするにはmath.hをincludeすればいいと思うのですがなぜか使えません。
式としてはq=sqrt(i)みたいに書いてます。
何がおかしいのか教えてください。
109デフォルトの名無しさん:2006/02/12(日) 17:01:33
クライアントの言いなりか
とことんレベルが低いな
110デフォルトの名無しさん:2006/02/12(日) 17:01:43
>>108
で、コンパイル結果とか実行結果とか何も載せないのは何故ですか?
111デフォルトの名無しさん:2006/02/12(日) 17:08:06
コンパイルしようとすると下のようなのがでます

/tmp/ccPQRCAK.o: In function `main':
/tmp/ccPQRCAK.o(.text+0x40): undefined reference to `sqrt'
collect2: ld returned 1 exit status
112デフォルトの名無しさん:2006/02/12(日) 17:09:47
>>108
リンクエラーか?
113デフォルトの名無しさん:2006/02/12(日) 17:11:29
リンカが狂ってるな
窓から投げ捨てろ
114108:2006/02/12(日) 17:13:36
今は自分の部屋からTTSSHを使って大学にログインしてやっているので
あとで直接大学にてやってみますね
115デフォルトの名無しさん:2006/02/12(日) 17:15:51
-lm がついてないだけじゃないのか
116デフォルトの名無しさん:2006/02/12(日) 17:18:34
つか絶対そうだ
117デフォルトの名無しさん:2006/02/12(日) 17:18:57
>>115
できました〜ありがとうございます
で、その-lmってのは何者ですか?
118デフォルトの名無しさん:2006/02/12(日) 17:20:16
>>117
自分で調べるかman見るか先生に聞け
119デフォルトの名無しさん:2006/02/12(日) 17:21:53
リンカが狂ってるな
窓から投げ捨てろ
120デフォルトの名無しさん:2006/02/12(日) 17:22:59
>>91 >>92
エラトステネス→グーグル力29000
エラストテネス→グーグル力155
エストラテネス→グーグル力2
121デフォルトの名無しさん:2006/02/12(日) 17:25:03
グーグル力たったの2、クズが!
122デフォルトの名無しさん:2006/02/12(日) 18:07:52
スッドレ→グーグル力78100
123デフォルトの名無しさん:2006/02/12(日) 18:45:43
ある構造体が以下のように並んでいます。
1:一番目に古い情報を持つ構造体
2:二番目に古い情報を持つ構造体

n:一番新しい情報を持つ構造体

並び順
5             1
4             2
3             3
2             4
1         →   5
n             n - 3
n - 1           n - 2
n - 2           n - 1
n - 3           n

つまりソートをするわけですが、ならべくRAMを使わず、かつ高速にしたいのです。
ご教授お願いします。
124デフォルトの名無しさん:2006/02/12(日) 18:48:28
まちがいました。
正しくはこっちです。

並び順
n - 3             1
n - 2             2
n - 1             3
n                4
1         →      5
2               n - 3
3                n - 2
4                n - 1
5                n
125デフォルトの名無しさん:2006/02/12(日) 18:49:02
自分で考えろ。以上、終了!!
126デフォルトの名無しさん:2006/02/12(日) 18:49:46
そもそもお前はCをやる資格がない
127デフォルトの名無しさん:2006/02/12(日) 18:52:53
資格なんていらねーよアホw
128デフォルトの名無しさん:2006/02/12(日) 18:55:34
>>123
「ソート」でぐぐればいっぱい出てくる。
129デフォルトの名無しさん:2006/02/12(日) 18:59:42
おまいらひど過ぎ。教えてやれよカスどもが!

>>124
やはり最も高速かつ実用的なバブルソートがいいと思うよ。
130デフォルトの名無しさん:2006/02/12(日) 19:06:05
RAMを使わず高速に…って言ったらHeapSortだろ!
131デフォルトの名無しさん:2006/02/12(日) 19:09:20
マジレスしとくと普通にQuickでいいだろ
132デフォルトの名無しさん:2006/02/12(日) 19:40:41
□はいらんかもしれんが、適してはいないな。
ググることすらできない低能に今後プログラムを学んでいくことは困難だ。
言葉を知らない赤ん坊にいきなり経済学を学ばせるのと同じ。
133デフォルトの名無しさん:2006/02/12(日) 19:42:13
つまんねい質問でした
134デフォルトの名無しさん:2006/02/12(日) 20:21:49
ようは

456123を

  →→→→→
 ↑      ↓
   123  456

123456←←←

こういうこと?


135デフォルトの名無しさん:2006/02/12(日) 20:36:32
コード変換作業の中からも改善できるところはないか。常に考えています
136デフォルトの名無しさん:2006/02/12(日) 21:30:51
>>123
C は変数についてオンメモリ設計なんで
オンレジスタ設計がしたい場面には向かない

最適化でそういう方面のチューニングがないでもないが
そうなると処理系依存でこのスレの範疇からは逸脱してしまう

順当にはアセンブラでやるだな
137デフォルトの名無しさん:2006/02/12(日) 22:34:08
RAMを使わずにならファイルに書き出してマージソートに決まってるだろボケ
COBOLを見習え
138デフォルトの名無しさん:2006/02/12(日) 22:46:05
>ならべくRAMを使わず、

ってことは少しは使ってもOKなんでないの?
139デフォルトの名無しさん:2006/02/12(日) 22:49:55
すみません。用途としては
トレースデータを構造体の配列として保存してます。
一定量埋まったら先頭に戻って上書きをしながらトレースデータを格納していきます。

そして、それらを外部に転送する際に一番古いデータを先頭に最新データを最終配列にソートして
転送したいのです。
組み込みシステムなのでRAMをあまり使わず、かつ高速にしたいのです。
イメージとしては134さんみたいなかんじです。
140デフォルトの名無しさん:2006/02/12(日) 22:54:04
なんでソートせにゃいかんのじゃ
141デフォルトの名無しさん:2006/02/12(日) 22:58:46
リングバッファで済むのであらば腹を殴る
142デフォルトの名無しさん:2006/02/12(日) 23:00:27
>>139
ソートしなくても、

→書き込み順
12345678
□□□□□□□□
   ↑
最新データの書き込み位置
なとき

5→6→7→8→1→2→3→4
と転送すればいいだけじゃないの?
ほんとに組み込みやってる?
143デフォルトの名無しさん:2006/02/12(日) 23:01:24
転送する際に、
「先頭アドレスからXXバイト分」
って感じにしたいんでないの?
144デフォルトの名無しさん:2006/02/12(日) 23:01:56
>>141
小さな命が宿ってますので、お腹だけは勘弁して下さい・・・
145デフォルトの名無しさん:2006/02/12(日) 23:05:29
では指の間に鉛筆はさんで握る
両手
146デフォルトの名無しさん:2006/02/12(日) 23:30:59






ここでコムソートの出番ですよwwwwwwww


147デフォルトの名無しさん:2006/02/13(月) 00:58:36
そうです。143みたいな使い方がしたいんです。
148デフォルトの名無しさん:2006/02/13(月) 01:21:08
それでも依然として「RAMをあまり使わず、かつ高速にしたい」のならソートしないのが正解だと思うがな。
「先頭nバイト」を「バッファから末尾まで」「先頭から残り」の2回に分けて転送すりゃいいだけだし。
149デフォルトの名無しさん:2006/02/13(月) 02:47:21
32*32サイズの画像情報が入っている下記のような配列が複数あるとします。
例)int charaX_X[32*32] // Xは整数が入る

一つ目の「X」はキャラ番号、二つ目の「X」はモーション番号とします。
例)int chara10_01[32*32] この場合10番のキャラの01番目のモーションの画像の配列

以上のような配列を扱うときに次の4つの文字列をつなげて
該当する配列を参照することは可能でしょうか?
「chara」「キャラ番号」「_」「モーション番号」

GBAのソフトを自作していて複数のスプライトの扱い方で悩んでます。
Macromedia DirectorのLingo言語とかだと下記のように
value()という関数を使うを変数名の文字列から変数を参照することができます。
ちなみに下記の場合、0が表示されます。

chara1 = 0
Num = 1
put value("chara" & Num)
150デフォルトの名無しさん:2006/02/13(月) 03:23:54
お前はキャラ番号とモーション番号の対の数だけ
配列宣言するつもりなのか??
151デフォルトの名無しさん:2006/02/13(月) 03:35:39
*str2="hoge"でstrcpy(str1,str2)とやると
*str1="ioge"になるんですけど何が原因なんでしょうか
152149:2006/02/13(月) 03:57:54
>>150
そうはしたくないんですけど
スプライトの変換ツールが1モーション単位でしか変換できないうえに
それぞれ別の配列になっちゃうのでそのまま使うにはどうしたらいいかな
と思ったんです。
下記のような3次元の配列にしたほうがいいですかね?

int char[キャラ番号][モーション番号][画像の配列];
153デフォルトの名無しさん:2006/02/13(月) 07:39:49
とりあえずがんばります。
ただ、よいトレース関数を作らねば。

本ではfprintfなど使ってるけど組み込みだから使えないんですよね
154デフォルトの名無しさん:2006/02/13(月) 07:52:13
>>151
どっかで間違えて ++*str2, *str2++, ++*str1, *str1++ のうちどれかをやってない?
155デフォルトの名無しさん:2006/02/13(月) 08:20:03
>>152
先ず、一度に全部メモリに読み込むのかどうか、だなぁ。

あと、キャラ番号によってモーション番号が変わる場合は、
そういう風に確保すると無駄が多い。
全部同じなら別にいいけど。
int *chara[キャラ番号][モーション番号];
にして、
int mem[最大画像数][32*32];
から適宜割り当ててやるとか、
何か工夫しないとメモリを圧迫するかと。
156149:2006/02/13(月) 09:42:49
>>155
いろんな画像を扱う場合はそのようにしたほうがいいかもしれませんね。
今回はRPGのキャラチップなのでモーション番号の最大数は同じなので
その点は問題ないと思います。
constで扱えば外部メモリ(カートリッジ)に配置されるので
たぶんそれも大丈夫かと…。確信ではありませんけど。

>>const int chara[キャラ番号][モーション番号][32*32]


157151:2006/02/13(月) 10:19:55
>>153
アドバイスありがとうございます
そういった表記は自分では書いていません

もう少し具体的に書くと
typedef strcut hoge{
char *name;
int val;
struct hoge *next;
}hoge_t;
このような構造体を使用していて
新しい要素を追加するときに*nameに対してstrcpyを用いています
その際、既存の要素の*nameの先頭がb,d,f,h,...だと
c,e,g,i,...に置き換わってしまいます(>>151で示したようになる)
158デフォルトの名無しさん:2006/02/13(月) 10:23:41
>>157
ちゃんとmallocしたか?
159151:2006/02/13(月) 10:41:41
>>158
はい、ちゃんとmallocしています
全ての要素に当てはまれば問題個所も特定できそうなのですが
*nameの先頭の文字がa,c,e,g,i,...では問題が起きないので
原因の見当がつかない状態です
160デフォルトの名無しさん:2006/02/13(月) 10:56:56
>>159=151
部分部分じゃなく、問題が再現できる最低限のコードを全て載せろ。
話はそれからだ。
161デフォルトの名無しさん:2006/02/13(月) 11:06:29
そういうのはまずオブジェクトを管理するライブラリから構築した方がいいんでね?
仕様も無しにただ書いてると収集付かなくなる上に、次やるときに同じ苦労を重ねないといけなくなるぞ
162デフォルトの名無しさん:2006/02/13(月) 11:07:10
これってセーフ?
pDataがポインタとして、
if(!pData || !*pData){DoSomething();}

ぼんやりと、pData==0の時は*pDataは評価されないと信じてたんですが、
どうも怪しいので教えてください。
163デフォルトの名無しさん:2006/02/13(月) 11:20:34
>>162
「||」:左から式を評価し、左の式が真の時、右の式は評価されない
「&&」:左から式を評価し、左の式が偽の時、右の式は評価されない
164162:2006/02/13(月) 11:50:05
>>163
ありがとうございます。
やっぱりそうですよね。おっかしーなぁ…
165151:2006/02/13(月) 11:52:28
-----ソース-----
#include <stdio.h>

typedef struct vartable{
char *name; int val; struct vartable *next;
}vartable_t;

vartable_t *start;

vartable_t *vartablealloc(void);
void vartableprint(vartable_t *);
void vartablenewdata(char *,int);

int main(void){
vartable_t *newvar;

vartablenewdata("a",0);
vartablenewdata("b",1);
for(newvar=start;newvar!=NULL;newvar=newvar->next){
vartableprint(newvar);
}

printf("-----\n");
vartablenewdata("c",2);
for(newvar=start;newvar!=NULL;newvar=newvar->next){
vartableprint(newvar);
}

exit();
}
166151:2006/02/13(月) 11:55:06
vartable_t *vartablealloc(void){
vartable_t *tmpvar;

tmpvar = (vartable_t *) malloc(sizeof(vartable_t));
return tmpvar;
}

void vartableprint(vartable_t *tmpvar){
printf("%s = %d\n",tmpvar->name,tmpvar->val);
}

void vartablenewdata(char *name,int val){
vartable_t *tmpvar;

tmpvar=vartablealloc();
strcpy(tmpvar->name,name);
tmpvar->val = val;
tmpvar->next = start;
start = tmpvar;
}

-----実行結果-----
b = 1
a = 0
-----
c = 2
c = 1
a = 0
167デフォルトの名無しさん:2006/02/13(月) 11:55:19
>>159
それ、どっかに (*src |= 1) に相当するコードが入っているだろ。
168デフォルトの名無しさん:2006/02/13(月) 11:58:08
遅かった・・・
tmpvar->name の領域はどこで確保してんの?
169デフォルトの名無しさん:2006/02/13(月) 12:31:42
正直>>151にはガッカリした。

でも、>>164萌えなので問題なし。
170デフォルトの名無しさん:2006/02/13(月) 12:34:18
>>164
何がどう問題なのか、具体的に書いてミソ
171151:2006/02/13(月) 12:37:40
>>168
*vartableallocで*tempvarの領域を確保してるので
tmpvar->nameの領域も確保できていると勘違いしたのが原因でした。
よってtmpvar->nameの領域を確保したところ問題は解決しました。

154,158,160,167,168
アドバイスありがとうございました
172162:2006/02/13(月) 13:15:40
>>170
すみません。
先週末の話なんで、問題のソースがどこにあったのか忘れてしまいました。
テキストベースの設定ファイルのパーサを書いてて、
設定項目名の文字列が未定義(ポインタ=NULL) または 設定項目名の文字列長が0なら
処理をどうこうする、という箇所の条件判断で、SEGVしてしまったというのが件の問題でした。
その時ポインタがNULLだったかどうか確かめてませんし、
思うに文字列へのポインタのつもりで変なモノ入れてたんでしょうね。

>>169
36男性妻子有ですがよろしいか。
173デフォルトの名無しさん:2006/02/13(月) 14:08:01
>>172
周りがないので断定はできないけれど、ポインタの初期化ミス。
ポインタ定義したときに明示的に NULLしないと、てきとーな値(ゴミ)が
入っているから、そのゴミアドレス読み込もうとしてSEGVあぼーん。
174デフォルトの名無しさん:2006/02/13(月) 15:44:02
質問なんですけど、
char型配列の長さを知りたいんですが、
取得する関数ってありますか?
175デフォルトの名無しさん:2006/02/13(月) 15:45:53
>>174
sizeof
176175:2006/02/13(月) 15:46:49
関数じゃないという突っ込みは、お兄さん好きじゃないよ
177デフォルトの名無しさん:2006/02/13(月) 15:48:09
>>176
それはひみつです
178174:2006/02/13(月) 15:49:11
>>175
ありがとうございます。
ちなみにそれって最後のヌルは含まれますか?
179デフォルトの名無しさん:2006/02/13(月) 15:50:04
演算子テラモエス

mallocで動的確保したただの配列なら不可能
mallocで動的確保した文字列配列ならstrlenで文字列の長さが判る。
そうでないなら sizeof(array_name) / sizeof(array_name[0])か、
VC++2005限定で _countof(array_name)
180デフォルトの名無しさん:2006/02/13(月) 15:50:51
>>178
つか文字列の長さかよ。だったらstrlenだ。
181デフォルトの名無しさん:2006/02/13(月) 15:50:53
charの配列≠文字列
182174:2006/02/13(月) 15:58:02
うお、アホですいません…
とにかく即レスサンクスでした。
183デフォルトの名無しさん:2006/02/13(月) 16:26:41
ところでCで>>149みたいなことできるのか昨日から興味津々なんだが
Delphiはできたなぁ・・・
184デフォルトの名無しさん:2006/02/13(月) 16:35:25
配列のポインタでやれないのかな?
int *chara[キャラ番号,モーション番号] = {{chara01_01,chara01_02...
というモノつくって
//Cをしばらくつかってないのだが書き方こんな感じだったっけ
185デフォルトの名無しさん:2006/02/13(月) 16:37:33
なぜ[]の中にカンマがある・・
186デフォルトの名無しさん:2006/02/13(月) 16:44:27
きっとC#なんですよ
187デフォルトの名無しさん:2006/02/13(月) 16:45:15
C#なんかもうC系じゃねぇ
188デフォルトの名無しさん:2006/02/13(月) 16:46:38
>>187
ポインタ使える不安定さは引き継いでいます
189デフォルトの名無しさん:2006/02/13(月) 16:52:09
(*^ー゚)b グッジョブ!!
190デフォルトの名無しさん:2006/02/13(月) 16:55:55
うわ、吊ってくる
191デフォルトの名無しさん:2006/02/13(月) 19:50:50
間違ったことが書けることを「不安定」と言うなら「安定な言語」なんざ使えねー
いくら言語の中で矛盾を防いでも I/O で間違える PG が書いたコードは結局不安定だし
192デフォルトの名無しさん:2006/02/13(月) 19:52:01
おーおー暴走しちょるしちょるwwww
193デフォルトの名無しさん:2006/02/13(月) 19:59:52
利用できるRAMの残り容量がわかる関数とかってありますか?
194デフォルトの名無しさん:2006/02/13(月) 20:07:37
>>193
実記憶か、仮想記憶か

# いずれにせよ処理系依存スレで聞いた方がよさそう
195デフォルトの名無しさん:2006/02/13(月) 20:22:38
>>193
このスレ的に言うとない
196デフォルトの名無しさん:2006/02/13(月) 20:27:34
あるよ。
mallocで最大RAMから、だんだん少なくしていってNULLを返さなくなった
ところが最大だ。
197デフォルトの名無しさん:2006/02/13(月) 20:33:22
>>196
何考えてんだヲイw
198デフォルトの名無しさん:2006/02/13(月) 21:24:36
>>196
それもダメ。環境依存だ。
199デフォルトの名無しさん:2006/02/13(月) 21:45:55
ひたすら文字列入力しまくってヤバクなったところが限界
200デフォルトの名無しさん:2006/02/13(月) 22:25:54
>>196,199
仮想メモリのあるOSだとSWAPPINGするからRAMの残り容量はわかんねぇだろう
201デフォルトの名無しさん:2006/02/13(月) 22:28:28
>>200
じゃあ最初からMAX2Gでやりゃいい
202デフォルトの名無しさん:2006/02/13(月) 22:31:38
>>200
それ以前に、UNIX系OSだと ulimit でプロセスごとのメモリの限界を指定できる。
203デフォルトの名無しさん:2006/02/13(月) 22:36:58
いえ、RAMの残り容量はプログラムを作る際に出力される
MAPファイルでわかるんですが
プログラム上でわからないものかと思いまして。

とりあえず、普通にCでは無理ということですね。
あきらめます。
204デフォルトの名無しさん:2006/02/13(月) 22:39:41
また>123か
205デフォルトの名無しさん:2006/02/13(月) 22:46:55
>>203
何言ってんの? MAPファイルで分かるわけないだろ。オマエは馬鹿か?
206デフォルトの名無しさん:2006/02/13(月) 22:55:46
釣られ乙
207デフォルトの名無しさん:2006/02/13(月) 22:56:08
>>205
オマエが馬鹿
208デフォルトの名無しさん:2006/02/13(月) 22:56:28
>>203
>とりあえず、普通にCでは無理ということですね。

なんでそーなるんだよ
処理系依存の手段を C で実装するだけだ
断じて「無理」なことじゃない
209デフォルトの名無しさん:2006/02/13(月) 22:57:39
>>208
標準Cでどう実装するの?
210デフォルトの名無しさん:2006/02/13(月) 23:09:27
>>209
どうにでも
外部結合やらキャストやら「標準 C」にある機能を使ってなんとでも
211デフォルトの名無しさん:2006/02/13(月) 23:12:07
>>210
具体的に教えてもらいたいのですが
212デフォルトの名無しさん:2006/02/13(月) 23:13:01
213デフォルトの名無しさん:2006/02/13(月) 23:14:38
↑コイツ逝ね
214デフォルトの名無しさん:2006/02/13(月) 23:14:55
死ね
215デフォルトの名無しさん:2006/02/13(月) 23:17:21
>>212
210に聞いてるので邪魔しないでください
216デフォルトの名無しさん:2006/02/13(月) 23:18:31
>>207
MAPファイルで利用できるRAMの残り容量がなんで分かるのか?
217デフォルトの名無しさん:2006/02/13(月) 23:19:49
組み込み系のコンパイラはわかるよな
218デフォルトの名無しさん:2006/02/13(月) 23:24:32
>>216
恥の上塗りですka
219デフォルトの名無しさん:2006/02/13(月) 23:31:17
うんこは寝て食え
220デフォルトの名無しさん:2006/02/13(月) 23:32:13
ageてる人間は馬鹿が多いな。
221デフォルトの名無しさん:2006/02/13(月) 23:32:18
いただきまーす
222デフォルトの名無しさん:2006/02/13(月) 23:41:02
>>220
sage りゃ利口ってわけでもないことを体現してくれなくていいよ
223デフォルトの名無しさん:2006/02/13(月) 23:45:24
かわいそうな人だ。
224デフォルトの名無しさん:2006/02/13(月) 23:45:39
>>217
環境依存であることには変わりなし。
225デフォルトの名無しさん:2006/02/13(月) 23:48:36
>>224
おいおい、流れがわかってる?
226デフォルトの名無しさん:2006/02/13(月) 23:50:13
標準Cが環境とセット販売と勘違いしてる人がいるスレですね
227デフォルトの名無しさん:2006/02/14(火) 00:10:35
未だにその方法が明かされない件について。
結局無理なのねw
228デフォルトの名無しさん:2006/02/14(火) 00:16:30
>>227
先ずは環境が異なることを緩衝するAPI作りから始めろよ
何でも一発で出来ると思ってるからお前はウザがられるんだよ
229デフォルトの名無しさん:2006/02/14(火) 00:20:02
馬鹿は黙ってろ(藁)
230デフォルトの名無しさん:2006/02/14(火) 00:21:31
>>229
(゚ Д ゚) ハァハァ
231デフォルトの名無しさん:2006/02/14(火) 00:22:37
まず、超弩級環境依存のコマンドラインアプリ作るアルよ。 これ、hoge とするね。
あと、popen("hoge"...)で、出力読み取るアル。
標準Cでできないことなんて無い、アル。
232デフォルトの名無しさん:2006/02/14(火) 00:24:37
まぁでも事前説明もなくいきなり組み込み前提で会話されてもなぁ
233デフォルトの名無しさん:2006/02/14(火) 00:25:24
俺の環境にはpopenが無いんだが。
234デフォルトの名無しさん:2006/02/14(火) 00:27:41
>>232
標準C前提の話ですがなにか
235デフォルトの名無しさん:2006/02/14(火) 00:28:01
>>193-234
もう寝ろ
236デフォルトの名無しさん:2006/02/14(火) 00:29:29
寝言言ってるってことは、もう寝てるんじゃない?
237デフォルトの名無しさん:2006/02/14(火) 00:32:00
寝てるってことは、ちゃんとうんこ食ってるってことだな
238231:2006/02/14(火) 00:36:58
>>233
あったー来たヽ(`Д´)ノ
system("hoge > foo.txt");
fp =fopen("foo.txt", "r");
gets(buf);
239デフォルトの名無しさん:2006/02/14(火) 00:40:03
>>238
ファイルシステムもリダイレクトも無いんですよ
240231:2006/02/14(火) 00:41:05

fgets(buf, len, fp); ネ(チュッ!
241231:2006/02/14(火) 00:42:59
>>239
ふーん、じゃぁOSはあるの?
242デフォルトの名無しさん:2006/02/14(火) 00:44:21
OSと標準Cが何の関係があるんですか?
243デフォルトの名無しさん:2006/02/14(火) 00:46:45
 知  テ  質  質 ヽ l ヽ、Ll {_/__ ノ/ ///;;/  /:l _,. -――‐、
  っ  ス  問  問   ヽト、   <_ノノノ/;;/ /:::ノ
  て  ト  文  文   |lヾ'', - ' ´  `ヽ、;;//::::/
  た  0  で  に    .| Y へ,_ ''  __,,. -'ヽヽ / ひ  成  お
  か 点  答 対   l | ,tt:ァ、ノ  ,.,、__  〈/  と  り  っ
  ? な   え し   >l ''  ノ ::  `ー'´ 、/;   り   立  と
  マ  の  る     / l、l  ,、ヽ',、     ノ//    登  た  会
  ヌ     と     | ,、 l  ノ三ヽ、   、//l     場  な  話
  ケ           l/  ',   ー-- `  // .|   ∫   い  が
              ノn  /.l _     //レ l    ∫  ア
ヽ_____,. -/⌒ヽ/ ヾ、_`ヽ _,,. // / ハ      ホ
  r'―‐-、  ヽr'=、、ヽ' /-、::::: : :   /// / ノ        が
244デフォルトの名無しさん:2006/02/14(火) 00:48:14
質問文がマヌケですからね
245デフォルトの名無しさん:2006/02/14(火) 00:52:22
>>244
禿げ同


この手の堂々巡りは質問者の質問の仕方が悪い。
標準Cと言うだけで具体的な答えが返ってくる訳が無い。

最低限、どういう環境でその必要が出たのか書け。
PC向け・組み込み(OSあり)・組み込み(OSなし)でも違うだろ。

でだ。「MAPファイル」「RAMの残り容量を知りたい」「ファイルシステムがない」から
組み込み(OSなし)だと仮定していいんだよな。
246デフォルトの名無しさん:2006/02/14(火) 00:55:46
誘導もせずに答えてる香具師が馬鹿なだけだと思うが・・・
247デフォルトの名無しさん:2006/02/14(火) 00:56:02
>>209-210
なんとでもなるんじゃなかったの?
248デフォルトの名無しさん:2006/02/14(火) 00:58:08
>>247
だからAPI決めて抽象化しろって言ってるだろ!! (・ω・#)
末端の実装が違うんだから、結局環境ごとに作れってんだ
うんこは寝て食え ( ´Д`)
249デフォルトの名無しさん:2006/02/14(火) 01:01:25
>>248
あなたは210ですか?
なぜ標準Cでできるというような事を言ったの?
違う人なら邪魔です
250傍観者:2006/02/14(火) 01:01:39
>>248
「スレ違い」の一言で済む事を、わざわざ掘り返すからそうなる。
251デフォルトの名無しさん:2006/02/14(火) 01:02:13
Microsoft Esper C-- を使えば、何でもできる。
252249:2006/02/14(火) 01:04:46
253245:2006/02/14(火) 01:05:34
>>248
まぁまぁ。質問者の環境によっては抽象化するほどの
メモリの余裕もないかもしれないじゃないですか。

>>247
普通にCで出来るに決まってるだろ。
254デフォルトの名無しさん:2006/02/14(火) 01:06:44
>>253
具体的に教えてもらいたいのですが
255デフォルトの名無しさん:2006/02/14(火) 01:09:22
標準C って、いったいどんな定義?
K&R とか ANSI とかの 「 言語仕様 」 の範囲だと言っているのか。
ならば、答えは 「 無い 」。
元質問を読んでみ?
> 利用できるRAMの残り容量がわかる関数とかってありますか?
Cの言語仕様に、「 関数 」 は1つとして定義されていないから。
256デフォルトの名無しさん:2006/02/14(火) 01:10:56
出来ると言ってる人に聞いているんです
257デフォルトの名無しさん:2006/02/14(火) 01:15:17
あれ? 手元のISO C99の仕様書には関数の定義があるんですが…
258デフォルトの名無しさん:2006/02/14(火) 01:15:47
>>255
標準関数がしっかりと定義されている訳だが
259デフォルトの名無しさん:2006/02/14(火) 01:16:48
このスレではprintfですら使えなくなるのか!!!
260デフォルトの名無しさん:2006/02/14(火) 01:17:04
>>256
傍観者から言わせて貰う
ウザイ消え失せろ
261デフォルトの名無しさん:2006/02/14(火) 01:18:52
>>255
そんなエサに釣られるかクマー(AA略
262デフォルトの名無しさん:2006/02/14(火) 01:19:54
>>267 >>258
餅搗いて聞いてくれ。
それでは、組込み用のCはCのサブセットなのか?
263245:2006/02/14(火) 01:19:59
>>256
ですます調で喋ってりゃ良いってもんじゃないだろ。
さっきからアンタの態度無礼だと思うぞ。

で、>245の問いはどうなってるんだ。

>>260
まったくその通りなんですけど、
どうせわからないんだろうと思われるのも癪で…。
264デフォルトの名無しさん:2006/02/14(火) 01:20:30
仲良くしろよ池沼共
265デフォルトの名無しさん:2006/02/14(火) 01:21:51
>>264
ダメだって、池沼は同士討ちで数を減らしてくれないと。
266デフォルトの名無しさん:2006/02/14(火) 01:21:56
さ〜てと、ここいらで age とくか
267デフォルトの名無しさん:2006/02/14(火) 01:24:51





>>193は赤顔症のため逃亡しました
戻ってきても普通の書き込みは出来ないと思われます



 (;´Д`)  スミマセンスミマセン
 (  八)
   〉 〉
268デフォルトの名無しさん:2006/02/14(火) 01:25:44
いいんだよ・・君のせいじゃないんだ・・
全部・・全部この環境が悪いんだ・・
269デフォルトの名無しさん:2006/02/14(火) 01:29:36
おっぱいうpまだー?
270デフォルトの名無しさん:2006/02/14(火) 01:30:08
>>262
組み込み系で使われているコンパイラは、標準準拠していないものも多々ある。
もちろん、それ以外でもな。
271デフォルトの名無しさん:2006/02/14(火) 01:30:28
>>262
ちゃんとそこらへんはマニュアルに書かれてるはず
すくなくとも日立のには書いてたなー
272デフォルトの名無しさん:2006/02/14(火) 01:34:34
>>270 >>271
それなら話は早い。
>>257 の言う ISO C99 なり、>>258 の言う標準関数に、「 RAM の残り容量がわかる関数 」 が
含まれてるかどうかだ。
で、答えは 「 無い 」 で おk?
273デフォルトの名無しさん:2006/02/14(火) 01:39:11
すみません。変な質問して。
組み込み系でOSはITRONです。
環境は
SH-2の7045でRAMは外付けで512KB×2
です。

とりあえず、色々調べてみます。(一応調べたんですがわからなかったので再度調べます)
RAS用にトレース関数を作っていて、他のシステムでも使えるように
残りRAMのX%分をトレース用に確保したくしたかったんですが・・・


本当にお騒がせしました。すみませんでした。足を洗って出直してきます。
274デフォルトの名無しさん:2006/02/14(火) 01:39:22
>>262

規格に関しては↓でも読んでおけ
ttp://www.kouno.jp/home/c_faq/c11.html
275デフォルトの名無しさん:2006/02/14(火) 01:42:40
>>263
よかったな環境が出て。
オレも知りたいのでよろしく頼む。
276デフォルトの名無しさん:2006/02/14(火) 01:42:42
>>273
そるならdefineで事足りる。
システム構成やマップファイルから、手動で計算して設定させるべき。
277デフォルトの名無しさん:2006/02/14(火) 01:42:47
ここはC言語について聞くスレなので
教える義務はありません。以上
278デフォルトの名無しさん:2006/02/14(火) 01:44:52
>>273
本当は>>273を真っ先に明記しないとな
API厨とかわけの分からん奴が湧いてくるぞ

ちなみに俺はITRONなんて見たことも触ったこともねぇww
279デフォルトの名無しさん:2006/02/14(火) 01:50:55
そもそもいろんな情報(CPU利用率やメモリ使用率などを)
を表示しているツールってどうしてんの?
280デフォルトの名無しさん:2006/02/14(火) 01:52:09
>273
二度と来るな。お前の質問なんて興味ない。

ただ、トレース間巣は僕も興味あるがな。
みんなはどういう風に実装してるのか知らんが。
281276:2006/02/14(火) 01:52:19
>>273
ついでに、プログラムコードはRAM、フラッシュ、ROMなどの何処に置かれるのか?や
メモリマップドI/Oがどうなっているか?
など、実行中にはわからない情報から算出する必要があるから、
プログラムに埋め込もうと言うのが、そもそもの間違い。
282デフォルトの名無しさん:2006/02/14(火) 01:52:58
>トレース間巣

283デフォルトの名無しさん:2006/02/14(火) 01:54:22
あらかじめトレース用に領域をセクションきってリンクしたら?
284デフォルトの名無しさん:2006/02/14(火) 01:54:48
>>279
Windowsだと、デバイスドライバやAPIなどで得られる。
285デフォルトの名無しさん:2006/02/14(火) 02:14:07
getcとfgetcの違いって何?
286デフォルトの名無しさん:2006/02/14(火) 02:19:24
本みりゃわかる
287245:2006/02/14(火) 02:19:48
うわ、ちょっと目を離した隙にこんなにレスが。
書くことが殆ど無くなってしまった…。

トレース領域として使うというのであれば>276さんの仰るとおり
手動で計算するべきです。実行時に動的に割り当てたりはしませんよね。


…環境が出たら答えが返ってくるのがあっという間だったなー。
タイミング逃したorz
288デフォルトの名無しさん:2006/02/14(火) 02:20:39
289デフォルトの名無しさん:2006/02/14(火) 02:25:27
#define a.txt
ってかんじでファイル名を書いておいたやつを
char fname[80];
↑に代入させたいんだけど文字列が上手く理解できてなくて手も足も出ません。
お助けお願いします。

質問age
290デフォルトの名無しさん:2006/02/14(火) 02:29:38
>>289
#define FNAME "a.txt"

strcpy(fname, FNAME);

てこと?
291デフォルトの名無しさん:2006/02/14(火) 02:31:01
>>289
#define HOGE "hoge.txt"
char a[80] = HOGE;
292デフォルトの名無しさん:2006/02/14(火) 02:36:35
>>286
ジャンプ読んだけどわかんね( 'A`)
293デフォルトの名無しさん:2006/02/14(火) 02:37:01
トレース関数なんてなくても俺の作ったシステムは
問題なし。使う用途がわからん。
294デフォルトの名無しさん:2006/02/14(火) 02:37:19
>>292
マガジンだろ馬鹿
295デフォルトの名無しさん:2006/02/14(火) 02:38:13
ヤングジャンプならわかったかもね
296289:2006/02/14(火) 02:42:02
>>290
>>291
ありがとうございました
無事解決しました
297デフォルトの名無しさん:2006/02/14(火) 02:53:19
>>294
なんってこった・・・まだ水曜じゃねぇorz
298デフォルトの名無しさん:2006/02/14(火) 02:56:28
わかった・・・・ほとんど同じじゃねーかorz
299デフォルトの名無しさん:2006/02/14(火) 15:09:34
typedef int* PINT;
typedef const PINT PINT_A;
typedef PINT const PINT_B;
この型定義についての質問なんですけど、
自分の環境だとこの場合、PINT_A、PINT_Bともに
int*constと解釈されているようです。
これは仕様なのでしょうか?
(PINT_Aはconst int*になると思ってたのに・・・)
300デフォルトの名無しさん:2006/02/14(火) 15:30:12
>>299
はい、仕様です
=== 終了 ===
301デフォルトの名無しさん:2006/02/14(火) 17:25:45
プログラマの皆様はどんなOSを使ってるのですか?
302デフォルトの名無しさん:2006/02/14(火) 17:31:07
Windows(XP,2000)とSolaris9(sparc,x86)とlinux(debian,fedora core)とMacOS X
前はブリッジにFreeBSDも使ってたが、今はお役目ごめん状態
303デフォルトの名無しさん:2006/02/14(火) 20:09:55
オレッチの開発環境はWindowsで対象システムで使用しているOSはitronっす
304デフォルトの名無しさん:2006/02/14(火) 20:11:37
漢なら自分でOSをつくれ!!
305デフォルトの名無しさん:2006/02/14(火) 20:18:11
じゃあ漢じゃなくていい
306299:2006/02/14(火) 21:29:31
>>300
ありがとうございます
307デフォルトの名無しさん:2006/02/15(水) 11:55:55
>>299 に便乗質問 スマソ
int * const と const int * って、どう違うの?
308デフォルトの名無しさん:2006/02/15(水) 12:01:48
int x, y;
int * const p1 = &x;
const int * p2 = &x;

*p1 = 10;
p1 = &y;

*p2 = 10;
p2 = &x;

試してみれば分かる。
309デフォルトの名無しさん:2006/02/15(水) 12:03:37
>>307
前者はconst修飾されたポインタ。つまりポインタの指す先を変更できないが
そのポインタを経由して指されている奴の中身を変更することはできる

後者はconst修飾されたint(const int)へのただのポインタ
だから他の所を指すように変更してもいいが、指している物の中身は変更できない。
310307:2006/02/15(水) 12:59:11
>>308 >>309
よく解った。 さんくすこ。
311デフォルトの名無しさん:2006/02/15(水) 13:13:37
>>301
WindowsからOSレスまで幅広く行っております。
312デフォルトの名無しさん:2006/02/15(水) 16:24:57
コンピュータシミュレーションを使って研究をやっている学生です。
基本的な質問で申し訳ありませんがどうか教えていただけないでしょうか?

srand(time)を使ってrand関数を変化させて実行結果の変化を見ているのですが、
その実行結果を統計処理しろとボスに言われています。

この場合何回分の実行結果を統計にかければよいのでしょうか?
もう少し単純な話にすると
srand(time)によるrand関数の変化が有限個のパターンでなのであれば
その値を教えていただけると助かりますし、
無限なのであれば無限であるとお教えいただければ助かります、ということです。
313デフォルトの名無しさん:2006/02/15(水) 16:31:17
>>312
ボスの気の済む個数やればいいからボスに聞けや
314デフォルトの名無しさん:2006/02/15(水) 16:37:46
RAND_MAX回数でもやれば?
315デフォルトの名無しさん:2006/02/15(水) 17:29:01
統計処理なんだから1000回くらいでいいんじゃね。
316デフォルトの名無しさん:2006/02/15(水) 17:46:00
「処理系によってrandの実装が異なるから一概には言えない」がこのスレ的な答えだろうね。
317デフォルトの名無しさん:2006/02/15(水) 18:06:58
318デフォルトの名無しさん:2006/02/15(水) 18:37:52
>>312
考えてみた。
有限個 だというところまでは、判った。
しかし、その個数については、「 最大でもこの個数以下 」 というところまでしか、判っていない。
最大でも 「 srand( time )における 引数 time のビット幅を n bits としたとき、2のn乗個 」 だ。
319318:2006/02/15(水) 18:42:47
>>312 追記
しかしだな、>>312 よ。
想定し得るすべてのパターンについて調べることを、果たして 「 統計 」 と呼ぶのか?
それは 「 全数検査による確率計算 」 なのではないか?
「 統計 」 とは、標本を分析して母集団の傾向を論理的に類推することだろう?
その意味では、>>315 の言ってることが正しいと思うぞ。
320デフォルトの名無しさん:2006/02/15(水) 18:46:56
中心値極限定理とかで標本数決定するんでね?
321デフォルトの名無しさん:2006/02/15(水) 19:00:50
>>312
それは研究の基本とか論文の書き方とかって方面の問題で
全然 C の話じゃないね

基本的にスレ違いだけど C の範疇で可能な範囲で答えるなら
rand の返却値をそのまま使ったら再現性がないから、
いったん fwrite/fprintf などでファイルに書き込んでおき、
あとで同じ入力で再試験できるように入力値と出力値をペアで残すべし

つまり「何回分」は srand の引数の組み合わせ数とか言う問題ではない
322デフォルトの名無しさん:2006/02/15(水) 22:13:13 BE:239631168-
>>321
シードがおなじなら、乱数も同じなのでは?
srand()に同じ値を入れても、毎回違う乱数を発生する処理系もあるってことか?
323デフォルトの名無しさん:2006/02/15(水) 22:31:05
srand/rand のソースも生データとして添付するわけか

# ツェナーダイオード・・・いやいやまさかね
324デフォルトの名無しさん:2006/02/15(水) 22:34:05
>>312
srand で rand 関数を変化させて・・・というのは、
乱数種に偏りがあるわけで、
本当にちゃんとした統計が見れるのかと言われると自信がないな。
まあ、おそらく問題になるほどではないと思うけど。

srand は一回のみ実行して、それ以降は初期化を行わず、
1回のプログラムの実行で全ての計算を完了させるのが理想的かと。
325デフォルトの名無しさん:2006/02/15(水) 22:36:16
それ以前に、コンピュータシミュレーションなら
rand 関数なんぞ使わんと、Mersenne Twister 法使え。
326デフォルトの名無しさん:2006/02/15(水) 22:37:06 BE:44931233-
なんだそういう意味か。
rand()相当のソースなんて短いから、自分で作って、アルゴリズムや初期値を記録しておくだけでもいいかもしれんけど。
327デフォルトの名無しさん:2006/02/15(水) 22:38:21
シミュレーションの精度を問うのにsrandやrandの造りを問うのは分かるけど
乱数生成器としてでrandを採用することを決めたあとで
その統計的信頼度を推定するためにsrandの造りを問うのは、違うと思うけどなぁ
328デフォルトの名無しさん:2006/02/16(木) 01:58:34
     ッツmmmmmmmmミッ 
   ッmmmmmmmmmmmミッ
  ッmmmmmmmmmmmmm 
 ッmm          mmmmmミッ
mm,r':::    ミ;=     mmmmミッ 
mm〈r",,ゞィ ´ヨ ●ヾ`、;::::mmmmミッ 
mm,イ●ノ  "'ーヘヽ ヾ、;mmmmミッ 
 mi'` i"ヽ ゛;;,` ゛'''"  ゛-';mmmミッ  プログラムやってたら
  m) ゙・ ・'';;::..  _,,..-ー-ツ m      いつのまにやらわし、こんな外見なりましてン
   〉,_,_,、,、_, _  イ'"   /ーゝ'   
  . `i.j.j,j,j,tt゛i,jイj::ノ  ,.i' |    
''''''''''''''トr,r,r,rrtf,ソ    j`〉`゛T''''''''''''''''
   l }゛ '"`'"   _,,..-";;/ / /.| |   
m |  |` `-ー--''"::::::::/ ./ |  |  m
   |  | | l:::::::::::::::::::::::/ ./ |  |  
.  |  |  | l:::::::::::::::::::/ /  |  |  
  |  |  | ;:::::::::::::::/ /  l  .l  
329デフォルトの名無しさん:2006/02/16(木) 03:36:28
マジスカ
330デフォルトの名無しさん:2006/02/16(木) 12:16:33
char buf[100];
char str1[] = "ABC";
char str2[] = "DEF";

char s[7];

sprintf(buf, "%s%s", str1, str2);
strcpy(s, buf);

ちょっとお聞きしたいのですが、
こういう場合の s[6] == '\0' は保証されているのでしょうか?
331デフォルトの名無しさん:2006/02/16(木) 12:23:20
332デフォルトの名無しさん:2006/02/16(木) 12:24:57
>>330
その質問は strcpy(s, "ABCDEF"); で s[6]=='\0' か、っていうことだ
から、もちろん保証される。

333デフォルトの名無しさん:2006/02/16(木) 12:30:46
>>312
いくつデータ取ればいいのかは、
シミュレーションの内容で決まること。
334デフォルトの名無しさん:2006/02/16(木) 12:31:58
>>331,332
ありがとう
335デフォルトの名無しさん:2006/02/16(木) 16:06:10
フリーでcが使えれるお勧めのコンパイラありますか?
336デフォルトの名無しさん:2006/02/16(木) 16:25:27
4種類ほどあります。
337デフォルトの名無しさん:2006/02/16(木) 16:35:10
gcc!!
338デフォルトの名無しさん:2006/02/16(木) 16:36:45
>>335
スレ違い
339むう:2006/02/16(木) 16:49:26
#include <stdio.h>
#define N 3
#define M N*N
void rec_path(int prevx[N][N], int prevy[N][N], int x, int y) {
if (prevx[x][y] >= 0 && prevy[x][y] >= 0) {
rec_path(prevx, prevy, prevx[x][y], prevy[x][y]);
printf(" -> %d,%d", x, y);
} else {
printf("%d,%d", x, y);
}
}
340むう:2006/02/16(木) 16:50:39
/*幅優先探索(これで移動させる)*/
void solve(int a[N][N], int x0, int y0, int x1, int y1) {
int x, y;
int xqueue[M], yqueue[M];
int h = 0, t = 0; // head, tail
int prevx[N][N], prevy[N][N];
for (x = 0; x < N; ++x)
for (y = 0; y < N; ++y)
prevx[x][y] = prevy[x][y] = -1;
xqueue[h] = x0; yqueue[h] = y0; ++h; h %= M;
while (h != t) {
x = xqueue[t]; y = yqueue[t]; ++t; t %= M;
if (x == x1 && y == y1) break;
if (x-1 >= 0 && a[x-1][y] != 1 && prevx[x-1][y] < 0) {
prevx[x-1][y] = x; prevy[x-1][y] = y;
xqueue[h] = x-1; yqueue[h] = y; ++h; h %= M;
}
if (y-1 >= 0 && a[x][y-1] != 1 && prevy[x][y-1] < 0) {
prevx[x][y-1] = x; prevy[x][y-1] = y;
xqueue[h] = x; yqueue[h] = y-1; ++h; h %= M;
}
if (x+1 < N && a[x+1][y] != 1 && prevx[x+1][y] < 0) {
prevx[x+1][y] = x; prevy[x+1][y] = y;
xqueue[h] = x+1; yqueue[h] = y; ++h; h %= M;
}
if (y+1 < N && a[x][y+1] != 1 && prevx[x][y+1] < 0) {
prevx[x][y+1] = x; prevy[x][y+1] = y;
xqueue[h] = x; yqueue[h] = y+1; ++h; h %= M;
}
}
341むう:2006/02/16(木) 16:51:31
if (!(x == x1 && y == y1)) {
printf("cannot achieve from %d,%d to %d,%d\n", x0, y0, x1, y1);
} else {
printf("shortest path from %d,%d to %d,%d is\n", x0, y0, x1, y1);
prevx[x0][y0] = prevy[x0][y0] = -1;
rec_path(prevx, prevy, x1, y1); printf("\n");
}
}
342むう:2006/02/16(木) 16:55:08
/*メイン関数*/
int main()
{
int ichi[3][3];
int x1,y1,x0,y0,i,j;
printf("目的地は?\nX1=?\nY1=?\n");
scanf("%d%d",&x1,&y1);
printf("現在地は?\nX0=?\nY0=?\n");
scanf("%d%d",&x0,&y0);

/*配列に0,1のデータ入力(センサで取得)*/

for(i=0;i<=2;i++){
for(j=0;j<=2;j++){
printf("ichi[%d][%d]の値は?\n",j,i);
scanf("%d",&ichi[j][i]);
}
}
solve(ichi, x0, y0, x1, y1);
return 0;
}

長々とすいません。これの表示は「2,2->1,2->1,1・・・」となっているんですが
表示だけでなくそれそれに移動の命令を入れたいのですが、どうすればいいのでしょうか?
例えば2,2->1,2なら「左に移動する命令」を実行して、ロボットを移動させていきたいのです。
移動する命令は適当に「MOVE TO LIGHT」などとしてください。
最終的にはMOVE TO LIGHT -> MOVE TO TOP -> MOVE TO TOP・・・などとしたいのですが・・・
よろしくお願いします。
343デフォルトの名無しさん:2006/02/16(木) 18:51:19
読みづらい。
どこかにソースうpしてリンク貼ったほうがいいぞ
344デフォルトの名無しさん:2006/02/16(木) 18:54:52
(´;ェ;`)ウゥ・・・。ごめんなさい。
ネット初心者なもんで・・・。
345デフォルトの名無しさん:2006/02/16(木) 19:07:38
初心者=免罪符
346デフォルトの名無しさん:2006/02/16(木) 19:36:15
>>344
それは自己申告しなくてもわかるからいいよ
「長々とすいません」て気持ちはあって、
だけどどこの「うpろだ」がいいか判断つかなかった
ということくらい初心者でない人なら読めてるよ

そんなことより宿題スレで聞いた方がいいと思うが?
347むう:2006/02/16(木) 19:55:06
質問の意味はわかりますでしょうか?
これで宿題スレに投稿したいのですが大丈夫でしょうか?
348むう:2006/02/16(木) 20:10:13
宿題では微妙にないんで、どうかよろしくお願いします。
349デフォルトの名無しさん:2006/02/16(木) 22:16:34
むかつくので嫌です
350デフォルトの名無しさん:2006/02/16(木) 23:46:01
ここにいるみなさんに質問( ゜д゜)ノ

コマンドプロンクトより、実行ファイル、読み込むtxtファイルを指定、読み込み、
上下逆に表示するプログラムを作ってるんだけど、
MO1行以上のファイルを読み込んだ場合、
確保した領域外にデータを書き込むことになるから、 実行時エラーになるんだが、

どうしたらエラーがでなくなるのかわかりませんorz
どなたか教えてください(´・ω・`)

↓ソース
351デフォルトの名無しさん:2006/02/16(木) 23:48:30
#include <stdio.h>
#include <string.h>
#define MO1 10
#define MO2 1000

int main(int argc,char *argv[])
{
FILE *fp;
int i,j;
char ab[MO1][MO2];

if(argc<2){
fprintf(stderr,"*********** 操作説明 ***********\n");
fprintf(stderr,"%s ファイル名 \n",argv[0]);
}else{
if((fp=fopen(argv[1],"r"))==NULL){
fprintf(stderr,"ファイル \"%s\" が開けません\n\n",argv[1]);
fprintf(stderr,"*********** 操作説明 ***********\n");
fprintf(stderr,"%s ファイル名 \n",argv[0]);
fflush(stdout);
return(0);
}
for(i=0;fgets(ab[i],MO2,fp)!=NULL;i++){
ab[i][strlen(ab[i])-1]=NULL;
}
fclose(fp);
for(j=i-1;i>=0;i--) printf("%s\n",ab[i]);
}
return(0);
}
352デフォルトの名無しさん:2006/02/16(木) 23:49:09
自分なりに考えてはみて、
for(i=0;fgets(ab[i],MO2,fp)!=NULL;i++){
ab[i][strlen(ab[i])-1]=NULL;
}

にif-elseぶっこんで、iがMO1以上になったらforループを抜けるように

for(i=0;fgets(ab[i],MO2,fp)!=NULL;i++){
  if(i<MO1)
    ab[i][strlen(ab[i])-1]=NULL;
else
break;
}

ってしてみたんだけどうまくいかないorz
流れぶったぎって初歩的な質問ごめんなさい
353デフォルトの名無しさん:2006/02/16(木) 23:52:57
>>350
malloc()でメモリ再確保しながらするとか

それだと解放し忘れるから、自分でファイル操作関連のライブラリ作るとか

ライブラリの実用性を確かめるために公開するとか

結構耐久性あるライブラリになってきたら売り出すとか

ライセンスに破綻きらして>>350が泡を吹くとか

(`・ω・´)9m >>350は犯罪者でつね
354デフォルトの名無しさん:2006/02/17(金) 00:25:39
>>350
テキストファイル処理は易しいようで実はバッファサイズという難問が居座っているやっかいな処理だ
# 難問といってもそれはずぶの初心者にとってという程度だが

realloc あたりが使える人なら、他人に聞くまでもなく答えは薄々予感するはずだが
面倒臭そうなのでもっと便利な方法はないかと尋ねたくなる人情はわかる
355350:2006/02/17(金) 00:32:11
>>353-354
サンクス!



早速のレスうれしいんだけど、
mallock realloc … さっぱりわからない…( TДT)
356デフォルトの名無しさん:2006/02/17(金) 00:39:44
>>355
とりあえず文字列関連であればいいと思う機能
・文字列を表すなにか(クラスは無理だからBSTRみたいな何かでもいい)
・文字列連結
・文字列取り出し
つまり
typedef struct _string{ int len; char* s; } string;
string* NewString(int slen){
string* s;
s=(string*)malloc(sizeof(string));
s->len=0;
s->s=(char*)malloc(slen);
return s;
}
string* pc2s(char* s){
int len=strlen(s)+1;
string* r=NewString(len);
memcpy(r->s,s);
return r;
}
void DeleteString(string* s){
if(s!=NULL){ free(s->s); free(s) }
}
あとは略
みたいなライブラリを作ってみると楽ということだ罠
357350:2006/02/17(金) 00:46:21
>>356
ほんとくだらない質問につきあってもらってうれしいんだけど、
もう少し易しくなりませんかね?ヽ(;´Д`)ノ
358デフォルトの名無しさん:2006/02/17(金) 00:48:16
>>357
それなら簡単
ファイルサイズと同じかそれ以上のメモリをmallocで確保してあげれば良い。
malloc使いたくないなら、ZZZバイトまで使えると決め打ちして、それ以上のファイルが指定されたらコアダンプして終了。
これ最凶
359350:2006/02/17(金) 01:08:28
>>353-358

>>358さんのレス参考に
MO1以上の行数のファイル指定したら、
exit使って強制的に終了させるプログラムにしてみたら一応ちゃんと動きました。

みなさんありがとう_(._.)_
360デフォルトの名無しさん:2006/02/17(金) 01:10:46
>>359
よし良いぞ!
そうやって隠れて逃げて避けまくれ!!
最後は誰からも見えない透明人間になって死んでいけるぞ!
てか俺もうなってる
誰からも相手されない
もっとしっかり根詰めておけばよかった…
361デフォルトの名無しさん:2006/02/17(金) 05:24:39
C言語を深く知りたいならコレみたいな本ないですか?
図書スレのだとどれがいいんだかわかんない
362デフォルトの名無しさん:2006/02/17(金) 05:39:37
才能無い人間に薦める本は無い
363デフォルトの名無しさん:2006/02/17(金) 05:44:51
才能無い人間は他人に何も薦められない
364デフォルトの名無しさん:2006/02/17(金) 05:45:22
オメーに食わせるタンメンはネー
365デフォルトの名無しさん:2006/02/17(金) 05:48:16
才能がないんじゃなくて無能なだけだろw
366デフォルトの名無しさん:2006/02/17(金) 05:48:50
マジレスすると本なんか要らない
367デフォルトの名無しさん:2006/02/17(金) 07:32:37
オレ遂に見つけたよ。参考書なんかよりもすごい解り易いサイトを・・
368デフォルトの名無しさん:2006/02/17(金) 07:39:22
マジレスすれば普通にK&Rでいいんじゃね
369デフォルトの名無しさん:2006/02/17(金) 08:08:07
>>359
衝撃の幕切れ! − ここまで巧妙に仕組まれたネタレスが、かつてあったろうか?

禿ワロタ ので、age させて頂きます。
370デフォルトの名無しさん:2006/02/17(金) 09:17:47
>>361
http://nssearch.hp.infoseek.co.jp/clang/archives/2chbooks/c_lang.html

俺も 366 と同意見
本読んでる時間あるならコード書け(そのためにマニュアルをしっかり調べろ)
活字で書いてあるご託より実際のプログラムから盗め
ある程度、知識がついてきてから整理するには本がいい
371デフォルトの名無しさん:2006/02/17(金) 11:19:37
>>361 マジレスします。
>C言語を深く知りたい
「 深く 」 の意味が判らないんだけど、要するに初歩の段階はもう過ぎたし、通り一遍の
コードも書けるようになってきた。 もっと掘り下げて 「 奥義 」 的な知識を身に付けたい、
ってことだろうか?
そういうことであれば、コード書くのが一番。 奥義や深い知識なんていうのは、それを使う
必要性がなければ身に付かないと思ふヨ。
漏れは、>>370 の意見とは違って、初心者ほど良い解説書が必要と思う。
>>361 が初心者・初級者ならば、K&R と アスキー出版 「 C言語入門 」 の組み合わせが、
今でもベストだと思ってる(20年程前は、定番の組み合わせでした)。 K&R が教科書、「 C言語入門 」 が参考書。
昔の本なので、ANSI C 全盛の現在 お薦めするのはどうかなぁ と躊躇したのだが、
両書とも、ANSI C 準拠の改訂版が出てるのね!
372デフォルトの名無しさん:2006/02/17(金) 12:09:42
>>366
教科書くらいは読もうな。
373デフォルトの名無しさん:2006/02/17(金) 12:24:55
本なんかいらねーよw
2ch聞けばいいじゃん。
何で本なんかに無駄な金使わなきゃなんねーんだ。
本を買う香具師はインターネットが使いこなせない無能者。
回線切って吊れよw
374デフォルトの名無しさん:2006/02/17(金) 12:25:49
その2chで教えてくれる人はどこで聞いて来るんだ
375デフォルトの名無しさん:2006/02/17(金) 12:28:44
本書く人は実戦で覚えてくる
つまり本買わないならいきなり実戦するしかあるまい
376デフォルトの名無しさん:2006/02/17(金) 12:45:40
本っていっても日本の場合はほとんどが
翻訳した本で、日本の作者の本は初心者
向けのばかりだ。日本のライターの技術力は
低いんじゃないか? いや、日本発で世界中で
使われるようになったソフトが少ないから
こうなるのか?
377デフォルトの名無しさん:2006/02/17(金) 15:28:00
シェア獲得はブツの良さだけでは決まらないけどね
378デフォルトの名無しさん:2006/02/17(金) 18:44:01
>>377
窓のことか?
379デフォルトの名無しさん:2006/02/17(金) 19:40:05
窓はブツがいいじゃないか
エロゲとかエロゲとかエロゲとか・・
380デフォルトの名無しさん:2006/02/17(金) 21:28:27
>>361
C言語辞典
381デフォルトの名無しさん:2006/02/18(土) 00:57:45
>>361
規格票
382デフォルトの名無しさん:2006/02/18(土) 02:23:10
たしかにCの規格表は読みやすいよな
383デフォルトの名無しさん:2006/02/18(土) 06:18:35
エッチな本
384デフォルトの名無しさん:2006/02/18(土) 07:17:20
>>361
とりあえず C FAQ は全部読んどけ
385デフォルトの名無しさん:2006/02/18(土) 07:18:55
今までアルゴリズムを工夫するのダルポーで全然やってなかったが
AVL木ってマジ早いなwwwwwwww
ハッシュのほうがいいんだろうが眠い頭じゃハッシュ関数考えるのめんどくせーし、
非決定性有限オートマトンから非決定性有限オートマトンへの変換なんで
ノードがどのぐらい必要なのかとか実際にシミュらなきゃわからんから
開番地法なハッシュだと下手すりゃ藪蛇だしな。
(指数オーダーで一応上限は出るからメモリいぱぽい取るってのもアリだが

しかし、B木と違って実装楽チンなのに線形探索に比べると体感マジ早いwwwwwバロスwwww
386デフォルトの名無しさん:2006/02/18(土) 07:46:22
unsigned
387デフォルトの名無しさん:2006/02/18(土) 07:47:24
途中送信しちゃった

unsigned と signed て符号付き符号無しってゆーけど
使い勝手が全く同じなんだけどなんで?
unsigned に 負数入れても問題ないし・・・
388デフォルトの名無しさん:2006/02/18(土) 07:59:27
そうだな。
389デフォルトの名無しさん:2006/02/18(土) 08:05:03
アルゴリズムって何ですか?
390初心者:2006/02/18(土) 12:48:19
4つの数字を小さい順に並べ替えるにはどうしたらいいですか?
391デフォルトの名無しさん:2006/02/18(土) 12:52:20
コードブレイカーの問題をやってるんですけどfor文の所でエラーになります
どこがいけないのでしょうか?見て分かりましたら教えていただきたいです

エラー内容は不正なポインタの使用と出ます。

#include <stdlib.h>と<time.h>
#define N 4
int arry[N+1];
void irnd(void);

void irnd(void)
{
int i;
srand((int unsigned)time(NULL));
for(i=0;i <= N-1; i++) arry[i] = rand % 9 + 1;
}
392デフォルトの名無しさん:2006/02/18(土) 12:54:47
>>390
バブルソートで検索。
393デフォルトの名無しさん:2006/02/18(土) 12:59:44
つ rand()
394デフォルトの名無しさん:2006/02/18(土) 13:08:33
>>393
初歩的なミスに気付かずすいませんでした。でもやったー!!できました!!
大変助かりましたありがとうございますm(__)m
395デフォルトの名無しさん:2006/02/18(土) 15:15:50
http://pc7.2ch.net/test/read.cgi/pc2nanmin/1140161802/
↑ここの1なんだがCプログラミングができるようになると思う?
おれは無理だと思う。
396デフォルトの名無しさん:2006/02/18(土) 17:11:25
大丈夫、きっと「コピペ」という必殺技でできるようになるさ
397デフォルトの名無しさん:2006/02/18(土) 18:03:25
昔、delphiで少し遊んだことがあって、
その時に、forループで使ったカウンタを
ループ抜けた直後に参照すると、
「その値は不定です」みたいな感じのエラーだか
ワーニングだかが出たような記憶があるんだけど、(コンパイラの最適化の関係で、と聴いた)

C言語の場合、

for (i = 0; i < 10; i++){
  /* 適当な処理(iはいじらないよ) */
}
ここで i = 10 って保証されてんの?
398デフォルトの名無しさん:2006/02/18(土) 18:12:33
途中でbreakとかしてなければ、保証される。
399デフォルトの名無しさん:2006/02/18(土) 18:17:47
C++ 初心者なんだけど、
ループ抜けても問題ないよ。

> ここで i = 10 って保証されてんの?
これの意味がよくわからないけど
400デフォルトの名無しさん:2006/02/18(土) 18:22:01
あぁ、代入ってことか
401デフォルトの名無しさん:2006/02/18(土) 18:25:11
レスサンクス
> ここで i = 10 って保証されてんの?
i == 10 です。
大丈夫そうですね、ありがと
402デフォルトの名無しさん:2006/02/18(土) 18:34:32
Cだと大丈夫だが、C++だとiを宣言するところで、
違う時があるから注意。
403デフォルトの名無しさん:2006/02/18(土) 18:43:22
for (...) で変数を宣言すると
forブロック内でしか有効でしかなかったような気もするなぁと思って
調べてたら、C++の最新の仕様ではそうらしいね。
VS2003では問題なくブロック外でも使えちゃうけど・・。
しかも同じforループをもう一つ作っても
何も言われないなんて・・・。
404デフォルトの名無しさん:2006/02/18(土) 18:45:04
>>402
スレ違い。
駄菓子菓子。CでもC99だと
int i;
for (int i = 10; i < 10; ++i) ;
このときのiの値は保証されない。
405デフォルトの名無しさん:2006/02/18(土) 18:52:08
>>403
VC++2003で使えるのはどう考えてもバグとしかいえない
VC++6のMS拡張仕様を一応受け継いでいるから。
VC++2003からMS拡張のこのforスコープ部分だけはずすことが可能になった。
406デフォルトの名無しさん:2006/02/18(土) 18:55:53
>>405
それ2005で直ったんじゃなかったっけ?
407デフォルトの名無しさん:2006/02/18(土) 18:58:21
2005 では C++ の最新仕様に準拠したらしいですよ。
408デフォルトの名無しさん:2006/02/18(土) 21:40:57
2003ではそういうとこが多すぎて間に合わなかったんだよ
「VCはVCで作りました」って言えなくなるからね
409デフォルトの名無しさん:2006/02/18(土) 21:51:46
俺は単に互換性のためだと思うけどな。
VC6用に書かれたプログラムも標準C++に則って書かれたプログラムもコンパイルできるように。

ただforに関してVC++ 7.1(.Net 2003)ではコンパイルオプションで規格通りの挙動にできる。

そもそもここは標準Cスレだ。スレ違いだ。
410デフォルトの名無しさん:2006/02/18(土) 21:55:59
割り込みの質問ですみません。
次のコードをコンパイルして実行すると"take"と印字されると
思ったのですが、Bus Errorとなりました。
結果が腑に落ちないのですが、 文字列のリテラルを変更したから
エラーになったという理解で正しいでしょうか。環境はMac OS X
(10.4.5)でコンパイラのバージョンは gcc 2.95.2です。
よろしくお願いします。

#include <stdio.h>

int main(int argc, char* argv[])
{
char* array[] = {"sake", "toba", "ikura"};
char** p = array;

(**p)++;
printf("%s¥n", *p);

return (0);
}
411デフォルトの名無しさん:2006/02/18(土) 22:06:23
うん
412デフォルトの名無しさん:2006/02/18(土) 22:07:02
413プログラマ:2006/02/18(土) 22:17:02
えっと、番兵法や二分探索の問題です
問題1
2桁で入力された1つのくじ番号が、用意された10個の当選番号のどれかに
該当しているかどうかを判定するプログラムを作成しなさい
番兵法や、二分探索法を使ってもかまわない。
当選番号は{00.11.22.33.4.55.66.77.88.99.}です
こちらの問題の解答をどなたかおねがいします
ソースを書いてくれるとうれしいです。
414デフォルトの名無しさん:2006/02/18(土) 22:20:43
415デフォルトの名無しさん:2006/02/18(土) 22:21:36
>>413
マルチ乙。
自分でやらない奴がプログラマきどってんじゃねーよ
416デフォルトの名無しさん:2006/02/18(土) 22:38:13
>>410
つ -Wwrite-strings

たまには-Wall以外の警告オプションもつけてみよう。たまには、ね。
俺はこれと-Wcast-qualはつけることの方が多いが。
417デフォルトの名無しさん:2006/02/19(日) 01:21:08
-Wcast-qualはちゃんと気をつけて書いてても
達成できないことの方が多いから不便過ぎる。
特にfree(void *)の引数にconst char *を
castで渡せなくなるのは辛い。
418デフォルトの名無しさん:2006/02/19(日) 02:06:47
>>417
どんな書き方をすればそんなことをしなければならなくなるのかと

ちなみに curses 使うと char* に文字列リテラルを渡すことがよくあるから両方のオプションをつけると結構困る
419デフォルトの名無しさん:2006/02/19(日) 02:07:33
該当外の話だったらすいません。
コマンドプロンプトからプログラムを結合させる、というのが条件の宿題をやっていたのですが
結合時に「エラー E2133: コマンド "ilink32.exe"を実行出来ない」とメッセージが出てできません。
どうすれば直るのでしょうか?

他にメッセージとしてはfscanfの際データ数を読み取る変数をまったく使っていないため
「警告W8004 "変数名"に代入された値は」使われていない」だけです。

使用コンパイラはborland bcc32です。お願いします
420デフォルトの名無しさん:2006/02/19(日) 02:09:41
>>418
俺が想像するにこんな感じではないだろうか。
const char *f(void)
{
  char *p = malloc();
  if (p)
  {
    //ここでpにあれこれ書き込む。
  }
  return p;
}
421デフォルトの名無しさん:2006/02/19(日) 02:34:31
俺だったら構造体(の不完全型)で隠蔽して必要な処理を関数にして提供するなあ
破棄もそれらを提供するモジュールの中でやる

# 効率を重視する場合は別だが
422417:2006/02/19(日) 03:58:45
たとえばこんな感じの場面で(細かい処理は省略)
コレは構造体のメンバの型をnon-constにすべきなの?

struct mystruct {
 const char *name; /* 名前は変更不可 */
 int value;
}

struct mystruct *mystruct_new(const char *name, int value) {
 struct mystruct *obj;
 obj = malloc(sizeof *obj);
 obj->name = strdup(name);
 obj->value = value;
 return obj;
}

void mystruct_free(struct mystruct *obj) {
 free((char *)obj->name); /* ここでcastしないと警告 */
 free(obj);
}
423デフォルトの名無しさん:2006/02/19(日) 04:38:17
>422
Cだからな。
Cでそこら辺を美しさのためにいろいろ頑張るぐらいなら素直にC++使えって感じ?
424デフォルトの名無しさん:2006/02/19(日) 07:30:36
>>422
俺はnon-constにする。変更されて困るなら公開しなきゃいいだけだし
425デフォルトの名無しさん:2006/02/19(日) 08:33:29
プッ
426419:2006/02/19(日) 10:49:10
borlandスレがあったことに今気づきました。
スレ汚しすみませんでした。
427デフォルトの名無しさん:2006/02/19(日) 13:30:31
scanf関数はあまり使わない方がいいと言われていますが、
これを使わないで安全に仕上げるには何を使ったらよろしいですか?

よくfgetc、sやsscanf、atoi。等で代用されてる物を見ますが他に
安全な関数は何かを教えて頂けませんか?お願いします。
428デフォルトの名無しさん:2006/02/19(日) 13:48:40
>>427
まず、一体何をやりたいんだ?
scanf が何故危険なのか判っているのか?

なんでも単純に「これは安全、これは危険」というように
切り分けられると思ったら大間違い。

プログラミングのみではなく、全てにいえる事だが、
個々の要件の状況と、その関数の挙動を把握した上で
「この場合では、この関数を使うとこういう問題が発生するから
使うべきではない」という風に判断するべきだろ?
429デフォルトの名無しさん:2006/02/19(日) 13:48:50
一応標準規格外(M$仕様)ならばscanf_sというのがCRTに存在しているけど
標準の範囲内ならばscanfはfgets+sscanfで代用するのがふつう。
430デフォルトの名無しさん:2006/02/19(日) 13:58:17
>>428
そこまでは把握してませんでした。おっしゃる通りです。
もう一度ライブラリの観察に行って理解してきますorz

>>429
規格とかの話には全くついて行けないです。
ですがscanfはfgets+sscanfで代用の辺りを扱えるように勉強します。

答えてくださり有難う御座います。
431デフォルトの名無しさん:2006/02/19(日) 14:27:25
正直、キチガイじみた宣言の読み方がいつまでたっても分かりません・・・
・・・おまえら、完璧に読めますか?
432デフォルトの名無しさん:2006/02/19(日) 14:49:20
>>431
具体的に何が基地外じみてる?typedefとかか?
ポインタとカッコが混ざると、あれは演算子の優先順位が決まって
いる以上、複雑怪奇に見えても仕方ない。
433デフォルトの名無しさん:2006/02/19(日) 14:51:32
atoiとかitoaとかワカメワカメ。
434デフォルトの名無しさん:2006/02/19(日) 14:56:33
int atoi(const char *s);
char *itoa(int value, char *string, int radix);

(但しitoaは標準関数ではない)

どこが難しいのかと・・・・
435デフォルトの名無しさん:2006/02/19(日) 15:08:28
ちゃんと「読み方」って書いてあるのに・・・
436デフォルトの名無しさん:2006/02/19(日) 15:42:46
>>435
だから分からないのはお前だけだって。勉強しなおせ。
437デフォルトの名無しさん:2006/02/19(日) 15:54:03
だから文意を読み取れないのは
438デフォルトの名無しさん:2006/02/19(日) 15:56:00
他人に正しく理解して欲しければ、正しい日本語の使い方から
まず覚えまちょーね。
439デフォルトの名無しさん:2006/02/19(日) 15:58:56
>>438
kwsk
440デフォルトの名無しさん:2006/02/19(日) 16:00:19
すげー、入れ食いだw
441デフォルトの名無しさん:2006/02/19(日) 16:01:10
馬鹿ばっか。
442デフォルトの名無しさん:2006/02/19(日) 16:01:18
kwsk
443デフォルトの名無しさん:2006/02/19(日) 16:03:54
ここはバカの無限ループスレ?
444デフォルトの名無しさん:2006/02/19(日) 16:11:34
教わるほうはともかく、教えるほうはもちっとしっかりするように。
445デフォルトの名無しさん:2006/02/19(日) 16:25:30
何ここ。結局、宣言の読み方を教えろって厨が来てるわけか。
そんなもん、本読めよ。基本中の基本だぞ。
446デフォルトの名無しさん:2006/02/19(日) 16:37:06
テンプレだな
447デフォルトの名無しさん:2006/02/19(日) 16:40:26
strlen関数を使わずに自分で作った関数で、
文字列の長さを確認することは可能でしょうか?
448デフォルトの名無しさん:2006/02/19(日) 16:40:49
>>447
超可能です
449デフォルトの名無しさん:2006/02/19(日) 16:43:48
450デフォルトの名無しさん:2006/02/19(日) 16:44:26
>>448
ぜひ、御教授願いたい!!
451デフォルトの名無しさん:2006/02/19(日) 16:50:06

size_t __cdecl strlen (
const char * str
)
{
const char *eos = str;

while( *eos++ ) ;

return( (int)(eos - str - 1) );
}
452デフォルトの名無しさん:2006/02/19(日) 16:53:20
#include <string.h>
#include <stdio.h>

int sl(const char* s){
return strcspn(s,"\0");
}

しらんがな
453デフォルトの名無しさん:2006/02/19(日) 16:54:11
>>452
バカ丸出し
454デフォルトの名無しさん:2006/02/19(日) 16:55:04
int Baka(const char *unko){int count=0;while(*unko++)count++;return count;}

int Baka(const char *unko){int cnt=0;for(cnt=0;cnt <= sizeof(unko);cnt++);return cnt;}

俺天才
455デフォルトの名無しさん:2006/02/19(日) 17:09:06
#include<stdio.h>
int strlength(char*);
main(){
char *a;
printf("文字列を入力してください:");
gets(a);
printf("文字列の長さは%dです。\n",strlength(a));
}
int strlength(char *a){
int i;
for(i=0;a[i]!="\0";i++){}
return i;
}

度ー駄目でっか(?_?)
456デフォルトの名無しさん:2006/02/19(日) 17:13:28
size_t MyStrLen( const char * p)
{
return * p?MyStrLen( ++ p )+1:0;
}
457デフォルトの名無しさん:2006/02/19(日) 17:17:23
>>455
用意した文字列にナル文字が無い場合はエラー。
458デフォルトの名無しさん:2006/02/19(日) 17:21:20
>>457
ヌルって渡されないんですか?
459455:2006/02/19(日) 17:26:35
'\0'したらできました。
失礼しまつた。
460デフォルトの名無しさん:2006/02/19(日) 17:44:38
- for(i=0;a[i]!="\0";i++){}
+ for(i=0;a[i]!="\0"[0];i++){}
461デフォルトの名無しさん:2006/02/19(日) 18:14:21
>>460
余りに無意味。""[0]でいいじゃんw
462デフォルトの名無しさん:2006/02/19(日) 18:19:12
>>455
これがダメだな。

for(i=0;a[i]!="\0";i++){}

a[i] != "\0" ではない。a[i] != '\0' だ。
463デフォルトの名無しさん:2006/02/19(日) 18:20:28
はぁ、クドい性格
464デフォルトの名無しさん:2006/02/19(日) 18:42:47
>>462
>459
465デフォルトの名無しさん:2006/02/19(日) 18:57:35
俺ならこうする。

int i = 0;
while(a[i]) i++;
466デフォルトの名無しさん:2006/02/19(日) 19:03:31
>>390
バイトニックソートで検索
467デフォルトの名無しさん:2006/02/19(日) 19:04:01
俺ならこうだ!

size_t strlength(const char *p)
{
 size_t n = 0;
 while (*p++) n++;
 return n;
}

ていうか素直に strlen() 使うな・・・。
468デフォルトの名無しさん:2006/02/19(日) 19:05:58
建前用ソースと
本番用ソースに分ける
469デフォルトの名無しさん:2006/02/19(日) 19:10:57
int Baka(const char *unko)
{
 int cnt=0;
 for(cnt=0;cnt <= sizeof(unko);cnt++);
 return cnt;
}
これはだめなの?
>>467とかだとポインタとしてもらった場合
永遠にループするんじゃないんですか?
470デフォルトの名無しさん:2006/02/19(日) 19:11:57
しまった〜〜sizeofは型のバイト数だった=〜〜〜〜〜俺死ぬは
471デフォルトの名無しさん:2006/02/19(日) 19:13:16
後は、前提を無視して
#define mystrlen(x) strlen(x)
とか
472デフォルトの名無しさん:2006/02/19(日) 20:09:41
inline size_t mystrlen(const char *s)
{
    return (size_t)(strchr(s, '\0') - s);
}
473デフォルトの名無しさん:2006/02/19(日) 20:16:33
int Strlen( const char *s ) {
 char *buf=strdup( s );
 int result = sprintf( buf, "%s", s );
 free( buf );
 return result;
}
474デフォルトの名無しさん:2006/02/19(日) 20:18:03
すみません。
mainの変数を別の関数で代入したいんですが、
グローバルにするか戻り値で返すしか方法はないんでしょうか?
ただコードが長いので関数別に分けたいのですが、
変数が多すぎて対処できないです><
475デフォルトの名無しさん:2006/02/19(日) 20:19:11
>>474
引数に変数のポインタ渡せば?
476デフォルトの名無しさん:2006/02/19(日) 20:33:34
>>474
>変数が多すぎて対処できないです><

変数を用途別に分類して構造体にするといい
477デフォルトの名無しさん:2006/02/19(日) 20:53:14
>475-476
ありがとうございます!
解決しました。
478デフォルトの名無しさん:2006/02/20(月) 06:33:00
abc は unsigned long型の変数
p は ポインタ変数 としてみてください。
キャスティングに関する質問なのですが

p=(unsigned char *)abc;

上の文はどのように動作するのでしょうか。
adをunsigned char型としてpに入れるということでしょうか。
それともadを無理やりpに入れた上、そのpのadが指し示すメモリの中身の値がunsigned char型ということでしょうか。
479デフォルトの名無しさん:2006/02/20(月) 07:03:36
>>478
unsigned long型の変数をunsigned char *と見なして
評価した値がpに突っ込まれる
つまりそれが運良く、unsigned charの領域を指してる
場合もあるだろうが、通常は全く関係ない領域を指す事になる


つーか、んなコーディングは止めろ
480デフォルトの名無しさん:2006/02/20(月) 07:19:20
>>479
ありがとうございます。
学校の課題で出されたプログラムでして、ここだけがどうも理解できなかったのです。
481デフォルトの名無しさん:2006/02/20(月) 08:48:36
ちょ・・・・じゃんけんゲームができないよ・・・・・・・・。

配列の操作を詳しく解説しているサイトを教えてください。
482デフォルトの名無しさん:2006/02/20(月) 09:20:15
>>481
じゃんけんゲームなら配列は要らないと思うのだが。どうして配列が必要なんだ?
1/3の確率でグーチョキパーが出ればいいだけだろ?
483デフォルトの名無しさん:2006/02/20(月) 09:27:07
>>478
これはコンパイラやCPUによって違うことだが、 char *p; と宣言された
p は sizeof(p) で調べると4だったりする(これは sizeof(char *) が4と
いうのと同じこと)。で、sizeof(unsigned long) も4だったりする。すると
char * と unsigned long 型のそれぞれの変数は代入しても内容が失われ
ない(絶対失われないという保証はないかも知れないが、たいていの環境で
これができるようだ)。

コンパイラやCPUによって違うというのは sizeof(unsigned long) と
sizeof(char *) が違う値の場合があるからだ。なのでポインタ型以外
からキャストしてポインタとして代入するコードはどうしても必要な
時以外は書かない方がいい。書くとしてもビット数を意識して書か
ないと他の環境との互換性がなくなる。
484デフォルトの名無しさん:2006/02/20(月) 09:29:55
>>482
猫でも分かるみたいに仮想のボードを作りたいです。
123
A
B
C
という感じにです。

charと2バイト文字の扱いがまだ全然理解出来ていないのと、
2次元配列も全くですね。
コンパイルできるのに表示されなし対処できないので勉強したいんですが。
有名な解説サイトとかがありましたら教えて頂きたいです。

無さそうですので自分で探す事にします。すいませんでした。
485デフォルトの名無しさん:2006/02/20(月) 09:34:52
>>484
つ[初心者歓迎スレ]
486デフォルトの名無しさん:2006/02/20(月) 10:06:28
>>486
2次元配列についてだけ簡単に書いておいてあげよう。

まず、C言語には2次元配列というものはない。(がーん)
なので1次元の配列を1次元の配列の要素に入れる形で2次元を実現する。
char a[10][20]; と書いた場合、 char 型で20要素のある配列を10要素
宣言したことになる。(これ以上の多次元配列も考え方は同じ)
487デフォルトの名無しさん:2006/02/20(月) 10:29:01
>>485
もう一度そのようなスレを探して見ます。

>>486
という事は計20*10で200要素ですよね。もっと詳しくあるような
感じですのでやっぱりサイト探しを続けます。
488デフォルトの名無しさん:2006/02/20(月) 10:30:32
こういう誰でも知ってるようなことを得意顔で言う香具師ってまだいたのね
ホントレベル低いなここw
489デフォルトの名無しさん:2006/02/20(月) 11:39:01
>>486
2次元配列がないというのは間違い
おまえが言ってるのが *規格で定められた* 2次元配列の定義だ
490デフォルトの名無しさん:2006/02/20(月) 11:39:51
C言語なら俺に聞け!
491デフォルトの名無しさん:2006/02/20(月) 12:31:06
規格規格いう奴は、頼むからISO/IEC 9899:1999の何ページの
何行に書いてあるかまで書いてくれないか。

どこまで本当の事を言っているのかわからん。
492デフォルトの名無しさん:2006/02/20(月) 12:43:57
>>491
索引って知ってるか?
493デフォルトの名無しさん:2006/02/20(月) 13:43:47
JIS X3010-1993はダメか?
あと、C99は高級アセンブラとしてのCを破壊したエセ規格と言っておく
494デフォルトの名無しさん:2006/02/20(月) 14:05:30
>>493
それがさ、このスレにはJIS X3010:2003でないとダメだと言い張る
馬鹿がいんのよ。

C99に準拠したコンパイラがほんの少ししかないにもかかわらず、
「最新の規格だ」という理由だけで。
495奈々@スーパープログラマ ◆Xl6OTFSLJ2 :2006/02/20(月) 15:49:25
2次元配列のアドレスの渡し方が分かりません。

例えば、

int hage[10][20];

と宣言した変数のアドレスを関数に渡して
関数内で *x[4][5] みたいな感じで扱いたいのですが、
上手くいきません。
関数の()内での宣言のしかたも、渡し方も分かりません。

void kansu(int**);

としても上手くいきません。
渡すときも、

kansu(&&hage);

とかやってみたのですが上手くいきません。
どうすれば思い通りにいきますでしょうか?
496デフォルトの名無しさん:2006/02/20(月) 15:50:08
コマンドライン上に書き込まれた文字を読み取っていって(文字列の例:12df3)
それぞれの文字ごとに処理を行いたいのです。
char ch;
while((ch=getchar())!=***){
/* 処理 */
}
***にどんなものを入れればいいのですか?
そもそもこのwhileの使い方でこのような処理は可能ですか?
497デフォルトの名無しさん:2006/02/20(月) 15:54:46
>>495
うまくいかない、だけじゃあわからん
どう書いたらどういうエラーが出たのか書いてよ
498デフォルトの名無しさん:2006/02/20(月) 15:56:26
>>496
#include <stdio.h> して EOF

コマンドラインとか言うと引数みたいだぞ
499デフォルトの名無しさん:2006/02/20(月) 15:56:26
>>495
C-FAQ 6.18を256回読め

>>496
ダメ
×:char ch;
○:int ch;
while((ch=getchar())!=EOF) {
  /* 処理 */
}
なら多分期待通りの処理になる
>>497,>>499
はい。
501デフォルトの名無しさん:2006/02/20(月) 16:02:17
>>498-499
thx!!
502デフォルトの名無しさん:2006/02/20(月) 16:11:29
奈々がスーパープログラマなら俺はミラクルを起こせそうだ。
>>497,>>449
ありがとうございます。
とりあえず無理みたいですね。
C-FAQを見ても二次元配列の、二次元目(?)の大きさは渡さなければならないみたいですし。
それを宣言の時点でしなければならないのがネックです。

504デフォルトの名無しさん:2006/02/20(月) 16:27:39
2次元配列の中の1つの要素を渡したいだけならその要素の
型で渡せばいいだけだと思うが。何をしたいんだ?

int a[10][20]; ならば func(a[5][2]); という感じで渡せる。
受ける方は int func(int n); のような感じでできる。
505デフォルトの名無しさん:2006/02/20(月) 17:24:10
ファイルロックのテストをしてるんですが、
1万ループの内側でfopenを使って読み出してはカウントアップして書き出しています。
これを2プロセスで実行させると以下のエラーが出てしまいます。
kern.maxfiles limit exceeded by uid 1001, please see tuning(7).

このエラー自体はチューニングすればいいのですが、まったく同じことをPerlで
やったらエラーが出ずにうまくいきます。これはどういった違いなんでしょうか?
fopenで開いたファイルは完全に後始末されていないということでしょうか?
506デフォルトの名無しさん:2006/02/20(月) 17:25:12
char *http_ans = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"\
"<html>\r\n<p>html文書</p>\r\n<body>\r\n<form method="get" action="next.html">\r\n\r\n</body>\r\n</html>";

syntax error before "get"のエラーが出ます。
どこがまずいんでしょうか?
507デフォルトの名無しさん:2006/02/20(月) 17:29:28
>>506
> "<html>\r\n<p>html文書</p>\r\n<body>\r\n<form method="get" action="next.html">\r\n\r\n</body>\r\n</html>"

× "get"
○ \"get\"
508506:2006/02/20(月) 17:36:56
>>507
ありがとうございます!

509デフォルトの名無しさん:2006/02/20(月) 17:43:41
>>505
fclose() してない、などというオチは許さない。
510506:2006/02/20(月) 17:50:22
すみません

文字コードの問題で、「 " 」 → 「 \" 」
という理解でいいでしょうか?

あと、こういう知識はどうやって得るものなのでしょうか?

511デフォルトの名無しさん:2006/02/20(月) 18:03:38
>>510
「C言語 エスケープ文字」でぐぐる
512デフォルトの名無しさん:2006/02/20(月) 18:08:27
#include<stdio.h>
void inputarray(int*,int);
main(){
int i=5,c;
int *p;
inputarray(p,i);
printf("入力された値:");
for(c=0;c<i;c++){
printf("%d",p[c]);
}
}
void inputarray(int *p,int i){
int c;
printf("%d個の整数を入力してください:\n",i);
for(c=0;c<i;c++){
scanf("%d",p[c]);
}
return;

どう間違ってるかわかる方いますか?
教えていただきたいのですが・・・。
513デフォルトの名無しさん:2006/02/20(月) 18:13:03
>>512
ポインタを理解していないこと
ポインタが指し示す先には実体が存在しなければならない。
514デフォルトの名無しさん:2006/02/20(月) 18:24:18
>>510
むしろ、「\r」、「\n」は理解しているのに、
「\"」を理解していない方が不思議だ。
515デフォルトの名無しさん:2006/02/20(月) 18:40:51
>>512
とりあえず、
int *p; を int p[5]; に

scanf("%d",p[c]); を scanf("%d",&p[c]);
にしてみ。
細かいことは指摘しないが。
516512:2006/02/20(月) 18:51:17
>>513,>>515
このような低級な質問に、真剣な回答をくださって
ありがとうございます。
517デフォルトの名無しさん:2006/02/20(月) 18:55:43
>>516
きっとキリバンだったからだな
518デフォルトの名無しさん:2006/02/20(月) 21:34:15
可変数引数を実装した関数を作ったんだが
整数などはうまく取り出せたが文字列がうまくいきません。
とりあえずもう少し調べてきます。
519デフォルトの名無しさん:2006/02/20(月) 21:40:51
>>518
>とりあえずもう少し調べてきます。 

久々のクリーンヒット
520デフォルトの名無しさん:2006/02/20(月) 22:01:46
>>518
ここはお前の日記帳じゃない!
521デフォルトの名無しさん:2006/02/20(月) 22:13:51
>>511
ありがとうございます!

>>514
いや〜、どうしてでしょうね
でもぐぐってみたら確かに読んだことのある知識でした。
NULL文字以外使ったことなかったですw
522デフォルトの名無しさん:2006/02/20(月) 22:22:29
>>493
JIS X3010:2003でないとダメだ。
「最新の規格だ」という理由で。
523デフォルトの名無しさん:2006/02/21(火) 07:21:59
>>518
フェイントすか。
524デフォルトの名無しさん:2006/02/21(火) 10:37:00
ああ、技ポイント0でスタンさせるんだろ
525デフォルトの名無しさん:2006/02/21(火) 16:42:24
>>493
JIS X3010-1993は既に廃止されていて規格でも何でもないんだが。
規格の話をするならC99が唯一の規格なんだからそれに従わなきゃだめだろう。
実際にプログラムを組む場合とは話が違う。
526デフォルトの名無しさん:2006/02/21(火) 17:26:35
>>525
廃止じゃなく改正だがな。

無論旧規格にはもはや有効期限は存在しない。
527デフォルトの名無しさん:2006/02/21(火) 17:47:19
fopen( ,"+r")
で開くとなぜかエラーが出てしまうのですがなぜなんでしょうか。
fopen( ,"r")
だと何も問題はなかったのですが。
528デフォルトの名無しさん:2006/02/21(火) 17:52:04
>>527
"+r"なんてモードは存在しないから
"r+"は存在する

下記のURLを16回読め
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/fopen.3.html
529デフォルトの名無しさん:2006/02/21(火) 18:09:49
URL読んでどうするんだろう・・・
530デフォルトの名無しさん:2006/02/21(火) 18:13:15
えいちてぃーてぃーぴぃころんすらっしゅすらっしゅだぶりゅだぶりゅだぶりゅぅどっとりなっくすどっとおーあーるどっとじぇぃぴぃすらっしゅ・・・
531デフォルトの名無しさん:2006/02/21(火) 18:24:48
舌を噛んで氏ねという事ではないか?
532デフォルトの名無しさん:2006/02/21(火) 18:28:54
URLを16回読んだらfopen()のオプションが完璧にわかりますた
533デフォルトの名無しさん:2006/02/21(火) 18:38:29
すげぇ神のURLだなwwwwwwwww
534デフォルトの名無しさん:2006/02/21(火) 18:44:57
i = *p; と i = p; が区別できないアフォがいるようだな
535デフォルトの名無しさん:2006/02/21(火) 19:23:15
Cスレでポインタの区別が付かないのは恥ずかしいな
*URLを読めで良いのか?
536デフォルトの名無しさん:2006/02/21(火) 19:35:24
>>528はJava厨ってことでFA
537デフォルトの名無しさん:2006/02/21(火) 19:41:12
Javaにもポインタはあるけどな
a == bとa.equals(b)の違いがわからない奴はJava厨にも値しない
538デフォルトの名無しさん:2006/02/21(火) 20:05:25
VBにもあるし、暗黙に使ってることを考えればフォン・ノイマン型アーキテクチャのコンピュータ上のプログラムは全て使ってるな
539デフォルトの名無しさん:2006/02/21(火) 20:37:05
>暗黙に使ってることを考えれば

でた、何とでも使い回せる免罪符
540デフォルトの名無しさん:2006/02/21(火) 20:45:03
ところで518よ。わかったのか?
541デフォルトの名無しさん:2006/02/21(火) 22:30:43
たーらこーたーらこーたーっぷりーたーらこー
542デフォルトの名無しさん:2006/02/21(火) 23:46:22
ソートの勉強してて、挿入ソートのコード書いたはいいんだけど10個もエラー出やがった。
エラーメッセージは
C:\c_code\Sort\insert_sort\insert_sort.cpp(23) : error C2143: 構文エラー : ']' が ';' の前に必要です。
C:\c_code\Sort\insert_sort\insert_sort.cpp(23) : error C2143: 構文エラー : ';' が ']' の前に必要です。
C:\c_code\Sort\insert_sort\insert_sort.cpp(23) : error C2143: 構文エラー : ';' が '{' の前に必要です。
C:\c_code\Sort\insert_sort\insert_sort.cpp(23) : error C2143: 構文エラー : ';' が '}' の前に必要です。
C:\c_code\Sort\insert_sort\insert_sort.cpp(25) : error C2143: 構文エラー : ')' が ';' の前に必要です。
C:\c_code\Sort\insert_sort\insert_sort.cpp(25) : error C2059: 構文エラー : ')'
C:\c_code\Sort\insert_sort\insert_sort.cpp(26) : error C2146: 構文エラー : ')' が、識別子 'i' の前に必要です。
C:\c_code\Sort\insert_sort\insert_sort.cpp(26) : error C2059: 構文エラー : ';'
C:\c_code\Sort\insert_sort\insert_sort.cpp(26) : error C2059: 構文エラー : ')'
C:\c_code\Sort\insert_sort\insert_sort.cpp(26) : error C2143: 構文エラー : ';' が '{' の前に必要です。

ソースは間違ってないと思うんだけどな。でも間違ってるからエラー出るんだよな。
30分にらめっこしたけど分からん。どこが間違ってるか指摘してくれ。
543デフォルトの名無しさん:2006/02/21(火) 23:47:02
そーす

#include <stdio.h>
#define N 8;

void insert_sort(int d[], int top, int end){
int i,j,tmp;

for(i = top + 1; i <= end; i++){
tmp = d[i];
for(j = i - 1; j >= top; j--){
if(d[j] > tmp)
d[j+1] = d[j];
else
break;
}
d[j+1] = tmp;
}
}

void main(){
int i;
int d[N] = {10,20,40,70,60,80,30,50};

insert_sort(d, 0, N-1);
for(i = 0; i < N; i++){
printf("%d ",d[i]);
}
printf("\n");
}
544デフォルトの名無しさん:2006/02/21(火) 23:50:36
>>542
お前の態度が気に入らない
545デフォルトの名無しさん:2006/02/21(火) 23:56:28
>>543
#define N 8;



#define N 8
546デフォルトの名無しさん:2006/02/21(火) 23:57:16
#define N 8
お話にならん
547デフォルトの名無しさん:2006/02/22(水) 00:00:54
確かに話しにならんな
thx
548デフォルトの名無しさん:2006/02/22(水) 00:03:26
23行目から上の部分、プリプロセッサで#defineを展開すると理解できるかもしれないね
549デフォルトの名無しさん:2006/02/22(水) 00:07:57
strcpy()とsqrt()とmalloc()とprintf()を実装せよ。Linux上で。
もちろん元々実装されている機能(mallocとかreallocとかfprintfとか)を利用してはならない。
C言語で書かなくてもよい。
面接試験で合格したら今までのレポート点が0点でもOK。

この課題をこなしたい。strcpyとsqrtは簡単だったが残りって難しいよね?
解答か勉強するためのインデックスを教えとくれ。
550デフォルトの名無しさん:2006/02/22(水) 00:10:42
氏ね
551デフォルトの名無しさん:2006/02/22(水) 00:15:35
FreeのOSのソースを嫁
552549:2006/02/22(水) 00:18:40
やっぱりCPUの命令セットやOSの入出力部分を知らないと書けないのかな?
Cの知識とアセンブラの初歩だけでどうにかなるようなら非常に嬉しいんだけど。
553デフォルトの名無しさん:2006/02/22(水) 00:19:14
だから FreeのOSのソースを嫁ってんだろ。
554549:2006/02/22(水) 00:24:41
>>553
OSじゃなくて基本ライブラリのソースだよね?
555デフォルトの名無しさん:2006/02/22(水) 00:27:15
意味のない分類をするな。
556549:2006/02/22(水) 00:28:43
意味のないってどういうことですか?
OSとは違うでしょ
557デフォルトの名無しさん:2006/02/22(水) 00:29:17
じゃぁ聞くが、基本ライブラリって何ですか?
558549:2006/02/22(水) 00:30:04
質問を質問で返さないでください!
559549:2006/02/22(水) 00:30:12
なんかオレの偽物が頑張ってる…
560デフォルトの名無しさん:2006/02/22(水) 00:30:52
採点者がみつけられないようなマイナーなCライブラリを
漁ってきてコピペすればよかろ
561549:2006/02/22(水) 00:30:53
俺!俺!俺が本物だよ!><
562デフォルトの名無しさん:2006/02/22(水) 00:33:27
OSって言うからダメなんだよ。
範囲が広くてあいまい過ぎるっしょ。
カーネルって言えば話が通じるんじゃね?
563549:2006/02/22(水) 00:34:09
サンダース?
564549:2006/02/22(水) 00:36:00
ケンタッキー?
565デフォルトの名無しさん:2006/02/22(水) 00:36:43
>>549
落ち着いて息を整えて「ゲム・ギル・ガン・ゴー・グフォ」と唱えるんだ
566549 ◆fbwS767l.2 :2006/02/22(水) 00:41:20
>549の本物です(=>559)。

>560
面接試験なのでそれは無理。

>562
「カーネル」だとオレのスキルじゃつらいな…
「glibcの○○.asmを熟読汁」とか「カーネルソースの○○.cを嫁」だと頑張ればどうにかなりそうな気がするけど。

>565
7回唱えた。でもダメだった。
567デフォルトの名無しさん:2006/02/22(水) 00:45:31
>>549
OSが指定されててもなぁ・・・
strcpy():for()と代入でなんとか
sqrt():数列で求めるとか ttp://www004.upp.so-net.ne.jp/s_honma/root2/root2.htm
    もしくは実装されているライブラリを見る
malloc():OS依存、よくわからん
printf():書式面倒だけど、直感で出来るかも(書式を全て網羅するのは大変かな)
568デフォルトの名無しさん:2006/02/22(水) 00:45:53
malloc なんて、適当に大きなメモリ持っといて、
そこから切り出して返しゃええやん。

printf も実装が面倒なだけで、難しい訳じゃない。
569デフォルトの名無しさん:2006/02/22(水) 00:51:13
mallocをnew使ってやってみるとか
無理かな
570549 ◆fbwS767l.2 :2006/02/22(水) 00:57:14
>>567
printfの書式網羅以外の部分だけでも教えて頂けると嬉しかったりする。

>>568
>適当に大きなメモリ持っといて、
このやり方がわからないんです。
もちろんデカい配列を宣言しといて使いまわすってのはナシね。

>>569
そのやり方でOKなら書けるけど…。
たぶん「ダメ」って言われる。



これって相当難しい課題なんでしょうか?
最初は深く考えていなかったんだけど書き込みしているうちにそんな気がしてきた。
571デフォルトの名無しさん:2006/02/22(水) 01:03:50
>>549

>strcpy, printf
これができないなら絶対に向かない仕事だ

>sqrt
開平わかんねーなら中学の先生にでも聞け

>malloc
NULL 返せりゃいいだけじゃん
572デフォルトの名無しさん:2006/02/22(水) 01:03:57
自分のレベルに合わせればいいんじゃねーの?
てかLinuxのmallocなんてソースが手に入るんじゃねーの?
それ丸写しすりゃ完成ジャン。

既存のmallocとは異なる方法じゃなきゃならんのか?
573549 ◆fbwS767l.2 :2006/02/22(水) 01:07:51
>>571
strcpyは簡単だったけどprintfは今のところわかんない。
別に仕事でしてるわけじゃないよ。

sqrtは中学の授業じゃ無理です。
零点を求めるタイプのNewton法だから普通の実装なら少なくとも高校数学が要る。

>>malloc
>NULL 返せりゃいいだけじゃん
知ってるなら教えてよ。お願い。
574デフォルトの名無しさん:2006/02/22(水) 01:15:57
普通のヤツじゃわからん。詳しい暇人が現れるのを待て。こういうことでFA?
575デフォルトの名無しさん:2006/02/22(水) 01:17:28
>>573
ちょっとVCのprintf()を掘り下げてみたけど、
fprintf()とかの共通関数を作ってその中で文字列操作をゴリゴリやってるね

malloc()は本当にわからん
OS依存だろうが…
576デフォルトの名無しさん:2006/02/22(水) 01:17:35
void *malloc() { return NULL; }

冗談抜きで、これを受け入れられないプログラムは strictly conforming program ではない
577デフォルトの名無しさん:2006/02/22(水) 01:18:06
何か>>576の人生が冗談に思えてきた・・・
578デフォルトの名無しさん:2006/02/22(水) 01:22:27
開発工数に1分以上かかったら減点だろうな
579 549 ◆fbwS767l.2 :2006/02/22(水) 01:28:10
質問しているうちにだんだんと頭が整理できてきた。ような気がする。気のせいかもしれない。
申し訳ないけどそろそろ寝ます。

みなさんありがとう。
>>576
自信がつきました。Thx.
580デフォルトの名無しさん:2006/02/22(水) 01:56:06
あるソースを見たら

int i = NULL;

ってあったけど、これってOKなの?
コンパイラによっては、ワーニングが出たり出なかったりするけど。
ワーニングが出るときは、
たぶんNULLの値が(void *)0の値になっていて
int i がポインタでないので型が一致していない・・・と推測しているのだが。
581デフォルトの名無しさん:2006/02/22(水) 02:00:10
Cで浮動小数点演算のオーバーフローを、何とかして検出させることは出来ないでしょうか?
検索でアセンブリコードを混ぜるやり方が有りましたが、アセンブリは分からないものですから・・・
何か妙案を賜れればと思います。宜しくお願いします。
582デフォルトの名無しさん:2006/02/22(水) 02:08:41
void f(void){
 int i;
 この関数での処理
}


int main(void){
 f();
 その他の処理
}

というようなプログラムがあったとします。
関数f()で取られたiなどのメモリは、関数f()が実行を終えて、
その他の処理に移ったら、解放されるものでしょうか?
それとも、こちらで明示的に解放してあげなければならないのでしょうか?
583デフォルトの名無しさん:2006/02/22(水) 02:10:02
質問してる奴のレベルが酷すぎ・・・いくらなんでも・・・
584デフォルトの名無しさん:2006/02/22(水) 02:13:46
>582
そうです。明示的に開放してあげなければなりません。
よく気づきましたね。さすがです。
585デフォルトの名無しさん:2006/02/22(水) 02:14:51
>>582
f()が実行を終えたら勝手に開放してくれる。
明示的に開放する手段はない。




質問です。
私の回答は合ってますか?
586デフォルトの名無しさん:2006/02/22(水) 02:18:07
そもそも何を持って解放なのか・・・
基本的にiはレジスタないしスタック領域に置かれると思います。
特にほっといてもいいのでは?

>580
たぶん、その理由でいいんじゃないの?
間違っていたらすまん
587デフォルトの名無しさん:2006/02/22(水) 03:04:16
>>584
マジデ?
588デフォルトの名無しさん:2006/02/22(水) 03:04:57
>>587
マジデ
589デフォルトの名無しさん:2006/02/22(水) 03:05:46
>>584
デジマ?
590デフォルトの名無しさん:2006/02/22(水) 03:06:28
>>589
クロフネ?
591デフォルトの名無しさん:2006/02/22(水) 03:07:21
      _,,-―- 、__              
    _,,/;;;;;;ヾヾ 、,;;;;;;;;''ヽ_             
   ノ;_;,-―--''''゙゙ ̄ フ::::;;:'-、         
  //          l、::::::: l、         
 (ヾ:::l            |::::::、::、::::.ヽ,         
、ノ:::::.| _,,、   ,、、__  |:::::::::::ゝ::::::>           
ゝ:::::::|''=・-`l ト'=・=ー` ヽ:::::::::::ゞ:::ゝ      
  ヽ.| `     ー   ,ヽ::,-;:::;;::/       
   |    、_,、,`       l/6l::::ノ          
   |     !      , , l_ ノ:/           
   __|   -'ー-ヽ   / /`)              
  ヽ  | ,  ̄    __l_/,,-'=i______ 
__,,\`、_ ー-―' _//='''_-;;;;;;(( oo((    ))
;;;;;;;;;;○>\ ̄ ̄//○'.;;;;;;;;;;;;;;;;;;;;;;;;;;;|l |l |l |l |l ||
592デフォルトの名無しさん:2006/02/22(水) 03:07:49
>>588
どうやって解放すればいいんだ
593デフォルトの名無しさん:2006/02/22(水) 03:08:29
>>590
フラムドパシオン
594デフォルトの名無しさん:2006/02/22(水) 03:52:42
つfree((void*)f);
595デフォルトの名無しさん:2006/02/22(水) 09:53:48
頼む教えてくれ。

256のデータが入力されている配列Aからある間隔でデータを
別の配列Bに同じデータを16個づつ入力していくプログラムを組みたいんだけどどうしたらいい?

配列Bには
0*16 5*16 10*16 ・・・

のようにしたいんだけど。
2重for文でできるようなんだがfor文とか配列の理解がなくて。。。
596デフォルトの名無しさん:2006/02/22(水) 09:59:51
意味不明

for(i=0;i<256;i++)B[i]=A[i*16];
597デフォルトの名無しさん:2006/02/22(水) 10:08:19
意味不明

#define REPEAT 16
#define PITCH 5

int array_a[256], array_b[256];
int iSrc, iDest, repeat = REPEAT;

for (iSrc = iDest = 0; iDest < 256; iDest++){
array_b[iDest] = array_a[iSrc];
if (!--repeat){
repeat = REPEAT;
iSrc += PITCH;
}
}
598デフォルトの名無しさん:2006/02/22(水) 10:08:31
伝わりにくくてすまん。

例えばAの配列には0〜255の数値が入っていて
Bの配列に0,63,127,191,255番目の数値を16個連続で入力させたい。
配列Bの中身が
00000000000000006363636363636363636363・・・
のような感じ。
599デフォルトの名無しさん:2006/02/22(水) 10:32:02
は?
600デフォルトの名無しさん:2006/02/22(水) 10:35:07
見たか!俺は600!
俺は至高!俺は吉良上野介!
俺は吟遊詩人!俺はホス○タル騎士団
俺はシャン○リ○通りの達人!俺はラザ○エフ商会
俺はサ○ルトリアの王子!俺は星の王子様!
俺は
601デフォルトの名無しさん:2006/02/22(水) 10:39:10
#include <stdio.h>

int main(void){
int A[256],B[256];
int i,j;
for(i=0;i<256;i++)A[i]=i;/*A[]の初期化*/
for(i=0;i<256;i+=16)for(j=0;j<16;j++)B[i+j]=A[i];/*B[]*/

for(i=0;i<256;i++)printf("%d%s",B[i],(i+1)%16?" ":"\n");
}

こんなんでいいの?
602デフォルトの名無しさん:2006/02/22(水) 10:46:53
int main(int argc, char **argv)
{
}
↑これが一般的だと思っていたのですが、
たまーに↓みたいなのを見るんですが、
べつにOKなのですか?(戻り値intの後の改行じゃなくて、引数とその型宣言)
あと、見た目以外でどういった違いがあるのでしょうか?


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


603デフォルトの名無しさん:2006/02/22(水) 10:52:15
>>602
上はANSI C世代の書式
下はK&R以前のC

現状で下を使う必要性は皆無
604デフォルトの名無しさん:2006/02/22(水) 10:56:56
以前あった、「XXは何の意味があるのでしょうか」の続編か・・・
605デフォルトの名無しさん:2006/02/22(水) 10:58:57
即レスサンクス
そうですか。なんか下の書き方のほうがカッコイイなぁーと思ったんだけど
そうですか、、、
606デフォルトの名無しさん:2006/02/22(水) 11:05:51
printf("質問します。\n");
error("いやです。\n");

上のようなerror関数の仕様を教えてください。
ferrorとperrorは検索に引っかかるのですが・・・。
607デフォルトの名無しさん:2006/02/22(水) 11:06:04
敢えて違いを挙げるならプロトタイプによる
実引数と仮引数の不一致検出ができるかとか
型の格上げが行われるかどうかとかがあるがな

細かいことはエキスパートCプログラミング嫁
608デフォルトの名無しさん:2006/02/22(水) 11:56:04
>>549
printf()ってputc()も使えないのか?
malloc()はsbrk()が使えないと厳しいな
609デフォルトの名無しさん:2006/02/22(水) 11:56:58
>>598=595
頼むから日本語で質問してくれ。
610デフォルトの名無しさん:2006/02/22(水) 13:07:06
配列の2バイト文字の扱いがよく分かりません。

char array[8] = "よんもじ";

とすると、array[0]とarray[1]で"よ"になるんですか?
611デフォルトの名無しさん:2006/02/22(水) 13:12:55
>>610
そう
612デフォルトの名無しさん:2006/02/22(水) 13:16:34
>>610
文字コードによっては0と1と2と3で"よ"になります

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

int main(void)
{
  char array[] = "よんもじ";
  wchar_t array2[5];

  setlocale(LC_ALL, "");
  mbstowcs(array2, array, 5);

  putwchar(array2[0]);

  return 0;
}

とやれば確実。あんまりやってるの見たことないけど
613デフォルトの名無しさん:2006/02/22(水) 13:17:11
>>610
エンコードによって違う。
utf8 だと日本語で使う文字は1文字3バイトだ。
サロゲートされている文字を含めば6バイト。
614デフォルトの名無しさん:2006/02/22(水) 13:22:54
>>610
char array[9] にしないと、あとから悩むことになる。
615612:2006/02/22(水) 13:23:32
>>613
ごめん、よく知らずに書いてた
616デフォルトの名無しさん:2006/02/22(水) 13:24:55
>>612
wchar_t array2[] = L"よんもじ";
617デフォルトの名無しさん:2006/02/22(水) 13:24:56
マルチバイト文字列といえば、
リトル/ビッグエンディアンの別やマルチバイト⇔シングルバイトのシーケンスの変更のための表現とか色々あるな

一筋縄ではいかないからかなり限定された部分について勉強していくがいい
618デフォルトの名無しさん:2006/02/22(水) 13:33:04
>>616
それじゃちゃんと動かないことがある
619610:2006/02/22(水) 14:03:16
みなさんありがとうございます!
もう少し2バイト文字について勉強してきます。
あ〜日本人に生まれていなければ…
620616:2006/02/22(水) 14:15:00
>>618
どういうこと?
621デフォルトの名無しさん:2006/02/22(水) 14:57:54
>>618
コンパイラによってはだろ? 確かに gcc は L"" が変だ。
新しいバージョンではちゃんと使えるのかも知れないが。

>>619
「2バイト」で収まるとは限らない。「複数バイト」だ。

ってもう見てないか…。
622デフォルトの名無しさん:2006/02/22(水) 15:01:12
gcc 4.0.2 でやってみたら L"..." はできた。
但し setlocale() 忘れると fputws() とかで出力する時に '?' に化ける。
623デフォルトの名無しさん:2006/02/22(水) 17:22:26
毛唐製のコンパイラですから
624デフォルトの名無しさん:2006/02/22(水) 18:43:32
gccは昔からlocale周りとかそのへんがウンコ以下だからな
625デフォルトの名無しさん:2006/02/22(水) 18:49:40
猿の島で使えるだけでも感謝しろ
626デフォルトの名無しさん:2006/02/22(水) 18:51:42
「C言語の切り札」と「やさしいC」どっちがいいですか?
627デフォルトの名無しさん:2006/02/22(水) 19:04:23
628デフォルトの名無しさん:2006/02/22(水) 20:01:15
>>626
どっちもだめそうな名前だ。
629デフォルトの名無しさん:2006/02/22(水) 20:15:48
int main(void)

って感じで本には書いてあったけど
μITRONには

void main(void)

ってありました。間違ってるの?
630デフォルトの名無しさん:2006/02/22(水) 20:22:06
別に間違っちゃいない。
処理系が
・int main(void)
・int main(int,char**)
以外のプロトタイプを持ったmainに対応するのは勝手
移植性はないけど。
631デフォルトの名無しさん:2006/02/22(水) 20:37:43
char *print[] = {"春","夏","秋","冬"};

printf(print[0]);
printf(print[1]);
printf(print[2]);

これだと表示されないんですが、何がいけませんか?
*print[1]とやってもダメですし・・・教えて下さい。
632デフォルトの名無しさん:2006/02/22(水) 20:47:59
>>631
何がどうダメなのかを日本語で説明する能力が圧倒的に足りない。
コンパイルエラーなのか、実行すると自分の予想していない結果になるのかを書け
633デフォルトの名無しさん:2006/02/22(水) 20:57:34
>>631
printfなら、書式が第1引数では?
printf("%s",print[0]);
634デフォルトの名無しさん:2006/02/22(水) 21:01:02
>>633
いや、問題ないだろ。
printf("hoge");とかって普通にやるだぉ
635デフォルトの名無しさん:2006/02/22(水) 21:01:37
別に文字列であれば書式じゃなくたっていいよ
636デフォルトの名無しさん:2006/02/22(水) 21:08:01
>>631
うちだと
春夏秋
と、普通に表示されるぞ。
VC++6.0 proだ。

何がいけませんか?ってこっちが聞きたいわ。
637デフォルトの名無しさん:2006/02/22(水) 21:21:16
うちも表示されるな。
gcc 3.3.6
638デフォルトの名無しさん:2006/02/22(水) 21:24:01
C2006ではフォーマット、改行なしのprint関数(実際はマクロ定義)が
標準関数に追加されたからそれが悪さしてるんだと思う。
639デフォルトの名無しさん:2006/02/22(水) 21:27:23
>>638
それが悪さしてたらどうなるわけ?
640631:2006/02/22(水) 21:28:07
すいません。PCが強制終了していろいろ消えてしまい、放置した形になってしまいました。
申し訳ありません。

コンパイルエラーではないんですが、常にprint[3]のみが表示したり
するのでおかしいと思い質問したんですが、形的には合っているそうなので
他の部分を確認して見たいと思います。

答えて頂き有難う御座いますm(__)m
641デフォルトの名無しさん:2006/02/22(水) 21:32:09
ちょっとまってくれ
>>638を詳しく説明してくれ
642デフォルトの名無しさん:2006/02/22(水) 21:38:14
悪さしているかしていないかは問題ではありません。
>638の信ぴょう性は高いですから国政調査権を要求します。
643デフォルトの名無しさん:2006/02/22(水) 21:42:14
何でああいう事実無根の話を持ち出すのかわからない
644デフォルトの名無しさん:2006/02/22(水) 21:43:36
ひとつだけ確かなことはプラウガーが2ちゃんねらだったということだ。
645デフォルトの名無しさん:2006/02/22(水) 22:26:12 BE:112944454-
>>629
int main(int argc, char *argv[], char *envp[])

おれの本にはこう書いてある
646デフォルトの名無しさん:2006/02/22(水) 22:36:09
>>629>>645などのような話を続けるときりが無いから
このスレは標準Cだけということになっている。
647デフォルトの名無しさん:2006/02/22(水) 22:56:34
可変長引数の関数をマクロを利用してコールしたのだが
やはり文字列がうまくいかない。

使ってるコンパイラはC99に対応してないし。
あきらめて寝るか。
648デフォルトの名無しさん:2006/02/22(水) 22:57:24
日記ウザス
649デフォルトの名無しさん:2006/02/22(水) 23:01:55
C言語なら俺に聞け!
とのことですが、誰に聞けばよろしいか?
650デフォルトの名無しさん:2006/02/22(水) 23:02:33
俺俺
651デフォルトの名無しさん:2006/02/22(水) 23:07:28
いや、俺俺
652デフォルトの名無しさん:2006/02/22(水) 23:14:54
いえいえ、ここは私が
653デフォルトの名無しさん:2006/02/22(水) 23:24:46
聞く相手は誰でもない、自分自身だ!!
654たすけて〜:2006/02/22(水) 23:36:52
関数内でポインタ配列を動的に作っているんですが
下のdatarrayのかっこを付ける意味がよく分らないです。
単に*datarray[i]ではダメみたいで。
ご教授下さい。

test(char ***datarray){
*datarray = (char**)malloc(Cnt * sizeof(char*));
(*datarray)[i]=(char*)malloc(strlen(str));

strcpy((*datarray)[i],str);
↑ここのdatarrayのかっこがわからない。
}
655デフォルトの名無しさん:2006/02/22(水) 23:39:42
*(datarray[i])
になったら困るだろ?

つ結合順位
656デフォルトの名無しさん:2006/02/22(水) 23:42:38
C言語の動的スライス抽出システムを作ってみようと思うのですが
元プログラムから実行系列を得るためにはどのようなプログラムを組めばいいでしょうか?
プログラムの流れをたどる方法が思いつきません。
どうか知恵をお貸しください。
657デフォルトの名無しさん:2006/02/23(木) 00:28:17
処理分岐をノードとした多分木を作り、各ノードに通過フラグを持たせる。
実行プログラムの処理ごとにフラグをONしていき、最終的にノード情報を集めればよい。
658デフォルトの名無しさん:2006/02/23(木) 00:57:40
引数の値によって処理の異なる関数を呼び出すことは出来ますか。
if文を使わずに計算コストを掛けないのがいいです。
659デフォルトの名無しさん:2006/02/23(木) 00:59:06
でき
660デフォルトの名無しさん:2006/02/23(木) 00:59:46
関数のポインタの配列やswitchじゃ不満なのかね
661デフォルトの名無しさん:2006/02/23(木) 01:00:19
不満です
662デフォルトの名無しさん:2006/02/23(木) 01:01:04
>>658
できる
663デフォルトの名無しさん:2006/02/23(木) 01:03:02
>>661
理由を書けや糞野郎
664658:2006/02/23(木) 01:03:06
やり方教えてください。
マクロを使って置き換えられないかと思ったのですが出来ませんでした。
665デフォルトの名無しさん:2006/02/23(木) 01:04:47
sprintf(array,"%s%s",*array,"追加文字");
のような処理がしたいのですが、これだとarrayの同一アドレスを参照することにより
エラーが発生するのだと思うのですが、このような追加処理をする関数ってありますか?
666658:2006/02/23(木) 01:05:18
#define fnc(x) f_x()

x=1;
fnc(1);
x=2;
fnc(2);
みたいな感じで出来ませんかね?
667訂正:2006/02/23(木) 01:06:10
#define fnc(x) f_x()

x=1;
fnc(x);
x=2;
fnc(x);
みたいな感じで出来ませんかね?
668デフォルトの名無しさん:2006/02/23(木) 01:07:17
>>665
strcat(array,"追加文字");

でダメ?
669デフォルトの名無しさん:2006/02/23(木) 01:09:32
>>666
キサマ答えたのになにが不満なんだよ
670デフォルトの名無しさん:2006/02/23(木) 01:10:59
>>669
662さんですか。
やり方教えてください。
671665:2006/02/23(木) 01:12:41
>>668
それです!!ありがとうございます!
672デフォルトの名無しさん:2006/02/23(木) 01:18:49
>>662
それってポリモルフィズムだかなんだかの概念ですよね?
結局型チェックしてそれに応じて関数呼び出すから
if文で使い分けするのとコスト変わらない気がするんですが。
673658:2006/02/23(木) 01:19:24
関数のポインタの配列で調べたらわかりました!
ありがとうございました!
674672:2006/02/23(木) 01:20:37
あ、値か…
675674:2006/02/23(木) 01:23:27
あ、Cか…
676デフォルトの名無しさん:2006/02/23(木) 01:50:05
ウザ・・・
677デフォルトの名無しさん:2006/02/23(木) 02:06:04
関数呼び出しのオーパヘッドがかかってしまうのですがif文の方が速いですよね?
他に方法無いですか?

int f1()
{
return 1;
}

int f2()
{
return 2;
}


int main(void)
{
int x=1;
int (*fnc[2])();
fnc[0]=f1;
fnc[1]=f2;

(*fnc[x])();
}
678デフォルトの名無しさん:2006/02/23(木) 02:07:54
何このくだらない質問スレ
679デフォルトの名無しさん:2006/02/23(木) 02:10:23
>関数呼び出しのオーパヘッドがかかってしまう
>if文の方が速い

どんだけ厳しいリソースのプラットフォーム上でやってんだかw
ちっちぇな
680デフォルトの名無しさん:2006/02/23(木) 02:11:26
  \\_
:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_    スルー
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ        ├┤|
681デフォルトの名無しさん:2006/02/23(木) 02:12:46
>>677
Cなんか使うな
682デフォルトの名無しさん:2006/02/23(木) 02:13:04
>>679
無駄な作業が好きな人なんだよ、きっと
683677:2006/02/23(木) 02:26:11
処理の中で頻繁に用いる関数があり
引数の値が1から1000まで動いてそれに応じて
1000個の関数を呼び出すとすると...
それを使うごとに最悪1000回比較しないといけませんよね。
いちどに呼び出せないですか?
684デフォルトの名無しさん:2006/02/23(木) 02:30:52
>引数の値が1から1000まで動いてそれに応じて1000個の関数を呼び出す
>それを使うごとに最悪1000回比較
なぜ?
たかだか10回くらいじゃねの?比較
685デフォルトの名無しさん:2006/02/23(木) 02:31:37
>>683
あんたさっき if 文のが速いとか言ってたよな? ヴァカ?
686デフォルトの名無しさん:2006/02/23(木) 02:34:35
頭のおかしい人を相手にしてはいけません
687デフォルトの名無しさん:2006/02/23(木) 02:35:35
>>683
>引数の値が1から1000まで動いてそれに応じて
>1000個の関数を呼び出すとすると...
その引数の値って具体的に何?
688677:2006/02/23(木) 02:36:05
半分づつ比較していってマクロか、インライン関数を呼び出すのが最善ですか?
689デフォルトの名無しさん:2006/02/23(木) 02:40:16
1000個の関数ポインタからなる配列を用意すれば一発なんだが
690デフォルトの名無しさん:2006/02/23(木) 02:41:13
1000個の関数という時点で何かおかしい。
データ構造を工夫すれば回避できるんでないの。
何がしたいんだ?
691677:2006/02/23(木) 02:42:56
関数ポインタだとインライン展開出来ないですよね。
それだと一つの関数内にif文使って処理をすべて書いてしまった方が速いですよね。
692デフォルトの名無しさん:2006/02/23(木) 02:44:08
>>690
まったく同意

根本的なところで間違いがあるような気がする
693677:2006/02/23(木) 02:44:59
千個というのは例えなんです。実際は30から50位です。
将棋プログラムの指し手生成ルーチンの種類数なんです。
694656:2006/02/23(木) 02:47:39
>>657
すみません、自分の知識不足でよく理解できませんでした。
自分の不甲斐なさに絶望・・・。
695デフォルトの名無しさん:2006/02/23(木) 02:49:14
>>693
馬鹿の考え休むに似たり
696デフォルトの名無しさん:2006/02/23(木) 02:54:15
>関数ポインタだとインライン展開出来ない

なぜ淫乱てんかいする必要があるのか?
697デフォルトの名無しさん:2006/02/23(木) 02:56:38
>>693
ifを使ったやりかたを書いてみてくれ
698デフォルトの名無しさん:2006/02/23(木) 02:58:37
とりうる値が十分狭いならswitch/caseじゃ駄目なん?
べたにif else if繰り返すよりは速い
699デフォルトの名無しさん:2006/02/23(木) 02:59:28
>>698
その案はとっくにスルーされています
700677:2006/02/23(木) 03:04:22
>>697
1<=a<=8だと...こんな感じ。比較3回で処理にたどり着く。

if(a<5){
if(a<3)if(a==1)f1(); else f2();
else if(a==3)f3(); else f4();
}
else {・・・}
701デフォルトの名無しさん:2006/02/23(木) 03:08:22
なぜ一発でできる処理を出されてるのに馬鹿みたいな処理を考えるんだ
702デフォルトの名無しさん:2006/02/23(木) 03:09:50
void (*func[30])(int arg1);

(func+no)(arg1);

これで一発。
703677:2006/02/23(木) 03:10:42
>>701
関数ポインタだとそのときに関数が確定してないからインライン展開出来ないし、マクロもできない。処理速度を速くしたいんですが。
704デフォルトの名無しさん:2006/02/23(木) 03:11:53
>>703
どんな処理になればいいのかをアセンブラで書いてみてくれたほうが
みんなに伝わりやすそうだな
705デフォルトの名無しさん:2006/02/23(木) 03:12:08
>>703
だからswitchは駄目かと出てるだろ馬鹿
706677:2006/02/23(木) 03:13:28
switchだと最悪1000回比較しなきゃならないから鈍いんですが。
707デフォルトの名無しさん:2006/02/23(木) 03:14:40
>>706
氏ね馬鹿
頭悪すぎ
708デフォルトの名無しさん:2006/02/23(木) 03:15:22
>>706
アセンブラ出力調べてみろ。
709デフォルトの名無しさん:2006/02/23(木) 03:16:17
妄想もここまできたら病院行きだな。
710デフォルトの名無しさん:2006/02/23(木) 03:17:56
>>706
その根拠は?
711デフォルトの名無しさん:2006/02/23(木) 03:19:24
いちいち煽りいれるな。
712デフォルトの名無しさん:2006/02/23(木) 03:19:37
>>706
switchはふつうジャンプテーブルを使っているよ

考え方は関数ポインタと同じ。関数コールでなくてJUMPするだけ
713デフォルトの名無しさん:2006/02/23(木) 03:35:59
C言語ならホモに聞け
714デフォルトの名無しさん:2006/02/23(木) 04:13:35
Delphiで
function EncodeStr(Str:string;Mask:integer): string;
var
i: integer;
begin
for i := 1 to Length(Str) do
Str[i] := Chr(Ord(Str[i]) xor Mask);
Result := Str;
end;
というxorで文字列をなんちゃって暗号化したものを復元するものを
C言語で書いています。
void Encode(char str[], int Mask, char *result)
{
unsigned char i;
char array[100];
for (i=0; i <= 100; i++){
array[i] = str[i] ^ Mask;
}
result = array;
}
としたのですが、うまくいきません。
C言語の方のどこを変えればいいでしょうか?
715デフォルトの名無しさん:2006/02/23(木) 04:17:29
>>714
arrayも確保してから渡せ
716デフォルトの名無しさん:2006/02/23(木) 07:05:45
自動変数は関数抜けると消える
resultにアドレスいれたところで、関数抜けたら無効
717656:2006/02/23(木) 08:56:08
>>657
具体的にどのように記述すればいいのか
よければご教授お願いします。
718デフォルトの名無しさん:2006/02/23(木) 09:41:35
教示じゃなくて教授?
719デフォルトの名無しさん:2006/02/23(木) 09:45:13
>>718
…? 別に間違ってないと思うが
720デフォルトの名無しさん:2006/02/23(木) 09:50:09
ご教授するほどの答えをこんなとこで求めるなと
721デフォルトの名無しさん:2006/02/23(木) 10:05:57
>>677
実測もせずに速度云々を語るな!

高速化の為の最初のアプローチは、
実測してボトルネックを見つける事だぞ?
722デフォルトの名無しさん:2006/02/23(木) 11:22:46
>>714
1. Delphi の result は結果を入れるための特殊な変数。
2. Delphi の String 型に対応する C 言語の型は存在しない。
3. C言語に文字列型は存在しない。
4. C言語は文字列を扱う場合は char 型の配列で行う。
5. C言語は関数の中から配列を return で返すことは出来ない。
返せるのは数値の型と構造体とポインタ。
723デフォルトの名無しさん:2006/02/23(木) 11:26:14
>>714
6. C言語は関数に値渡ししかできない。参照がない。(C++はある)
7. C言語は関数の引数で宣言した変数は呼び出された時に呼び出し
元の値で初期化されるが自動変数と同様に return 時に消滅する。
724デフォルトの名無しさん:2006/02/23(木) 11:28:25
フーン・・・
結構DelphiとCって違うのね
725デフォルトの名無しさん:2006/02/23(木) 11:44:35
Cだと、こんなかんじ。
char *Encode(char *str, int Mask, char result[], int size)
{
  unsigned char *p_str = (unsigned char*)str;
  unsigned char *p_res = (unsigned char*)result;
  unsigned char mask = (unsigned char)Mask;
  int i;
  for (i = 0; p_str[i] != '\0'; i++){
    if( i >= size ){
      /* オーバーフロー時の処理を入れる */
      break;
    }
    p_res[i] = p_str[i] ^ mask;
  }
  return result; /* ワークバッファをそのまま返すと、
                    呼び出しもとで便利なことがある。*/
}

/* 使う側 */
int main(){
  char s[] = "あいうえおかきくけこ";
  char result[256];
  int Mask = 0x7f;
  Encode(s, Mask, result, sizeof(result));
 
  /* 結果をそのまま表示できる。*/
  puts(Encode(s, Mask, result, sizeof(result)));
}
726725:2006/02/23(木) 11:46:08
この場合、マスクで文字コードを壊してるから、まともな文字が表示されることはないけどな。
727725:2006/02/23(木) 11:49:34
バグがあった。訂正。
char *Encode(char *str, int Mask, char result[], int size)
{
unsigned char *p_str = (unsigned char*)str;
unsigned char *p_res = (unsigned char*)result;
unsigned char mask = (unsigned char)Mask;
int i;
for (i = 0; p_str[i] != '\0'; i++){
if( i >= size ){
/* オーバーフロー時の処理を入れる */
i = size -1; /* これは一例 */
break;
}
p_res[i] = p_str[i] ^ mask;
}
  result[i] = '\0'; /*文字列の終端コード*/
  return result; /* ワークバッファをそのまま返すと、
                    呼び出しもとで便利なことがある。*/
}
728デフォルトの名無しさん:2006/02/23(木) 12:58:22
処理速度を速くしたいならCなんて使うな
アセンブラでも使え
729デフォルトの名無しさん:2006/02/23(木) 14:31:01
関数テーブル使ってもどのみち高頻度でパイプライン・ストールするからな。
高速化の為よりもむしろ遷移をわかりやすく(このへんはコーディングポリシーにもよる)する目的で使うもの。
730デフォルトの名無しさん:2006/02/23(木) 14:34:12
頭の固い奴だな、実測もせずに頭の中だけで完結して決め付け、周りを振り回す。
一番使えない奴だ・・・
731デフォルトの名無しさん:2006/02/23(木) 14:39:31
実測実測要ってる厨房が一番頭悪そうだな。早く消えてくれないものか。
732デフォルトの名無しさん:2006/02/23(木) 14:43:15
何をするにも成果の評価は必要不可欠
733デフォルトの名無しさん:2006/02/23(木) 14:43:52
じゃ、CPUを脳内シミュレートして、処理時間を計算汁
734デフォルトの名無しさん:2006/02/23(木) 14:48:04
プロファイリングもせずに最適化って、ただの馬鹿だろw
735デフォルトの名無しさん:2006/02/23(木) 14:56:17
プロファイラ使えばいい話ではある
736デフォルトの名無しさん:2006/02/23(木) 14:58:00
switch文でジャンプテーブル作ってもパイプラインストール率きわめて高いんだが。
なるべくならテーブル参照とビット演算でブランチレスに汁
737714:2006/02/23(木) 17:19:06
みなさん丁寧にありがとうございます!
>>727さんの方法でできました。
このスレの方は親切ですね!
Delphiは配列をStingとして勝手にやってくれていたので、
C言語に挑戦してから戸惑いが多いです。
ほんとに助かりました、ありがとうございました。
738デフォルトの名無しさん:2006/02/23(木) 20:48:47
だれか、パイプラインシミュレータ?見たいな物を知っていたら教えてください。
単純な処理ですが、単純ゆえに高速化したい関数があるのです。
739デフォルトの名無しさん:2006/02/23(木) 21:37:12
その関数とは将棋プログラムの指し手生成ルーチンですか?
740デフォルトの名無しさん:2006/02/23(木) 22:03:38
>>738
また将棋プログラムの指し手生成ルーチンかよw

プログラムの実行速度を上げるときには、
まず、プログラムのどの部分がどれだけ時間を食っているかを調査すること
当然だが、一番処理時間を食っているところを改善すると、全体のパフォーマンスがアップする

ところが、現実にはむやみやたらに性能アップを試みる輩がいる
全体の1%くらいのところを50%性能アップしたからといって、全体では0.5%しか
向上していない
そんなところはやってもやらなくても同じ
741デフォルトの名無しさん:2006/02/23(木) 22:11:19
なんか見当違いなレスだな
何でボトルネックになってないって前提で話すんだよ
742デフォルトの名無しさん:2006/02/23(木) 22:24:34
>>741
>何でボトルネックになってないって前提で話すんだよ 

本当に将棋プログラムの指し手生成ルーチンの話ならば、
パイプライン周りを弄ることによって得られる高速化なんて、
高が知れているから。

そこら辺のルーチンを作っており、なおかつまともな思考能力を
持っている人間ならば、機種ごとに結果が異なってしまう
パイプラインなんかに頭を使うような無駄なことはしない
(勿論、全くしないわけではないけれど、比率は非常に低い。)

そんな不毛な部分ではなく、他の評価方法や枝狩りを考えていた方が
ずっと高速化されるから。
743デフォルトの名無しさん:2006/02/23(木) 22:32:26
Windows プログラミング 第五版の 53ページで

配列が大域的であれば(つまり、関数の外で定義されていれば)、
文字配列は次のような文で初期化できる

char a[] = "Hello!";

この配列を関数の局所変数として定義する場合には、
次のように static 変数として定義しなければならない。

static char a[] = "Hello!";


と書いてあるんですが、その理由は何ですか?
ふつうにコンパイルも通るんですけど
ローカルでは char a[] = "Hello!"; じゃ駄目なんですか?
744デフォルトの名無しさん:2006/02/23(木) 22:34:44 BE:79876782-
>>743
どういう文脈なんだろ?
その文字列を、関数を抜けた後でも使うとか?
745デフォルトの名無しさん:2006/02/23(木) 22:45:02
Unicode関連の話題で
文字と文字配列の定義と初期化の仕方を書いてるだけなんですけどね。
746鱸鮭鱒鯔鯵鰈 ◆0RNR3g.MhY :2006/02/23(木) 22:51:00
質問です。

C++って、new しなかったら基本的にdeleteは無くても
メモリリークしないんですか?

例えば、以下のような場合とか、メモリが開放されるのはいつですか?

std:vector<string*> strList;

for(int i=0; i<100; i++){
std::string str = "ああああ";
strList.push_back(&str);
}
747デフォルトの名無しさん:2006/02/23(木) 22:56:03
スタック変数はスコープの終わりで破棄される。
つまり、strはループ回るたびに毎回破棄されるから、
このポインタをpush_backしちゃだめ。
この場合vector<string>にするべし。
748デフォルトの名無しさん:2006/02/23(木) 23:04:02
>>747
うほっ!
strListが開放されるときに開放されるかとオモタ・・・。
危なかった・・・。

ありがとうございますた!
749デフォルトの名無しさん:2006/02/23(木) 23:09:20
>>746
スレ違い

答えてる奴らもアフォ
750デフォルトの名無しさん:2006/02/23(木) 23:40:41
2次元配列へのポインタと引数の質問です。
[関数]
void savecsv(char fname[], char *tbl[][TBLSZ], int ln);
上記の関数への引数の受け渡しがうまくいきません。
[関数呼び出し側]
savecsv(&name , tb ,num);

第二引数の実引数がおかしいのですが、呼び出し側の引数が解かる方おられますでしょうか?

[エラー]
C:\csv.c(108): warning C4047: '関数' : 間接参照のレベルが 'char *' と 'char **__w64 ' で異なっています。
751デフォルトの名無しさん:2006/02/23(木) 23:45:02
nameってたぶんchar*型だろ?
&nameをnameにしたら
752デフォルトの名無しさん:2006/02/23(木) 23:45:09
>>750
>呼び出し側の引数が解かる方おられますでしょうか?

その質問は、2chで
「私の名前は何でしょうか?」と聞くのと
大して変わらないな。
753デフォルトの名無しさん:2006/02/23(木) 23:47:46
すいません。エラーじゃなくて、警告でした。
第二引数char *tbl[][TBLSZ]への、実引数の型がわかりません。

char *tbl[][TBLSZ]

こんな書き方を見たの初めてで。。
754デフォルトの名無しさん:2006/02/23(木) 23:50:56
>>751
ありがとうー^^*

同じ文にあるchar *tbl[][TBLSZ] が絶対間違ってると思ってたから、
助かったっス。
755デフォルトの名無しさん:2006/02/23(木) 23:55:21
>>743
その文脈では昔のコンパイラでは配列型のローカル変数を初期化できなかった
(グローバル変数と静的(== Staticな)変数)だけでしか配列の初期化はできなかった)
ためだと思う。
756デフォルトの名無しさん:2006/02/23(木) 23:56:49
>>751
エスパー(というほどでもないか)乙

>>750
つぎはname, tb ,numの定義をちゃんと書いておくれな
757デフォルトの名無しさん:2006/02/23(木) 23:58:04
リョーカイ
758デフォルトの名無しさん:2006/02/23(木) 23:59:40
エスパー: 鈍くてウホな奴が普通の人を妬んで使う用語
759デフォルトの名無しさん:2006/02/24(金) 00:24:01
GetCursorPos(&pt);
TrackPopupMenu(hMenuP, TPM_LEFTALIGN, pt.x, pt.y, 0, hwnd, NULL);
として、ポップアップメニューを出して、ポップアップメニュー以外の部分をクリックした時、
つまり、フォーカスが他に移った時に、ポップアップメニューを閉じる方法ってありますか?
760デフォルトの名無しさん:2006/02/24(金) 00:25:25
スレ違い
Win32スレで聞け
761デフォルトの名無しさん:2006/02/24(金) 00:25:40
762759:2006/02/24(金) 00:27:36
すみません、失礼しました。
763デフォルトの名無しさん:2006/02/24(金) 00:50:46
>>755
そうなんですか。
さんくす。
764デフォルトの名無しさん:2006/02/24(金) 01:11:23
Cで作ったプログラムにバージョン情報やカンパニー情報を入れることってできますか?
bccdeveloper使ってます。
765デフォルトの名無しさん:2006/02/24(金) 01:22:20
>>764
ふつーに
fprintf(stderr, "Copyright(C)2006 Mona Corporation");
とかやれば?

OS によってはバイナリファイルの中に特別な埋め込み情報があったりもするけど
そういうのはそれぞれの環境スレで聞いた方がいい
766デフォルトの名無しさん:2006/02/24(金) 01:25:33
リソースに入れたら?窓プログラムは
微妙にすれ違いな気がするけど。BCスレってなかったっけ?
767デフォルトの名無しさん:2006/02/24(金) 01:26:30
>>758
お前ちょっと表出ろ
768デフォルトの名無しさん:2006/02/24(金) 04:29:34
昨日世話になったものだが...
関数ポインタ等の件で。
速度計ってみたのだが...
関数ポインタ >>>>> swich > if だったぞ。

データの範囲は0から15でifはループを使わない二分探索。
処理は代入だけ。
swichはifの三倍程度かかるのだが。
769デフォルトの名無しさん:2006/02/24(金) 04:30:37
swichが一番速いという様な結論ではなかったのかよ。
770ソース:2006/02/24(金) 04:45:35
#include "stdafx.h"
#include <stdlib.h>
#define N 10000000
int z,i;char a[N];
fnif(){ for(i=N-1;i>=0;i--){
if(a[i]<8){if(a[i]<4){
if(a[i]<2){if(a[i]==1)z=1;else z=0;}
else {if(a[i]==3)z=3;else z=2;}}
else{ if(a[i]<6){if(a[i]==5)z=5;else z=4;}
else {if(a[i]==7)z=7;else z=6;}}}
else{ if(a[i]<12){
if(a[i]<10){if(a[i]==9)z=9;else z=8;}
else {if(a[i]==11)z=11;else z=10;}}
else{ if(a[i]<14){if(a[i]==13)z=13;else z=12;}
else {if(a[i]==15)z=15;else z=14;}}}}}

fnsw(){ for(i=N-1;i>=0;i--){ switch(a[i]){
case 0:z=0;break;case 1:z=1;break;case 2:z=2;break;
case 3:z=3;break;case 4:z=4;break;case 5:z=5;break;
case 6:z=6;break;case 7:z=7;break;case 8:z=8;break;
case 9:z=9;break;case 10:z=10;break;case 11:z=11;break;
case 12:z=12;break;case 13:z=13;break;case 14:z=14;break;
case 15:z=15;break;default:__assume(0);}}}

int main(void){
for(i=0;i<N;i++)a[i]=rand()%16;
fnif();fnsw();}
771デフォルトの名無しさん:2006/02/24(金) 04:47:33
うぷの為にソースに手を加えたらswichの速度を13とすると
ifの二分探索21になったぞ。どうなってる?
772デフォルトの名無しさん:2006/02/24(金) 04:54:17
し〜ら〜ねぇ〜
てか何故に関数ポインタ?
773デフォルトの名無しさん:2006/02/24(金) 04:56:50
772
関数ポインタを使えば比較を一度も使わずに分岐が出来るからだよ。
774デフォルトの名無しさん:2006/02/24(金) 05:00:58
な〜る〜ほ〜ど〜・・・って情報系でも何でもないただの大学生がそんなことわかるかぁ
(ノ ゚Д゚)ノ ==== ┻--┻
775デフォルトの名無しさん:2006/02/24(金) 05:05:14
別人だがここでも同じ質問見つけた
http://forums.belution.com/ja/cpp/000/050/69.shtml
776デフォルトの名無しさん:2006/02/24(金) 05:06:17
本当に別人だかどうだか・・・
777デフォルトの名無しさん:2006/02/24(金) 05:17:38
俺には同一人物に見えるなw
778デフォルトの名無しさん:2006/02/24(金) 05:27:48
2/23の時点で関数ポインタという概念を知らなかったのだから別人だ!
証拠↓
http://pc8.2ch.net/test/read.cgi/tech/1139570025/658-677
779デフォルトの名無しさん:2006/02/24(金) 05:37:01
知らない振りかもしれない・・・w
780デフォルトの名無しさん:2006/02/24(金) 08:07:39
( ´Д`) 何でもいいが、とりあえず俺を休ませろ
781デフォルトの名無しさん:2006/02/24(金) 08:08:24
休んでない振りかもしれない・・・w
782デフォルトの名無しさん:2006/02/24(金) 09:09:45
>>770
switchは、分岐の数でテーブルジャンプになったりならなかったりするから、
もう少し増やしてみたら?

783デフォルトの名無しさん:2006/02/24(金) 09:11:43
無駄な部分を最適化してるなあ・・・
って言っちゃダメなんだっけ?
784デフォルトの名無しさん:2006/02/24(金) 09:44:31
if文がいやなのに、for 文の 2つめに比較式を書くのは気にならないんだな
785デフォルトの名無しさん:2006/02/24(金) 12:00:46
fgetsについて質問です。
読み込むストリームで改行よりも先にNULL文字があっても改行までセットすることは
ANSI-Cで保証されているんですか?
fgetsはテキスト処理用で、freadばバイナリ処理用と一般に書かれてたりしますが、
gccで試したら一応、途中にあるNULL文字を含んだその後の改行までセットされていました。
786デフォルトの名無しさん:2006/02/24(金) 12:12:26
保証されています
787デフォルトの名無しさん:2006/02/24(金) 12:24:29
> fgetsはテキスト処理用で、freadばバイナリ処理用と一般に書かれてたりしますが、

そんなの読まないように。
788デフォルトの名無しさん:2006/02/24(金) 13:00:14
それ以外にどう使い分けるんだ?
789デフォルトの名無しさん:2006/02/24(金) 13:06:23
>>785
保証されていると思うが、何バイト読んだかが分からないので最後の位置が分からない。
不安なら getc() 使って自分で1バイトづつ読んでバッファに入れる関数を自作しろ。
それか環境依存してもいいなら GNU ライブラリにある getline() でも使え。
790デフォルトの名無しさん:2006/02/24(金) 13:09:06
>>788
テキストかどうかとうよりは1レコードの長さが固定されているかどうか、だ。
ただ OS によっては fopen() 時のモードに b を付けないとうまく行かない。
791デフォルトの名無しさん:2006/02/24(金) 13:21:25
いかにも2ch的に不毛な突込みだな・・・
しかも意味ねー
792デフォルトの名無しさん:2006/02/24(金) 13:22:30
理論と実戦の狭間と言ったところか・・・
793デフォルトの名無しさん:2006/02/24(金) 13:29:30
【理論ヲタ】
読み方: りろんおた
意味/解説:
理論ばかりを学んで実践をしない人間の総称。
他人のやること成すことに理論で文句をつけ、
その発展を阻害する存在。理論が先行してま
ともなものは何一つ作れない真性厨房に多く
見られる。
類: 基地外厨房
794770:2006/02/24(金) 14:31:37
スイッチの方が速いな。
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>

#define N 10000000
int z,i;char a[N+1],x;clock_t c[2];

fnif(){ for(i=N-1;i>=0;i=i--){
if(a[i]<16)x=8; else x=24;if(a[i]<x)x=x-4; else x=x+4;
if(a[i]<x)x=x-2; else x=x+2;if(a[i]<x)x=x-1; else x=x+1;
if(a[i]==x)z=0; else z=1;}}

fnsw(){ for(i=0;;i++){ switch(a[i]){
case 0:z=0;break;case 1:z=1;break;case 2:z=2;break;case 3:z=3;break;
case 4:z=4;break;case 5:z=5;break;case 6:z=6;break;case 7:z=7;break;
case 8:z=8;break;case 9:z=9;break;case 10:z=10;break;case 11:z=11;break;
case 12:z=12;break;case 13:z=13;break;case 14:z=14;break;case 15:z=15;break;
case 16:z=16;break;case 17:z=17;break;case 18:z=18;break;case 19:z=19;break;
case 20:z=20;break;case 21:z=21;break;case 22:z=22;break;case 23:z=23;break;
case 24:z=24;break;case 25:z=25;break;case 26:z=26;break;case 27:z=27;break;
case 28:z=28;break;case 29:z=29;break;case 30:z=30;break;case 31:z=31;break;
case 32:goto deru;}}deru:;}

int main(void){
for(i=0;i<N;i++)a[i]=rand()%32;a[N]=32;
c[0]=clock();fnif();c[1]=clock();
printf("ifで分岐に%d clockかかりました。\n" , c[1]-c[0]);
c[0]=clock();fnsw();c[1]=clock();
printf("swichで分岐に%d clockかかりました。\n" , c[1]-c[0]);}
795デフォルトの名無しさん:2006/02/24(金) 14:37:16
>>794
速度云々は他所でやってくれ。
796デフォルトの名無しさん:2006/02/24(金) 15:23:15
>>794
それ、z = a[i]; でいいんじゃ・・・。
797デフォルトの名無しさん:2006/02/24(金) 15:40:04
>>793
いるいるwww
あと、文字コードヲタとC仕様ヲタもな
この手合いにはまともなものは作れないってのは共通
798デフォルトの名無しさん:2006/02/24(金) 15:46:52
バイナリとテキストの違いがわかってないやつは、それ以上にまともなもん作れないだろ。
799デフォルトの名無しさん:2006/02/24(金) 16:01:47
バイナリとテキストって分けてる奴が一番お疲れだ
800デフォルトの名無しさん:2006/02/24(金) 16:16:27
教えてください!

底が2のlogの計算はどうやったらいいですか?(>_<)
801デフォルトの名無しさん:2006/02/24(金) 16:17:18
テキスト⊆バイナリ
802デフォルトの名無しさん:2006/02/24(金) 16:17:50
>>800
っ [対数の底の変換]
高校の数学の教科書読め
803デフォルトの名無しさん:2006/02/24(金) 16:18:33
>>800
math.hにlog2がある。
以上
804800:2006/02/24(金) 16:21:32
ありがとう(>_<)
805デフォルトの名無しさん:2006/02/24(金) 16:27:15
スタックが作れるようになったんですけど、これを応用したプログラムには
何があるのか教えてください。
806デフォルトの名無しさん:2006/02/24(金) 16:30:55
807デフォルトの名無しさん:2006/02/24(金) 16:33:52
>>806
すいませんでした。ありがとうございますm(__)m
808デフォルトの名無しさん:2006/02/24(金) 16:37:32
必ずいるな。
テキストとバイナリの話題になると、文脈を無視して「区別はない」ってやつ。
809デフォルトの名無しさん:2006/02/24(金) 17:17:20
人をラベリングする類いの話題になると
嬉々として湧いてくるタイプの人も必ず居ますね。
810デフォルトの名無しさん:2006/02/24(金) 17:35:28
バイナリモードで開けば同じようなもんだw
811デフォルトの名無しさん:2006/02/24(金) 17:39:26
0D 0Aってダサいよな
812デフォルトの名無しさん:2006/02/24(金) 17:41:28
っ *

正直者には見えない不思議なコピペ
さぁ 今すぐ嘘をついて他のスレに貼ってみよう!
813デフォルトの名無しさん:2006/02/24(金) 17:45:20
世の中には10種類の人間がいる。二進法が分かる者と分からない者だ
814デフォルトの名無しさん:2006/02/24(金) 17:48:38
つまり
2進法がわかる人間=10パターン
それ以外=0パターン
ということです
815デフォルトの名無しさん:2006/02/24(金) 17:51:53
Cって同一ファイル内で変数の宣言より上の行にその変数を使うことってありますか?
816デフォルトの名無しさん:2006/02/24(金) 17:54:06
      ,. -──- 、 「いや、そのしつもんはおかしい。」
    /   /⌒ i'⌒iヽ、
   /   ,.-'ゝ__,.・・_ノ-、ヽ
   i ‐'''ナ''ー-- ● =''''''リ      _,....:-‐‐‐-.、
  l -‐i''''~ニ-‐,.... !....、ー`ナ      `r'=、-、、:::::::ヽr_  「Cって同一ファイル内で変数の宣言より
   !. t´ r''"´、_,::、::::} ノ`     ,.i'・ ,!_`,!::::::::::::ヽ   上の行にその変数を使うことってありますか?」
   ゝゝ、,,ニ=====ニ/r'⌒;   rー`ー' ,! リ::::::::::::ノ
    i`''''y--- (,iテ‐,'i~´ゝ''´    ̄ ̄ヽ` :::::::::::ノ
    |  '、,............, i }'´       、ー_',,...`::::ィ'
 ●、_!,ヽ-r⌒i-、ノ-''‐、    ゝ`ーt---''ヽ'''''''|`ーt-'つ
    (  `ーイ  ゙i  丿   ;'-,' ,ノー''''{`'    !゙ヽノ ,ヽ,
    `ー--' --'` ̄       `ー't,´`ヽ;;;、,,,,,,___,) ヽ'-゙'"
                   (`ー':;;;;;;;;;;;;;;;ノ
                    ``''''''``'''''´
817デフォルトの名無しさん:2006/02/24(金) 18:15:05
>>797
「動けばいいんだろ」みたいな口ぶりのやつのほうが、
動くものを作れないだろ。
818デフォルトの名無しさん:2006/02/24(金) 18:21:59
>>811
お前は改行を怒らせた
819デフォルトの名無しさん:2006/02/24(金) 18:26:56
>>817
一番ヤバぃのは理論振りかざして何も出来ない木偶の坊だ
820デフォルトの名無しさん:2006/02/24(金) 18:40:03
「動けばいいんだろ」なんて言って、とんでもないものを作ってしまう奴よりは何もできない奴の方がまだまし
821デフォルトの名無しさん:2006/02/24(金) 18:43:32
と、何もできない人が申しております。
822デフォルトの名無しさん:2006/02/24(金) 18:45:50
>>820
そもそもそういうのは「動かないもの」なのですが…
823デフォルトの名無しさん:2006/02/24(金) 19:10:29
「動けばいい」という発想の元で作られたプログラムの
デバッグをやらねばならない俺の身にもなってくれ。orz
824デフォルトの名無しさん:2006/02/24(金) 19:13:57
>>823
っ 蛇の道をススム者の定めじゃ…o|ro|rz
825815:2006/02/24(金) 19:43:25
すみません誰か回答お願いします
826デフォルトの名無しさん:2006/02/24(金) 19:45:19
良く分かりませんが、これ、置いておきますね
つ extern
827デフォルトの名無しさん:2006/02/24(金) 19:48:12
      ,. -──- 、 「いや、そのかいとうはおかしい。」
    /   /⌒ i'⌒iヽ、
   /   ,.-'ゝ__,.・・_ノ-、ヽ
   i ‐'''ナ''ー-- ● =''''''リ      _,....:-‐‐‐-.、
  l -‐i''''~ニ-‐,.... !....、ー`ナ      `r'=、-、、:::::::ヽr_  「良く分かりませんが、これ、置いておきますね
   !. t´ r''"´、_,::、::::} ノ`     ,.i'・ ,!_`,!::::::::::::ヽ   つ extern」
   ゝゝ、,,ニ=====ニ/r'⌒;   rー`ー' ,! リ::::::::::::ノ
    i`''''y--- (,iテ‐,'i~´ゝ''´    ̄ ̄ヽ` :::::::::::ノ
    |  '、,............, i }'´       、ー_',,...`::::ィ'
 ●、_!,ヽ-r⌒i-、ノ-''‐、    ゝ`ーt---''ヽ'''''''|`ーt-'つ
    (  `ーイ  ゙i  丿   ;'-,' ,ノー''''{`'    !゙ヽノ ,ヽ,
    `ー--' --'` ̄       `ー't,´`ヽ;;;、,,,,,,___,) ヽ'-゙'"
                   (`ー':;;;;;;;;;;;;;;;ノ
                    ``''''''``'''''´
828デフォルトの名無しさん:2006/02/24(金) 19:56:00
どちらも申し分ない無能だが、>>826はその一歩先にいるなw
829デフォルトの名無しさん:2006/02/24(金) 19:59:14 BE:239631168-
一つ上の立場からモノを言えば、無能じゃないと思ってる無能も一人。
830デフォルトの名無しさん:2006/02/24(金) 20:24:45
つ C99
831デフォルトの名無しさん:2006/02/24(金) 21:20:52
C99はこのスレでは存在しない物になっています
832デフォルトの名無しさん:2006/02/24(金) 21:22:29
不用意にC99という言葉を使うと規格ヲタとしてラベリングされます
833デフォルトの名無しさん:2006/02/24(金) 21:23:44 BE:99846454-
世間的にもないことになってます。
834デフォルトの名無しさん:2006/02/24(金) 21:27:38
C99の扱いヒドスwwwwwwwww
835デフォルトの名無しさん:2006/02/24(金) 21:31:52
C99とかほざくくらいならC++使います
836デフォルトの名無しさん:2006/02/24(金) 21:35:43
C++とかほざくくらいなら
C++使います
 ++
837815:2006/02/24(金) 22:18:38
結局どうなんでしょうか?
838デフォルトの名無しさん:2006/02/24(金) 22:20:35
>>837
やってみれば判ると思いますが、どこか前方で同じ名前の変数を宣言していない限り使えません。
839デフォルトの名無しさん:2006/02/24(金) 22:23:53
>>838
氏ね
840デフォルトの名無しさん:2006/02/24(金) 23:23:24
動けばいいという発想のもとで作られた、セキュリティ
ホールだらけ、競合条件だらけ、バグだらけのプログラムを
見ても作った人に言ってはいけませんよ。
心の中で「こいつレベル低いなあ…」と見下しながら笑顔で
付き合うのが大人です。
841デフォルトの名無しさん:2006/02/24(金) 23:23:56
>>840
ageて書くような内容か?
842838:2006/02/24(金) 23:31:39
。・゚・(ノД`)・゚・。
843デフォルトの名無しさん:2006/02/25(土) 00:35:38
>837
やってみろアホ
844815:2006/02/25(土) 01:48:02
いや普通に流れてたらないってのは分かっていて
何か特殊というか見落としたりしてないかと思ったわけで
だからやってみるってことはできないわけで
845デフォルトの名無しさん:2006/02/25(土) 01:51:25
日本語でおk
846デフォルトの名無しさん:2006/02/25(土) 01:55:24
>>844
日本語でどうぞ。
或いは、検索機能のついたエディタか検索ツールを使えば済むことなのでしょうか。
847デフォルトの名無しさん:2006/02/25(土) 03:29:17
お願いします。
ポインタについてなんですが
int *pt1=&a; 
と宣言した場合というのは

int *pt1;
pt1=&a; 
ということと同じことなのでしょうか?
848デフォルトの名無しさん:2006/02/25(土) 03:33:24
なぜ同じと思うのか、なぜ違うと思うのか
849デフォルトの名無しさん:2006/02/25(土) 03:41:09
constでもつけて試してみたら?
850デフォルトの名無しさん:2006/02/25(土) 03:41:22
上の場合は*pt1に&aを代入するんですか?
pt1にaのアドレスを入れるというのはわかるのですが
*pt1にaのアドレスを入れることは可能なんでしょうか?
851デフォルトの名無しさん:2006/02/25(土) 05:56:17
>>847
そう。

852デフォルトの名無しさん:2006/02/25(土) 06:00:03
>>840
いや、問題は、俺がデバッグしなければいけないという点にある。
見るだけで済むなら何も言わないよ。
853デフォルトの名無しさん:2006/02/25(土) 06:03:26
プログラムったって、
小規模の物から大規模の物まで。
一人で作る物から多人数で。
一回使うだけの物から、大勢が長期使うものまで。
さまざまなのに、

>俺がデバッグしなければいけない
何で、こんな限定されたことを前提にレスしてるの?
854デフォルトの名無しさん:2006/02/25(土) 06:11:51
まあ、笑顔でいられないってことだよ。
855前スレ990:2006/02/25(土) 06:54:03
みなさんありがとうございます。

>>前スレ991
すみません・・・どうやるのかよくわかりません・・・
何か処理が非常に複雑になるような・・・?

>>前スレ994
reallocって(移動される場合には)結局メモリをコピーしているんではないのですか?
コピーせずにすますのはx86とかの場合ページ単位でしかできなかったような気が・・・?

間違ってるかもしれませんがよろしくお願いします。
856847:2006/02/25(土) 07:55:15
答えてくださった皆様ありがとうございました
理解を深めるようさらに勉強していきたいと思います
857デフォルトの名無しさん:2006/02/25(土) 09:44:44
>>850
ptは*を付けるとint型になると宣言しているのであって、
int *pt = &a;
*ptに&aを代入している訳では無い
int*型のptに&aを代入している


858デフォルトの名無しさん:2006/02/25(土) 10:25:01
初期化だがな。
859デフォルトの名無しさん:2006/02/25(土) 12:12:23
mallocの意味教えて
860デフォルトの名無しさん:2006/02/25(土) 12:18:07
>>855
リストにすると探索時間が気に入らないとか言ってたようだが
そんなのはポインタ1個用意しておいて末尾をポイントさせとけば済む話だろ
861デフォルトの名無しさん:2006/02/25(土) 12:22:47
>>859
memory allocate
記憶割付 
862815:2006/02/25(土) 12:32:15
うまく通じてないみたいなんで詳しく言います

実はあるプログラムがあるのですが(自分が書いたのではない)、そのmakeが通らない
変数が宣言されていないというエラーが大量に出る
ソースを見てみると同一ファイル内で例えば70行目でなんたらって変数を使っているがその宣言は3000行目にあるとかそんなことがいっぱいある
そのプログラムは開発途中のものではなく、ずいぶん昔に開発済みかつ使われていたもののはずなのでなんでかなあということなんですが
どういうことが考えられますでしょうか?
863デフォルトの名無しさん:2006/02/25(土) 12:35:49
おまえ、あるかないかって聞いたろ、実際に使われたタ奴ならそんなこと聞く必要ないだろ
あと、どういう事か聞くなら、ソース見せろやヴォケ
864デフォルトの名無しさん:2006/02/25(土) 12:35:53
バックアップとって変数宣言上に移動してコンパイル通ればそれでよし。
なぜコンパイル通らない形で保存されてたかなんて推理したって何の意味もない。
865デフォルトの名無しさん:2006/02/25(土) 13:03:24
>>862
最初からそう書けばまだ少しはましだったのにね。
で、まさかインクルードファイルが見つかってないと言う落ちはないよな?
ソースをアップロードできないならせめて、エラーメッセージだけでも見せてみ。
866デフォルトの名無しさん:2006/02/25(土) 13:05:11
もしかしてこれで、社会人なのか・・・(((((((( ;゚Д゚)))))))ガクガクブルブルガタガタブルガタガクガクガクガクガク
867デフォルトの名無しさん:2006/02/25(土) 13:10:10
>>862
会社と喧嘩して退職時に嫌がらせでシャッフルしたとか
868デフォルトの名無しさん:2006/02/25(土) 13:45:10
ノイズの多いスレだな・・・

bar()
{
  foo = 0;
}

int foo;

というコードを通してくれるCのコンパイラなりコンパイルオプションは存在しない。
ただし、barの上(やincludeしているヘッダファイル)で、

extern int foo;

すればコンパイルは通る。
869デフォルトの名無しさん:2006/02/25(土) 13:52:49
状況も分からずにレスするなんて、
無駄なレスだな・・・
870デフォルトの名無しさん:2006/02/25(土) 13:59:02
>Cのコンパイラなりコンパイルオプションは存在しない

甘い
規格では認めていないというだけで、従っていない処理系は世の中に腐るほど存在する
「それ」が C かどうかはベンダがどう名乗るかで決まることで、LR にガタガタわめいても始まらん
そのへんは configure でご苦労なことをやっている人たちを見習えや


ところで、Makefile があるから make だけでビルドできると早合点してるアフォはどこへ行った?
この期に及んで INSTALL を読んでないとかいうオチはねえだろな
会社のソースならドキュメントの残し方に基準があるだろうから 2ch で聞くより先にやるべき事があるんじゃないか
871デフォルトの名無しさん:2006/02/25(土) 16:16:29
n = 10, a = 5; とすると、

n += (a++) → n = 15
n += (++a) → n = 16

になるのですが、上の式と下の式はどんな風に計算されてるんですか?
上の式が,n =16 にならないのが分からないです・・・
872デフォルトの名無しさん:2006/02/25(土) 16:18:14
質問する前には最低限検索を。
873デフォルトの名無しさん:2006/02/25(土) 16:18:37
>>871
n += (a++)はインクリメントされる前のaの値である5がnに加えられる。
n += (++a)ではインクリメントされた後の値の6がnに加えられる。
874デフォルトの名無しさん:2006/02/25(土) 16:19:45
n = a++
でどうなるか分かってる?
875デフォルトの名無しさん:2006/02/25(土) 16:19:56
>>873
氏ね
876デフォルトの名無しさん:2006/02/25(土) 16:34:37
>>872
>>874
>>875
お前はそんなことを書くためにわざわざここに来てるのか?www
877デフォルトの名無しさん:2006/02/25(土) 16:35:22
>>876
お前はそんなことを書くためにわざわざここに来てるのか?www
878デフォルトの名無しさん:2006/02/25(土) 16:37:17
>>877
いいえ、違いますよ
だって、俺は871ですからね♪
879デフォルトの名無しさん:2006/02/25(土) 17:58:52
おまえは今まで食ったパンの枚数を覚えているのか?
880デフォルトの名無しさん:2006/02/25(土) 18:01:22
枚数って・・・
なんでスライスされたパンなの?
881デフォルトの名無しさん:2006/02/25(土) 18:55:06
初期化するしないの区別って何ですか?
882デフォルトの名無しさん:2006/02/25(土) 19:01:01
↑目的語を書いてください↑
883デフォルトの名無しさん:2006/02/25(土) 19:01:42
目的語ってなんですか?
884881:2006/02/25(土) 19:02:41
>>882
やっぱり目的によって初期化するしないが変わるんですか?
885デフォルトの名無しさん:2006/02/25(土) 19:05:38 BE:119815946-
>>884
質問に質問で返さないで。
なぜそういう疑問をもったか言ってみなさい。
886881:2006/02/25(土) 19:07:26
>>885
疑問というかわからないから聞いてるんです。
887デフォルトの名無しさん:2006/02/25(土) 19:11:29 BE:69892272-
>>886
なぜ、自分がそういう疑問をもったかもわからないの?
888デフォルトの名無しさん:2006/02/25(土) 19:23:46
>>879
13枚
889デフォルトの名無しさん:2006/02/25(土) 19:26:11
おー、久しぶり Eliza 同士の対話かw
890デフォルトの名無しさん:2006/02/25(土) 19:30:20
  \\_
:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_    呼んだ?
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ        ├┤|
891881:2006/02/25(土) 19:34:52
>>887
>>886は自分じゃありません。
892デフォルトの名無しさん:2006/02/25(土) 20:38:24
>>890
宿題スレにお帰りください

あるいはぎゃるのぱんてー1枚
893デフォルトの名無しさん:2006/02/25(土) 20:46:14
>>881=>>847か・・・
ついでにhttp://pc8.2ch.net/test/read.cgi/tech/1140039002/571か・・・
>>856の「勉強していきたい」は、「このスレで質問しまくるけど、
出された質問には一切答えません。自分で試すなんて論外です」って意味か・・・
そろそろ春だな・・・
894デフォルトの名無しさん:2006/02/25(土) 20:58:06
誰でも匿名で参加できる掲示板に書き込みをしている知らん奴がどういうつもりかなんて関係ないね
技術的に興味のある話題なら相手するし、気が向いたら質問に答えてやることもあるし、痛い奴は煽ることもある

他人の領分に変に干渉する誰かさんは3番目に該当するわけだが・・・
895デフォルトの名無しさん:2006/02/25(土) 21:00:24
  \\_
:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_    ポカーン
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ        ├┤|
896デフォルトの名無しさん:2006/02/25(土) 21:41:09
突然ですが、
doble型のa,b,cを
c = a % b
とするとエラーがでます。何か解決方法はありますか?
897デフォルトの名無しさん:2006/02/25(土) 21:43:24
C言語を勉強しているのですが、3^(1/3)のような分数乗の計算の方法がわかりません。
pow関数では分数乗は扱えないのでしょうか?

お願いします。
898デフォルトの名無しさん:2006/02/25(土) 21:53:31
>>897
普通にできるよ。
pow(3.0, 1.0 / 3.0);

1/3とか書いちゃだめよ。
899デフォルトの名無しさん:2006/02/25(土) 21:54:27
1.doble型などない
2.全角
Solution
バカが無理してCなんか覚えるな
900デフォルトの名無しさん:2006/02/25(土) 22:03:40
double型は小数点以下まで演算できるので
整数の余りという概念はありません、だっけ?
901デフォルトの名無しさん:2006/02/25(土) 22:06:39
文字列リテラルのエスケープ文字に全角の逆斜線を使う奴には甘いくせに
いわば double スタンダードってやつだな
902デフォルトの名無しさん:2006/02/25(土) 22:13:05
rand関数について質問なんですが、0と2のみの乱数を発生させる事は
できるのでしょうか?

例えばrand % 3 で0〜2の乱数を発生させる事ができますが、
1を除いた0と2のみの乱数を発生させる事はできるでしょうか?

これについて教えて頂きたいのですが、お願いします。
903デフォルトの名無しさん:2006/02/25(土) 22:14:40
計算してみればいいだろ
904デフォルトの名無しさん:2006/02/25(土) 22:15:12
rand()%2*2
終わり
905デフォルトの名無しさん:2006/02/25(土) 22:15:46
>>902
rand() & 2
906デフォルトの名無しさん:2006/02/25(土) 22:16:27
てか、これくらい閃かないのなら。プログラムなんかやめたほうが・・
907デフォルトの名無しさん:2006/02/25(土) 22:17:48
>>903さん
申し訳ないです。

>>904さん
ありがとうございます!!こんな単純な事とは思いつきませんでした・・・。
908デフォルトの名無しさん:2006/02/25(土) 22:18:52
>>906
そんな・・・('A`)。
909デフォルトの名無しさん:2006/02/25(土) 22:20:00
>>896
解決法: 「数値なら何にでも double を使っとけ」と教えたボンクラ師匠をコンクリートで固めて海に捨てる
910デフォルトの名無しさん:2006/02/25(土) 22:23:47
fmod
911904:2006/02/25(土) 22:26:56
>>905のほうがコードとしては優れているなぁ。思いつかなんだ。
bit演算を>>902が理解できるかどうかは別として
912デフォルトの名無しさん:2006/02/25(土) 22:39:31
>>905
おぉ。勉強になりました。
913デフォルトの名無しさん:2006/02/25(土) 22:49:36
奇数偶数判定に&1を使ってる人なら自然な発想だ
914スイッチ教のおつげ:2006/02/25(土) 22:58:57
おまいら!!!
いいお告げだ。
プログラムからすべての分岐をなくせる気がする。
915デフォルトの名無しさん:2006/02/25(土) 23:02:30
>>914
おぉ。神が舞い降りたか。むしろ髪が舞い落ちたか。
916スイッチ教のおつげ :2006/02/25(土) 23:04:08
xの範囲が -M < x < Mだとすると

if( x >= 0) A; else B; が

swich( (int)((x + M)/ M ) ) {
case 0: B; case 1: A; }
に変換できる。
917デフォルトの名無しさん:2006/02/25(土) 23:07:17
今禿って言いそうになった香具師ちょっとこっち来い
918デフォルトの名無しさん:2006/02/25(土) 23:08:18
うるせー刷毛!
919デフォルトの名無しさん:2006/02/25(土) 23:09:44
夜中にウホにこっち来いって言われても・・・
920デフォルトの名無しさん:2006/02/25(土) 23:14:15
switch (x >= 0) {
case 0: B; break;
case 1: A; break;
}

でいいじゃん
921デフォルトの名無しさん:2006/02/25(土) 23:19:21
bool式使ってるじゃねーかうんこ君め
922スイッチ教のおつげ:2006/02/25(土) 23:20:49
訂正:
>プログラムからすべての分岐をなくせる気がする。

>プログラムからすべての比較(とそれに伴う分岐)をなくせる気がする。
923デフォルトの名無しさん:2006/02/25(土) 23:21:31
if( x >= 0) A; else B;

でいいじゃん
924デフォルトの名無しさん:2006/02/25(土) 23:45:27
文:
 式文
 名札付き文
 分岐文   switch文, break文, continue文, return文, goto文
 選択文   if文
 繰返し文  for文, while文, do文
 複文

用語は正確にね
925デフォルトの名無しさん:2006/02/25(土) 23:48:38
関数テーブル使えば簡単じゃん。
926デフォルトの名無しさん:2006/02/25(土) 23:53:50
>>924
レスアンカー貼ら(れ)ないチキン君
927デフォルトの名無しさん:2006/02/26(日) 00:06:28
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#define N 10000000
#define M 10000
int a[N],b[N],d[4*M+1],i,L;clock_t c[2];

fuka(int j){int x;x=j;
x*=x;if(x>M)x=x%M;x*=x;if(x>M)x=x%M;
x*=x;if(x>M)x=x%M;x*=x;if(x>M)x=x%M;
x*=x;if(x>M)x=x%M;x*=x;if(x>M)x=x%M;
x*=x;if(x>M)x=x%M;x*=x;if(x>M)x=x%M;}

fnif(){ for(i=0;i<N;i++)if(a[i]<b[i])fuka(i); else fuka(i+1);}

fnsw(){ for(i=0;i<N;i++)switch((int)((a[i]-b[i]+L)/L)){
case 0: fuka(i);break;case 1: fuka(i+1);break;}}

fnsx(){ for(i=0;i<N;i++)switch(d[a[i]-b[i]+L]){
case 0: fuka(i);break;case 1: fuka(i+1);break;}}

main(void){
for(i=0;i<N;i++){a[i]=rand()%M;b[i]=rand()%M;}
L=2*M;for(i=0;i<=2*L;i++)d[i]=(int)(i/L);
c[0]=clock();fnif();c[1]=clock();
printf("ifで分岐に%d clockかかりました。\n" , c[1]-c[0]);
c[0]=clock();fnsw();c[1]=clock();
printf("swichで分岐に%d clockかかりました。\n" , c[1]-c[0]);
c[0]=clock();fnsx();c[1]=clock();
printf("swichで分岐に%d clockかかりました。\n" , c[1]-c[0]);}
928デフォルトの名無しさん:2006/02/26(日) 00:08:15
ifで分岐させてもswitchでも対して変わらないのだが。
ジャンプテーブルを作らせるにはどうしたらいいですかね。
929デフォルトの名無しさん:2006/02/26(日) 00:09:30
自分で作れ
930デフォルトの名無しさん:2006/02/26(日) 00:10:29
>>928
ジャンプテーブル=switch
931デフォルトの名無しさん:2006/02/26(日) 00:11:22
  \\_
:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_    ポカーン
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ        ├┤|
932デフォルトの名無しさん:2006/02/26(日) 00:18:55
>>928
コンパイラによっては自動でジャンプテーブル作るかもしれないけど、
自分でジャンプテーブル作ってやったほうが確実。
933デフォルトの名無しさん:2006/02/26(日) 00:21:46
分岐させる量が多いとifよりswitchのほうが速くなるから
ジャンプテーブルというものが存在しているだろう事はわかるのですが
>>927だとfnif関数とfnsx関数の速度がほぼ同じだから
switchがifと同じ分岐になっているらしい。どうやればswitchの方が速くなりますかね?
934デフォルトの名無しさん:2006/02/26(日) 00:25:42
> switchがifと同じ分岐になっているらしい。
それが最高速である可能性は?
つか、ジャンプテーブル使いたかったら自分でテーブル作れと。
935デフォルトの名無しさん:2006/02/26(日) 00:30:55
934
どうやら最高速だったようです。
fnsy(){ for(i=0;i<N;i++)fuka(i);}
と同じ速度でした。
936デフォルトの名無しさん:2006/02/26(日) 00:32:41
>>898

ありがとうございます。
937デフォルトの名無しさん:2006/02/26(日) 00:35:06
>>933
この程度の分岐ではswitch文の利点(速度)が発揮されない
938デフォルトの名無しさん:2006/02/26(日) 00:36:08
速度は「最」かどうか本当に関係あるのか?
ある基準値をクリアすればそれ以上はどうでもいい場合と、
ひたすら最速を競う勝負とあるわけだが・・・
939デフォルトの名無しさん:2006/02/26(日) 00:39:05
まずは単純なループよりも、ifを入れた場合の方が鈍くなるようなものを
作らなければならないのだが...
コンパイラの最適化等で無視されないようなものをどう作ったらいいんだ?
940デフォルトの名無しさん:2006/02/26(日) 00:50:30
>>939
つ volatile
941デフォルトの名無しさん:2006/02/26(日) 01:39:08
いろいろ試してみた結果、分岐の数が増えればifよりswitchの方が速いが
それでも足し算、掛け算、代入などよりは十倍くらい鈍いことが判明した。

ジャンプテーブルさえ作れれば分岐のコストが無くせると思ったのだがそうでは無いようだ。
結局、分岐はなるべく減らそう、ということだ。
942デフォルトの名無しさん:2006/02/26(日) 01:44:04
線形探索だけで論じてるとしたら痛杉
943デフォルトの名無しさん:2006/02/26(日) 01:47:25
最適化みたいな、コンパイラや環境にもろ依存するような話もこのスレの範疇なの?
944デフォルトの名無しさん:2006/02/26(日) 01:49:03
違う
配列のレンジチェックまで最適化して貰えるとか思ってるアフォが集まりやすいが
945941:2006/02/26(日) 01:50:13
943
スイッチやイフはどのパソコン、コンパイラでも時間がかかるだろ。
一般論だ。
946デフォルトの名無しさん:2006/02/26(日) 01:51:19
なんでパソコンに限定してるの?
947デフォルトの名無しさん:2006/02/26(日) 01:51:46
さっそくキタ━━━━━━(゚∀゚)━━━━━━ !!!!!
948デフォルトの名無しさん:2006/02/26(日) 01:56:23
UNIX-C と ANSI-C の違いってなんですか?
949デフォルトの名無しさん:2006/02/26(日) 01:59:55
ifよりswitchの方が早いとか池沼だな
そんなに気になるなら全部アセンブラで書けや
950デフォルトの名無しさん:2006/02/26(日) 02:37:37
コンパイラの最適化により if でも switch でも同じコードが作られる
ことが、今後起こらないとも限らない。(勝手にジャンプテーブルを
作るということ)
951デフォルトの名無しさん:2006/02/26(日) 02:41:50
というわけで、最適化スレ
http://pc8.2ch.net/test/read.cgi/tech/1084676298/
952デフォルトの名無しさん:2006/02/26(日) 06:22:51
やっぱりifの方が速いな。
頻繁に起こる分岐を早めに確定したほうがいいからな。
30分岐だったとしても、等確率だったらスイッチだが
どれか一つが50パーセントで起こるならそれを決定してしまった方がよい。
953デフォルトの名無しさん:2006/02/26(日) 08:12:03 BE:180710584-
if文はブロックなしで書いたほうが速いの?
もしそのブロック内で宣言なければ最適化されてる?
954デフォルトの名無しさん:2006/02/26(日) 09:00:51
char * const *(* next)();
ってどういう意味?
955デフォルトの名無しさん:2006/02/26(日) 09:08:14
nextはポインタで、その型は
引数なしでchar * const *を返す関数である

って意味だ。

char *const *func();
char *p;

next = func;
p = next();

だな。内側から分解してみると理解しやすい。
956デフォルトの名無しさん:2006/02/26(日) 10:55:03
次スレテンプレ。970さんお願い

まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は専門の別スレッドがあるのでそこへさようなら。

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

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

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


次スレが間に合わない場合の避難所
http://pc8.2ch.net/test/read.cgi/tech/1138718221/
957デフォルトの名無しさん:2006/02/26(日) 10:55:28
>>953
>if文はブロックなしで書いたほうが速いの?
この質問は高校生までなら許す。関係ない。

>もしそのブロック内で宣言なければ最適化されてる?
なんとなく質問の意味は想像できるけど、宣言を行う場所は
最適化どうこうで選ぶもんじゃないから、宣言される場所によって
それがどういう意味を持つかで(ローカル変数にしたいのか
そうでないのかなど)考えるように。
958デフォルトの名無しさん:2006/02/26(日) 11:07:42
昨日に引き続き、朝から申し訳ないんですが、迷路探索プログラムについて
質問させて頂きます。0を空間、2を壁としています。
222  222
202  222
222  222
このように周りは初めの条件で2で囲ませ、それ以外は昨日教えて頂いた
rand & 2を使いランダムに数字を代入して行くのですが、実行結果を見ると
右のように全て2が代入されてしまいます。

#define LEFT 7
#define RIGHT 7
#define MAX 7      として置きます。実行前にsrand〜もしています。
void CreateTable(int table[LEFT][RIGHT])
{
 int i,j;
 for(i = 0; i <= MAX; i++){
   for(j = 0;j <= MAX; j++){
                 /*****上下の淵を2で埋める*****/
   if((table[i][j] == table[0][j]) || (table[i][j] == table[LEFT][j]))
     table[i][j] = 2;
                 /*****左右の淵を2で埋める*****/
   else if((table[i][j] == table[i][0]) || (table[i][j] == table[i][RIGHT]))
     table[i][j] = 2;

        /****中身をランダムに0と2で埋める****/
   else table[i][j] = rand() & 2;
   }
 }
}どこの条件が悪いのか教えて頂けませんか?お願いします。
959デフォルトの名無しさん:2006/02/26(日) 11:08:31
デバッガがprintfで追えって・・・
960デフォルトの名無しさん:2006/02/26(日) 11:12:22
>>958
エスパーするとこの比較条件が多分間違い
   if((table[i][j] == table[0][j]) || (table[i][j] == table[LEFT][j])) 
     table[i][j] = 2; 
                 /*****左右の淵を2で埋める*****/ 
   else if((table[i][j] == table[i][0]) || (table[i][j] == table[i][RIGHT])) 
     table[i][j] = 2; 

たぶん
if(i==0 || i==LEFT-1 || j==0 || j==RIGHT-1)
  table[i][j]=2;
だと思う
961デフォルトの名無しさん:2006/02/26(日) 11:13:32
>>959
プリントエフで追うと何回やっても2のみの出力結果になってしまいます・・・。
もう少し検索してきますorz。
962デフォルトの名無しさん:2006/02/26(日) 11:15:06
だから、なんで結果だけを出力するんだよ。
963デフォルトの名無しさん:2006/02/26(日) 11:15:38
>>960
ありがとうございます!!一度それで試してみます。
964デフォルトの名無しさん:2006/02/26(日) 11:18:37
>>962
いえ、ランダムに生成した表では無く、初めから配列に0と2を自分で代入しておいて
探索させると成功するので、ランダムに生成したこの表の条件が
間違っていると思ったからです。
965デフォルトの名無しさん:2006/02/26(日) 11:20:56
( ゚д゚)ポカーン
966960:2006/02/26(日) 11:21:54
( ´゚д゚`)
967デフォルトの名無しさん:2006/02/26(日) 11:23:51
>>960
すいません。自分の淵の2つの条件を>>960に書いてある条件に置換しても
やはり出力結果は全て2ですorz。
968デフォルトの名無しさん:2006/02/26(日) 11:26:34
昨日も誰かに言われてたけど、あなたプログラムに向いてないよ。
辞めた方が吉。
969デフォルトの名無しさん:2006/02/26(日) 11:28:10
>>968
分かりました。自力で解く事にします。ありがとうございました。
970デフォルトの名無しさん:2006/02/26(日) 11:29:32
解くって・・・ちょwwwおまwwww
971デフォルトの名無しさん:2006/02/26(日) 11:31:20
じゃあ、ヒント下さいよ・゚・(つД`)・゚・
972デフォルトの名無しさん:2006/02/26(日) 11:43:57
>>958
>void CreateTable(int table[LEFT][RIGHT])
~~~~~~~~~~~~~~~~~~~~~~
こういう書き方って初めて見たんだけど、最近はできるの?


あと、if文の条件がおかしくないか?

上下左右の淵を 2で埋めるんだったら、
if ((i == 0 || i == LEFT) || (j == 0 || j == RIGHT)) {
table[i][j] = 2
} else {
table[i][j] = rand() & 2;
}
でいいだろうし。
でないと、初期化してないtable[i][j]の値でif文実行になるし。


どーでもいいが、MAXの意味って何なんだ?
もちっと勉強してこい。
973デフォルトの名無しさん:2006/02/26(日) 11:55:49
>>972
先生〜〜(ノ∀`)〜〜!!できましたよ!!ランダムに生成する事ができています!
感謝致します。あと少し弄って完成させます。
本当にありがとうございましたm(_)m
974デフォルトの名無しさん:2006/02/26(日) 11:57:50 BE:59908234-
> こういう書き方って初めて見たんだけど、最近はできるの?

昔からできてない?
975デフォルトの名無しさん:2006/02/26(日) 11:59:27
わたしたちは、また一人、ゆとり君を生み出してしまった・・・
976デフォルトの名無しさん:2006/02/26(日) 12:00:50
そう、配列の範囲外アクセスにまったく気づかないゆとり君をね......
977デフォルトの名無しさん:2006/02/26(日) 12:05:31
基本的なことなんですが質問です。
エディタで逆スラッシュの入力をしたいのですが、
どうすればいいのですか?教えてください。
978デフォルトの名無しさん:2006/02/26(日) 12:05:54
\
979デフォルトの名無しさん:2006/02/26(日) 12:06:23
>>977
ふつうに入力できますよ
980デフォルトの名無しさん:2006/02/26(日) 12:07:25
最後にこれで消えますので。
>>960
に書いてあるプログラムの条件で既に合っていました。
自分の条件(LEFT RIGHT)が <= にしていたため間違ってしまいました。
申し訳ないです、本当にすいませんでした。
981976==960:2006/02/26(日) 12:10:12
おお、範囲外アクセスに気づけたみたいだ。
ゆとり君と言ったのは間違いであったと謹んで訂正する
982デフォルトの名無しさん:2006/02/26(日) 12:11:31
範囲外がどうこうのレベルじゃないだろw
983デフォルトの名無しさん:2006/02/26(日) 12:14:43
>>955
このスレでは間違い。
引き数リスト無しでchar * const * を返す関数は、
引き数無しでchar * const * を返す関数とは違う。
それと、その後のpも大間違い。
自分でchar * const *を返すと書いておきながらなんで間違うかなぁw
984デフォルトの名無しさん:2006/02/26(日) 12:24:54
>>970
スレ立てよろしく。

反応ない様なら次、>985辺りで。
985デフォルトの名無しさん:2006/02/26(日) 12:25:12
うっかりタイプ
986955:2006/02/26(日) 12:38:15
すまん、間違えてた。
勉強しなおすよ。
987デフォルトの名無しさん:2006/02/26(日) 12:38:59
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>

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

int a=100,b=18,*p;

//ポインタ
p=&a ;
printf("p:%d \n\n",*p);

//参照
int &c=a;
//エラー
/*
int &c;
&c=a;
*/
printf("c:%d \n\n",c);
return 0;
}

参照とポインタの違いは・・・?
メリット&デメリットを教えてくれ!

ポインタのメリットは、*(p+i)とかやってアドレスずらせるだけかな。
988デフォルトの名無しさん:2006/02/26(日) 12:40:35
ググればいくらでも解がある
989デフォルトの名無しさん:2006/02/26(日) 12:41:45
>>987
C言語的には参照など無いというのが回答
990987:2006/02/26(日) 12:43:34
うだうだ言ってないで教えろよ!
その為にスレがあるんだろ
991デフォルトの名無しさん:2006/02/26(日) 12:46:42
ポインタと異なる点は、「一度初期化したあとはその指すアドレスを変更できない」という点である。よって、ポインタがどこを指しているのか曖昧になることもないし、NULLポインタのような特殊な状態を持つこともない。この点で参照はポインタよりも安全だと言われる。
もちろん、参照だけで生きていけるほど世の中甘くはないし、ポインタを完全に廃してしまえるわけではない。
そこで、私がポインタと参照を使い分ける時の基準について書いてみようと思う。



高速なオブジェクトの引き渡しには参照
関数に構造体やオブジェクト(実際にはどちらも同じ物であるが)を渡す場面が数多くある。
そのような場合に通常の値渡しを行うと、クラスのメンバを全てコピーして新しいオブジェクトを生成するため、
巨大なオブジェクトではオーバーヘッドがものすごいものとなる。そこで、オブジェクトを渡すときには参照を使う。
なお、オブジェクトが変更されないことを明示し保証するためにconstをつける。

値を変更する場合にはポインタ
関数に変数(オブジェクトも含む)を渡して、関数内部で状態を変更させて返したい場合がある。
値を変更する場合には、参照を使っても全く同じ事が可能であるが、
呼び出し側で「値が変更される」ことをわかりやすくするためにポインタを使う。
(参照による呼び出しでは、一見すると値渡しのようにも見えるため、C言語出身の私は値が変更されないような
イメージを受ける。)



↑検索してみましたーーー!!!
フムフム、色々できるポインタの方がいいかも><
992デフォルトの名無しさん:2006/02/26(日) 12:49:29
( ゚д゚)ポカーン
993デフォルトの名無しさん:2006/02/26(日) 13:07:38
>>990-991
参照はC++のものだからCスレであるここではスレ違い。
994デフォルトの名無しさん:2006/02/26(日) 13:13:08
でも何で「参照」なんだろ。
ポインタだって、言っちゃえば参照だし、
どうせなら「別名」とかの方が良いような?
995デフォルトの名無しさん:2006/02/26(日) 13:13:28
( ゚д゚)ポカーン
996デフォルトの名無しさん:2006/02/26(日) 13:14:57
( ゚д゚)ポカーン
997デフォルトの名無しさん:2006/02/26(日) 13:15:39
( ゚д゚)ポカーン
998デフォルトの名無しさん:2006/02/26(日) 13:16:36
次スレマダー?チンチン
999デフォルトの名無しさん:2006/02/26(日) 13:21:34
( ゚д゚)ポカーン
1000デフォルトの名無しさん:2006/02/26(日) 13:22:12

 「C言語なら俺に聞け!」はこのスレをもって終了いたしました。

 長らくのご愛顧、誠にありがとうございました。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。