C言語なら俺に聞け! Part 122
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/02/10(金) 20:13:45質問する前には最低限検索を。
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/
0002デフォルトの名無しさん
2006/02/10(金) 20:19:300003デフォルトの名無しさん
2006/02/10(金) 20:58:260004デフォルトの名無しさん
2006/02/10(金) 21:01:52薔薇乙女
0005デフォルトの名無しさん
2006/02/10(金) 21:08:26美しき野獣乙
0006デフォルトの名無しさん
2006/02/10(金) 21:11:16GJ!
0007デフォルトの名無しさん
2006/02/10(金) 22:07:27セブーン セブーン セブーン♪
乙
0008デフォルトの名無しさん
2006/02/10(金) 22:13:300009デフォルトの名無しさん
2006/02/10(金) 22:25:50C++の中から味わう。
0010デフォルトの名無しさん
2006/02/10(金) 22:37:47C言語って日常生活ではどんなところに使われてるんでしょうか
0011デフォルトの名無しさん
2006/02/10(金) 22:58:39C言語でプログラムするとき
0012デフォルトの名無しさん
2006/02/10(金) 23:12:18お前の身の回りの家電にでも使われてるんでないの?
知らんけど
0013デフォルトの名無しさん
2006/02/10(金) 23:42:06プレステのOS
0014デフォルトの名無しさん
2006/02/10(金) 23:49:33乙鰈
0015デフォルトの名無しさん
2006/02/11(土) 00:09:26OS 作るのに
0016デフォルトの名無しさん
2006/02/11(土) 00:12:02そうだなあ。俺の日常の場合、たとえば今これ書くのに使っている
Linux とか X Window System とかは C だ。
この前自宅に2台目の玄箱を買ったが、当然これも Linux だ。
つまりこの中もCだらけだ。
ということで俺の日常はCなしでは成り立たない。
0017デフォルトの名無しさん
2006/02/11(土) 00:15:55C++にはどうやって移行するのがいい?
なんかきっかけがつかめなくて
0018デフォルトの名無しさん
2006/02/11(土) 00:34:04すっぱりJavaから入るといい
0019デフォルトの名無しさん
2006/02/11(土) 00:57:28別にCでコンピュータさんが動いてるわけじゃない
最後に動くのは機械語なんで、>>10はちょっと聞き方変えたほうが良いと思う
0020デフォルトの名無しさん
2006/02/11(土) 01:00:14じゃあ、今日から使ってみよう。
0021デフォルトの名無しさん
2006/02/11(土) 01:10:050022デフォルトの名無しさん
2006/02/11(土) 01:16:58if( )の( )の中には
if( (a==1 || a==2) && (b!=1 && b!=2) )
このように数式みたいに書いてもいいものなんでしょうか?
0023デフォルトの名無しさん
2006/02/11(土) 01:19:450024デフォルトの名無しさん
2006/02/11(土) 01:19:480025デフォルトの名無しさん
2006/02/11(土) 01:21:210026デフォルトの名無しさん
2006/02/11(土) 01:22:41そんくらい試せよ
はいはいOKです帰れ
0027デフォルトの名無しさん
2006/02/11(土) 01:25:50ネタに使う
>>25
知ってる人が少なめっぽい気もするから
知識だけ自慢できる
0028デフォルトの名無しさん
2006/02/11(土) 01:44:24Direct Xの構造体でたまに見かけるな。
直交座標と極座標のいずれでも表現できるがいずれか一方しか必要ないってときに
同じ名前の変数を別の使い方するのでなく、名前は別だが余分なメモリは使わない
みたいな、そういうひどい使われ方をしてたりする
あとは即値を見たいときとか、アライメントに抵抗するときとかか
0029デフォルトの名無しさん
2006/02/11(土) 02:13:090030デフォルトの名無しさん
2006/02/11(土) 02:21:280031デフォルトの名無しさん
2006/02/11(土) 02:29:140032デフォルトの名無しさん
2006/02/11(土) 02:55:000033デフォルトの名無しさん
2006/02/11(土) 03:24:36ケチるためとも言えるが、無駄を省くためとも言える。
0034デフォルトの名無しさん
2006/02/11(土) 03:25:24int i;
unsigned char ch[sizeof (int)];
} n;
n.i = 0x1389A39B;
for(i = 0; i < sizeof n.ch; ++i) {
printf("%d\n", n.ch[i]);
}
とかやって遊べる。
0035デフォルトの名無しさん
2006/02/11(土) 03:31:060036デフォルトの名無しさん
2006/02/11(土) 04:13:40003792年のソース
2006/02/11(土) 05:03:03したのですが、
#include<graphics.h>
#include<dir.h>
が無い様で、コンパイルできずに困っています。
どなたか、この2つのファイルを含むコンパイラーを教えて下さい。
よろしくお願いします。
0038デフォルトの名無しさん
2006/02/11(土) 05:07:37TurboC++ 1.01
003992年のソース
2006/02/11(土) 05:12:12早速のお返事ありがとうございます!!。
004092年のソース
2006/02/11(土) 05:48:10どうも、TurboC 2.0も、TurboC++ 1.01も
もう手に入らない様なのですが、
他に何か手に入りそうなものでは無いのでしょうか?。
0041デフォルトの名無しさん
2006/02/11(土) 05:58:440042デフォルトの名無しさん
2006/02/11(土) 06:04:06ttp://www.mitewakaru.com/c/cgi/chamber.cgi?template=replies.hct&board=free&NO=53
インストールや設定に関してはスレ違いなのでここで聞かないように。
0043デフォルトの名無しさん
2006/02/11(土) 06:54:180044デフォルトの名無しさん
2006/02/11(土) 10:18:130045デフォルトの名無しさん
2006/02/11(土) 10:32:260046デフォルトの名無しさん
2006/02/11(土) 10:49:4732 ビット環境だと難しい。
環境依存で 64 ビットで取得/設定できる代替関数があるとおもうんで、
それを使うがよろし。
0047デフォルトの名無しさん
2006/02/11(土) 12:59:23途中で無理やり終わらせたら83.1MBのテキストファイルができた(´・ω・`)ショボーン。
0048デフォルトの名無しさん
2006/02/11(土) 13:02:36(´・ω・`)ショボーン(´・ω・`)ショボーン(´・ω・`)ショボーン(´・ω・`)ショボーン
0049デフォルトの名無しさん
2006/02/11(土) 13:09:01005049
2006/02/11(土) 13:14:550051デフォルトの名無しさん
2006/02/11(土) 13:14:55どの程度の復元ソフトを望んでるのかわからん(´・ω・`)がな
rewriteされたようでされていないなんてザラにあるで
0053デフォルトの名無しさん
2006/02/11(土) 13:24:260054デフォルトの名無しさん
2006/02/11(土) 13:27:57005549 ◆3ixoa4Kz5w
2006/02/11(土) 13:37:37元のテキストファイル以外の復元は無理でした。
でも0バイトのソフトは何個か出てきました。
これなんかに利用できませんかね?
0056デフォルトの名無しさん
2006/02/11(土) 13:38:56ソフト ×
ファイル ○
0057デフォルトの名無しさん
2006/02/11(土) 16:11:070058デフォルトの名無しさん
2006/02/11(土) 16:13:07妙な事を聞くんだな
int main(){printf("素数");return 0;}
005957
2006/02/11(土) 16:14:45お前よく俺の考えていたことがわかるな。
0061デフォルトの名無しさん
2006/02/11(土) 16:17:01006257
2006/02/11(土) 16:18:490063デフォルトの名無しさん
2006/02/11(土) 16:21:500064デフォルトの名無しさん
2006/02/11(土) 16:27:010065デフォルトの名無しさん
2006/02/11(土) 16:27:34つ「エラトステネスのふるい」
よしっ、行け。
0066デフォルトの名無しさん
2006/02/11(土) 16:37:18こんな感じでよろしいでしょうか
#include<stdio.h>
int main()
{
int in;
printf("数字を入力してください>");
scanf("%d",&in);
printf("%d は素数ですか?\n",in);
return 0;
}
0067デフォルトの名無しさん
2006/02/11(土) 16:38:37> 数字を素数かどうか出すプログラムってありますか?
日本語でおk
0068デフォルトの名無しさん
2006/02/11(土) 16:54:47が、ひでぇwww
0069デフォルトの名無しさん
2006/02/11(土) 16:59:39{
int in, i=2,;
printf("数字を入力してください。"
scanf("%d", &in);
if(in <= i) printf("そっすね。");
else printf("続きを読むにはここをクリックしてください。");
return 0;
}
0070デフォルトの名無しさん
2006/02/11(土) 17:10:04ひどい事は無い
みんなちゃんと質問に答えてる
007157
2006/02/11(土) 17:19:52おかげで楽しく釣れたよ。
0072デフォルトの名無しさん
2006/02/11(土) 17:28:29くやしい!
0073デフォルトの名無しさん
2006/02/11(土) 17:29:030074ぼるじょあ ◆yBEncckFOU
2006/02/11(土) 17:29:470075デフォルトの名無しさん
2006/02/11(土) 17:35:06#define BA
#undef A
void main( void ) {
int hoge = B;
}
上記のようなプログラムで、
Aは削除されBは100に置き換わることを期待したのですが、
ダメのようです。何か上手い方法はないでしょうか?
0076デフォルトの名無しさん
2006/02/11(土) 17:38:27関数の後ろで #undef A
0077デフォルトの名無しさん
2006/02/11(土) 17:39:270078デフォルトの名無しさん
2006/02/11(土) 17:42:51説明足らずですいません。例えば、
void main( void ) {
int hoge;
hoge=A;
hoge=B;
}
としたときhoge=Aの方だけエラーが発生するようにしたいのです。
これはCの仕様的に無理なのでしょうか?
0079デフォルトの名無しさん
2006/02/11(土) 17:47:21関数の手前で
#ifdef A
#error ?
#endif
0080デフォルトの名無しさん
2006/02/11(土) 17:49:05その手の変態ライブラリならC++だけど
boost/preprocessor/slot
これが参考になる。
プリプロセッサしか使ってないからCでも多分使える
008180
2006/02/11(土) 18:00:39#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
0082デフォルトの名無しさん
2006/02/11(土) 18:01:58#define VALUE _7##_6##_5##_4##_3##_2##_1
だな。
実際にはもっと長い識別子使ってるけどね
0084デフォルトの名無しさん
2006/02/12(日) 02:56:57どうかで判定すればいいだけ。
0085デフォルトの名無しさん
2006/02/12(日) 03:28:130086デフォルトの名無しさん
2006/02/12(日) 03:39:20割り切れた時点で素数じゃねーし。
0087デフォルトの名無しさん
2006/02/12(日) 03:48:350088デフォルトの名無しさん
2006/02/12(日) 05:36:20平方根以下? 9が入力されたら3から調べるのか?
0089デフォルトの名無しさん
2006/02/12(日) 05:53:052から始めて3まで調べる。
素数の二乗≦その数 な素数で判定すればいいだけ。
0090デフォルトの名無しさん
2006/02/12(日) 07:30:31勉強になるます。
0091デフォルトの名無しさん
2006/02/12(日) 08:54:040092デフォルトの名無しさん
2006/02/12(日) 09:23:04エラストテネス
0093デフォルトの名無しさん
2006/02/12(日) 09:23:380095デフォルトの名無しさん
2006/02/12(日) 13:01:00{
処理
}
else
{
/* コメント */
}
このようなつくりですと、デバッガでelse文のコメントにブレークをはれません。
そこで処理をしない処理?みたいなのってできますか?
それともただ単に ; をつければいいだけですか?
0096デフォルトの名無しさん
2006/02/12(日) 13:21:490097デフォルトの名無しさん
2006/02/12(日) 13:34:10最適化の内容によるんで完全に処理系依存だが
例えば
volatile int i = 0;
関数() {
if(条件)
{
処理
}
else
{
i++;
}
}
とか
if(条件)
{
処理
}
else
{
asm("nop");
}
とかやってもだめか?
0098デフォルトの名無しさん
2006/02/12(日) 13:52:47そんなもん else ブロックなんか作るなよ。見てて気持ち悪いから。
ブレークポイント作りたいなら次の文の先頭に付ければいいじゃ
ねえか。関数の最後だというのならその最後の } の所にできる
だろ? もしできねえデバッカだったらそれはクソだから捨てろ。
0099デフォルトの名無しさん
2006/02/12(日) 14:09:37デバッガがクソなのかオプティマイザが利口すぎるのか
ここで確定的に論じることは困難と思われ
0100デフォルトの名無しさん
2006/02/12(日) 14:16:000101デフォルトの名無しさん
2006/02/12(日) 15:32:120102デフォルトの名無しさん
2006/02/12(日) 16:06:190103デフォルトの名無しさん
2006/02/12(日) 16:34:05気持ち悪くても付けろといわれれば付けざるを得ない。
それが仕事なんだよ。
95がどういう意図でelseを付けているかはわからんが・・・
0104デフォルトの名無しさん
2006/02/12(日) 16:39:160105デフォルトの名無しさん
2006/02/12(日) 16:55:48くだらん定義にこだわってないで金とるに値する仕事をしろ
0106デフォルトの名無しさん
2006/02/12(日) 16:57:530107デフォルトの名無しさん
2006/02/12(日) 16:58:580108デフォルトの名無しさん
2006/02/12(日) 17:00:33これを使えるようにするにはmath.hをincludeすればいいと思うのですがなぜか使えません。
式としてはq=sqrt(i)みたいに書いてます。
何がおかしいのか教えてください。
0109デフォルトの名無しさん
2006/02/12(日) 17:01:33とことんレベルが低いな
0110デフォルトの名無しさん
2006/02/12(日) 17:01:43で、コンパイル結果とか実行結果とか何も載せないのは何故ですか?
0111デフォルトの名無しさん
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
0112デフォルトの名無しさん
2006/02/12(日) 17:09:47リンクエラーか?
0113デフォルトの名無しさん
2006/02/12(日) 17:11:29窓から投げ捨てろ
0114108
2006/02/12(日) 17:13:36あとで直接大学にてやってみますね
0115デフォルトの名無しさん
2006/02/12(日) 17:15:510116デフォルトの名無しさん
2006/02/12(日) 17:18:340117デフォルトの名無しさん
2006/02/12(日) 17:18:57できました〜ありがとうございます
で、その-lmってのは何者ですか?
0118デフォルトの名無しさん
2006/02/12(日) 17:20:16自分で調べるかman見るか先生に聞け
0119デフォルトの名無しさん
2006/02/12(日) 17:21:53窓から投げ捨てろ
0120デフォルトの名無しさん
2006/02/12(日) 17:22:59エラトステネス→グーグル力29000
エラストテネス→グーグル力155
エストラテネス→グーグル力2
0121デフォルトの名無しさん
2006/02/12(日) 17:25:030122デフォルトの名無しさん
2006/02/12(日) 18:07:520123デフォルトの名無しさん
2006/02/12(日) 18:45:431:一番目に古い情報を持つ構造体
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を使わず、かつ高速にしたいのです。
ご教授お願いします。
0124デフォルトの名無しさん
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
0125デフォルトの名無しさん
2006/02/12(日) 18:49:020126デフォルトの名無しさん
2006/02/12(日) 18:49:460127デフォルトの名無しさん
2006/02/12(日) 18:52:530128デフォルトの名無しさん
2006/02/12(日) 18:55:34「ソート」でぐぐればいっぱい出てくる。
0129デフォルトの名無しさん
2006/02/12(日) 18:59:42>>124
やはり最も高速かつ実用的なバブルソートがいいと思うよ。
0130デフォルトの名無しさん
2006/02/12(日) 19:06:050131デフォルトの名無しさん
2006/02/12(日) 19:09:200132デフォルトの名無しさん
2006/02/12(日) 19:40:41ググることすらできない低能に今後プログラムを学んでいくことは困難だ。
言葉を知らない赤ん坊にいきなり経済学を学ばせるのと同じ。
0133デフォルトの名無しさん
2006/02/12(日) 19:42:130134デフォルトの名無しさん
2006/02/12(日) 20:21:49456123を
→→→→→
↑ ↓
123 456
123456←←←
こういうこと?
0135デフォルトの名無しさん
2006/02/12(日) 20:36:320136デフォルトの名無しさん
2006/02/12(日) 21:30:51C は変数についてオンメモリ設計なんで
オンレジスタ設計がしたい場面には向かない
最適化でそういう方面のチューニングがないでもないが
そうなると処理系依存でこのスレの範疇からは逸脱してしまう
順当にはアセンブラでやるだな
0137デフォルトの名無しさん
2006/02/12(日) 22:34:08COBOLを見習え
0138デフォルトの名無しさん
2006/02/12(日) 22:46:05ってことは少しは使ってもOKなんでないの?
0139デフォルトの名無しさん
2006/02/12(日) 22:49:55トレースデータを構造体の配列として保存してます。
一定量埋まったら先頭に戻って上書きをしながらトレースデータを格納していきます。
そして、それらを外部に転送する際に一番古いデータを先頭に最新データを最終配列にソートして
転送したいのです。
組み込みシステムなのでRAMをあまり使わず、かつ高速にしたいのです。
イメージとしては134さんみたいなかんじです。
0140デフォルトの名無しさん
2006/02/12(日) 22:54:040141デフォルトの名無しさん
2006/02/12(日) 22:58:460142デフォルトの名無しさん
2006/02/12(日) 23:00:27ソートしなくても、
→書き込み順
12345678
□□□□□□□□
↑
最新データの書き込み位置
なとき
5→6→7→8→1→2→3→4
と転送すればいいだけじゃないの?
ほんとに組み込みやってる?
0143デフォルトの名無しさん
2006/02/12(日) 23:01:24「先頭アドレスからXXバイト分」
って感じにしたいんでないの?
0144デフォルトの名無しさん
2006/02/12(日) 23:01:56小さな命が宿ってますので、お腹だけは勘弁して下さい・・・
0145デフォルトの名無しさん
2006/02/12(日) 23:05:29両手
0146デフォルトの名無しさん
2006/02/12(日) 23:30:59ここでコムソートの出番ですよwwwwwwww
0147デフォルトの名無しさん
2006/02/13(月) 00:58:360148デフォルトの名無しさん
2006/02/13(月) 01:21:08「先頭nバイト」を「バッファから末尾まで」「先頭から残り」の2回に分けて転送すりゃいいだけだし。
0149デフォルトの名無しさん
2006/02/13(月) 02:47:21例)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)
0150デフォルトの名無しさん
2006/02/13(月) 03:23:54配列宣言するつもりなのか??
0151デフォルトの名無しさん
2006/02/13(月) 03:35:39*str1="ioge"になるんですけど何が原因なんでしょうか
0152149
2006/02/13(月) 03:57:54そうはしたくないんですけど
スプライトの変換ツールが1モーション単位でしか変換できないうえに
それぞれ別の配列になっちゃうのでそのまま使うにはどうしたらいいかな
と思ったんです。
下記のような3次元の配列にしたほうがいいですかね?
int char[キャラ番号][モーション番号][画像の配列];
0153デフォルトの名無しさん
2006/02/13(月) 07:39:49ただ、よいトレース関数を作らねば。
本ではfprintfなど使ってるけど組み込みだから使えないんですよね
0154デフォルトの名無しさん
2006/02/13(月) 07:52:13どっかで間違えて ++*str2, *str2++, ++*str1, *str1++ のうちどれかをやってない?
0155デフォルトの名無しさん
2006/02/13(月) 08:20:03先ず、一度に全部メモリに読み込むのかどうか、だなぁ。
あと、キャラ番号によってモーション番号が変わる場合は、
そういう風に確保すると無駄が多い。
全部同じなら別にいいけど。
int *chara[キャラ番号][モーション番号];
にして、
int mem[最大画像数][32*32];
から適宜割り当ててやるとか、
何か工夫しないとメモリを圧迫するかと。
0156149
2006/02/13(月) 09:42:49いろんな画像を扱う場合はそのようにしたほうがいいかもしれませんね。
今回はRPGのキャラチップなのでモーション番号の最大数は同じなので
その点は問題ないと思います。
constで扱えば外部メモリ(カートリッジ)に配置されるので
たぶんそれも大丈夫かと…。確信ではありませんけど。
>>const int chara[キャラ番号][モーション番号][32*32]
0157151
2006/02/13(月) 10:19:55アドバイスありがとうございます
そういった表記は自分では書いていません
もう少し具体的に書くと
typedef strcut hoge{
char *name;
int val;
struct hoge *next;
}hoge_t;
このような構造体を使用していて
新しい要素を追加するときに*nameに対してstrcpyを用いています
その際、既存の要素の*nameの先頭がb,d,f,h,...だと
c,e,g,i,...に置き換わってしまいます(>>151で示したようになる)
0158デフォルトの名無しさん
2006/02/13(月) 10:23:41ちゃんとmallocしたか?
0159151
2006/02/13(月) 10:41:41はい、ちゃんとmallocしています
全ての要素に当てはまれば問題個所も特定できそうなのですが
*nameの先頭の文字がa,c,e,g,i,...では問題が起きないので
原因の見当がつかない状態です
0160デフォルトの名無しさん
2006/02/13(月) 10:56:56部分部分じゃなく、問題が再現できる最低限のコードを全て載せろ。
話はそれからだ。
0161デフォルトの名無しさん
2006/02/13(月) 11:06:29仕様も無しにただ書いてると収集付かなくなる上に、次やるときに同じ苦労を重ねないといけなくなるぞ
0162デフォルトの名無しさん
2006/02/13(月) 11:07:10pDataがポインタとして、
if(!pData || !*pData){DoSomething();}
ぼんやりと、pData==0の時は*pDataは評価されないと信じてたんですが、
どうも怪しいので教えてください。
0163デフォルトの名無しさん
2006/02/13(月) 11:20:34「||」:左から式を評価し、左の式が真の時、右の式は評価されない
「&&」:左から式を評価し、左の式が偽の時、右の式は評価されない
0165151
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();
}
0166151
2006/02/13(月) 11:55:06vartable_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
0167デフォルトの名無しさん
2006/02/13(月) 11:55:19それ、どっかに (*src |= 1) に相当するコードが入っているだろ。
0168デフォルトの名無しさん
2006/02/13(月) 11:58:08tmpvar->name の領域はどこで確保してんの?
0169デフォルトの名無しさん
2006/02/13(月) 12:31:42でも、>>164萌えなので問題なし。
0170デフォルトの名無しさん
2006/02/13(月) 12:34:18何がどう問題なのか、具体的に書いてミソ
0171151
2006/02/13(月) 12:37:40*vartableallocで*tempvarの領域を確保してるので
tmpvar->nameの領域も確保できていると勘違いしたのが原因でした。
よってtmpvar->nameの領域を確保したところ問題は解決しました。
154,158,160,167,168
アドバイスありがとうございました
0172162
2006/02/13(月) 13:15:40すみません。
先週末の話なんで、問題のソースがどこにあったのか忘れてしまいました。
テキストベースの設定ファイルのパーサを書いてて、
設定項目名の文字列が未定義(ポインタ=NULL) または 設定項目名の文字列長が0なら
処理をどうこうする、という箇所の条件判断で、SEGVしてしまったというのが件の問題でした。
その時ポインタがNULLだったかどうか確かめてませんし、
思うに文字列へのポインタのつもりで変なモノ入れてたんでしょうね。
>>169
36男性妻子有ですがよろしいか。
0173デフォルトの名無しさん
2006/02/13(月) 14:08:01周りがないので断定はできないけれど、ポインタの初期化ミス。
ポインタ定義したときに明示的に NULLしないと、てきとーな値(ゴミ)が
入っているから、そのゴミアドレス読み込もうとしてSEGVあぼーん。
0174デフォルトの名無しさん
2006/02/13(月) 15:44:02char型配列の長さを知りたいんですが、
取得する関数ってありますか?
0175デフォルトの名無しさん
2006/02/13(月) 15:45:53sizeof
0176175
2006/02/13(月) 15:46:490177デフォルトの名無しさん
2006/02/13(月) 15:48:09それはひみつです
0179デフォルトの名無しさん
2006/02/13(月) 15:50:04mallocで動的確保したただの配列なら不可能
mallocで動的確保した文字列配列ならstrlenで文字列の長さが判る。
そうでないなら sizeof(array_name) / sizeof(array_name[0])か、
VC++2005限定で _countof(array_name)
0180デフォルトの名無しさん
2006/02/13(月) 15:50:51つか文字列の長さかよ。だったらstrlenだ。
0181デフォルトの名無しさん
2006/02/13(月) 15:50:530182174
2006/02/13(月) 15:58:02とにかく即レスサンクスでした。
0183デフォルトの名無しさん
2006/02/13(月) 16:26:41Delphiはできたなぁ・・・
0184デフォルトの名無しさん
2006/02/13(月) 16:35:25int *chara[キャラ番号,モーション番号] = {{chara01_01,chara01_02...
というモノつくって
//Cをしばらくつかってないのだが書き方こんな感じだったっけ
0185デフォルトの名無しさん
2006/02/13(月) 16:37:330186デフォルトの名無しさん
2006/02/13(月) 16:44:270187デフォルトの名無しさん
2006/02/13(月) 16:45:150188デフォルトの名無しさん
2006/02/13(月) 16:46:38ポインタ使える不安定さは引き継いでいます
0189デフォルトの名無しさん
2006/02/13(月) 16:52:090190デフォルトの名無しさん
2006/02/13(月) 16:55:550191デフォルトの名無しさん
2006/02/13(月) 19:50:50いくら言語の中で矛盾を防いでも I/O で間違える PG が書いたコードは結局不安定だし
0192デフォルトの名無しさん
2006/02/13(月) 19:52:010193デフォルトの名無しさん
2006/02/13(月) 19:59:520194デフォルトの名無しさん
2006/02/13(月) 20:07:37実記憶か、仮想記憶か
# いずれにせよ処理系依存スレで聞いた方がよさそう
0195デフォルトの名無しさん
2006/02/13(月) 20:22:38このスレ的に言うとない
0196デフォルトの名無しさん
2006/02/13(月) 20:27:34mallocで最大RAMから、だんだん少なくしていってNULLを返さなくなった
ところが最大だ。
0197デフォルトの名無しさん
2006/02/13(月) 20:33:22何考えてんだヲイw
0198デフォルトの名無しさん
2006/02/13(月) 21:24:36それもダメ。環境依存だ。
0199デフォルトの名無しさん
2006/02/13(月) 21:45:550200デフォルトの名無しさん
2006/02/13(月) 22:25:54仮想メモリのあるOSだとSWAPPINGするからRAMの残り容量はわかんねぇだろう
0201デフォルトの名無しさん
2006/02/13(月) 22:28:28じゃあ最初からMAX2Gでやりゃいい
0202デフォルトの名無しさん
2006/02/13(月) 22:31:38それ以前に、UNIX系OSだと ulimit でプロセスごとのメモリの限界を指定できる。
0203デフォルトの名無しさん
2006/02/13(月) 22:36:58MAPファイルでわかるんですが
プログラム上でわからないものかと思いまして。
とりあえず、普通にCでは無理ということですね。
あきらめます。
0204デフォルトの名無しさん
2006/02/13(月) 22:39:410205デフォルトの名無しさん
2006/02/13(月) 22:46:55何言ってんの? MAPファイルで分かるわけないだろ。オマエは馬鹿か?
0206デフォルトの名無しさん
2006/02/13(月) 22:55:460207デフォルトの名無しさん
2006/02/13(月) 22:56:08オマエが馬鹿
0208デフォルトの名無しさん
2006/02/13(月) 22:56:28>とりあえず、普通にCでは無理ということですね。
なんでそーなるんだよ
処理系依存の手段を C で実装するだけだ
断じて「無理」なことじゃない
0209デフォルトの名無しさん
2006/02/13(月) 22:57:39標準Cでどう実装するの?
0210デフォルトの名無しさん
2006/02/13(月) 23:09:27どうにでも
外部結合やらキャストやら「標準 C」にある機能を使ってなんとでも
0211デフォルトの名無しさん
2006/02/13(月) 23:12:07具体的に教えてもらいたいのですが
0213デフォルトの名無しさん
2006/02/13(月) 23:14:380214デフォルトの名無しさん
2006/02/13(月) 23:14:550215デフォルトの名無しさん
2006/02/13(月) 23:17:21210に聞いてるので邪魔しないでください
0216デフォルトの名無しさん
2006/02/13(月) 23:18:31MAPファイルで利用できるRAMの残り容量がなんで分かるのか?
0217デフォルトの名無しさん
2006/02/13(月) 23:19:490218デフォルトの名無しさん
2006/02/13(月) 23:24:32恥の上塗りですka
0219デフォルトの名無しさん
2006/02/13(月) 23:31:170220デフォルトの名無しさん
2006/02/13(月) 23:32:130221デフォルトの名無しさん
2006/02/13(月) 23:32:180222デフォルトの名無しさん
2006/02/13(月) 23:41:02sage りゃ利口ってわけでもないことを体現してくれなくていいよ
0223デフォルトの名無しさん
2006/02/13(月) 23:45:240224デフォルトの名無しさん
2006/02/13(月) 23:45:39環境依存であることには変わりなし。
0225デフォルトの名無しさん
2006/02/13(月) 23:48:36おいおい、流れがわかってる?
0226デフォルトの名無しさん
2006/02/13(月) 23:50:130227デフォルトの名無しさん
2006/02/14(火) 00:10:35結局無理なのねw
0228デフォルトの名無しさん
2006/02/14(火) 00:16:30先ずは環境が異なることを緩衝するAPI作りから始めろよ
何でも一発で出来ると思ってるからお前はウザがられるんだよ
0229デフォルトの名無しさん
2006/02/14(火) 00:20:020230デフォルトの名無しさん
2006/02/14(火) 00:21:31(゚ Д ゚) ハァハァ
0231デフォルトの名無しさん
2006/02/14(火) 00:22:37あと、popen("hoge"...)で、出力読み取るアル。
標準Cでできないことなんて無い、アル。
0232デフォルトの名無しさん
2006/02/14(火) 00:24:370233デフォルトの名無しさん
2006/02/14(火) 00:25:240234デフォルトの名無しさん
2006/02/14(火) 00:27:41標準C前提の話ですがなにか
0235デフォルトの名無しさん
2006/02/14(火) 00:28:01もう寝ろ
0236デフォルトの名無しさん
2006/02/14(火) 00:29:290237デフォルトの名無しさん
2006/02/14(火) 00:32:000238231
2006/02/14(火) 00:36:58あったー来たヽ(`Д´)ノ
system("hoge > foo.txt");
fp =fopen("foo.txt", "r");
gets(buf);
0239デフォルトの名無しさん
2006/02/14(火) 00:40:03ファイルシステムもリダイレクトも無いんですよ
0240231
2006/02/14(火) 00:41:05fgets(buf, len, fp); ネ(チュッ!
0242デフォルトの名無しさん
2006/02/14(火) 00:44:210243デフォルトの名無しさん
2006/02/14(火) 00:46:45っ ス 問 問 ヽト、 <_ノノノ/;;/ /:::ノ
て ト 文 文 |lヾ'', - ' ´ `ヽ、;;//::::/
た 0 で に .| Y へ,_ '' __,,. -'ヽヽ / ひ 成 お
か 点 答 対 l | ,tt:ァ、ノ ,.,、__ 〈/ と り っ
? な え し >l '' ノ :: `ー'´ 、/; り 立 と
マ の る / l、l ,、ヽ',、 ノ// 登 た 会
ヌ と | ,、 l ノ三ヽ、 、//l 場 な 話
ケ l/ ', ー-- ` // .| ∫ い が
ノn /.l _ //レ l ∫ ア
ヽ_____,. -/⌒ヽ/ ヾ、_`ヽ _,,. // / ハ ホ
r'―‐-、 ヽr'=、、ヽ' /-、::::: : : /// / ノ が
0244デフォルトの名無しさん
2006/02/14(火) 00:48:140245デフォルトの名無しさん
2006/02/14(火) 00:52:22禿げ同
この手の堂々巡りは質問者の質問の仕方が悪い。
標準Cと言うだけで具体的な答えが返ってくる訳が無い。
最低限、どういう環境でその必要が出たのか書け。
PC向け・組み込み(OSあり)・組み込み(OSなし)でも違うだろ。
でだ。「MAPファイル」「RAMの残り容量を知りたい」「ファイルシステムがない」から
組み込み(OSなし)だと仮定していいんだよな。
0246デフォルトの名無しさん
2006/02/14(火) 00:55:460247デフォルトの名無しさん
2006/02/14(火) 00:56:02なんとでもなるんじゃなかったの?
0248デフォルトの名無しさん
2006/02/14(火) 00:58:08だからAPI決めて抽象化しろって言ってるだろ!! (・ω・#)
末端の実装が違うんだから、結局環境ごとに作れってんだ
うんこは寝て食え ( ´Д`)
0249デフォルトの名無しさん
2006/02/14(火) 01:01:25あなたは210ですか?
なぜ標準Cでできるというような事を言ったの?
違う人なら邪魔です
0251デフォルトの名無しさん
2006/02/14(火) 01:02:130253245
2006/02/14(火) 01:05:34まぁまぁ。質問者の環境によっては抽象化するほどの
メモリの余裕もないかもしれないじゃないですか。
>>247
普通にCで出来るに決まってるだろ。
0254デフォルトの名無しさん
2006/02/14(火) 01:06:44具体的に教えてもらいたいのですが
0255デフォルトの名無しさん
2006/02/14(火) 01:09:22K&R とか ANSI とかの 「 言語仕様 」 の範囲だと言っているのか。
ならば、答えは 「 無い 」。
元質問を読んでみ?
> 利用できるRAMの残り容量がわかる関数とかってありますか?
Cの言語仕様に、「 関数 」 は1つとして定義されていないから。
0256デフォルトの名無しさん
2006/02/14(火) 01:10:560257デフォルトの名無しさん
2006/02/14(火) 01:15:170258デフォルトの名無しさん
2006/02/14(火) 01:15:47標準関数がしっかりと定義されている訳だが
0259デフォルトの名無しさん
2006/02/14(火) 01:16:480260デフォルトの名無しさん
2006/02/14(火) 01:17:04傍観者から言わせて貰う
ウザイ消え失せろ
0261デフォルトの名無しさん
2006/02/14(火) 01:18:52そんなエサに釣られるかクマー(AA略
0262デフォルトの名無しさん
2006/02/14(火) 01:19:54餅搗いて聞いてくれ。
それでは、組込み用のCはCのサブセットなのか?
0263245
2006/02/14(火) 01:19:59ですます調で喋ってりゃ良いってもんじゃないだろ。
さっきからアンタの態度無礼だと思うぞ。
で、>245の問いはどうなってるんだ。
>>260
まったくその通りなんですけど、
どうせわからないんだろうと思われるのも癪で…。
0264デフォルトの名無しさん
2006/02/14(火) 01:20:300265デフォルトの名無しさん
2006/02/14(火) 01:21:51ダメだって、池沼は同士討ちで数を減らしてくれないと。
0266デフォルトの名無しさん
2006/02/14(火) 01:21:560267デフォルトの名無しさん
2006/02/14(火) 01:24:51>>193は赤顔症のため逃亡しました
戻ってきても普通の書き込みは出来ないと思われます
(;´Д`) スミマセンスミマセン
( 八)
〉 〉
0268デフォルトの名無しさん
2006/02/14(火) 01:25:44全部・・全部この環境が悪いんだ・・
0269デフォルトの名無しさん
2006/02/14(火) 01:29:360270デフォルトの名無しさん
2006/02/14(火) 01:30:08組み込み系で使われているコンパイラは、標準準拠していないものも多々ある。
もちろん、それ以外でもな。
0271デフォルトの名無しさん
2006/02/14(火) 01:30:28ちゃんとそこらへんはマニュアルに書かれてるはず
すくなくとも日立のには書いてたなー
0272デフォルトの名無しさん
2006/02/14(火) 01:34:34それなら話は早い。
>>257 の言う ISO C99 なり、>>258 の言う標準関数に、「 RAM の残り容量がわかる関数 」 が
含まれてるかどうかだ。
で、答えは 「 無い 」 で おk?
0273デフォルトの名無しさん
2006/02/14(火) 01:39:11組み込み系でOSはITRONです。
環境は
SH-2の7045でRAMは外付けで512KB×2
です。
とりあえず、色々調べてみます。(一応調べたんですがわからなかったので再度調べます)
RAS用にトレース関数を作っていて、他のシステムでも使えるように
残りRAMのX%分をトレース用に確保したくしたかったんですが・・・
本当にお騒がせしました。すみませんでした。足を洗って出直してきます。
0274デフォルトの名無しさん
2006/02/14(火) 01:39:22規格に関しては↓でも読んでおけ
ttp://www.kouno.jp/home/c_faq/c11.html
0275デフォルトの名無しさん
2006/02/14(火) 01:42:40よかったな環境が出て。
オレも知りたいのでよろしく頼む。
0276デフォルトの名無しさん
2006/02/14(火) 01:42:42そるならdefineで事足りる。
システム構成やマップファイルから、手動で計算して設定させるべき。
0277デフォルトの名無しさん
2006/02/14(火) 01:42:47教える義務はありません。以上
0278デフォルトの名無しさん
2006/02/14(火) 01:44:52本当は>>273を真っ先に明記しないとな
API厨とかわけの分からん奴が湧いてくるぞ
ちなみに俺はITRONなんて見たことも触ったこともねぇww
0279デフォルトの名無しさん
2006/02/14(火) 01:50:55を表示しているツールってどうしてんの?
0280デフォルトの名無しさん
2006/02/14(火) 01:52:09二度と来るな。お前の質問なんて興味ない。
ただ、トレース間巣は僕も興味あるがな。
みんなはどういう風に実装してるのか知らんが。
0281276
2006/02/14(火) 01:52:19ついでに、プログラムコードはRAM、フラッシュ、ROMなどの何処に置かれるのか?や
メモリマップドI/Oがどうなっているか?
など、実行中にはわからない情報から算出する必要があるから、
プログラムに埋め込もうと言うのが、そもそもの間違い。
0282デフォルトの名無しさん
2006/02/14(火) 01:52:58w
0283デフォルトの名無しさん
2006/02/14(火) 01:54:220284デフォルトの名無しさん
2006/02/14(火) 01:54:48Windowsだと、デバイスドライバやAPIなどで得られる。
0285デフォルトの名無しさん
2006/02/14(火) 02:14:070286デフォルトの名無しさん
2006/02/14(火) 02:19:240287245
2006/02/14(火) 02:19:48書くことが殆ど無くなってしまった…。
トレース領域として使うというのであれば>276さんの仰るとおり
手動で計算するべきです。実行時に動的に割り当てたりはしませんよね。
…環境が出たら答えが返ってくるのがあっという間だったなー。
タイミング逃したorz
0288デフォルトの名無しさん
2006/02/14(火) 02:20:390289デフォルトの名無しさん
2006/02/14(火) 02:25:27ってかんじでファイル名を書いておいたやつを
char fname[80];
↑に代入させたいんだけど文字列が上手く理解できてなくて手も足も出ません。
お助けお願いします。
質問age
0290デフォルトの名無しさん
2006/02/14(火) 02:29:38#define FNAME "a.txt"
strcpy(fname, FNAME);
てこと?
0291デフォルトの名無しさん
2006/02/14(火) 02:31:01#define HOGE "hoge.txt"
char a[80] = HOGE;
0292デフォルトの名無しさん
2006/02/14(火) 02:36:35ジャンプ読んだけどわかんね( 'A`)
0293デフォルトの名無しさん
2006/02/14(火) 02:37:01問題なし。使う用途がわからん。
0294デフォルトの名無しさん
2006/02/14(火) 02:37:19マガジンだろ馬鹿
0295デフォルトの名無しさん
2006/02/14(火) 02:38:130297デフォルトの名無しさん
2006/02/14(火) 02:53:19なんってこった・・・まだ水曜じゃねぇorz
0298デフォルトの名無しさん
2006/02/14(火) 02:56:280299デフォルトの名無しさん
2006/02/14(火) 15:09:34typedef const PINT PINT_A;
typedef PINT const PINT_B;
この型定義についての質問なんですけど、
自分の環境だとこの場合、PINT_A、PINT_Bともに
int*constと解釈されているようです。
これは仕様なのでしょうか?
(PINT_Aはconst int*になると思ってたのに・・・)
0300デフォルトの名無しさん
2006/02/14(火) 15:30:12はい、仕様です
=== 終了 ===
0301デフォルトの名無しさん
2006/02/14(火) 17:25:450302デフォルトの名無しさん
2006/02/14(火) 17:31:07前はブリッジにFreeBSDも使ってたが、今はお役目ごめん状態
0303デフォルトの名無しさん
2006/02/14(火) 20:09:550304デフォルトの名無しさん
2006/02/14(火) 20:11:370305デフォルトの名無しさん
2006/02/14(火) 20:18:110307デフォルトの名無しさん
2006/02/15(水) 11:55:55int * const と const int * って、どう違うの?
0308デフォルトの名無しさん
2006/02/15(水) 12:01:48int * const p1 = &x;
const int * p2 = &x;
*p1 = 10;
p1 = &y;
*p2 = 10;
p2 = &x;
試してみれば分かる。
0309デフォルトの名無しさん
2006/02/15(水) 12:03:37前者はconst修飾されたポインタ。つまりポインタの指す先を変更できないが
そのポインタを経由して指されている奴の中身を変更することはできる
後者はconst修飾されたint(const int)へのただのポインタ
だから他の所を指すように変更してもいいが、指している物の中身は変更できない。
0311デフォルトの名無しさん
2006/02/15(水) 13:13:37WindowsからOSレスまで幅広く行っております。
0312デフォルトの名無しさん
2006/02/15(水) 16:24:57基本的な質問で申し訳ありませんがどうか教えていただけないでしょうか?
srand(time)を使ってrand関数を変化させて実行結果の変化を見ているのですが、
その実行結果を統計処理しろとボスに言われています。
この場合何回分の実行結果を統計にかければよいのでしょうか?
もう少し単純な話にすると
srand(time)によるrand関数の変化が有限個のパターンでなのであれば
その値を教えていただけると助かりますし、
無限なのであれば無限であるとお教えいただければ助かります、ということです。
0313デフォルトの名無しさん
2006/02/15(水) 16:31:17ボスの気の済む個数やればいいからボスに聞けや
0314デフォルトの名無しさん
2006/02/15(水) 16:37:460315デフォルトの名無しさん
2006/02/15(水) 17:29:010316デフォルトの名無しさん
2006/02/15(水) 17:46:000317デフォルトの名無しさん
2006/02/15(水) 18:06:58ttp://www.jp.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/lib/libc/stdlib/rand.c?rev=1.15&content-type=text/plain
で確認できる。
0318デフォルトの名無しさん
2006/02/15(水) 18:37:52考えてみた。
有限個 だというところまでは、判った。
しかし、その個数については、「 最大でもこの個数以下 」 というところまでしか、判っていない。
最大でも 「 srand( time )における 引数 time のビット幅を n bits としたとき、2のn乗個 」 だ。
0319318
2006/02/15(水) 18:42:47しかしだな、>>312 よ。
想定し得るすべてのパターンについて調べることを、果たして 「 統計 」 と呼ぶのか?
それは 「 全数検査による確率計算 」 なのではないか?
「 統計 」 とは、標本を分析して母集団の傾向を論理的に類推することだろう?
その意味では、>>315 の言ってることが正しいと思うぞ。
0320デフォルトの名無しさん
2006/02/15(水) 18:46:560321デフォルトの名無しさん
2006/02/15(水) 19:00:50それは研究の基本とか論文の書き方とかって方面の問題で
全然 C の話じゃないね
基本的にスレ違いだけど C の範疇で可能な範囲で答えるなら
rand の返却値をそのまま使ったら再現性がないから、
いったん fwrite/fprintf などでファイルに書き込んでおき、
あとで同じ入力で再試験できるように入力値と出力値をペアで残すべし
つまり「何回分」は srand の引数の組み合わせ数とか言う問題ではない
0322デフォルトの名無しさん
NGNGシードがおなじなら、乱数も同じなのでは?
srand()に同じ値を入れても、毎回違う乱数を発生する処理系もあるってことか?
0323デフォルトの名無しさん
2006/02/15(水) 22:31:05# ツェナーダイオード・・・いやいやまさかね
0324デフォルトの名無しさん
2006/02/15(水) 22:34:05srand で rand 関数を変化させて・・・というのは、
乱数種に偏りがあるわけで、
本当にちゃんとした統計が見れるのかと言われると自信がないな。
まあ、おそらく問題になるほどではないと思うけど。
srand は一回のみ実行して、それ以降は初期化を行わず、
1回のプログラムの実行で全ての計算を完了させるのが理想的かと。
0325デフォルトの名無しさん
2006/02/15(水) 22:36:16rand 関数なんぞ使わんと、Mersenne Twister 法使え。
0326デフォルトの名無しさん
NGNGrand()相当のソースなんて短いから、自分で作って、アルゴリズムや初期値を記録しておくだけでもいいかもしれんけど。
0327デフォルトの名無しさん
2006/02/15(水) 22:38:21乱数生成器としてでrandを採用することを決めたあとで
その統計的信頼度を推定するためにsrandの造りを問うのは、違うと思うけどなぁ
0328デフォルトの名無しさん
2006/02/16(木) 01:58:34ッ�m�m�m�m�m�m�m�m�m�m�mミッ
ッ�m�m�m�m�m�m�m�m�m�m�m�m�m
ッ�m�m �m�m�m�m�mミッ
�m�m,r'::: ミ;= �m�m�m�mミッ
�m�m〈r",,ゞィ ´ヨ ●ヾ`、;::::�m�m�m�mミッ
�m�m,イ●ノ "'ーヘヽ ヾ、;�m�m�m�mミッ
�mi'` i"ヽ ゛;;,` ゛'''" ゛-';�m�m�mミッ プログラムやってたら
�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
0329デフォルトの名無しさん
2006/02/16(木) 03:36:280330デフォルトの名無しさん
2006/02/16(木) 12:16:33char str1[] = "ABC";
char str2[] = "DEF";
char s[7];
sprintf(buf, "%s%s", str1, str2);
strcpy(s, buf);
ちょっとお聞きしたいのですが、
こういう場合の s[6] == '\0' は保証されているのでしょうか?
0331デフォルトの名無しさん
2006/02/16(木) 12:23:20ttp://www.linux.or.jp/JF/JFdocs/Secure-Programs-HOWTO/library-c.html
0332デフォルトの名無しさん
2006/02/16(木) 12:24:57その質問は strcpy(s, "ABCDEF"); で s[6]=='\0' か、っていうことだ
から、もちろん保証される。
0333デフォルトの名無しさん
2006/02/16(木) 12:30:46いくつデータ取ればいいのかは、
シミュレーションの内容で決まること。
0334デフォルトの名無しさん
2006/02/16(木) 12:31:58ありがとう
0335デフォルトの名無しさん
2006/02/16(木) 16:06:100336デフォルトの名無しさん
2006/02/16(木) 16:25:270337デフォルトの名無しさん
2006/02/16(木) 16:35:100338デフォルトの名無しさん
2006/02/16(木) 16:36:45スレ違い
0339むう
2006/02/16(木) 16:49:26#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);
}
}
0340むう
2006/02/16(木) 16:50:39void 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;
}
}
0341むう
2006/02/16(木) 16:51:31printf("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");
}
}
0342むう
2006/02/16(木) 16:55:08int 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・・・などとしたいのですが・・・
よろしくお願いします。
0343デフォルトの名無しさん
2006/02/16(木) 18:51:19どこかにソースうpしてリンク貼ったほうがいいぞ
0344デフォルトの名無しさん
2006/02/16(木) 18:54:52ネット初心者なもんで・・・。
0345デフォルトの名無しさん
2006/02/16(木) 19:07:380346デフォルトの名無しさん
2006/02/16(木) 19:36:15それは自己申告しなくてもわかるからいいよ
「長々とすいません」て気持ちはあって、
だけどどこの「うpろだ」がいいか判断つかなかった
ということくらい初心者でない人なら読めてるよ
そんなことより宿題スレで聞いた方がいいと思うが?
0347むう
2006/02/16(木) 19:55:06これで宿題スレに投稿したいのですが大丈夫でしょうか?
0348むう
2006/02/16(木) 20:10:130349デフォルトの名無しさん
2006/02/16(木) 22:16:340350デフォルトの名無しさん
2006/02/16(木) 23:46:01コマンドプロンクトより、実行ファイル、読み込むtxtファイルを指定、読み込み、
上下逆に表示するプログラムを作ってるんだけど、
MO1行以上のファイルを読み込んだ場合、
確保した領域外にデータを書き込むことになるから、 実行時エラーになるんだが、
どうしたらエラーがでなくなるのかわかりませんorz
どなたか教えてください(´・ω・`)
↓ソース
0351デフォルトの名無しさん
2006/02/16(木) 23:48:30#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);
}
0352デフォルトの名無しさん
2006/02/16(木) 23:49:09for(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
流れぶったぎって初歩的な質問ごめんなさい
0353デフォルトの名無しさん
2006/02/16(木) 23:52:57malloc()でメモリ再確保しながらするとか
それだと解放し忘れるから、自分でファイル操作関連のライブラリ作るとか
ライブラリの実用性を確かめるために公開するとか
結構耐久性あるライブラリになってきたら売り出すとか
ライセンスに破綻きらして>>350が泡を吹くとか
(`・ω・´)9m >>350は犯罪者でつね
0354デフォルトの名無しさん
2006/02/17(金) 00:25:39テキストファイル処理は易しいようで実はバッファサイズという難問が居座っているやっかいな処理だ
# 難問といってもそれはずぶの初心者にとってという程度だが
realloc あたりが使える人なら、他人に聞くまでもなく答えは薄々予感するはずだが
面倒臭そうなのでもっと便利な方法はないかと尋ねたくなる人情はわかる
0356デフォルトの名無しさん
2006/02/17(金) 00:39:44とりあえず文字列関連であればいいと思う機能
・文字列を表すなにか(クラスは無理だから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) }
}
あとは略
みたいなライブラリを作ってみると楽ということだ罠
0358デフォルトの名無しさん
2006/02/17(金) 00:48:16それなら簡単
ファイルサイズと同じかそれ以上のメモリをmallocで確保してあげれば良い。
malloc使いたくないなら、ZZZバイトまで使えると決め打ちして、それ以上のファイルが指定されたらコアダンプして終了。
これ最凶
0359350
2006/02/17(金) 01:08:28>>358さんのレス参考に
MO1以上の行数のファイル指定したら、
exit使って強制的に終了させるプログラムにしてみたら一応ちゃんと動きました。
みなさんありがとう_(._.)_
0360デフォルトの名無しさん
2006/02/17(金) 01:10:46よし良いぞ!
そうやって隠れて逃げて避けまくれ!!
最後は誰からも見えない透明人間になって死んでいけるぞ!
てか俺もうなってる
誰からも相手されない
もっとしっかり根詰めておけばよかった…
0361デフォルトの名無しさん
2006/02/17(金) 05:24:39図書スレのだとどれがいいんだかわかんない
0362デフォルトの名無しさん
2006/02/17(金) 05:39:370363デフォルトの名無しさん
2006/02/17(金) 05:44:510364デフォルトの名無しさん
2006/02/17(金) 05:45:220365デフォルトの名無しさん
2006/02/17(金) 05:48:160366デフォルトの名無しさん
2006/02/17(金) 05:48:500367デフォルトの名無しさん
2006/02/17(金) 07:32:370368デフォルトの名無しさん
2006/02/17(金) 07:39:220369デフォルトの名無しさん
2006/02/17(金) 08:08:07衝撃の幕切れ! − ここまで巧妙に仕組まれたネタレスが、かつてあったろうか?
禿ワロタ ので、age させて頂きます。
0370デフォルトの名無しさん
2006/02/17(金) 09:17:47http://nssearch.hp.infoseek.co.jp/clang/archives/2chbooks/c_lang.html
俺も 366 と同意見
本読んでる時間あるならコード書け(そのためにマニュアルをしっかり調べろ)
活字で書いてあるご託より実際のプログラムから盗め
ある程度、知識がついてきてから整理するには本がいい
0371デフォルトの名無しさん
2006/02/17(金) 11:19:37>C言語を深く知りたい
「 深く 」 の意味が判らないんだけど、要するに初歩の段階はもう過ぎたし、通り一遍の
コードも書けるようになってきた。 もっと掘り下げて 「 奥義 」 的な知識を身に付けたい、
ってことだろうか?
そういうことであれば、コード書くのが一番。 奥義や深い知識なんていうのは、それを使う
必要性がなければ身に付かないと思ふヨ。
漏れは、>>370 の意見とは違って、初心者ほど良い解説書が必要と思う。
>>361 が初心者・初級者ならば、K&R と アスキー出版 「 C言語入門 」 の組み合わせが、
今でもベストだと思ってる(20年程前は、定番の組み合わせでした)。 K&R が教科書、「 C言語入門 」 が参考書。
昔の本なので、ANSI C 全盛の現在 お薦めするのはどうかなぁ と躊躇したのだが、
両書とも、ANSI C 準拠の改訂版が出てるのね!
0372デフォルトの名無しさん
2006/02/17(金) 12:09:42教科書くらいは読もうな。
0373デフォルトの名無しさん
2006/02/17(金) 12:24:552ch聞けばいいじゃん。
何で本なんかに無駄な金使わなきゃなんねーんだ。
本を買う香具師はインターネットが使いこなせない無能者。
回線切って吊れよw
0374デフォルトの名無しさん
2006/02/17(金) 12:25:490375デフォルトの名無しさん
2006/02/17(金) 12:28:44つまり本買わないならいきなり実戦するしかあるまい
0376デフォルトの名無しさん
2006/02/17(金) 12:45:40翻訳した本で、日本の作者の本は初心者
向けのばかりだ。日本のライターの技術力は
低いんじゃないか? いや、日本発で世界中で
使われるようになったソフトが少ないから
こうなるのか?
0377デフォルトの名無しさん
2006/02/17(金) 15:28:000378デフォルトの名無しさん
2006/02/17(金) 18:44:01窓のことか?
0379デフォルトの名無しさん
2006/02/17(金) 19:40:05エロゲとかエロゲとかエロゲとか・・
0380デフォルトの名無しさん
2006/02/17(金) 21:28:27C言語辞典
0381デフォルトの名無しさん
2006/02/18(土) 00:57:45規格票
0382デフォルトの名無しさん
2006/02/18(土) 02:23:100383デフォルトの名無しさん
2006/02/18(土) 06:18:350384デフォルトの名無しさん
2006/02/18(土) 07:17:20とりあえず C FAQ は全部読んどけ
0385デフォルトの名無しさん
2006/02/18(土) 07:18:55AVL木ってマジ早いなwwwwwwww
ハッシュのほうがいいんだろうが眠い頭じゃハッシュ関数考えるのめんどくせーし、
非決定性有限オートマトンから非決定性有限オートマトンへの変換なんで
ノードがどのぐらい必要なのかとか実際にシミュらなきゃわからんから
開番地法なハッシュだと下手すりゃ藪蛇だしな。
(指数オーダーで一応上限は出るからメモリいぱぽい取るってのもアリだが
しかし、B木と違って実装楽チンなのに線形探索に比べると体感マジ早いwwwwwバロスwwww
0386デフォルトの名無しさん
2006/02/18(土) 07:46:220387デフォルトの名無しさん
2006/02/18(土) 07:47:24unsigned と signed て符号付き符号無しってゆーけど
使い勝手が全く同じなんだけどなんで?
unsigned に 負数入れても問題ないし・・・
0388デフォルトの名無しさん
2006/02/18(土) 07:59:270389デフォルトの名無しさん
2006/02/18(土) 08:05:030390初心者
2006/02/18(土) 12:48:190391デフォルトの名無しさん
2006/02/18(土) 12:52:20どこがいけないのでしょうか?見て分かりましたら教えていただきたいです
エラー内容は不正なポインタの使用と出ます。
#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;
}
0392デフォルトの名無しさん
2006/02/18(土) 12:54:47バブルソートで検索。
0393デフォルトの名無しさん
2006/02/18(土) 12:59:440394デフォルトの名無しさん
2006/02/18(土) 13:08:33初歩的なミスに気付かずすいませんでした。でもやったー!!できました!!
大変助かりましたありがとうございますm(__)m
0395デフォルトの名無しさん
2006/02/18(土) 15:15:50↑ここの1なんだがCプログラミングができるようになると思う?
おれは無理だと思う。
0396デフォルトの名無しさん
2006/02/18(土) 17:11:250397デフォルトの名無しさん
2006/02/18(土) 18:03:25その時に、forループで使ったカウンタを
ループ抜けた直後に参照すると、
「その値は不定です」みたいな感じのエラーだか
ワーニングだかが出たような記憶があるんだけど、(コンパイラの最適化の関係で、と聴いた)
C言語の場合、
for (i = 0; i < 10; i++){
/* 適当な処理(iはいじらないよ) */
}
ここで i = 10 って保証されてんの?
0398デフォルトの名無しさん
2006/02/18(土) 18:12:330399デフォルトの名無しさん
2006/02/18(土) 18:17:47ループ抜けても問題ないよ。
> ここで i = 10 って保証されてんの?
これの意味がよくわからないけど
0400デフォルトの名無しさん
2006/02/18(土) 18:22:010401デフォルトの名無しさん
2006/02/18(土) 18:25:11> ここで i = 10 って保証されてんの?
i == 10 です。
大丈夫そうですね、ありがと
0402デフォルトの名無しさん
2006/02/18(土) 18:34:32違う時があるから注意。
0403デフォルトの名無しさん
2006/02/18(土) 18:43:22forブロック内でしか有効でしかなかったような気もするなぁと思って
調べてたら、C++の最新の仕様ではそうらしいね。
VS2003では問題なくブロック外でも使えちゃうけど・・。
しかも同じforループをもう一つ作っても
何も言われないなんて・・・。
0404デフォルトの名無しさん
2006/02/18(土) 18:45:04スレ違い。
駄菓子菓子。CでもC99だと
int i;
for (int i = 10; i < 10; ++i) ;
このときのiの値は保証されない。
0405デフォルトの名無しさん
2006/02/18(土) 18:52:08VC++2003で使えるのはどう考えてもバグとしかいえない
VC++6のMS拡張仕様を一応受け継いでいるから。
VC++2003からMS拡張のこのforスコープ部分だけはずすことが可能になった。
0406デフォルトの名無しさん
2006/02/18(土) 18:55:53それ2005で直ったんじゃなかったっけ?
0407デフォルトの名無しさん
2006/02/18(土) 18:58:210408デフォルトの名無しさん
2006/02/18(土) 21:40:57「VCはVCで作りました」って言えなくなるからね
0409デフォルトの名無しさん
2006/02/18(土) 21:51:46VC6用に書かれたプログラムも標準C++に則って書かれたプログラムもコンパイルできるように。
ただforに関してVC++ 7.1(.Net 2003)ではコンパイルオプションで規格通りの挙動にできる。
そもそもここは標準Cスレだ。スレ違いだ。
0410デフォルトの名無しさん
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);
}
0411デフォルトの名無しさん
2006/02/18(土) 22:06:230412デフォルトの名無しさん
2006/02/18(土) 22:07:020413プログラマ
2006/02/18(土) 22:17:02問題1
2桁で入力された1つのくじ番号が、用意された10個の当選番号のどれかに
該当しているかどうかを判定するプログラムを作成しなさい
番兵法や、二分探索法を使ってもかまわない。
当選番号は{00.11.22.33.4.55.66.77.88.99.}です
こちらの問題の解答をどなたかおねがいします
ソースを書いてくれるとうれしいです。
0414デフォルトの名無しさん
2006/02/18(土) 22:20:43http://pc8.2ch.net/test/read.cgi/tech/1140268137/
0415デフォルトの名無しさん
2006/02/18(土) 22:21:36マルチ乙。
自分でやらない奴がプログラマきどってんじゃねーよ
0416デフォルトの名無しさん
2006/02/18(土) 22:38:13つ -Wwrite-strings
たまには-Wall以外の警告オプションもつけてみよう。たまには、ね。
俺はこれと-Wcast-qualはつけることの方が多いが。
0417デフォルトの名無しさん
2006/02/19(日) 01:21:08達成できないことの方が多いから不便過ぎる。
特にfree(void *)の引数にconst char *を
castで渡せなくなるのは辛い。
0418デフォルトの名無しさん
2006/02/19(日) 02:06:47どんな書き方をすればそんなことをしなければならなくなるのかと
ちなみに curses 使うと char* に文字列リテラルを渡すことがよくあるから両方のオプションをつけると結構困る
0419デフォルトの名無しさん
2006/02/19(日) 02:07:33コマンドプロンプトからプログラムを結合させる、というのが条件の宿題をやっていたのですが
結合時に「エラー E2133: コマンド "ilink32.exe"を実行出来ない」とメッセージが出てできません。
どうすれば直るのでしょうか?
他にメッセージとしてはfscanfの際データ数を読み取る変数をまったく使っていないため
「警告W8004 "変数名"に代入された値は」使われていない」だけです。
使用コンパイラはborland bcc32です。お願いします
0420デフォルトの名無しさん
2006/02/19(日) 02:09:41俺が想像するにこんな感じではないだろうか。
const char *f(void)
{
char *p = malloc();
if (p)
{
//ここでpにあれこれ書き込む。
}
return p;
}
0421デフォルトの名無しさん
2006/02/19(日) 02:34:31破棄もそれらを提供するモジュールの中でやる
# 効率を重視する場合は別だが
0422417
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);
}
0423デフォルトの名無しさん
2006/02/19(日) 04:38:17Cだからな。
Cでそこら辺を美しさのためにいろいろ頑張るぐらいなら素直にC++使えって感じ?
0424デフォルトの名無しさん
2006/02/19(日) 07:30:36俺はnon-constにする。変更されて困るなら公開しなきゃいいだけだし
0425デフォルトの名無しさん
2006/02/19(日) 08:33:290426419
2006/02/19(日) 10:49:10スレ汚しすみませんでした。
0427デフォルトの名無しさん
2006/02/19(日) 13:30:31これを使わないで安全に仕上げるには何を使ったらよろしいですか?
よくfgetc、sやsscanf、atoi。等で代用されてる物を見ますが他に
安全な関数は何かを教えて頂けませんか?お願いします。
0428デフォルトの名無しさん
2006/02/19(日) 13:48:40まず、一体何をやりたいんだ?
scanf が何故危険なのか判っているのか?
なんでも単純に「これは安全、これは危険」というように
切り分けられると思ったら大間違い。
プログラミングのみではなく、全てにいえる事だが、
個々の要件の状況と、その関数の挙動を把握した上で
「この場合では、この関数を使うとこういう問題が発生するから
使うべきではない」という風に判断するべきだろ?
0429デフォルトの名無しさん
2006/02/19(日) 13:48:50標準の範囲内ならばscanfはfgets+sscanfで代用するのがふつう。
0430デフォルトの名無しさん
2006/02/19(日) 13:58:17そこまでは把握してませんでした。おっしゃる通りです。
もう一度ライブラリの観察に行って理解してきますorz
>>429
規格とかの話には全くついて行けないです。
ですがscanfはfgets+sscanfで代用の辺りを扱えるように勉強します。
答えてくださり有難う御座います。
0431デフォルトの名無しさん
2006/02/19(日) 14:27:25・・・おまえら、完璧に読めますか?
0432デフォルトの名無しさん
2006/02/19(日) 14:49:20具体的に何が基地外じみてる?typedefとかか?
ポインタとカッコが混ざると、あれは演算子の優先順位が決まって
いる以上、複雑怪奇に見えても仕方ない。
0433デフォルトの名無しさん
2006/02/19(日) 14:51:320434デフォルトの名無しさん
2006/02/19(日) 14:56:33char *itoa(int value, char *string, int radix);
(但しitoaは標準関数ではない)
どこが難しいのかと・・・・
0435デフォルトの名無しさん
2006/02/19(日) 15:08:280436デフォルトの名無しさん
2006/02/19(日) 15:42:46だから分からないのはお前だけだって。勉強しなおせ。
0437デフォルトの名無しさん
2006/02/19(日) 15:54:030438デフォルトの名無しさん
2006/02/19(日) 15:56:00まず覚えまちょーね。
0439デフォルトの名無しさん
2006/02/19(日) 15:58:56kwsk
0440デフォルトの名無しさん
2006/02/19(日) 16:00:190441デフォルトの名無しさん
2006/02/19(日) 16:01:100442デフォルトの名無しさん
2006/02/19(日) 16:01:180443デフォルトの名無しさん
2006/02/19(日) 16:03:540444デフォルトの名無しさん
2006/02/19(日) 16:11:340445デフォルトの名無しさん
2006/02/19(日) 16:25:30そんなもん、本読めよ。基本中の基本だぞ。
0446デフォルトの名無しさん
2006/02/19(日) 16:37:060447デフォルトの名無しさん
2006/02/19(日) 16:40:26文字列の長さを確認することは可能でしょうか?
0448デフォルトの名無しさん
2006/02/19(日) 16:40:49超可能です
0449デフォルトの名無しさん
2006/02/19(日) 16:43:480450デフォルトの名無しさん
2006/02/19(日) 16:44:26ぜひ、御教授願いたい!!
0451デフォルトの名無しさん
2006/02/19(日) 16:50:06size_t __cdecl strlen (
const char * str
)
{
const char *eos = str;
while( *eos++ ) ;
return( (int)(eos - str - 1) );
}
0452デフォルトの名無しさん
2006/02/19(日) 16:53:20#include <stdio.h>
int sl(const char* s){
return strcspn(s,"\0");
}
しらんがな
0453デフォルトの名無しさん
2006/02/19(日) 16:54:11バカ丸出し
0454デフォルトの名無しさん
2006/02/19(日) 16:55:04int Baka(const char *unko){int cnt=0;for(cnt=0;cnt <= sizeof(unko);cnt++);return cnt;}
俺天才
0455デフォルトの名無しさん
2006/02/19(日) 17:09:06int 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;
}
度ー駄目でっか(?_?)
0456デフォルトの名無しさん
2006/02/19(日) 17:13:28{
return * p?MyStrLen( ++ p )+1:0;
}
0457デフォルトの名無しさん
2006/02/19(日) 17:17:23用意した文字列にナル文字が無い場合はエラー。
0458デフォルトの名無しさん
2006/02/19(日) 17:21:20ヌルって渡されないんですか?
0459455
2006/02/19(日) 17:26:35失礼しまつた。
0460デフォルトの名無しさん
2006/02/19(日) 17:44:38+ for(i=0;a[i]!="\0"[0];i++){}
0461デフォルトの名無しさん
2006/02/19(日) 18:14:21余りに無意味。""[0]でいいじゃんw
0462デフォルトの名無しさん
2006/02/19(日) 18:19:12これがダメだな。
for(i=0;a[i]!="\0";i++){}
a[i] != "\0" ではない。a[i] != '\0' だ。
0463デフォルトの名無しさん
2006/02/19(日) 18:20:280464デフォルトの名無しさん
2006/02/19(日) 18:42:47>459
0465デフォルトの名無しさん
2006/02/19(日) 18:57:35int i = 0;
while(a[i]) i++;
0466デフォルトの名無しさん
2006/02/19(日) 19:03:31バイトニックソートで検索
0467デフォルトの名無しさん
2006/02/19(日) 19:04:01size_t strlength(const char *p)
{
size_t n = 0;
while (*p++) n++;
return n;
}
ていうか素直に strlen() 使うな・・・。
0468デフォルトの名無しさん
2006/02/19(日) 19:05:58本番用ソースに分ける
0469デフォルトの名無しさん
2006/02/19(日) 19:10:57{
int cnt=0;
for(cnt=0;cnt <= sizeof(unko);cnt++);
return cnt;
}
これはだめなの?
>>467とかだとポインタとしてもらった場合
永遠にループするんじゃないんですか?
0470デフォルトの名無しさん
2006/02/19(日) 19:11:570471デフォルトの名無しさん
2006/02/19(日) 19:13:16#define mystrlen(x) strlen(x)
とか
0472デフォルトの名無しさん
2006/02/19(日) 20:09:41{
return (size_t)(strchr(s, '\0') - s);
}
0473デフォルトの名無しさん
2006/02/19(日) 20:16:33char *buf=strdup( s );
int result = sprintf( buf, "%s", s );
free( buf );
return result;
}
0474デフォルトの名無しさん
2006/02/19(日) 20:18:03mainの変数を別の関数で代入したいんですが、
グローバルにするか戻り値で返すしか方法はないんでしょうか?
ただコードが長いので関数別に分けたいのですが、
変数が多すぎて対処できないです><
0475デフォルトの名無しさん
2006/02/19(日) 20:19:11引数に変数のポインタ渡せば?
0476デフォルトの名無しさん
2006/02/19(日) 20:33:34>変数が多すぎて対処できないです><
変数を用途別に分類して構造体にするといい
0477デフォルトの名無しさん
2006/02/19(日) 20:53:14ありがとうございます!
解決しました。
0478デフォルトの名無しさん
2006/02/20(月) 06:33:00p は ポインタ変数 としてみてください。
キャスティングに関する質問なのですが
p=(unsigned char *)abc;
上の文はどのように動作するのでしょうか。
adをunsigned char型としてpに入れるということでしょうか。
それともadを無理やりpに入れた上、そのpのadが指し示すメモリの中身の値がunsigned char型ということでしょうか。
0479デフォルトの名無しさん
2006/02/20(月) 07:03:36unsigned long型の変数をunsigned char *と見なして
評価した値がpに突っ込まれる
つまりそれが運良く、unsigned charの領域を指してる
場合もあるだろうが、通常は全く関係ない領域を指す事になる
つーか、んなコーディングは止めろ
0480デフォルトの名無しさん
2006/02/20(月) 07:19:20ありがとうございます。
学校の課題で出されたプログラムでして、ここだけがどうも理解できなかったのです。
0481デフォルトの名無しさん
2006/02/20(月) 08:48:36配列の操作を詳しく解説しているサイトを教えてください。
0482デフォルトの名無しさん
2006/02/20(月) 09:20:15じゃんけんゲームなら配列は要らないと思うのだが。どうして配列が必要なんだ?
1/3の確率でグーチョキパーが出ればいいだけだろ?
0483デフォルトの名無しさん
2006/02/20(月) 09:27:07これはコンパイラやCPUによって違うことだが、 char *p; と宣言された
p は sizeof(p) で調べると4だったりする(これは sizeof(char *) が4と
いうのと同じこと)。で、sizeof(unsigned long) も4だったりする。すると
char * と unsigned long 型のそれぞれの変数は代入しても内容が失われ
ない(絶対失われないという保証はないかも知れないが、たいていの環境で
これができるようだ)。
コンパイラやCPUによって違うというのは sizeof(unsigned long) と
sizeof(char *) が違う値の場合があるからだ。なのでポインタ型以外
からキャストしてポインタとして代入するコードはどうしても必要な
時以外は書かない方がいい。書くとしてもビット数を意識して書か
ないと他の環境との互換性がなくなる。
0484デフォルトの名無しさん
2006/02/20(月) 09:29:55猫でも分かるみたいに仮想のボードを作りたいです。
123
A
B
C
という感じにです。
charと2バイト文字の扱いがまだ全然理解出来ていないのと、
2次元配列も全くですね。
コンパイルできるのに表示されなし対処できないので勉強したいんですが。
有名な解説サイトとかがありましたら教えて頂きたいです。
無さそうですので自分で探す事にします。すいませんでした。
0485デフォルトの名無しさん
2006/02/20(月) 09:34:52つ[初心者歓迎スレ]
0486デフォルトの名無しさん
2006/02/20(月) 10:06:282次元配列についてだけ簡単に書いておいてあげよう。
まず、C言語には2次元配列というものはない。(がーん)
なので1次元の配列を1次元の配列の要素に入れる形で2次元を実現する。
char a[10][20]; と書いた場合、 char 型で20要素のある配列を10要素
宣言したことになる。(これ以上の多次元配列も考え方は同じ)
0487デフォルトの名無しさん
2006/02/20(月) 10:29:01もう一度そのようなスレを探して見ます。
>>486
という事は計20*10で200要素ですよね。もっと詳しくあるような
感じですのでやっぱりサイト探しを続けます。
0488デフォルトの名無しさん
2006/02/20(月) 10:30:32ホントレベル低いなここw
0489デフォルトの名無しさん
2006/02/20(月) 11:39:012次元配列がないというのは間違い
おまえが言ってるのが *規格で定められた* 2次元配列の定義だ
0490デフォルトの名無しさん
2006/02/20(月) 11:39:510491デフォルトの名無しさん
2006/02/20(月) 12:31:06何行に書いてあるかまで書いてくれないか。
どこまで本当の事を言っているのかわからん。
0492デフォルトの名無しさん
2006/02/20(月) 12:43:57索引って知ってるか?
0493デフォルトの名無しさん
2006/02/20(月) 13:43:47あと、C99は高級アセンブラとしてのCを破壊したエセ規格と言っておく
0494デフォルトの名無しさん
2006/02/20(月) 14:05:30それがさ、このスレにはJIS X3010:2003でないとダメだと言い張る
馬鹿がいんのよ。
C99に準拠したコンパイラがほんの少ししかないにもかかわらず、
「最新の規格だ」という理由だけで。
0495奈々@スーパープログラマ ◆Xl6OTFSLJ2
2006/02/20(月) 15:49:25例えば、
int hage[10][20];
と宣言した変数のアドレスを関数に渡して
関数内で *x[4][5] みたいな感じで扱いたいのですが、
上手くいきません。
関数の()内での宣言のしかたも、渡し方も分かりません。
void kansu(int**);
としても上手くいきません。
渡すときも、
kansu(&&hage);
とかやってみたのですが上手くいきません。
どうすれば思い通りにいきますでしょうか?
0496デフォルトの名無しさん
2006/02/20(月) 15:50:08それぞれの文字ごとに処理を行いたいのです。
char ch;
while((ch=getchar())!=***){
/* 処理 */
}
***にどんなものを入れればいいのですか?
そもそもこのwhileの使い方でこのような処理は可能ですか?
0497デフォルトの名無しさん
2006/02/20(月) 15:54:46うまくいかない、だけじゃあわからん
どう書いたらどういうエラーが出たのか書いてよ
0498デフォルトの名無しさん
2006/02/20(月) 15:56:26#include <stdio.h> して EOF
コマンドラインとか言うと引数みたいだぞ
0499デフォルトの名無しさん
2006/02/20(月) 15:56:26C-FAQ 6.18を256回読め
>>496
ダメ
×:char ch;
○:int ch;
while((ch=getchar())!=EOF) {
/* 処理 */
}
なら多分期待通りの処理になる
0500奈々@スーパープログラマ ◆Xl6OTFSLJ2
2006/02/20(月) 15:59:58はい。
0501デフォルトの名無しさん
2006/02/20(月) 16:02:17thx!!
0502デフォルトの名無しさん
2006/02/20(月) 16:11:290503奈々@スーパープログラマ ◆Xl6OTFSLJ2
2006/02/20(月) 16:19:07ありがとうございます。
とりあえず無理みたいですね。
C-FAQを見ても二次元配列の、二次元目(?)の大きさは渡さなければならないみたいですし。
それを宣言の時点でしなければならないのがネックです。
0504デフォルトの名無しさん
2006/02/20(月) 16:27:39型で渡せばいいだけだと思うが。何をしたいんだ?
int a[10][20]; ならば func(a[5][2]); という感じで渡せる。
受ける方は int func(int n); のような感じでできる。
0505デフォルトの名無しさん
2006/02/20(月) 17:24:101万ループの内側でfopenを使って読み出してはカウントアップして書き出しています。
これを2プロセスで実行させると以下のエラーが出てしまいます。
kern.maxfiles limit exceeded by uid 1001, please see tuning(7).
このエラー自体はチューニングすればいいのですが、まったく同じことをPerlで
やったらエラーが出ずにうまくいきます。これはどういった違いなんでしょうか?
fopenで開いたファイルは完全に後始末されていないということでしょうか?
0506デフォルトの名無しさん
2006/02/20(月) 17:25:12"<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"のエラーが出ます。
どこがまずいんでしょうか?
0507デフォルトの名無しさん
2006/02/20(月) 17:29:28> "<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\"
0509デフォルトの名無しさん
2006/02/20(月) 17:43:41fclose() してない、などというオチは許さない。
0510506
2006/02/20(月) 17:50:22文字コードの問題で、「 " 」 → 「 \" 」
という理解でいいでしょうか?
あと、こういう知識はどうやって得るものなのでしょうか?
0511デフォルトの名無しさん
2006/02/20(月) 18:03:38「C言語 エスケープ文字」でぐぐる
0512デフォルトの名無しさん
2006/02/20(月) 18:08:27void 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;
どう間違ってるかわかる方いますか?
教えていただきたいのですが・・・。
0513デフォルトの名無しさん
2006/02/20(月) 18:13:03ポインタを理解していないこと
ポインタが指し示す先には実体が存在しなければならない。
0514デフォルトの名無しさん
2006/02/20(月) 18:24:18むしろ、「\r」、「\n」は理解しているのに、
「\"」を理解していない方が不思議だ。
0515デフォルトの名無しさん
2006/02/20(月) 18:40:51とりあえず、
int *p; を int p[5]; に
scanf("%d",p[c]); を scanf("%d",&p[c]);
にしてみ。
細かいことは指摘しないが。
0517デフォルトの名無しさん
2006/02/20(月) 18:55:43きっとキリバンだったからだな
0518デフォルトの名無しさん
2006/02/20(月) 21:34:15整数などはうまく取り出せたが文字列がうまくいきません。
とりあえずもう少し調べてきます。
0519デフォルトの名無しさん
2006/02/20(月) 21:40:51>とりあえずもう少し調べてきます。
久々のクリーンヒット
0520デフォルトの名無しさん
2006/02/20(月) 22:01:46ここはお前の日記帳じゃない!
0521デフォルトの名無しさん
2006/02/20(月) 22:13:51ありがとうございます!
>>514
いや〜、どうしてでしょうね
でもぐぐってみたら確かに読んだことのある知識でした。
NULL文字以外使ったことなかったですw
0522デフォルトの名無しさん
2006/02/20(月) 22:22:29JIS X3010:2003でないとダメだ。
「最新の規格だ」という理由で。
0523デフォルトの名無しさん
2006/02/21(火) 07:21:59フェイントすか。
0524デフォルトの名無しさん
2006/02/21(火) 10:37:000525デフォルトの名無しさん
2006/02/21(火) 16:42:24JIS X3010-1993は既に廃止されていて規格でも何でもないんだが。
規格の話をするならC99が唯一の規格なんだからそれに従わなきゃだめだろう。
実際にプログラムを組む場合とは話が違う。
0526デフォルトの名無しさん
2006/02/21(火) 17:26:35廃止じゃなく改正だがな。
無論旧規格にはもはや有効期限は存在しない。
0527デフォルトの名無しさん
2006/02/21(火) 17:47:19で開くとなぜかエラーが出てしまうのですがなぜなんでしょうか。
fopen( ,"r")
だと何も問題はなかったのですが。
0528デフォルトの名無しさん
2006/02/21(火) 17:52:04"+r"なんてモードは存在しないから
"r+"は存在する
下記のURLを16回読め
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/fopen.3.html
0529デフォルトの名無しさん
2006/02/21(火) 18:09:490530デフォルトの名無しさん
2006/02/21(火) 18:13:150531デフォルトの名無しさん
2006/02/21(火) 18:24:480532デフォルトの名無しさん
2006/02/21(火) 18:28:540533デフォルトの名無しさん
2006/02/21(火) 18:38:290534デフォルトの名無しさん
2006/02/21(火) 18:44:570535デフォルトの名無しさん
2006/02/21(火) 19:23:15*URLを読めで良いのか?
0536デフォルトの名無しさん
2006/02/21(火) 19:35:240537デフォルトの名無しさん
2006/02/21(火) 19:41:12a == bとa.equals(b)の違いがわからない奴はJava厨にも値しない
0538デフォルトの名無しさん
2006/02/21(火) 20:05:250539デフォルトの名無しさん
2006/02/21(火) 20:37:05でた、何とでも使い回せる免罪符
0540デフォルトの名無しさん
2006/02/21(火) 20:45:030541デフォルトの名無しさん
2006/02/21(火) 22:30:430542デフォルトの名無しさん
2006/02/21(火) 23:46:22エラーメッセージは
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分にらめっこしたけど分からん。どこが間違ってるか指摘してくれ。
0543デフォルトの名無しさん
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");
}
0544デフォルトの名無しさん
2006/02/21(火) 23:50:36お前の態度が気に入らない
0545デフォルトの名無しさん
2006/02/21(火) 23:56:28#define N 8;
が
#define N 8
0546デフォルトの名無しさん
2006/02/21(火) 23:57:16お話にならん
0547デフォルトの名無しさん
2006/02/22(水) 00:00:54thx
0548デフォルトの名無しさん
2006/02/22(水) 00:03:260549デフォルトの名無しさん
2006/02/22(水) 00:07:57もちろん元々実装されている機能(mallocとかreallocとかfprintfとか)を利用してはならない。
C言語で書かなくてもよい。
面接試験で合格したら今までのレポート点が0点でもOK。
この課題をこなしたい。strcpyとsqrtは簡単だったが残りって難しいよね?
解答か勉強するためのインデックスを教えとくれ。
0550デフォルトの名無しさん
2006/02/22(水) 00:10:420551デフォルトの名無しさん
2006/02/22(水) 00:15:350552549
2006/02/22(水) 00:18:40Cの知識とアセンブラの初歩だけでどうにかなるようなら非常に嬉しいんだけど。
0553デフォルトの名無しさん
2006/02/22(水) 00:19:140555デフォルトの名無しさん
2006/02/22(水) 00:27:150556549
2006/02/22(水) 00:28:43OSとは違うでしょ
0557デフォルトの名無しさん
2006/02/22(水) 00:29:170558549
2006/02/22(水) 00:30:040559549
2006/02/22(水) 00:30:120560デフォルトの名無しさん
2006/02/22(水) 00:30:52漁ってきてコピペすればよかろ
0561549
2006/02/22(水) 00:30:530562デフォルトの名無しさん
2006/02/22(水) 00:33:27範囲が広くてあいまい過ぎるっしょ。
カーネルって言えば話が通じるんじゃね?
0563549
2006/02/22(水) 00:34:090564549
2006/02/22(水) 00:36:000565デフォルトの名無しさん
2006/02/22(水) 00:36:43落ち着いて息を整えて「ゲム・ギル・ガン・ゴー・グフォ」と唱えるんだ
0566549 ◆fbwS767l.2
2006/02/22(水) 00:41:20>560
面接試験なのでそれは無理。
>562
「カーネル」だとオレのスキルじゃつらいな…
「glibcの○○.asmを熟読汁」とか「カーネルソースの○○.cを嫁」だと頑張ればどうにかなりそうな気がするけど。
>565
7回唱えた。でもダメだった。
0567デフォルトの名無しさん
2006/02/22(水) 00:45:31OSが指定されててもなぁ・・・
strcpy():for()と代入でなんとか
sqrt():数列で求めるとか ttp://www004.upp.so-net.ne.jp/s_honma/root2/root2.htm
もしくは実装されているライブラリを見る
malloc():OS依存、よくわからん
printf():書式面倒だけど、直感で出来るかも(書式を全て網羅するのは大変かな)
0568デフォルトの名無しさん
2006/02/22(水) 00:45:53そこから切り出して返しゃええやん。
printf も実装が面倒なだけで、難しい訳じゃない。
0569デフォルトの名無しさん
2006/02/22(水) 00:51:13無理かな
0570549 ◆fbwS767l.2
2006/02/22(水) 00:57:14printfの書式網羅以外の部分だけでも教えて頂けると嬉しかったりする。
>>568
>適当に大きなメモリ持っといて、
このやり方がわからないんです。
もちろんデカい配列を宣言しといて使いまわすってのはナシね。
>>569
そのやり方でOKなら書けるけど…。
たぶん「ダメ」って言われる。
これって相当難しい課題なんでしょうか?
最初は深く考えていなかったんだけど書き込みしているうちにそんな気がしてきた。
0571デフォルトの名無しさん
2006/02/22(水) 01:03:50>strcpy, printf
これができないなら絶対に向かない仕事だ
>sqrt
開平わかんねーなら中学の先生にでも聞け
>malloc
NULL 返せりゃいいだけじゃん
0572デフォルトの名無しさん
2006/02/22(水) 01:03:57てかLinuxのmallocなんてソースが手に入るんじゃねーの?
それ丸写しすりゃ完成ジャン。
既存のmallocとは異なる方法じゃなきゃならんのか?
0573549 ◆fbwS767l.2
2006/02/22(水) 01:07:51strcpyは簡単だったけどprintfは今のところわかんない。
別に仕事でしてるわけじゃないよ。
sqrtは中学の授業じゃ無理です。
零点を求めるタイプのNewton法だから普通の実装なら少なくとも高校数学が要る。
>>malloc
>NULL 返せりゃいいだけじゃん
知ってるなら教えてよ。お願い。
0574デフォルトの名無しさん
2006/02/22(水) 01:15:570575デフォルトの名無しさん
2006/02/22(水) 01:17:28ちょっとVCのprintf()を掘り下げてみたけど、
fprintf()とかの共通関数を作ってその中で文字列操作をゴリゴリやってるね
malloc()は本当にわからん
OS依存だろうが…
0576デフォルトの名無しさん
2006/02/22(水) 01:17:35↑
冗談抜きで、これを受け入れられないプログラムは strictly conforming program ではない
0577デフォルトの名無しさん
2006/02/22(水) 01:18:060578デフォルトの名無しさん
2006/02/22(水) 01:22:270579 549 ◆fbwS767l.2
2006/02/22(水) 01:28:10申し訳ないけどそろそろ寝ます。
みなさんありがとう。
>>576
自信がつきました。Thx.
0580デフォルトの名無しさん
2006/02/22(水) 01:56:06int i = NULL;
ってあったけど、これってOKなの?
コンパイラによっては、ワーニングが出たり出なかったりするけど。
ワーニングが出るときは、
たぶんNULLの値が(void *)0の値になっていて
int i がポインタでないので型が一致していない・・・と推測しているのだが。
0581デフォルトの名無しさん
2006/02/22(水) 02:00:10検索でアセンブリコードを混ぜるやり方が有りましたが、アセンブリは分からないものですから・・・
何か妙案を賜れればと思います。宜しくお願いします。
0582デフォルトの名無しさん
2006/02/22(水) 02:08:41int i;
この関数での処理
}
int main(void){
f();
その他の処理
}
というようなプログラムがあったとします。
関数f()で取られたiなどのメモリは、関数f()が実行を終えて、
その他の処理に移ったら、解放されるものでしょうか?
それとも、こちらで明示的に解放してあげなければならないのでしょうか?
0583デフォルトの名無しさん
2006/02/22(水) 02:10:020584デフォルトの名無しさん
2006/02/22(水) 02:13:46そうです。明示的に開放してあげなければなりません。
よく気づきましたね。さすがです。
0585デフォルトの名無しさん
2006/02/22(水) 02:14:51f()が実行を終えたら勝手に開放してくれる。
明示的に開放する手段はない。
質問です。
私の回答は合ってますか?
0586デフォルトの名無しさん
2006/02/22(水) 02:18:07基本的にiはレジスタないしスタック領域に置かれると思います。
特にほっといてもいいのでは?
>580
たぶん、その理由でいいんじゃないの?
間違っていたらすまん
0587デフォルトの名無しさん
2006/02/22(水) 03:04:16マジデ?
0588デフォルトの名無しさん
2006/02/22(水) 03:04:57マジデ
0589デフォルトの名無しさん
2006/02/22(水) 03:05:46デジマ?
0590デフォルトの名無しさん
2006/02/22(水) 03:06:28クロフネ?
0591デフォルトの名無しさん
2006/02/22(水) 03:07:21_,,/;;;;;;ヾヾ 、,;;;;;;;;''ヽ_
ノ;_;,-―--''''゙゙ ̄ フ::::;;:'-、
// l、::::::: l、
(ヾ:::l |::::::、::、::::.ヽ,
、ノ:::::.| _,,、 ,、、__ |:::::::::::ゝ::::::>
ゝ:::::::|''=・-`l ト'=・=ー` ヽ:::::::::::ゞ:::ゝ
ヽ.| ` ー ,ヽ::,-;:::;;::/
| 、_,、,` l/6l::::ノ
| ! , , l_ ノ:/
__| -'ー-ヽ / /`)
ヽ | ,  ̄ __l_/,,-'=i______
__,,\`、_ ー-―' _//='''_-;;;;;;(( oo(( ))
;;;;;;;;;;○>\ ̄ ̄//○'.;;;;;;;;;;;;;;;;;;;;;;;;;;;|l |l |l |l |l ||
0592デフォルトの名無しさん
2006/02/22(水) 03:07:49どうやって解放すればいいんだ
0593デフォルトの名無しさん
2006/02/22(水) 03:08:29フラムドパシオン
0594デフォルトの名無しさん
2006/02/22(水) 03:52:420595デフォルトの名無しさん
2006/02/22(水) 09:53:48256のデータが入力されている配列Aからある間隔でデータを
別の配列Bに同じデータを16個づつ入力していくプログラムを組みたいんだけどどうしたらいい?
配列Bには
0*16 5*16 10*16 ・・・
のようにしたいんだけど。
2重for文でできるようなんだがfor文とか配列の理解がなくて。。。
0596デフォルトの名無しさん
2006/02/22(水) 09:59:51for(i=0;i<256;i++)B[i]=A[i*16];
0597デフォルトの名無しさん
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;
}
}
0598デフォルトの名無しさん
2006/02/22(水) 10:08:31例えばAの配列には0〜255の数値が入っていて
Bの配列に0,63,127,191,255番目の数値を16個連続で入力させたい。
配列Bの中身が
00000000000000006363636363636363636363・・・
のような感じ。
0599デフォルトの名無しさん
2006/02/22(水) 10:32:020600デフォルトの名無しさん
2006/02/22(水) 10:35:07俺は至高!俺は吉良上野介!
俺は吟遊詩人!俺はホス○タル騎士団
俺はシャン○リ○通りの達人!俺はラザ○エフ商会
俺はサ○ルトリアの王子!俺は星の王子様!
俺は
0601デフォルトの名無しさん
2006/02/22(水) 10:39:10int 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");
}
こんなんでいいの?
0602デフォルトの名無しさん
2006/02/22(水) 10:46:53{
}
↑これが一般的だと思っていたのですが、
たまーに↓みたいなのを見るんですが、
べつにOKなのですか?(戻り値intの後の改行じゃなくて、引数とその型宣言)
あと、見た目以外でどういった違いがあるのでしょうか?
int
main(argc, argv)
int argc;
char **argv;
{
}
0603デフォルトの名無しさん
2006/02/22(水) 10:52:15上はANSI C世代の書式
下はK&R以前のC
現状で下を使う必要性は皆無
0604デフォルトの名無しさん
2006/02/22(水) 10:56:560605デフォルトの名無しさん
2006/02/22(水) 10:58:57そうですか。なんか下の書き方のほうがカッコイイなぁーと思ったんだけど
そうですか、、、
0606デフォルトの名無しさん
2006/02/22(水) 11:05:51error("いやです。\n");
上のようなerror関数の仕様を教えてください。
ferrorとperrorは検索に引っかかるのですが・・・。
0607デフォルトの名無しさん
2006/02/22(水) 11:06:04実引数と仮引数の不一致検出ができるかとか
型の格上げが行われるかどうかとかがあるがな
細かいことはエキスパートCプログラミング嫁
0608デフォルトの名無しさん
2006/02/22(水) 11:56:04printf()ってputc()も使えないのか?
malloc()はsbrk()が使えないと厳しいな
0609デフォルトの名無しさん
2006/02/22(水) 11:56:58頼むから日本語で質問してくれ。
0610デフォルトの名無しさん
2006/02/22(水) 13:07:06char array[8] = "よんもじ";
とすると、array[0]とarray[1]で"よ"になるんですか?
0611デフォルトの名無しさん
2006/02/22(水) 13:12:55そう
0612デフォルトの名無しさん
2006/02/22(水) 13:16:34文字コードによっては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;
}
とやれば確実。あんまりやってるの見たことないけど
0613デフォルトの名無しさん
2006/02/22(水) 13:17:11エンコードによって違う。
utf8 だと日本語で使う文字は1文字3バイトだ。
サロゲートされている文字を含めば6バイト。
0614デフォルトの名無しさん
2006/02/22(水) 13:22:54char array[9] にしないと、あとから悩むことになる。
0616デフォルトの名無しさん
2006/02/22(水) 13:24:55wchar_t array2[] = L"よんもじ";
0617デフォルトの名無しさん
2006/02/22(水) 13:24:56リトル/ビッグエンディアンの別やマルチバイト⇔シングルバイトのシーケンスの変更のための表現とか色々あるな
一筋縄ではいかないからかなり限定された部分について勉強していくがいい
0618デフォルトの名無しさん
2006/02/22(水) 13:33:04それじゃちゃんと動かないことがある
0619610
2006/02/22(水) 14:03:16もう少し2バイト文字について勉強してきます。
あ〜日本人に生まれていなければ…
0621デフォルトの名無しさん
2006/02/22(水) 14:57:54コンパイラによってはだろ? 確かに gcc は L"" が変だ。
新しいバージョンではちゃんと使えるのかも知れないが。
>>619
「2バイト」で収まるとは限らない。「複数バイト」だ。
ってもう見てないか…。
0622デフォルトの名無しさん
2006/02/22(水) 15:01:12但し setlocale() 忘れると fputws() とかで出力する時に '?' に化ける。
0623デフォルトの名無しさん
2006/02/22(水) 17:22:260624デフォルトの名無しさん
2006/02/22(水) 18:43:320625デフォルトの名無しさん
2006/02/22(水) 18:49:400626デフォルトの名無しさん
2006/02/22(水) 18:51:420627デフォルトの名無しさん
2006/02/22(水) 19:04:23で質問しましょう。
0628デフォルトの名無しさん
2006/02/22(水) 20:01:15どっちもだめそうな名前だ。
0629デフォルトの名無しさん
2006/02/22(水) 20:15:48って感じで本には書いてあったけど
μITRONには
void main(void)
ってありました。間違ってるの?
0630デフォルトの名無しさん
2006/02/22(水) 20:22:06処理系が
・int main(void)
・int main(int,char**)
以外のプロトタイプを持ったmainに対応するのは勝手
移植性はないけど。
0631デフォルトの名無しさん
2006/02/22(水) 20:37:43printf(print[0]);
printf(print[1]);
printf(print[2]);
これだと表示されないんですが、何がいけませんか?
*print[1]とやってもダメですし・・・教えて下さい。
0632デフォルトの名無しさん
2006/02/22(水) 20:47:59何がどうダメなのかを日本語で説明する能力が圧倒的に足りない。
コンパイルエラーなのか、実行すると自分の予想していない結果になるのかを書け
0633デフォルトの名無しさん
2006/02/22(水) 20:57:34printfなら、書式が第1引数では?
printf("%s",print[0]);
0634デフォルトの名無しさん
2006/02/22(水) 21:01:02いや、問題ないだろ。
printf("hoge");とかって普通にやるだぉ
0635デフォルトの名無しさん
2006/02/22(水) 21:01:370636デフォルトの名無しさん
2006/02/22(水) 21:08:01うちだと
春夏秋
と、普通に表示されるぞ。
VC++6.0 proだ。
何がいけませんか?ってこっちが聞きたいわ。
0637デフォルトの名無しさん
2006/02/22(水) 21:21:16gcc 3.3.6
0638デフォルトの名無しさん
2006/02/22(水) 21:24:01標準関数に追加されたからそれが悪さしてるんだと思う。
0639デフォルトの名無しさん
2006/02/22(水) 21:27:23それが悪さしてたらどうなるわけ?
0640631
2006/02/22(水) 21:28:07申し訳ありません。
コンパイルエラーではないんですが、常にprint[3]のみが表示したり
するのでおかしいと思い質問したんですが、形的には合っているそうなので
他の部分を確認して見たいと思います。
答えて頂き有難う御座いますm(__)m
0641デフォルトの名無しさん
2006/02/22(水) 21:32:09>>638を詳しく説明してくれ
0642デフォルトの名無しさん
2006/02/22(水) 21:38:14>638の信ぴょう性は高いですから国政調査権を要求します。
0643デフォルトの名無しさん
2006/02/22(水) 21:42:140644デフォルトの名無しさん
2006/02/22(水) 21:43:360645デフォルトの名無しさん
NGNGint main(int argc, char *argv[], char *envp[])
おれの本にはこう書いてある
0646デフォルトの名無しさん
2006/02/22(水) 22:36:09このスレは標準Cだけということになっている。
0647デフォルトの名無しさん
2006/02/22(水) 22:56:34やはり文字列がうまくいかない。
使ってるコンパイラはC99に対応してないし。
あきらめて寝るか。
0648デフォルトの名無しさん
2006/02/22(水) 22:57:240649デフォルトの名無しさん
2006/02/22(水) 23:01:55とのことですが、誰に聞けばよろしいか?
0650デフォルトの名無しさん
2006/02/22(水) 23:02:330651デフォルトの名無しさん
2006/02/22(水) 23:07:280652デフォルトの名無しさん
2006/02/22(水) 23:14:540653デフォルトの名無しさん
2006/02/22(水) 23:24:460654たすけて〜
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のかっこがわからない。
}
0655デフォルトの名無しさん
2006/02/22(水) 23:39:42になったら困るだろ?
つ結合順位
0656デフォルトの名無しさん
2006/02/22(水) 23:42:38元プログラムから実行系列を得るためにはどのようなプログラムを組めばいいでしょうか?
プログラムの流れをたどる方法が思いつきません。
どうか知恵をお貸しください。
0657デフォルトの名無しさん
2006/02/23(木) 00:28:17実行プログラムの処理ごとにフラグをONしていき、最終的にノード情報を集めればよい。
0658デフォルトの名無しさん
2006/02/23(木) 00:57:40if文を使わずに計算コストを掛けないのがいいです。
0659デフォルトの名無しさん
2006/02/23(木) 00:59:060660デフォルトの名無しさん
2006/02/23(木) 00:59:460661デフォルトの名無しさん
2006/02/23(木) 01:00:190662デフォルトの名無しさん
2006/02/23(木) 01:01:04できる
0663デフォルトの名無しさん
2006/02/23(木) 01:03:02理由を書けや糞野郎
0664658
2006/02/23(木) 01:03:06マクロを使って置き換えられないかと思ったのですが出来ませんでした。
0665デフォルトの名無しさん
2006/02/23(木) 01:04:47のような処理がしたいのですが、これだとarrayの同一アドレスを参照することにより
エラーが発生するのだと思うのですが、このような追加処理をする関数ってありますか?
0666658
2006/02/23(木) 01:05:18x=1;
fnc(1);
x=2;
fnc(2);
みたいな感じで出来ませんかね?
0667訂正
2006/02/23(木) 01:06:10x=1;
fnc(x);
x=2;
fnc(x);
みたいな感じで出来ませんかね?
0668デフォルトの名無しさん
2006/02/23(木) 01:07:17strcat(array,"追加文字");
でダメ?
0669デフォルトの名無しさん
2006/02/23(木) 01:09:32キサマ答えたのになにが不満なんだよ
0670デフォルトの名無しさん
2006/02/23(木) 01:10:59662さんですか。
やり方教えてください。
0672デフォルトの名無しさん
2006/02/23(木) 01:18:49それってポリモルフィズムだかなんだかの概念ですよね?
結局型チェックしてそれに応じて関数呼び出すから
if文で使い分けするのとコスト変わらない気がするんですが。
0673658
2006/02/23(木) 01:19:24ありがとうございました!
0674672
2006/02/23(木) 01:20:370675674
2006/02/23(木) 01:23:270676デフォルトの名無しさん
2006/02/23(木) 01:50:050677デフォルトの名無しさん
2006/02/23(木) 02:06:04他に方法無いですか?
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])();
}
0678デフォルトの名無しさん
2006/02/23(木) 02:07:540679デフォルトの名無しさん
2006/02/23(木) 02:10:23>if文の方が速い
どんだけ厳しいリソースのプラットフォーム上でやってんだかw
ちっちぇな
0680デフォルトの名無しさん
2006/02/23(木) 02:11:26:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_ スルー
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ ├┤|
0681デフォルトの名無しさん
2006/02/23(木) 02:12:46Cなんか使うな
0682デフォルトの名無しさん
2006/02/23(木) 02:13:04無駄な作業が好きな人なんだよ、きっと
0683677
2006/02/23(木) 02:26:11引数の値が1から1000まで動いてそれに応じて
1000個の関数を呼び出すとすると...
それを使うごとに最悪1000回比較しないといけませんよね。
いちどに呼び出せないですか?
0684デフォルトの名無しさん
2006/02/23(木) 02:30:52>それを使うごとに最悪1000回比較
なぜ?
たかだか10回くらいじゃねの?比較
0685デフォルトの名無しさん
2006/02/23(木) 02:31:37あんたさっき if 文のが速いとか言ってたよな? ヴァカ?
0686デフォルトの名無しさん
2006/02/23(木) 02:34:350687デフォルトの名無しさん
2006/02/23(木) 02:35:35>引数の値が1から1000まで動いてそれに応じて
>1000個の関数を呼び出すとすると...
その引数の値って具体的に何?
0688677
2006/02/23(木) 02:36:050689デフォルトの名無しさん
2006/02/23(木) 02:40:160690デフォルトの名無しさん
2006/02/23(木) 02:41:13データ構造を工夫すれば回避できるんでないの。
何がしたいんだ?
0691677
2006/02/23(木) 02:42:56それだと一つの関数内にif文使って処理をすべて書いてしまった方が速いですよね。
0692デフォルトの名無しさん
2006/02/23(木) 02:44:08まったく同意
根本的なところで間違いがあるような気がする
0693677
2006/02/23(木) 02:44:59将棋プログラムの指し手生成ルーチンの種類数なんです。
0694656
2006/02/23(木) 02:47:39すみません、自分の知識不足でよく理解できませんでした。
自分の不甲斐なさに絶望・・・。
0695デフォルトの名無しさん
2006/02/23(木) 02:49:14馬鹿の考え休むに似たり
0696デフォルトの名無しさん
2006/02/23(木) 02:54:15なぜ淫乱てんかいする必要があるのか?
0697デフォルトの名無しさん
2006/02/23(木) 02:56:38ifを使ったやりかたを書いてみてくれ
0698デフォルトの名無しさん
2006/02/23(木) 02:58:37べたにif else if繰り返すよりは速い
0699デフォルトの名無しさん
2006/02/23(木) 02:59:28その案はとっくにスルーされています
0700677
2006/02/23(木) 03:04:221<=a<=8だと...こんな感じ。比較3回で処理にたどり着く。
if(a<5){
if(a<3)if(a==1)f1(); else f2();
else if(a==3)f3(); else f4();
}
else {・・・}
0701デフォルトの名無しさん
2006/02/23(木) 03:08:220702デフォルトの名無しさん
2006/02/23(木) 03:09:50(func+no)(arg1);
これで一発。
0703677
2006/02/23(木) 03:10:42関数ポインタだとそのときに関数が確定してないからインライン展開出来ないし、マクロもできない。処理速度を速くしたいんですが。
0704デフォルトの名無しさん
2006/02/23(木) 03:11:53どんな処理になればいいのかをアセンブラで書いてみてくれたほうが
みんなに伝わりやすそうだな
0705デフォルトの名無しさん
2006/02/23(木) 03:12:08だからswitchは駄目かと出てるだろ馬鹿
0706677
2006/02/23(木) 03:13:280707デフォルトの名無しさん
2006/02/23(木) 03:14:40氏ね馬鹿
頭悪すぎ
0708デフォルトの名無しさん
2006/02/23(木) 03:15:22アセンブラ出力調べてみろ。
0709デフォルトの名無しさん
2006/02/23(木) 03:16:170710デフォルトの名無しさん
2006/02/23(木) 03:17:56その根拠は?
0711デフォルトの名無しさん
2006/02/23(木) 03:19:240712デフォルトの名無しさん
2006/02/23(木) 03:19:37switchはふつうジャンプテーブルを使っているよ
考え方は関数ポインタと同じ。関数コールでなくてJUMPするだけ
0713デフォルトの名無しさん
2006/02/23(木) 03:35:590714デフォルトの名無しさん
2006/02/23(木) 04:13:35function 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言語の方のどこを変えればいいでしょうか?
0715デフォルトの名無しさん
2006/02/23(木) 04:17:29arrayも確保してから渡せ
0716デフォルトの名無しさん
2006/02/23(木) 07:05:45resultにアドレスいれたところで、関数抜けたら無効
0717656
2006/02/23(木) 08:56:08具体的にどのように記述すればいいのか
よければご教授お願いします。
0718デフォルトの名無しさん
2006/02/23(木) 09:41:350719デフォルトの名無しさん
2006/02/23(木) 09:45:13…? 別に間違ってないと思うが
0720デフォルトの名無しさん
2006/02/23(木) 09:50:090721デフォルトの名無しさん
2006/02/23(木) 10:05:57実測もせずに速度云々を語るな!
高速化の為の最初のアプローチは、
実測してボトルネックを見つける事だぞ?
0722デフォルトの名無しさん
2006/02/23(木) 11:22:461. Delphi の result は結果を入れるための特殊な変数。
2. Delphi の String 型に対応する C 言語の型は存在しない。
3. C言語に文字列型は存在しない。
4. C言語は文字列を扱う場合は char 型の配列で行う。
5. C言語は関数の中から配列を return で返すことは出来ない。
返せるのは数値の型と構造体とポインタ。
0723デフォルトの名無しさん
2006/02/23(木) 11:26:146. C言語は関数に値渡ししかできない。参照がない。(C++はある)
7. C言語は関数の引数で宣言した変数は呼び出された時に呼び出し
元の値で初期化されるが自動変数と同様に return 時に消滅する。
0724デフォルトの名無しさん
2006/02/23(木) 11:28:25結構DelphiとCって違うのね
0725デフォルトの名無しさん
2006/02/23(木) 11:44:35char *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)));
}
0726725
2006/02/23(木) 11:46:080727725
2006/02/23(木) 11:49:34char *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; /* ワークバッファをそのまま返すと、
呼び出しもとで便利なことがある。*/
}
0728デフォルトの名無しさん
2006/02/23(木) 12:58:22アセンブラでも使え
0729デフォルトの名無しさん
2006/02/23(木) 14:31:01高速化の為よりもむしろ遷移をわかりやすく(このへんはコーディングポリシーにもよる)する目的で使うもの。
0730デフォルトの名無しさん
2006/02/23(木) 14:34:12一番使えない奴だ・・・
0731デフォルトの名無しさん
2006/02/23(木) 14:39:310732デフォルトの名無しさん
2006/02/23(木) 14:43:150733デフォルトの名無しさん
2006/02/23(木) 14:43:520734デフォルトの名無しさん
2006/02/23(木) 14:48:040735デフォルトの名無しさん
2006/02/23(木) 14:56:170736デフォルトの名無しさん
2006/02/23(木) 14:58:00なるべくならテーブル参照とビット演算でブランチレスに汁
0737714
2006/02/23(木) 17:19:06>>727さんの方法でできました。
このスレの方は親切ですね!
Delphiは配列をStingとして勝手にやってくれていたので、
C言語に挑戦してから戸惑いが多いです。
ほんとに助かりました、ありがとうございました。
0738デフォルトの名無しさん
2006/02/23(木) 20:48:47単純な処理ですが、単純ゆえに高速化したい関数があるのです。
0739デフォルトの名無しさん
2006/02/23(木) 21:37:120740デフォルトの名無しさん
2006/02/23(木) 22:03:38また将棋プログラムの指し手生成ルーチンかよw
プログラムの実行速度を上げるときには、
まず、プログラムのどの部分がどれだけ時間を食っているかを調査すること
当然だが、一番処理時間を食っているところを改善すると、全体のパフォーマンスがアップする
ところが、現実にはむやみやたらに性能アップを試みる輩がいる
全体の1%くらいのところを50%性能アップしたからといって、全体では0.5%しか
向上していない
そんなところはやってもやらなくても同じ
0741デフォルトの名無しさん
2006/02/23(木) 22:11:19何でボトルネックになってないって前提で話すんだよ
0742デフォルトの名無しさん
2006/02/23(木) 22:24:34>何でボトルネックになってないって前提で話すんだよ
本当に将棋プログラムの指し手生成ルーチンの話ならば、
パイプライン周りを弄ることによって得られる高速化なんて、
高が知れているから。
そこら辺のルーチンを作っており、なおかつまともな思考能力を
持っている人間ならば、機種ごとに結果が異なってしまう
パイプラインなんかに頭を使うような無駄なことはしない
(勿論、全くしないわけではないけれど、比率は非常に低い。)
そんな不毛な部分ではなく、他の評価方法や枝狩りを考えていた方が
ずっと高速化されるから。
0743デフォルトの名無しさん
2006/02/23(木) 22:32:26配列が大域的であれば(つまり、関数の外で定義されていれば)、
文字配列は次のような文で初期化できる
char a[] = "Hello!";
この配列を関数の局所変数として定義する場合には、
次のように static 変数として定義しなければならない。
static char a[] = "Hello!";
と書いてあるんですが、その理由は何ですか?
ふつうにコンパイルも通るんですけど
ローカルでは char a[] = "Hello!"; じゃ駄目なんですか?
0744デフォルトの名無しさん
NGNGどういう文脈なんだろ?
その文字列を、関数を抜けた後でも使うとか?
0745デフォルトの名無しさん
2006/02/23(木) 22:45:02文字と文字配列の定義と初期化の仕方を書いてるだけなんですけどね。
0746鱸鮭鱒鯔鯵鰈 ◆0RNR3g.MhY
2006/02/23(木) 22:51:00C++って、new しなかったら基本的にdeleteは無くても
メモリリークしないんですか?
例えば、以下のような場合とか、メモリが開放されるのはいつですか?
std:vector<string*> strList;
for(int i=0; i<100; i++){
std::string str = "ああああ";
strList.push_back(&str);
}
0747デフォルトの名無しさん
2006/02/23(木) 22:56:03つまり、strはループ回るたびに毎回破棄されるから、
このポインタをpush_backしちゃだめ。
この場合vector<string>にするべし。
0748デフォルトの名無しさん
2006/02/23(木) 23:04:02うほっ!
strListが開放されるときに開放されるかとオモタ・・・。
危なかった・・・。
ありがとうございますた!
0749デフォルトの名無しさん
2006/02/23(木) 23:09:20スレ違い
答えてる奴らもアフォ
0750デフォルトの名無しさん
2006/02/23(木) 23:40:41[関数]
void savecsv(char fname[], char *tbl[][TBLSZ], int ln);
上記の関数への引数の受け渡しがうまくいきません。
[関数呼び出し側]
savecsv(&name , tb ,num);
第二引数の実引数がおかしいのですが、呼び出し側の引数が解かる方おられますでしょうか?
[エラー]
C:\csv.c(108): warning C4047: '関数' : 間接参照のレベルが 'char *' と 'char **__w64 ' で異なっています。
0751デフォルトの名無しさん
2006/02/23(木) 23:45:02&nameをnameにしたら
0752デフォルトの名無しさん
2006/02/23(木) 23:45:09>呼び出し側の引数が解かる方おられますでしょうか?
その質問は、2chで
「私の名前は何でしょうか?」と聞くのと
大して変わらないな。
0753デフォルトの名無しさん
2006/02/23(木) 23:47:46第二引数char *tbl[][TBLSZ]への、実引数の型がわかりません。
char *tbl[][TBLSZ]
こんな書き方を見たの初めてで。。
0754デフォルトの名無しさん
2006/02/23(木) 23:50:56ありがとうー^^*
同じ文にあるchar *tbl[][TBLSZ] が絶対間違ってると思ってたから、
助かったっス。
0755デフォルトの名無しさん
2006/02/23(木) 23:55:21その文脈では昔のコンパイラでは配列型のローカル変数を初期化できなかった
(グローバル変数と静的(== Staticな)変数)だけでしか配列の初期化はできなかった)
ためだと思う。
0756デフォルトの名無しさん
2006/02/23(木) 23:56:49エスパー(というほどでもないか)乙
>>750
つぎはname, tb ,numの定義をちゃんと書いておくれな
0757デフォルトの名無しさん
2006/02/23(木) 23:58:040758デフォルトの名無しさん
2006/02/23(木) 23:59:400759デフォルトの名無しさん
2006/02/24(金) 00:24:01TrackPopupMenu(hMenuP, TPM_LEFTALIGN, pt.x, pt.y, 0, hwnd, NULL);
として、ポップアップメニューを出して、ポップアップメニュー以外の部分をクリックした時、
つまり、フォーカスが他に移った時に、ポップアップメニューを閉じる方法ってありますか?
0760デフォルトの名無しさん
2006/02/24(金) 00:25:25Win32スレで聞け
0761デフォルトの名無しさん
2006/02/24(金) 00:25:40>>1
0762759
2006/02/24(金) 00:27:360763デフォルトの名無しさん
2006/02/24(金) 00:50:46そうなんですか。
さんくす。
0764デフォルトの名無しさん
2006/02/24(金) 01:11:23bccdeveloper使ってます。
0765デフォルトの名無しさん
2006/02/24(金) 01:22:20ふつーに
fprintf(stderr, "Copyright(C)2006 Mona Corporation");
とかやれば?
OS によってはバイナリファイルの中に特別な埋め込み情報があったりもするけど
そういうのはそれぞれの環境スレで聞いた方がいい
0766デフォルトの名無しさん
2006/02/24(金) 01:25:33微妙にすれ違いな気がするけど。BCスレってなかったっけ?
0767デフォルトの名無しさん
2006/02/24(金) 01:26:30お前ちょっと表出ろ
0768デフォルトの名無しさん
2006/02/24(金) 04:29:34関数ポインタ等の件で。
速度計ってみたのだが...
関数ポインタ >>>>> swich > if だったぞ。
データの範囲は0から15でifはループを使わない二分探索。
処理は代入だけ。
swichはifの三倍程度かかるのだが。
0769デフォルトの名無しさん
2006/02/24(金) 04:30:370770ソース
2006/02/24(金) 04:45:35#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();}
0771デフォルトの名無しさん
2006/02/24(金) 04:47:33ifの二分探索21になったぞ。どうなってる?
0772デフォルトの名無しさん
2006/02/24(金) 04:54:17てか何故に関数ポインタ?
0773デフォルトの名無しさん
2006/02/24(金) 04:56:50関数ポインタを使えば比較を一度も使わずに分岐が出来るからだよ。
0774デフォルトの名無しさん
2006/02/24(金) 05:00:58(ノ ゚Д゚)ノ ==== ┻--┻
0775デフォルトの名無しさん
2006/02/24(金) 05:05:14http://forums.belution.com/ja/cpp/000/050/69.shtml
0776デフォルトの名無しさん
2006/02/24(金) 05:06:170777デフォルトの名無しさん
2006/02/24(金) 05:17:380778デフォルトの名無しさん
2006/02/24(金) 05:27:48証拠↓
http://pc8.2ch.net/test/read.cgi/tech/1139570025/658-677
0779デフォルトの名無しさん
2006/02/24(金) 05:37:010780デフォルトの名無しさん
2006/02/24(金) 08:07:390781デフォルトの名無しさん
2006/02/24(金) 08:08:240782デフォルトの名無しさん
2006/02/24(金) 09:09:45switchは、分岐の数でテーブルジャンプになったりならなかったりするから、
もう少し増やしてみたら?
0783デフォルトの名無しさん
2006/02/24(金) 09:11:43って言っちゃダメなんだっけ?
0784デフォルトの名無しさん
2006/02/24(金) 09:44:310785デフォルトの名無しさん
2006/02/24(金) 12:00:46読み込むストリームで改行よりも先にNULL文字があっても改行までセットすることは
ANSI-Cで保証されているんですか?
fgetsはテキスト処理用で、freadばバイナリ処理用と一般に書かれてたりしますが、
gccで試したら一応、途中にあるNULL文字を含んだその後の改行までセットされていました。
0786デフォルトの名無しさん
2006/02/24(金) 12:12:260787デフォルトの名無しさん
2006/02/24(金) 12:24:29そんなの読まないように。
0788デフォルトの名無しさん
2006/02/24(金) 13:00:140789デフォルトの名無しさん
2006/02/24(金) 13:06:23保証されていると思うが、何バイト読んだかが分からないので最後の位置が分からない。
不安なら getc() 使って自分で1バイトづつ読んでバッファに入れる関数を自作しろ。
それか環境依存してもいいなら GNU ライブラリにある getline() でも使え。
0790デフォルトの名無しさん
2006/02/24(金) 13:09:06テキストかどうかとうよりは1レコードの長さが固定されているかどうか、だ。
ただ OS によっては fopen() 時のモードに b を付けないとうまく行かない。
0791デフォルトの名無しさん
2006/02/24(金) 13:21:25しかも意味ねー
0792デフォルトの名無しさん
2006/02/24(金) 13:22:300793デフォルトの名無しさん
2006/02/24(金) 13:29:30読み方: りろんおた
意味/解説:
理論ばかりを学んで実践をしない人間の総称。
他人のやること成すことに理論で文句をつけ、
その発展を阻害する存在。理論が先行してま
ともなものは何一つ作れない真性厨房に多く
見られる。
類: 基地外厨房
0794770
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]);}
0795デフォルトの名無しさん
2006/02/24(金) 14:37:16速度云々は他所でやってくれ。
0796デフォルトの名無しさん
2006/02/24(金) 15:23:15それ、z = a[i]; でいいんじゃ・・・。
0797デフォルトの名無しさん
2006/02/24(金) 15:40:04いるいるwww
あと、文字コードヲタとC仕様ヲタもな
この手合いにはまともなものは作れないってのは共通
0798デフォルトの名無しさん
2006/02/24(金) 15:46:520799デフォルトの名無しさん
2006/02/24(金) 16:01:470800デフォルトの名無しさん
2006/02/24(金) 16:16:27底が2のlogの計算はどうやったらいいですか?(>_<)
0801デフォルトの名無しさん
2006/02/24(金) 16:17:180802デフォルトの名無しさん
2006/02/24(金) 16:17:50っ [対数の底の変換]
高校の数学の教科書読め
0803デフォルトの名無しさん
2006/02/24(金) 16:18:33math.hにlog2がある。
以上
0804800
2006/02/24(金) 16:21:320805デフォルトの名無しさん
2006/02/24(金) 16:27:15何があるのか教えてください。
0806デフォルトの名無しさん
2006/02/24(金) 16:30:55ttp://www.google.co.jp/search?complete=1&hl=ja&q=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%80%80%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E3%82%92%E5%88%A9%E7%94%A8&lr=
0807デフォルトの名無しさん
2006/02/24(金) 16:33:52すいませんでした。ありがとうございますm(__)m
0808デフォルトの名無しさん
2006/02/24(金) 16:37:32テキストとバイナリの話題になると、文脈を無視して「区別はない」ってやつ。
0809デフォルトの名無しさん
2006/02/24(金) 17:17:20嬉々として湧いてくるタイプの人も必ず居ますね。
0810デフォルトの名無しさん
2006/02/24(金) 17:35:280811デフォルトの名無しさん
2006/02/24(金) 17:39:260812デフォルトの名無しさん
2006/02/24(金) 17:41:28正直者には見えない不思議なコピペ
さぁ 今すぐ嘘をついて他のスレに貼ってみよう!
0813デフォルトの名無しさん
2006/02/24(金) 17:45:200814デフォルトの名無しさん
2006/02/24(金) 17:48:382進法がわかる人間=10パターン
それ以外=0パターン
ということです
0815デフォルトの名無しさん
2006/02/24(金) 17:51:530816デフォルトの名無しさん
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,´`ヽ;;;、,,,,,,___,) ヽ'-゙'"
(`ー':;;;;;;;;;;;;;;;ノ
``''''''``'''''´
0817デフォルトの名無しさん
2006/02/24(金) 18:15:05「動けばいいんだろ」みたいな口ぶりのやつのほうが、
動くものを作れないだろ。
0818デフォルトの名無しさん
2006/02/24(金) 18:21:59お前は改行を怒らせた
0819デフォルトの名無しさん
2006/02/24(金) 18:26:56一番ヤバぃのは理論振りかざして何も出来ない木偶の坊だ
0820デフォルトの名無しさん
2006/02/24(金) 18:40:030821デフォルトの名無しさん
2006/02/24(金) 18:43:320822デフォルトの名無しさん
2006/02/24(金) 18:45:50そもそもそういうのは「動かないもの」なのですが…
0823デフォルトの名無しさん
2006/02/24(金) 19:10:29デバッグをやらねばならない俺の身にもなってくれ。orz
0824デフォルトの名無しさん
2006/02/24(金) 19:13:57っ 蛇の道をススム者の定めじゃ…o|ro|rz
0825815
2006/02/24(金) 19:43:250826デフォルトの名無しさん
2006/02/24(金) 19:45:19つ extern
0827デフォルトの名無しさん
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,´`ヽ;;;、,,,,,,___,) ヽ'-゙'"
(`ー':;;;;;;;;;;;;;;;ノ
``''''''``'''''´
0828デフォルトの名無しさん
2006/02/24(金) 19:56:000829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
2006/02/24(金) 20:24:450831デフォルトの名無しさん
2006/02/24(金) 21:20:520832デフォルトの名無しさん
2006/02/24(金) 21:22:290833デフォルトの名無しさん
NGNG0834デフォルトの名無しさん
2006/02/24(金) 21:27:380835デフォルトの名無しさん
2006/02/24(金) 21:31:520836デフォルトの名無しさん
2006/02/24(金) 21:35:43C++使います
++
0837815
2006/02/24(金) 22:18:380838デフォルトの名無しさん
2006/02/24(金) 22:20:35やってみれば判ると思いますが、どこか前方で同じ名前の変数を宣言していない限り使えません。
0839デフォルトの名無しさん
2006/02/24(金) 22:23:53氏ね
0840デフォルトの名無しさん
2006/02/24(金) 23:23:24ホールだらけ、競合条件だらけ、バグだらけのプログラムを
見ても作った人に言ってはいけませんよ。
心の中で「こいつレベル低いなあ…」と見下しながら笑顔で
付き合うのが大人です。
0841デフォルトの名無しさん
2006/02/24(金) 23:23:56ageて書くような内容か?
0842838
2006/02/24(金) 23:31:390843デフォルトの名無しさん
2006/02/25(土) 00:35:38やってみろアホ
0844815
2006/02/25(土) 01:48:02何か特殊というか見落としたりしてないかと思ったわけで
だからやってみるってことはできないわけで
0845デフォルトの名無しさん
2006/02/25(土) 01:51:250846デフォルトの名無しさん
2006/02/25(土) 01:55:24日本語でどうぞ。
或いは、検索機能のついたエディタか検索ツールを使えば済むことなのでしょうか。
0847デフォルトの名無しさん
2006/02/25(土) 03:29:17ポインタについてなんですが
int *pt1=&a;
と宣言した場合というのは
int *pt1;
pt1=&a;
ということと同じことなのでしょうか?
0848デフォルトの名無しさん
2006/02/25(土) 03:33:240849デフォルトの名無しさん
2006/02/25(土) 03:41:090850デフォルトの名無しさん
2006/02/25(土) 03:41:22pt1にaのアドレスを入れるというのはわかるのですが
*pt1にaのアドレスを入れることは可能なんでしょうか?
0851デフォルトの名無しさん
2006/02/25(土) 05:56:17そう。
0852デフォルトの名無しさん
2006/02/25(土) 06:00:03いや、問題は、俺がデバッグしなければいけないという点にある。
見るだけで済むなら何も言わないよ。
0853デフォルトの名無しさん
2006/02/25(土) 06:03:26小規模の物から大規模の物まで。
一人で作る物から多人数で。
一回使うだけの物から、大勢が長期使うものまで。
さまざまなのに、
>俺がデバッグしなければいけない
何で、こんな限定されたことを前提にレスしてるの?
0854デフォルトの名無しさん
2006/02/25(土) 06:11:510855前スレ990
2006/02/25(土) 06:54:03>>前スレ991
すみません・・・どうやるのかよくわかりません・・・
何か処理が非常に複雑になるような・・・?
>>前スレ994
reallocって(移動される場合には)結局メモリをコピーしているんではないのですか?
コピーせずにすますのはx86とかの場合ページ単位でしかできなかったような気が・・・?
間違ってるかもしれませんがよろしくお願いします。
0856847
2006/02/25(土) 07:55:15理解を深めるようさらに勉強していきたいと思います
0857デフォルトの名無しさん
2006/02/25(土) 09:44:44ptは*を付けるとint型になると宣言しているのであって、
int *pt = &a;
*ptに&aを代入している訳では無い
int*型のptに&aを代入している
0858デフォルトの名無しさん
2006/02/25(土) 10:25:010859デフォルトの名無しさん
2006/02/25(土) 12:12:230860デフォルトの名無しさん
2006/02/25(土) 12:18:07リストにすると探索時間が気に入らないとか言ってたようだが
そんなのはポインタ1個用意しておいて末尾をポイントさせとけば済む話だろ
0861デフォルトの名無しさん
2006/02/25(土) 12:22:47memory allocate
記憶割付
0862815
2006/02/25(土) 12:32:15実はあるプログラムがあるのですが(自分が書いたのではない)、そのmakeが通らない
変数が宣言されていないというエラーが大量に出る
ソースを見てみると同一ファイル内で例えば70行目でなんたらって変数を使っているがその宣言は3000行目にあるとかそんなことがいっぱいある
そのプログラムは開発途中のものではなく、ずいぶん昔に開発済みかつ使われていたもののはずなのでなんでかなあということなんですが
どういうことが考えられますでしょうか?
0863デフォルトの名無しさん
2006/02/25(土) 12:35:49あと、どういう事か聞くなら、ソース見せろやヴォケ
0864デフォルトの名無しさん
2006/02/25(土) 12:35:53なぜコンパイル通らない形で保存されてたかなんて推理したって何の意味もない。
0865デフォルトの名無しさん
2006/02/25(土) 13:03:24最初からそう書けばまだ少しはましだったのにね。
で、まさかインクルードファイルが見つかってないと言う落ちはないよな?
ソースをアップロードできないならせめて、エラーメッセージだけでも見せてみ。
0866デフォルトの名無しさん
2006/02/25(土) 13:05:110867デフォルトの名無しさん
2006/02/25(土) 13:10:10会社と喧嘩して退職時に嫌がらせでシャッフルしたとか
0868デフォルトの名無しさん
2006/02/25(土) 13:45:10bar()
{
foo = 0;
}
int foo;
というコードを通してくれるCのコンパイラなりコンパイルオプションは存在しない。
ただし、barの上(やincludeしているヘッダファイル)で、
extern int foo;
すればコンパイルは通る。
0869デフォルトの名無しさん
2006/02/25(土) 13:52:49無駄なレスだな・・・
0870デフォルトの名無しさん
2006/02/25(土) 13:59:02甘い
規格では認めていないというだけで、従っていない処理系は世の中に腐るほど存在する
「それ」が C かどうかはベンダがどう名乗るかで決まることで、LR にガタガタわめいても始まらん
そのへんは configure でご苦労なことをやっている人たちを見習えや
ところで、Makefile があるから make だけでビルドできると早合点してるアフォはどこへ行った?
この期に及んで INSTALL を読んでないとかいうオチはねえだろな
会社のソースならドキュメントの残し方に基準があるだろうから 2ch で聞くより先にやるべき事があるんじゃないか
0871デフォルトの名無しさん
2006/02/25(土) 16:16:29n += (a++) → n = 15
n += (++a) → n = 16
になるのですが、上の式と下の式はどんな風に計算されてるんですか?
上の式が,n =16 にならないのが分からないです・・・
0872デフォルトの名無しさん
2006/02/25(土) 16:18:140873デフォルトの名無しさん
2006/02/25(土) 16:18:37n += (a++)はインクリメントされる前のaの値である5がnに加えられる。
n += (++a)ではインクリメントされた後の値の6がnに加えられる。
0874デフォルトの名無しさん
2006/02/25(土) 16:19:45でどうなるか分かってる?
0875デフォルトの名無しさん
2006/02/25(土) 16:19:56氏ね
0876デフォルトの名無しさん
2006/02/25(土) 16:34:37>>874
>>875
お前はそんなことを書くためにわざわざここに来てるのか?www
0877デフォルトの名無しさん
2006/02/25(土) 16:35:22お前はそんなことを書くためにわざわざここに来てるのか?www
0878デフォルトの名無しさん
2006/02/25(土) 16:37:17いいえ、違いますよ
だって、俺は871ですからね♪
0879デフォルトの名無しさん
2006/02/25(土) 17:58:520880デフォルトの名無しさん
2006/02/25(土) 18:01:22なんでスライスされたパンなの?
0881デフォルトの名無しさん
2006/02/25(土) 18:55:060882デフォルトの名無しさん
2006/02/25(土) 19:01:010883デフォルトの名無しさん
2006/02/25(土) 19:01:420885デフォルトの名無しさん
NGNG質問に質問で返さないで。
なぜそういう疑問をもったか言ってみなさい。
0887デフォルトの名無しさん
NGNGなぜ、自分がそういう疑問をもったかもわからないの?
0888デフォルトの名無しさん
2006/02/25(土) 19:23:4613枚
0889デフォルトの名無しさん
2006/02/25(土) 19:26:110890デフォルトの名無しさん
2006/02/25(土) 19:30:20:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_ 呼んだ?
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ ├┤|
0892デフォルトの名無しさん
2006/02/25(土) 20:38:24宿題スレにお帰りください
あるいはぎゃるのぱんてー1枚
0893デフォルトの名無しさん
2006/02/25(土) 20:46:14ついでにhttp://pc8.2ch.net/test/read.cgi/tech/1140039002/571か・・・
>>856の「勉強していきたい」は、「このスレで質問しまくるけど、
出された質問には一切答えません。自分で試すなんて論外です」って意味か・・・
そろそろ春だな・・・
0894デフォルトの名無しさん
2006/02/25(土) 20:58:06技術的に興味のある話題なら相手するし、気が向いたら質問に答えてやることもあるし、痛い奴は煽ることもある
他人の領分に変に干渉する誰かさんは3番目に該当するわけだが・・・
0895デフォルトの名無しさん
2006/02/25(土) 21:00:24:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_ ポカーン
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ ├┤|
0896デフォルトの名無しさん
2006/02/25(土) 21:41:09doble型のa,b,cを
c = a % b
とするとエラーがでます。何か解決方法はありますか?
0897デフォルトの名無しさん
2006/02/25(土) 21:43:24pow関数では分数乗は扱えないのでしょうか?
お願いします。
0898デフォルトの名無しさん
2006/02/25(土) 21:53:31普通にできるよ。
pow(3.0, 1.0 / 3.0);
1/3とか書いちゃだめよ。
0899デフォルトの名無しさん
2006/02/25(土) 21:54:272.全角
Solution
バカが無理してCなんか覚えるな
0900デフォルトの名無しさん
2006/02/25(土) 22:03:40整数の余りという概念はありません、だっけ?
0901デフォルトの名無しさん
2006/02/25(土) 22:06:39いわば double スタンダードってやつだな
0902デフォルトの名無しさん
2006/02/25(土) 22:13:05できるのでしょうか?
例えばrand % 3 で0〜2の乱数を発生させる事ができますが、
1を除いた0と2のみの乱数を発生させる事はできるでしょうか?
これについて教えて頂きたいのですが、お願いします。
0903デフォルトの名無しさん
2006/02/25(土) 22:14:400904デフォルトの名無しさん
2006/02/25(土) 22:15:12終わり
0905デフォルトの名無しさん
2006/02/25(土) 22:15:46rand() & 2
0906デフォルトの名無しさん
2006/02/25(土) 22:16:270908デフォルトの名無しさん
2006/02/25(土) 22:18:52そんな・・・('A`)。
0909デフォルトの名無しさん
2006/02/25(土) 22:20:00解決法: 「数値なら何にでも double を使っとけ」と教えたボンクラ師匠をコンクリートで固めて海に捨てる
0910デフォルトの名無しさん
2006/02/25(土) 22:23:470912デフォルトの名無しさん
2006/02/25(土) 22:39:31おぉ。勉強になりました。
0913デフォルトの名無しさん
2006/02/25(土) 22:49:360914スイッチ教のおつげ
2006/02/25(土) 22:58:57いいお告げだ。
プログラムからすべての分岐をなくせる気がする。
0915デフォルトの名無しさん
2006/02/25(土) 23:02:30おぉ。神が舞い降りたか。むしろ髪が舞い落ちたか。
0916スイッチ教のおつげ
2006/02/25(土) 23:04:08if( x >= 0) A; else B; が
swich( (int)((x + M)/ M ) ) {
case 0: B; case 1: A; }
に変換できる。
0917デフォルトの名無しさん
2006/02/25(土) 23:07:170918デフォルトの名無しさん
2006/02/25(土) 23:08:180919デフォルトの名無しさん
2006/02/25(土) 23:09:440920デフォルトの名無しさん
2006/02/25(土) 23:14:15case 0: B; break;
case 1: A; break;
}
でいいじゃん
0921デフォルトの名無しさん
2006/02/25(土) 23:19:210922スイッチ教のおつげ
2006/02/25(土) 23:20:49>プログラムからすべての分岐をなくせる気がする。
→
>プログラムからすべての比較(とそれに伴う分岐)をなくせる気がする。
0923デフォルトの名無しさん
2006/02/25(土) 23:21:31でいいじゃん
0924デフォルトの名無しさん
2006/02/25(土) 23:45:27式文
名札付き文
分岐文 switch文, break文, continue文, return文, goto文
選択文 if文
繰返し文 for文, while文, do文
複文
用語は正確にね
0925デフォルトの名無しさん
2006/02/25(土) 23:48:380926デフォルトの名無しさん
2006/02/25(土) 23:53:50レスアンカー貼ら(れ)ないチキン君
0927デフォルトの名無しさん
2006/02/26(日) 00:06:28#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]);}
0928デフォルトの名無しさん
2006/02/26(日) 00:08:15ジャンプテーブルを作らせるにはどうしたらいいですかね。
0929デフォルトの名無しさん
2006/02/26(日) 00:09:300930デフォルトの名無しさん
2006/02/26(日) 00:10:29ジャンプテーブル=switch
0931デフォルトの名無しさん
2006/02/26(日) 00:11:22:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_ ポカーン
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ ├┤|
0932デフォルトの名無しさん
2006/02/26(日) 00:18:55コンパイラによっては自動でジャンプテーブル作るかもしれないけど、
自分でジャンプテーブル作ってやったほうが確実。
0933デフォルトの名無しさん
2006/02/26(日) 00:21:46ジャンプテーブルというものが存在しているだろう事はわかるのですが
>>927だとfnif関数とfnsx関数の速度がほぼ同じだから
switchがifと同じ分岐になっているらしい。どうやればswitchの方が速くなりますかね?
0934デフォルトの名無しさん
2006/02/26(日) 00:25:42それが最高速である可能性は?
つか、ジャンプテーブル使いたかったら自分でテーブル作れと。
0935デフォルトの名無しさん
2006/02/26(日) 00:30:55どうやら最高速だったようです。
fnsy(){ for(i=0;i<N;i++)fuka(i);}
と同じ速度でした。
0936デフォルトの名無しさん
2006/02/26(日) 00:32:41ありがとうございます。
0937デフォルトの名無しさん
2006/02/26(日) 00:35:06この程度の分岐ではswitch文の利点(速度)が発揮されない
0938デフォルトの名無しさん
2006/02/26(日) 00:36:08ある基準値をクリアすればそれ以上はどうでもいい場合と、
ひたすら最速を競う勝負とあるわけだが・・・
0939デフォルトの名無しさん
2006/02/26(日) 00:39:05作らなければならないのだが...
コンパイラの最適化等で無視されないようなものをどう作ったらいいんだ?
0940デフォルトの名無しさん
2006/02/26(日) 00:50:30つ volatile
0941デフォルトの名無しさん
2006/02/26(日) 01:39:08それでも足し算、掛け算、代入などよりは十倍くらい鈍いことが判明した。
ジャンプテーブルさえ作れれば分岐のコストが無くせると思ったのだがそうでは無いようだ。
結局、分岐はなるべく減らそう、ということだ。
0942デフォルトの名無しさん
2006/02/26(日) 01:44:040943デフォルトの名無しさん
2006/02/26(日) 01:47:250944デフォルトの名無しさん
2006/02/26(日) 01:49:03配列のレンジチェックまで最適化して貰えるとか思ってるアフォが集まりやすいが
0945941
2006/02/26(日) 01:50:13スイッチやイフはどのパソコン、コンパイラでも時間がかかるだろ。
一般論だ。
0946デフォルトの名無しさん
2006/02/26(日) 01:51:190947デフォルトの名無しさん
2006/02/26(日) 01:51:460948デフォルトの名無しさん
2006/02/26(日) 01:56:230949デフォルトの名無しさん
2006/02/26(日) 01:59:55そんなに気になるなら全部アセンブラで書けや
0950デフォルトの名無しさん
2006/02/26(日) 02:37:37ことが、今後起こらないとも限らない。(勝手にジャンプテーブルを
作るということ)
0951デフォルトの名無しさん
2006/02/26(日) 02:41:50http://pc8.2ch.net/test/read.cgi/tech/1084676298/
0952デフォルトの名無しさん
2006/02/26(日) 06:22:51頻繁に起こる分岐を早めに確定したほうがいいからな。
30分岐だったとしても、等確率だったらスイッチだが
どれか一つが50パーセントで起こるならそれを決定してしまった方がよい。
0953デフォルトの名無しさん
NGNGもしそのブロック内で宣言なければ最適化されてる?
0954デフォルトの名無しさん
2006/02/26(日) 09:00:51ってどういう意味?
0955デフォルトの名無しさん
2006/02/26(日) 09:08:14引数なしでchar * const *を返す関数である
って意味だ。
char *const *func();
char *p;
next = func;
p = next();
だな。内側から分解してみると理解しやすい。
0956デフォルトの名無しさん
2006/02/26(日) 10:55:03まず問題を冷静に吟味して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/
0957デフォルトの名無しさん
2006/02/26(日) 10:55:28>if文はブロックなしで書いたほうが速いの?
この質問は高校生までなら許す。関係ない。
>もしそのブロック内で宣言なければ最適化されてる?
なんとなく質問の意味は想像できるけど、宣言を行う場所は
最適化どうこうで選ぶもんじゃないから、宣言される場所によって
それがどういう意味を持つかで(ローカル変数にしたいのか
そうでないのかなど)考えるように。
0958デフォルトの名無しさん
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;
}
}
}どこの条件が悪いのか教えて頂けませんか?お願いします。
0959デフォルトの名無しさん
2006/02/26(日) 11:08:310960デフォルトの名無しさん
2006/02/26(日) 11:12:22エスパーするとこの比較条件が多分間違い
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;
だと思う
0961デフォルトの名無しさん
2006/02/26(日) 11:13:32プリントエフで追うと何回やっても2のみの出力結果になってしまいます・・・。
もう少し検索してきますorz。
0962デフォルトの名無しさん
2006/02/26(日) 11:15:060963デフォルトの名無しさん
2006/02/26(日) 11:15:38ありがとうございます!!一度それで試してみます。
0964デフォルトの名無しさん
2006/02/26(日) 11:18:37いえ、ランダムに生成した表では無く、初めから配列に0と2を自分で代入しておいて
探索させると成功するので、ランダムに生成したこの表の条件が
間違っていると思ったからです。
0965デフォルトの名無しさん
2006/02/26(日) 11:20:560966960
2006/02/26(日) 11:21:540968デフォルトの名無しさん
2006/02/26(日) 11:26:34辞めた方が吉。
0969デフォルトの名無しさん
2006/02/26(日) 11:28:10分かりました。自力で解く事にします。ありがとうございました。
0970デフォルトの名無しさん
2006/02/26(日) 11:29:320971デフォルトの名無しさん
2006/02/26(日) 11:31:200972デフォルトの名無しさん
2006/02/26(日) 11:43:57>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の意味って何なんだ?
もちっと勉強してこい。
0973デフォルトの名無しさん
2006/02/26(日) 11:55:49先生〜〜(ノ∀`)〜〜!!できましたよ!!ランダムに生成する事ができています!
感謝致します。あと少し弄って完成させます。
本当にありがとうございましたm(_)m
0974デフォルトの名無しさん
NGNG昔からできてない?
0975デフォルトの名無しさん
2006/02/26(日) 11:59:270976デフォルトの名無しさん
2006/02/26(日) 12:00:500977デフォルトの名無しさん
2006/02/26(日) 12:05:31エディタで逆スラッシュの入力をしたいのですが、
どうすればいいのですか?教えてください。
0978デフォルトの名無しさん
2006/02/26(日) 12:05:540979デフォルトの名無しさん
2006/02/26(日) 12:06:23ふつうに入力できますよ
0980デフォルトの名無しさん
2006/02/26(日) 12:07:25>>960
に書いてあるプログラムの条件で既に合っていました。
自分の条件(LEFT RIGHT)が <= にしていたため間違ってしまいました。
申し訳ないです、本当にすいませんでした。
0981976==960
2006/02/26(日) 12:10:12ゆとり君と言ったのは間違いであったと謹んで訂正する
0982デフォルトの名無しさん
2006/02/26(日) 12:11:310983デフォルトの名無しさん
2006/02/26(日) 12:14:43このスレでは間違い。
引き数リスト無しでchar * const * を返す関数は、
引き数無しでchar * const * を返す関数とは違う。
それと、その後のpも大間違い。
自分でchar * const *を返すと書いておきながらなんで間違うかなぁw
0984デフォルトの名無しさん
2006/02/26(日) 12:24:54スレ立てよろしく。
反応ない様なら次、>985辺りで。
0985デフォルトの名無しさん
2006/02/26(日) 12:25:120986955
2006/02/26(日) 12:38:15勉強しなおすよ。
0987デフォルトの名無しさん
2006/02/26(日) 12:38:59#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)とかやってアドレスずらせるだけかな。
0988デフォルトの名無しさん
2006/02/26(日) 12:40:350989デフォルトの名無しさん
2006/02/26(日) 12:41:45C言語的には参照など無いというのが回答
0990987
2006/02/26(日) 12:43:34その為にスレがあるんだろ
0991デフォルトの名無しさん
2006/02/26(日) 12:46:42もちろん、参照だけで生きていけるほど世の中甘くはないし、ポインタを完全に廃してしまえるわけではない。
そこで、私がポインタと参照を使い分ける時の基準について書いてみようと思う。
高速なオブジェクトの引き渡しには参照
関数に構造体やオブジェクト(実際にはどちらも同じ物であるが)を渡す場面が数多くある。
そのような場合に通常の値渡しを行うと、クラスのメンバを全てコピーして新しいオブジェクトを生成するため、
巨大なオブジェクトではオーバーヘッドがものすごいものとなる。そこで、オブジェクトを渡すときには参照を使う。
なお、オブジェクトが変更されないことを明示し保証するためにconstをつける。
値を変更する場合にはポインタ
関数に変数(オブジェクトも含む)を渡して、関数内部で状態を変更させて返したい場合がある。
値を変更する場合には、参照を使っても全く同じ事が可能であるが、
呼び出し側で「値が変更される」ことをわかりやすくするためにポインタを使う。
(参照による呼び出しでは、一見すると値渡しのようにも見えるため、C言語出身の私は値が変更されないような
イメージを受ける。)
↑検索してみましたーーー!!!
フムフム、色々できるポインタの方がいいかも><
0992デフォルトの名無しさん
2006/02/26(日) 12:49:290993デフォルトの名無しさん
2006/02/26(日) 13:07:38参照はC++のものだからCスレであるここではスレ違い。
0994デフォルトの名無しさん
2006/02/26(日) 13:13:08ポインタだって、言っちゃえば参照だし、
どうせなら「別名」とかの方が良いような?
0995デフォルトの名無しさん
2006/02/26(日) 13:13:280996デフォルトの名無しさん
2006/02/26(日) 13:14:570997デフォルトの名無しさん
2006/02/26(日) 13:15:390998デフォルトの名無しさん
2006/02/26(日) 13:16:360999デフォルトの名無しさん
2006/02/26(日) 13:21:341000デフォルトの名無しさん
2006/02/26(日) 13:22:12「C言語なら俺に聞け!」はこのスレをもって終了いたしました。
長らくのご愛顧、誠にありがとうございました。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。