[PR]子育てママさんへ:3年毎に15万円うけとれる保険?
祝49回 C言語ならあっしに聞け
- 1 名前:デフォルトの名無しさん 投稿日:03/01/15 23:21
- 俺に答えられることなら何でも聞いとくれ
- 2 名前:デフォルトの名無しさん 投稿日:03/01/15 23:22
- まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しろ。
むしろ質問する前にWEBで検索するのが常識だ。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行け。
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行け。
コンパイラを探しているなら >>2 を見よ。
上記を逸した場合の結果は激しく未定義とする。ウヒ
C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
- 3 名前:デフォルトの名無しさん 投稿日:03/01/15 23:22
- 23 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
21 http://pc.2ch.net/tech/kako/1022/10220/1022045622.html
20 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
19 http://pc.2ch.net/tech/kako/1020/10207/1020756993.html
18 http://pc.2ch.net/tech/kako/1020/10202/1020260813.html
17 http://pc.2ch.net/tech/kako/1019/10193/1019372139.html
16 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
15 http://pc.2ch.net/tech/kako/1016/10165/1016519243.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1013/10139/1013990673.html
12 http://pc.2ch.net/tech/kako/1012/10123/1012348974.html
11 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
10 http://pc.2ch.net/tech/kako/1008/10083/1008300863.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
7 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
6 http://piza2.2ch.net/tech/kako/999/999617524.html
5 http://piza2.2ch.net/tech/kako/994/994908590.html
4 http://piza.2ch.net/tech/kako/992/992357382.html
3 http://piza.2ch.net/tech/kako/989/989929288.html
2 http://piza.2ch.net/tech/kako/979/979529893.html
1 http://piza.2ch.net/tech/kako/967/967985026.html
- 4 名前:デフォルトの名無しさん 投稿日:03/01/15 23:23
- 46 http://pc3.2ch.net/test/read.cgi/tech/1039328710/
45 http://pc3.2ch.net/test/read.cgi/tech/1038405432/ (待機中)
44 http://pc3.2ch.net/test/read.cgi/tech/1037796472/ (待機中)
43 http://pc3.2ch.net/test/read.cgi/tech/1037281411/ (待機中)
43 http://pc3.2ch.net/test/read.cgi/tech/1037134356/ (待機中)
42 http://pc3.2ch.net/test/read.cgi/tech/1037101156/ (待機中)
41 http://pc3.2ch.net/test/read.cgi/tech/1036876790/ (待機中)
40 http://pc3.2ch.net/test/read.cgi/tech/1036673739/ (待機中)
39 http://pc3.2ch.net/test/read.cgi/tech/1036409391/ (待機中)
38 http://pc3.2ch.net/test/read.cgi/tech/1035729526/ (待機中)
37 http://pc3.2ch.net/test/read.cgi/tech/1035623265/ (待機中)
36 http://pc3.2ch.net/test/read.cgi/tech/1035211039/ (待機中)
35 http://pc3.2ch.net/test/read.cgi/tech/1034337064/ (待機中)
34 http://pc3.2ch.net/test/read.cgi/tech/1033240509/ (待機中)
33 http://pc3.2ch.net/test/read.cgi/tech/1032606064/ (待機中)
32 http://pc3.2ch.net/test/read.cgi/tech/1031905402/ (待機中)
31 http://pc3.2ch.net/test/read.cgi/tech/1031340950/ (待機中)
30 http://pc3.2ch.net/test/read.cgi/tech/1030786546/ (待機中)
29 http://pc3.2ch.net/test/read.cgi/tech/1029605182/ (待機中)
28 http://pc3.2ch.net/test/read.cgi/tech/1028495798/ (待機中)
27 http://pc3.2ch.net/test/read.cgi/tech/1027160374/ (待機中)
26 http://pc.2ch.net/tech/kako/1026/10260/1026048820.html
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
- 5 名前:デフォルトの名無しさん 投稿日:03/01/15 23:24
- 48 http://pc3.2ch.net/test/read.cgi/tech/996171508/
47 http://pc3.2ch.net/test/read.cgi/tech/1040048202/l50
- 6 名前:デフォルトの名無しさん 投稿日:03/01/16 02:46
- スレッドの立て方が気持ち悪い…
>>2で「>>2 を見よ。」なんて書いてるし…
- 7 名前:名無し募集中。。。 投稿日:03/01/16 03:00
- >>7
空域読め
- 8 名前:デフォルトの名無しさん 投稿日:03/01/16 03:05
- >>8の言う通りだぞ
- 9 名前:デフォルトの名無しさん 投稿日:03/01/16 03:09
- >>9は世界一の美少女
- 10 名前:デフォルトの名無しさん 投稿日:03/01/16 03:10
- >>9
もう冬休みは終わっただろ
冬厨は学校に備えて寝ろ
- 11 名前:デフォルトの名無しさん 投稿日:03/01/16 03:10
- >>10
お前もな
- 12 名前:前スレの930 投稿日:03/01/16 03:22
- imlibっていまどこにあります?
いろんなサイト探したんですが、リンク切ればかりだったので。。
- 13 名前:デフォルトの名無しさん 投稿日:03/01/16 03:23
- >>13
何故分かった!?
- 14 名前:Cというより国語です 投稿日:03/01/16 03:28
- K&R本のまえがきCで
ポインタのような大事な機能の説明は改善した。元の例題をさらに洗練させ、
いくつかの章で新しい例を追加してある。
(ここまでは分かる)
例えば、複雑な宣言の扱いは、宣言をことばに、
あるいはその逆に変化するプログラムで補った。
よく分からない・・・。
- 15 名前:デフォルトの名無しさん 投稿日:03/01/16 03:41
- >>12
tarball でよければここに。
http://ftp.gnome.org/pub/GNOME/sources/imlib/1.9/
RPM ならデストリビュータのサイトでさがせばあるはず。
その場合は開発版もインストールすること。
また、それぞれのフォーマットを表示するのに
libjpeg, libtiff, libpng, libgif などのライブラリを必要とする。
つか、いまどきの Linux ならどれも入ってない?
- 16 名前:名無しさん@XEmacs 投稿日:03/01/16 04:02
- >>14
読み進めていけば分かるはず
- 17 名前:デフォルトの名無しさん 投稿日:03/01/16 04:25
- >>14訳者がへぼいんだよ。
つーか英文科卒の訳者じゃしゃーねーよ。
- 18 名前:デフォルトの名無しさん 投稿日:03/01/16 05:12
- >>17
ソースは?
- 19 名前:デフォルトの名無しさん 投稿日:03/01/16 05:20
- 恐らくコンピュータ畑の人でもないと思うんだけど
一体どんな経歴で
と思ったら略歴に東大の計算機センターって書いてあるな…
- 20 名前:デフォルトの名無しさん 投稿日:03/01/16 05:24
- 自分の文章読解力の無さを棚に上げて訳者批判とは......笑える(w
- 21 名前:12 投稿日:03/01/16 05:35
- いや、俺窓です。
で、インストールしてhttp://larse-gtk.hp.infoseek.co.jp/imlib/image.htmlここの
プログラムをコンパイルしてみたら、そもそもgdk_imlib.hが無いとか
言われたんで、むりやりPATH通ってるフォルダにそれをコピーしたら、
こんどは、リンク先のプログラムのgdk_imlib_get_colormapとか
gdk_imlib_...系のが全てundefinedと言われてしまうのですが、何が
まずいんですか?
- 22 名前:デフォルトの名無しさん 投稿日:03/01/16 06:38
- 量子コンピュータで C は使えますか?
- 23 名前:デフォルトの名無しさん 投稿日:03/01/16 06:46
- 200刷超えてもミスプリが直らないのは仕様ですか?
最近のは直ってるのかなぁ。
- 24 名前:デフォルトの名無しさん 投稿日:03/01/16 07:01
- >>22アリエナイ
- 25 名前:デフォルトの名無しさん 投稿日:03/01/16 07:44
- アリエール
- 26 名前:12 投稿日:03/01/16 07:57
- なんとかhttp://larse-gtk.hp.infoseek.co.jp/imlib/image.html
このプログラムをコンパイルさせたいのですが、何がいけないか分かりません。
imlibをインストールしたときは
% gzip -dc imlib-1.9.14.tar.gz | tar -xf -
% cd mlib-1.9.14
% env CFLAGS=-O2 ./configure
% make
# make install
としています。
ちなみにGTKはhttp://larse-gtk.hp.infoseek.co.jp/gtk/clist.html
こーゆのがきちんとできるので、問題ないと思います。
- 27 名前:デフォルトの名無しさん 投稿日:03/01/16 09:38
- >>26
コンパイルするときのコマンドラインと出力教えれ
おそらくインクルードパスが足りないかと。
- 28 名前:デフォルトの名無しさん 投稿日:03/01/16 09:41
- 量子コンピュータでアセンブラ(ry
- 29 名前:デフォルトの名無しさん 投稿日:03/01/16 11:53
- 0 と 1 が表現できるなら大体何でもエミュレートできるだろ
- 30 名前:14 投稿日:03/01/16 14:29
- レスありがとうございます。
とりあえずもう少しだけ読む勧めていこうと思います。
- 31 名前:デフォルトの名無しさん 投稿日:03/01/16 21:42
- あいまいな質問でも、答えてくれるかしら?うふっ?
- 32 名前:デフォルトの名無しさん 投稿日:03/01/16 22:17
- >>31
まかせろヴぉけ
- 33 名前:デフォルトの名無しさん 投稿日:03/01/17 02:22
- >>29
量子コンピュータは0と1を使わない。
1キュービットは、[0|1]こんなんだ。
- 34 名前:デフォルトの名無しさん 投稿日:03/01/17 06:52
- え〜と。
age。
- 35 名前:デフォルトの名無しさん 投稿日:03/01/17 09:01
- >>33
要するに2ビットですか?
- 36 名前:デフォルトの名無しさん 投稿日:03/01/17 11:07
- 最近よく聞く粒子コンピュータってナノテクですか?
- 37 名前:デフォルトの名無しさん 投稿日:03/01/17 11:10
- りゅうこ。
- 38 名前:デフォルトの名無しさん 投稿日:03/01/17 12:12
- >>35
いえ、キュービットはnビットの転送ができる確率分布です。
量子コンピュータは、2^nビットの演算を一度に出来ると期待されています。
少なくとも、整数を素数へ因数分解することがP時間でできることが証明されています。
ただし、それ以外のいわゆる「普通の計算」が可能かどうかは、実は不明です。
もちろん汎用化してC言語の環境が整えられることは間違いないでしょうが、
それは早くても2050年以降になることでしょう。
- 39 名前:デフォルトの名無しさん 投稿日:03/01/17 12:37
- タートルグラフィックスのプログラムなのですが、
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
int x,y,dx,dy;
void put_mark(int x, int y)
{ move(x-2,y-2); cont(x+2,y+2);
move(x+2,y-2); cont(x-2,y+2);
move(x,y);
}
void forward(){
x=x+dx;
y=y+dy;
cont(x,y);
put_mark(x,y);
}
void left_turn(){
int tmp;
tmp=dx; dx=-dy; dy=tmp;
}
void right_turn(){
int tmp;
tmp=dx; dx=dy; dy=-tmp;
}
- 40 名前:39の続き 投稿日:03/01/17 12:42
-
void analysis(ch)
{
switch(ch){
case 'F': forward(); break;
case 'R': right_turn(); break;
case 'L': left_turn(); break;
}
}
void turtle()
{
int ch;
while((ch=getchar())!=EOF){
if(isalpha(ch)) analysis(ch);
}
}
int main()
{
openpl();
space(-300,-300,300,300);
x=0;
y=0;
dx=0;
dy=10;
put_mark(x,y);
turtle();
closepl();
return 0;
}
- 41 名前:39の続き 投稿日:03/01/17 12:44
- これをいじって数字を入力したらそれたを数値として読み取り、次のコマンドを繰り返し実行するようにしたいのですが、
どこをどうすればいいですか?例えば、5Fと入力するとFFFFFとおなじ動きをする。さらに@と#でくくった部分を!で呼び出せるようにしたいんですが。
できるだけ初心者でもわかるような簡単なぷらぐらむでおねがいしたいんですが。for文とかwhileぶんとかif文みたいなので。
わがままでスマソ。
- 42 名前:デフォルトの名無しさん 投稿日:03/01/17 13:45
- >>41
何が一番わがままかって、このスレは基本的にソース丸投げ禁止だぞ。
- 43 名前:名無し@沢村 投稿日:03/01/17 13:53
- >量子コンピュータ
佐野量子が使うPCのこと
- 44 名前:デフォルトの名無しさん 投稿日:03/01/17 15:24
- 以下の2つのマクロに意味的に何か違いはありますか?
ただ好みの問題でしょうか?
do { ... } while(0) か { ... } だけかってことなんですが。
#define MACRO1() {\
var1 = foo; \
var2 = bar; \
}
#define MACRO2() \
do { \
var1 = foo; \
var2 = bar; \
} while (0)
- 45 名前:デフォルトの名無しさん 投稿日:03/01/17 15:29
- >>39
同じ人?
http://pc3.2ch.net/test/read.cgi/tech/1041992392/254-258
- 46 名前:デフォルトの名無しさん 投稿日:03/01/17 15:45
- >>44
散々出てくるFAQなんだがそれ。
if (condition)
MACRO1();
else
foo();
とやったときのことを考えてみれ。
- 47 名前:デフォルトの名無しさん 投稿日:03/01/17 21:59
- C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?
- 48 名前:デフォルトの名無しさん 投稿日:03/01/17 22:01
- >>47
C言語をもっと勉強してからもう一度来てください。
- 49 名前:デフォルトの名無しさん 投稿日:03/01/17 22:06
- >>47
それはもちろん
ビット演算です。
- 50 名前:47 投稿日:03/01/17 22:08
- >>49
具体的にはどんなときでしょうか?
- 51 名前:デフォルトの名無しさん 投稿日:03/01/17 22:08
- >>49
ビット演算はなんの役に立つのでしょうか?
- 52 名前:デフォルトの名無しさん 投稿日:03/01/17 22:17
- 2で割るとき。
//まあ、最適化があるから、ふつーは意識しないのだが。
- 53 名前:デフォルトの名無しさん 投稿日:03/01/17 22:20
- フラグ、ラスタオペレーション、RGBマクロ、ウィンドウメッセージの分解、擬似乱数生成
などなどなどなど…
- 54 名前:デフォルトの名無しさん 投稿日:03/01/17 23:18
- >>51
ハードウェアレベルで絶対に必要
- 55 名前:_ 投稿日:03/01/17 23:47
- 教えてください
Cでsnprintfを自作することになりました。
参考になる資料とかありましたら教えてください。
フリーで使えるソースが何処かに落ちていると良いのですが。
- 56 名前:デフォルトの名無しさん 投稿日:03/01/17 23:53
- >>55
vsnprintf 呼んじゃえ。
というのは冗談で。
というか、他人のソースに頼っちゃダメー。
そんなに難しくないはずだぜ。
面倒なだけで。
- 57 名前:デフォルトの名無しさん 投稿日:03/01/17 23:54
- >>55 はマルチですので放置で。
- 58 名前:デフォルトの名無しさん 投稿日:03/01/17 23:54
- >>55
あー、ちくしょー、マルチかよ。
- 59 名前:デフォルトの名無しさん 投稿日:03/01/18 08:04
- 9 名前:通りすがりのマルチ ◆CHii/cVw [sage] 投稿日:02/08/30 02:32 ID:o6nfHHaL
>>2
あんまり言いたくないが、人の二番煎じのネタでゲッターやって楽しいか?
舞みたいにオリジナリティ出したら。
【社会】少年チャンピオンで連載中の漫画家を中傷した元同級生男に550万円賠償命令
http://news2.2ch.net/test/read.cgi/newsplus/1030642180/
http://news2.2ch.net/newsplus/kako/1030/10306/1030642180.html
- 60 名前:デフォルトの名無しさん 投稿日:03/01/18 08:04
- マルチっちゅーか、
No.49のスレが2つあるのが問題なのでは?
- 61 名前:age 投稿日:03/01/18 15:19
- age
- 62 名前:デフォルトの名無しさん 投稿日:03/01/18 22:12
- double a[8];
a[0] = 0.0;
として、a[0]に0が入らないってどういうこと?
- 63 名前:デフォルトの名無しさん 投稿日:03/01/18 22:14
- >>62
その後の何かの処理で書き換えた、とか。
- 64 名前:デフォルトの名無しさん 投稿日:03/01/18 22:14
- >>62
それはあなたの脳みそが暴走しています。
- 65 名前:デフォルトの名無しさん 投稿日:03/01/18 22:23
- >>63
書き換えてる箇所なんてないのに勝手に
変わるんです。
a[0]=0.0;とした直後は0.0が入っていて
ある行でいきなり変な値が入って・・・。
わけわからん
- 66 名前:デフォルトの名無しさん 投稿日:03/01/18 22:26
- double b[8];
double a[8];
a[0] = 0.0;
printf("%f\n", a[0]);
b[8] = 1.0;
printf("%f\n", a[0]);
- 67 名前:デフォルトの名無しさん 投稿日:03/01/18 22:32
- short x;
double[8];
double[0] = 0.0;
*((int*)&x) = 3.8;
- 68 名前:デフォルトの名無しさん 投稿日:03/01/18 22:33
- int x[8];
double[8];
double[0] = 0.0;
x[8] = 3.8;
- 69 名前:デフォルトの名無しさん 投稿日:03/01/18 22:33
- どっちだ?
- 70 名前:デフォルトの名無しさん 投稿日:03/01/18 22:39
- double b[1], a[8];
b[1] = 1.1;
- 71 名前:65 投稿日:03/01/18 22:42
- for(i =0; i<8; i++){
a[i] = 0.0;
}
u_int XX, YY, U_bar, V_bar;
u_int *X, *Y, *u_bar, *v_bar;
X = &XX; Y = &YY; u_bar = &U_bar; v_bar = &V_bar;
X[0] = 355; Y[0] = 435;
X[1] = 747; Y[1] = 429;
X[2] = 747; Y[2] = 453;
X[3] = 355; Y[3] = 458;
X[4] = 97; Y[4] = 281;
X[5] = 889; Y[5] = 256;
X[6] = 882; Y[6] = 326;
X[7] = 10; Y[7] = 347;
というコードにしてて、
X = &XX; Y = &YY; u_bar = &U_bar; v_bar = &V_bar;
をなくすとa[]が書き換えられなくなりました。
どういうことなんでしょうか?
- 72 名前:デフォルトの名無しさん 投稿日:03/01/18 22:48
- こりゃ重症だあ
- 73 名前:65 投稿日:03/01/18 22:58
- >>72
どこが悪いのでしょうか?
- 74 名前:デフォルトの名無しさん 投稿日:03/01/18 23:10
- >>65
ネタだと思いたい・・・
C言語の配列は0から始まるって知ってた?
つまりどういうことかというと
int ary[16];
と宣言すると
ary[0] から ary[15] までの範囲が使えるの
- 75 名前:65 投稿日:03/01/18 23:16
- >>74
0から始めてると思うんですけど?
どういうこと?
- 76 名前:デフォルトの名無しさん 投稿日:03/01/18 23:18
- >>62
printf("%lf",a[0]);
'l'を付けて出力して見て。
double で、宣言しているわけだから。
- 77 名前:デフォルトの名無しさん 投稿日:03/01/18 23:19
- 0から14で、15個
double a[8];なら
8個のdouble型を0から7番地まで確保。
- 78 名前:デフォルトの名無しさん 投稿日:03/01/18 23:20
- >>75
XXとYYが配列で定義されてないから、X[0]〜X[7]とY[0]〜Y[7]も存在しません。
存在しない物に代入しようとすれば、結果は神のみぞ知る。
- 79 名前:74 投稿日:03/01/18 23:21
- >>65
じゃぁ >>66 は何かね?
double b[8];
(中略)
b[8] = 1.0;
b[7] までしか使えないんだってば
0〜7まで指折りながら数えてみろ
- 80 名前:デフォルトの名無しさん 投稿日:03/01/18 23:22
-
∧ ∧___ ダッコ♪
/(*゚ー゚) /\
/| ̄∪∪ ̄|\/
| |/
 ̄ ̄ ̄ ̄
- 81 名前:デフォルトの名無しさん 投稿日:03/01/18 23:23
- 正確にはX[0]とY[0]は存在するか。
X[1]〜X[7]とY[1]〜Y[7]はどうなってるか知らないよ。
- 82 名前:デフォルトの名無しさん 投稿日:03/01/18 23:23
- >>80
おとなしくしてろ
- 83 名前:デフォルトの名無しさん 投稿日:03/01/18 23:29
- ??:「大人しくしていろ>>83」
83:「はい」
- 84 名前:デフォルトの名無しさん 投稿日:03/01/18 23:32
- >>73
要するに、ポインタってのが何なのかが分かってないってこと。
まぁ、初心者が大抵陥る状況なわけだが。
- 85 名前:デフォルトの名無しさん 投稿日:03/01/18 23:37
- >>65
ポインタと配列は違います
そこを中心に、もう一度、出直しましょう
- 86 名前:デフォルトの名無しさん 投稿日:03/01/19 00:20
- >>76
printf("%lf", f);
printf("%f", f);
どちらも同じです。
printfのプロトタイプは
int printf(const char *, ...);
なので、...の部分は型情報がありません。
したがって、Cの規約により、...の部分に置かれた
float型の値は格上げされ、doubleで渡されます。
- 87 名前:デフォルトの名無しさん 投稿日:03/01/19 00:35
- ポインタが分からん奴はアホ。
- 88 名前:デフォルトの名無しさん 投稿日:03/01/19 00:39
- ポインタを勉強する前にまず
パソコンを分解してマザーボードの仕組みを勉強しよう。
- 89 名前:デフォルトの名無しさん 投稿日:03/01/19 00:45
- ディスプレイとキーボードとマウスとスピーカーとマイクと
ADSLモデムとプリンタと本体に分解しました。
- 90 名前:デフォルトの名無しさん 投稿日:03/01/19 00:58
- >>89
ディスプレイとキーボードとマウスとスピーカーとマイクと
ADSLモデムとプリンタ
はパソコンではありません。
- 91 名前:デフォルトの名無しさん 投稿日:03/01/19 02:43
- 液晶とボディとスマートポインターと赤外線ポートとカメラと
モデムとUSBとその他中身に分解しました。
- 92 名前:デフォルトの名無しさん 投稿日:03/01/19 02:54
- >>91
それでは仕組みの勉強を始めてください。
- 93 名前:デフォルトの名無しさん 投稿日:03/01/19 03:16
- QAスレなのにツレねーな
ここは単発質問スレ防止・厨房吸収スレじゃねーのか?
答えたくないなら無視するだけで煽るなや
- 94 名前:デフォルトの名無しさん 投稿日:03/01/19 03:53
- >>93
どこにQがある
- 95 名前:デフォルトの名無しさん 投稿日:03/01/19 04:00
- >>94
>>2と>>46と>>93と>>94
- 96 名前: 投稿日:03/01/19 05:03
- >>1
またテンプレ貼らなかったのか・・・
いつになったら冬厨は消えてくれるんだ。
- 97 名前:デフォルトの名無しさん 投稿日:03/01/19 06:42
- >>86
long double はどうなりますか?
- 98 名前:デフォルトの名無しさん 投稿日:03/01/19 06:43
- >>96
>>1-6
- 99 名前:デフォルトの名無しさん 投稿日:03/01/19 10:28
- >>97
gccなら"%Lf"
- 100 名前:デフォルトの名無しさん 投稿日:03/01/19 11:08
- >>99
そういう意味じゃなくてlong doubleを...に渡すとどう型変換されるかということについて聞いているんだと思うけど。
- 101 名前:デフォルトの名無しさん 投稿日:03/01/19 12:12
- >>100
VC++ のヘルプだと...
・実引数が float 型であると、関数呼び出しの前に double 型に拡張されます。
・符号付きまたは符号なしの char型、short 型、列挙型、ビットフィールドは、整数の上位変換によって符号付きまたは符号なしの int 型に変換されます。
しかないから、多分そのまま渡されるんだろ。
- 102 名前:デフォルトの名無しさん 投稿日:03/01/19 12:12
- >>100
long doubleがdoubleに格下げになる事はないだろう。
- 103 名前:デフォルトの名無しさん 投稿日:03/01/19 12:56
- あつしキラ〜〜イ。
- 104 名前:デフォルトの名無しさん 投稿日:03/01/19 18:27
- long double ld = 12345;
printf("size: %u\n", sizeof(ld));
printf("bit image: %08x %08x %08x %08x\n", ld, -1, -1, -1, -1, -1, -1);
printf("value: %Lf\n", ld);
↓
size: 12
bit image: 00000000 c0e40000 0040400c ffffffff
value: -40960.000000
(MinGW gcc 2.95.2)
という事で、101-102 は正しいっぽい。
99 は嘘っぽい。
- 105 名前:デフォルトの名無しさん 投稿日:03/01/19 18:33
- >>104
いや、MinGWでlong doubleが正しく表示されないのは、msvcrt.dllを
使っているからだそうだよ。
- 106 名前:デフォルトの名無しさん 投稿日:03/01/20 05:42
- >>105
何でそんな事をしてるんだろう?
- 107 名前:デフォルトの名無しさん 投稿日:03/01/20 10:46
- >>106
余計なDLLを使わないようにするため。
- 108 名前:デフォルトの名無しさん 投稿日:03/01/20 12:49
- 5つのデータを入力し、
昇順に並び替えて出力するプログラムを作成しなさい。
- 109 名前:デフォルトの名無しさん 投稿日:03/01/20 13:38
- >>108
alert(prompt("", "3 2 4 1 5").split(/\s+/g).sort(function(a, b) { return a - b; }).join(" "));
- 110 名前:デフォルトの名無しさん 投稿日:03/01/20 20:51
- Ruby 万歳!
- 111 名前:デフォルトの名無しさん 投稿日:03/01/20 21:44
- 突然で申し訳ないですが、
回文判定部分を,文字列を受け取るとその文字列が回文なら 1 を、
そうでないなら 0 を返す関数を設計し,置き換える。
という風にしたいんですが、以下のやつからどうしたらいいんでしょうか?
詳しい方どうか教えてくださいませ。
#include <stdio.h>
#define MAX 100
main()
{
char string[MAX];
int n, i;
/* input */
printf("string = ");
scanf("%s", string);
/* strlen */
for (n = 0; string[n] != 0; n++) {
/* 何もしない */
}
/* reverse */
for (i = n - 1; i >= 0; i--)
putchar(string[i]);
putchar('\n');
}
- 112 名前:デフォルトの名無しさん 投稿日:03/01/20 21:57
- 教えてください。
C言語でBMI計算式を書きたいのです。計算式は体重÷(身長×身長)です。
ほとんど初心者なので、一番簡単な計算式でお願いします。
- 113 名前:デフォルトの名無しさん 投稿日:03/01/20 22:05
- >>111
「回文判定部分を (略) 置き換える。」って書いてあるけど、
そのプログラム中に回文判定部分ないぞ。
- 114 名前:デフォルトの名無しさん 投稿日:03/01/20 22:49
- >>112
課題を丸投げするな。
自分の考えやどこまで出来ているのかを書いた方がいいよ。
- 115 名前:デフォルトの名無しさん 投稿日:03/01/20 22:51
- BMI=taijuu/(shincho*shincho);
- 116 名前:デフォルトの名無しさん 投稿日:03/01/20 23:04
- struct hoge {
int foo : 1;
int bar : 2;
}
こんな構造体を発見したのですが、 : ←これって何してるんですか?
- 117 名前:デフォルトの名無しさん 投稿日:03/01/20 23:10
- >>116
ビットフィールドです。
- 118 名前:デフォルトの名無しさん 投稿日:03/01/20 23:14
- >>112,115
OK
- 119 名前:デフォルトの名無しさん 投稿日:03/01/21 08:31
- for文がよく使われる状況のように、
変数をインクリメントしながらループさせたいのですが
for文だと必ず1回は実行されますよね?
1回も実行されない状況があるような場合には、
while文中でi++とかやるしかないのでしょうか?
- 120 名前:デフォルトの名無しさん 投稿日:03/01/21 08:33
- > for文だと必ず1回は実行されますよね?
いいえ。
int i;
for(i = 0; i >= 0; i++)
printf("実行されませんよ %d\n", i);
- 121 名前:デフォルトの名無しさん 投稿日:03/01/21 09:19
- >>119
必ず一回は実行されるのはdo〜while
- 122 名前:デフォルトの名無しさん 投稿日:03/01/21 09:21
- >>120
それは実行されますがなにか?
for(i=0;i<0;i++)でしょ。
- 123 名前:119 投稿日:03/01/21 09:58
- うぁ〜
恥ずかスィ
今までずっと勘違いしてきてました。
for(a;b;c)
でaは前、bとcは後に実行されるのかと…
- 124 名前:デフォルトの名無しさん 投稿日:03/01/21 10:26
- for(int i = 0; i >= 0; )
〜;
- 125 名前:デフォルトの名無しさん 投稿日:03/01/21 11:25
- for( ; 1 == 0 ; );
- 126 名前:120 投稿日:03/01/21 11:48
- >>122
すまなかった
- 127 名前:デフォルトの名無しさん 投稿日:03/01/21 12:12
- > aは前、bとcは後に実行されるのかと…
違う・・・。
for(i = 1; i <= 10; i++)
printf(%d\n", i);
これを goto に直すと、
i = 1; /**** a ****/
loop:
if(i <= 10) /**** b ****/
goto next;
printf(%d\n", i);
i++; /**** c ****/
goto loop:
next:
...
こんな感じ。
a と b が前、c が後。
- 128 名前:デフォルトの名無しさん 投稿日:03/01/21 13:44
- 2のべき乗数を昇順に表示するプログラムをつくれ。
どこがまちがってるかわかる?
#include <stdio.h>
int main(void)
{
int i, no;
printf("整数を入力してください。:");
scanf("%d", &no);
i = 0;
while (i < no)
{
i++;
printf("%d ", 2^i );
} putchar('\n');
return(0);
}
- 129 名前:デフォルトの名無しさん 投稿日:03/01/21 13:51
- >>128
それは、べき乗を求める、演算子では、ない
- 130 名前:デフォルトの名無しさん 投稿日:03/01/21 14:10
- もうすこしわかりやすくおねがいします
- 131 名前:デフォルトの名無しさん 投稿日:03/01/21 14:17
- ^は、べき乗を求める、演算子では、ない
- 132 名前:デフォルトの名無しさん 投稿日:03/01/21 14:19
- というか、C にべき乗を求める演算子はない。
べき乗を求める関数はあるけど。
- 133 名前:デフォルトの名無しさん 投稿日:03/01/21 14:23
- わかりました
もう少し考えてみます
- 134 名前:126 投稿日:03/01/21 14:36
- #include <stdio.h>
int main(void)
{
int i, no, sum;
printf("整数を入力してください。:");
scanf("%d", &no);
i = 1;
while (i < no)
{
i = i * 2;
printf("%d ", sum );
} putchar('\n');
return(0);
}
これだとなにがだめなの?
だめなりゆうがわかんないです
- 135 名前:デフォルトの名無しさん 投稿日:03/01/21 14:42
- >>134
sumの、値は、何よ?
- 136 名前:デフォルトの名無しさん 投稿日:03/01/21 14:42
- >>134
> これだとなにがだめなの?
コンパイラの警告レベルを最大にしていないから
sumはいつ初期化されている?
- 137 名前:デフォルトの名無しさん 投稿日:03/01/21 15:14
- つうか、これも問題あると思うが。
i = i * 2;
- 138 名前:U ◆CZtFsGiu0c 投稿日:03/01/21 15:42
- 理由も何もなにがだめなのかも書いてないじゃん。
まあおそらくsumになにも代入してないのが問題だと思うけど:-)
- 139 名前:112 投稿日:03/01/21 15:49
- >>114
申し訳ありませんでした。
一応、いろいろなものから、見よう見真似で作ったのですが
ほんとに、切ってくっつけたりしただけなので自身がなかったもので。
#include<stdio.h>
int main() {
double weight = ;
double height = ;
double bmi;
bmi = weight / ( height * height );
return(0); }
間違っている場所を教えていただけますでしょうか。
ほんとに全くの初心者で、ごめんなさい(><
- 140 名前:デフォルトの名無しさん 投稿日:03/01/21 15:52
- >>139
何その = ; って。
- 141 名前:デフォルトの名無しさん 投稿日:03/01/21 16:01
- 釣りでしょ.
- 142 名前:デフォルトの名無しさん 投稿日:03/01/21 16:17
- #include<stdio.h>
int main() {
bmi = weight / ( height * height );
return(0); }
>112
>ほとんど初心者なので、一番簡単な計算式でお願いします。
簡単でいいならこれだけでいいんじゃん?
- 143 名前:デフォルトの名無しさん 投稿日:03/01/21 16:18
- >>139
1.weightってなに?
2.stdio.hは使いたいの?
3.最後の} の前に改行しようや
4.int main(){return 0;} じゃだめなんか?
5.0で除算はできんだろ
結論。間違っていない場所=五行目。 かな
- 144 名前:デフォルトの名無しさん 投稿日:03/01/21 20:36
- 1.体重で良いんじゃない?
- 145 名前:128 投稿日:03/01/22 06:46
- 昨日の問題なんですが
整数を入力してください:19
2 4 8 16
こんな感じで実行結果がでるようにしたいんですが
実行結果が
2 4 8 16 32
となってしまいます。
なぜですか?
#include <stdio.h>
int main(void)
{
int i, no, sum;
printf("整数を入力してください。:");
scanf("%d", &no);
i = 1;
while (i < no)
{
i = i * 2;
printf("%d ", i );
} putchar('\n');
return(0);
}
- 146 名前:デフォルトの名無しさん 投稿日:03/01/22 06:54
- >>145
判定後にiを二倍しているから
- 147 名前:128 投稿日:03/01/22 07:01
- そうすると、どうすればいいのでしょうか?
- 148 名前:デフォルトの名無しさん 投稿日:03/01/22 07:07
- >>147
そういうことは自分で考えるようにしないと力がつかないぞ
- 149 名前:128 投稿日:03/01/22 07:15
- 昨日から考えてるんだけどね・・・
わかんなくて
ヒントをください
- 150 名前:デフォルトの名無しさん 投稿日:03/01/22 07:18
- >>149
「判定後にiを二倍している」のが問題なんだから「判定前にiを二倍する」
- 151 名前:デフォルトの名無しさん 投稿日:03/01/22 07:19
- >>149
一行ずつコード読んでみ
プログラムは書いてある通りにしか実行されないんだから
読めばどう実行されるのか手に取るようにわかる
- 152 名前:128 投稿日:03/01/22 07:20
- できたよ
ありがとうございました
- 153 名前:デフォルトの名無しさん 投稿日:03/01/22 07:24
- for使った方がいいと思うんだけどな
for(i=1;i<=no;i*=2) /* 2からにしたかったらi=2に */
printf("%d ",i);
- 154 名前:デフォルトの名無しさん 投稿日:03/01/22 07:40
- >>153
恐らく本当はループの後にもiを利用するのだろう
- 155 名前:126 投稿日:03/01/22 07:55
- i*=2 これの意味はなんですか?
- 156 名前:デフォルトの名無しさん 投稿日:03/01/22 07:59
- >>155
i=i*2
- 157 名前:デフォルトの名無しさん 投稿日:03/01/22 07:59
- i=i*2
- 158 名前:126 投稿日:03/01/22 08:11
- サンクス
またくるね
- 159 名前:デフォルトの名無しさん 投稿日:03/01/22 08:14
- 126(^_^;)
- 160 名前:デフォルトの名無しさん 投稿日:03/01/22 08:23
- お前らいい奴だな
- 161 名前:デフォルトの名無しさん 投稿日:03/01/22 08:34
- \ はなんと読むのですか??
* はなんと読むのですか??
<>はそれぞれ何と読むのですか??
$ は「ドル」でいいのですか??
% は「パーセント」でいいのですか??
- 162 名前:デフォルトの名無しさん 投稿日:03/01/22 08:54
- >>161
ちったあ検索しろよ。
http://www.cqpub.co.jp/od/editors/saka/kigou.htm
- 163 名前:デフォルトの名無しさん 投稿日:03/01/22 09:46
- \ イェン
- 164 名前:デフォルトの名無しさん 投稿日:03/01/22 10:42
- \ BackSlash
- 165 名前:デフォルトの名無しさん 投稿日:03/01/22 11:00
- その文字書いといて、バックスラッシュですか?
*アスタリスク
<>小なり大なり
$ダラー
%百分率
- 166 名前:デフォルトの名無しさん 投稿日:03/01/22 11:21
- > その文字書いといて、バックスラッシュですか?
( ´Д`)オイオイ・・・
- 167 名前:デフォルトの名無しさん 投稿日:03/01/22 11:24
- まじっすかー
- 168 名前:デフォルトの名無しさん 投稿日:03/01/22 11:29
- ( ´Д`)まじっすョー
- 169 名前:デフォルトの名無しさん 投稿日:03/01/22 11:30
- その文字じゃないバックスラッシュキボン
全角禁止で
- 170 名前:デフォルトの名無しさん 投稿日:03/01/22 11:36
- 構造体の仕様変更が出て、幾つかの変数を追加、追加した変数の処理を組み込んでコンパイル。
すると突然異常終了が発生。
変更箇所を見比べても、異常終了する原因がつかめず、仕方が無く
変更箇所を1つずつ前のソースに組み込んでは実行して、組み込んでは…でチェック。
すると、構造体に新たにある名称の変数を追加してコンパイルすると落ちることが判明。
その構造体の中で重複しているわけでもないのに・・・
int length;
これを組み込むと落ちる。
int len;
に変えると落ちなくなった。
こういう現象ってどういう理由が考えられますか?? マジでこれ以外は影響なく、lengthでもLengthでもLenGthでも落ちます。
わけわかんねえよ〜
- 171 名前:デフォルトの名無しさん 投稿日:03/01/22 11:38
- //////////\\\\\\\\\
- 172 名前:デフォルトの名無しさん 投稿日:03/01/22 11:44
- >>170
length にしたときと len にしたときの出力ファイルの差を取って何がどうなってるのか調べてみてはどうだろうか?
- 173 名前:デフォルトの名無しさん 投稿日:03/01/22 12:44
- #define len
とかしとらんよな?
- 174 名前:デフォルトの名無しさん 投稿日:03/01/22 12:51
- しとらんよな?
- 175 名前:デフォルトの名無しさん 投稿日:03/01/22 12:56
- >>172
あーそっか。やってみますわ。
>>173
やってません。つか、ローカル変数や他の構造体でもlengthは使いまくってる模様
- 176 名前:デフォルトの名無しさん 投稿日:03/01/22 13:03
- #define if while
- 177 名前:デフォルトの名無しさん 投稿日:03/01/22 13:05
- どれくらい意味があるの?それ>>176
- 178 名前:デフォルトの名無しさん 投稿日:03/01/22 13:05
- >>177
むかつくやつのソースにこっそりと書き加える
#define int charの方がいいかな
- 179 名前:デフォルトの名無しさん 投稿日:03/01/22 13:13
- >>178 それのせいでデスマーチ開始。
- 180 名前:デフォルトの名無しさん 投稿日:03/01/22 13:42
- >>170
「落ちる」ってどういうタイミング?
1. 起動直後
2. 特定のstep
3. 不定
「こーすれば逃げられる」って方法で安易に逃げると、
他に潜在バグがありそうな気もするし。
原因わかったら、公開して欲しいっす。
- 181 名前:170 投稿日:03/01/22 14:54
- >>180
2: ですね。何度目かのmallocで落ちます。
確かに、原因不明のまま「回避できた!」というのは
仕事である以上できる限りやりたくないのですが、
とりあえず結果を急いでいるお客さんのために
結果が出せるかどうかを優先してます。
報告した後に調査しよ・・・・くそー
- 182 名前:デフォルトの名無しさん 投稿日:03/01/22 15:05
- _length で落ちる?
- 183 名前:180 投稿日:03/01/22 15:20
- mallocでつか・・・。
メモリ管理が甘い(と言われている)Windows系だとしても
変数名を変えると落ちなくなるっていうのが解せませんね。
int length ; の位置に int dummy ; を書いて、その下に
lengthを置いても同じ?
なんの解決にもならないレスでスマソ。
頑張って下さい。
- 184 名前:デフォルトの名無しさん 投稿日:03/01/22 15:32
- 確保してないメモリにアクセスしてる。どこかで。
- 185 名前:デフォルトの名無しさん 投稿日:03/01/22 15:34
- んだな、メンバ名云々とは無関係なバグが顕在化した悪寒
- 186 名前:デフォルトの名無しさん 投稿日:03/01/22 18:42
- ポインターのポインターを確保してないので
セグメントエラーがでてるとにらんでみた。
- 187 名前:デフォルトの名無しさん 投稿日:03/01/23 00:22
- ∧_∧
( ´∀`)< ぬるぽ
- 188 名前:デフォルトの名無しさん 投稿日:03/01/23 00:39
- >>170
実は構造体の順番をコンパイラがスペル順で入れ替えてて
どっかのコンパイル済みライブラリが再コンパイルされずに
そのままアクセスするためにメモリを破壊してるとか…
- 189 名前:デフォルトの名無しさん 投稿日:03/01/23 00:50
- >>188
> 実は構造体の順番をコンパイラがスペル順で入れ替えてて
そんなコンパイラは、今すぐ捨てろ。ANSI 非互換だよ。
- 190 名前:デフォルトの名無しさん 投稿日:03/01/23 01:23
- >>187 ガッ
- 191 名前:デフォルトの名無しさん 投稿日:03/01/23 02:09
- >>189
ANSI互換だったら考えるまでもなく
変数名変えただけで結果が変わるはずが無い罠
- 192 名前:デフォルトの名無しさん 投稿日:03/01/23 03:26
- >>191
プログラムにバグが潜んでたら、その限りではないよ。
以前に、プログラム名(の長さ)によって実行速度が大幅に変わる
とかいうのがあったけど、それと似たような原因じゃないかな。
- 193 名前:デフォルトの名無しさん 投稿日:03/01/23 03:33
- そういやコメント行を消したら落ちる、
コメント行を残せば動く、
というようなこともありました。
上述されてるように不正なメモリアクセスが原因でしたけども。
- 194 名前:デフォルトの名無しさん 投稿日:03/01/23 03:34
- ( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>187
- 195 名前:デフォルトの名無しさん 投稿日:03/01/23 03:49
- おまいら空域読めてるか?
どうやら俺には無理らしいぞ
- 196 名前:デフォルトの名無しさん 投稿日:03/01/23 03:55
- >>195
タイーホ
- 197 名前:デフォルトの名無しさん 投稿日:03/01/23 04:54
- >>192
プログラム名の長さによって実行速度が変わるというのは、
ごくごく簡単にいうと、以下のようなことであるらしい。
・プログラムが起動されたときにプログラム名をスタックに積む
・これをCではargv[0]で参照できる
・プログラム名の長さによって初期の(main突入直後の)スタックの伸張度合いが変わる
・ところで、x86系CPUでは、doubleにアクセスする場合、
それが8バイト境界以外の領域(8の倍数番地以外から始まる領域)に
置かれているとペナルティが発生する(実行速度が低下する)
・プログラム名の長さによってdoubleがスタックに積まれる位置が変動する
それは8バイト境界におさまらない場合ももちろんある
・したがってプログラム名の長さによって実行速度が低下する場合がある
えーと短く説明するためにかなりはしょってます。興味のある人は
http://quanta.synchem.kyoto-u.ac.jp/~maho/FreeBSD/FreeBSD_compiler.html
を参照のこと。
- 198 名前:デフォルトの名無しさん 投稿日:03/01/23 05:00
- >>192
変数名を実行ファイルにまで持ち越すようなコンパイラ/リンカが存在するのか?
でなければ、そんな事が原因でプログラムが誤動作する事はあり得ないが・・・。
- 199 名前:197 投稿日:03/01/23 05:01
- んで、これが今回の話にどう影響してくるかというと…
あんまり関係ないような気がする。
普通構造体のメンバ名なんてのはコンパイルが通ると
単なるオフセットの表現にしかならないはずで、
名前を変えた程度ではオフセットは変わらない。
(メンバの型が変われば当然オフセットは変わる、こともある)
デバッグオプションをつけたとしても、
構造体のメンバ名は実行ファイルなどに影響を及ぼさないと思うし。
本当に構造体のメンバ名だけを変えて実行に影響があるのなら
とても興味深い話なんだが、正直原因が思いつかないな。
- 200 名前:197 投稿日:03/01/23 05:05
- >>198
デバッグオプションつけた場合はありうる。
もっともここでの話は変数名ではなく構造体のメンバ名だったはずなので、
関係ないとは思うんだが…
- 201 名前:デフォルトの名無しさん 投稿日:03/01/23 05:17
- 結論
コンパイラのバグで桶?
- 202 名前:デフォルトの名無しさん 投稿日:03/01/23 05:29
- No.
- 203 名前:デフォルトの名無しさん 投稿日:03/01/23 05:29
- >>201
まてまて。それは最後の最後に疑うべきところだ(w
170の報告をまとうではないか。おれは楽しみにしてるぞ。
- 204 名前:201 投稿日:03/01/23 05:38
- >>202&203
では保留と言う事で170の凱旋を待つとしよう
- 205 名前:デフォルトの名無しさん 投稿日:03/01/23 06:56
- せめてコンパイラ名を言い残してから出撃して欲しかったな
- 206 名前:170 投稿日:03/01/23 11:12
- >>197
FreeBSDではないけど、Linuxでの開発なんで関係あるかも・・・?
int len;
unsigned char type;
新たにいっこ追加したら、また落ちるようになった。
今度は、
unsigned len;
unsigned char type;
にしたら動く・・・なんだ?バイト境界関係の問題でもあるのか?
未だ原因不明・・・・(;´д⊂
- 207 名前:170 投稿日:03/01/23 11:13
- 失礼、
unsigned char len;
unsigned char type;
で動いた。
- 208 名前:デフォルトの名無しさん 投稿日:03/01/23 11:31
- >>206
もっと他のとこも見てみろって。
絶対どこかで変なメモリアクセスしてるから。
- 209 名前:デフォルトの名無しさん 投稿日:03/01/23 11:33
- 言っても無駄だな、俺のコードに問題ないのにエラーが出る、と思い込んでるパターン
- 210 名前:170 投稿日:03/01/23 12:53
- いや、俺のコードじゃないから面倒な話なんだが。
担当者が年始早々失踪して、火の車なプロジェクトの手伝いですわ。
- 211 名前:デフォルトの名無しさん 投稿日:03/01/23 12:54
- >>206
そのメンバは末尾に追加したのか? それとも途中か?
あと、全プログラムをリコンパイルしてるか?
つーか、デバッガ使って追いかけたりしないのか?
- 212 名前:170 投稿日:03/01/23 13:00
- >>211
デバッガの使用は禁止されています(;´д⊂
- 213 名前:デフォルトの名無しさん 投稿日:03/01/23 13:05
- >>212
そんなの無視しろ。
- 214 名前:デフォルトの名無しさん 投稿日:03/01/23 13:13
- >>209
purify系のメモリリーク検出ツールとデバッガがないと
絶対そのバグ潰すのは無理だと断言しよう
>>212
んなアホな...
- 215 名前:170 投稿日:03/01/23 15:39
- >>212は偽者
だが間違ってはいない。禁止はされてないけど環境がない。
>>211
末尾に追加しました。
つーか、メモリ関係チェックしてみると、あちこちで破壊っつーかなんつーか・・
誰だよこれ組んだヤシは!
- 216 名前:デフォルトの名無しさん 投稿日:03/01/23 15:53
- #define PI 3.14
const float PI = 3.14
このふたつって、どこが違うんでしょうか
- 217 名前:デフォルトの名無しさん 投稿日:03/01/23 15:56
- >>216
恐らくは const float PI の方は記憶容量を使うが、プログラム中
に繰り返し出てきた場合はかえってメモリ領域を節約できる可能性あり。
- 218 名前:216 投稿日:03/01/23 15:58
- まだよく理解できませんが、ありがとうございます
- 219 名前:デフォルトの名無しさん 投稿日:03/01/23 16:08
- >>216
前者は単なるテキストマクロだが、後者は変数として扱われるので型チェックが入る。
定数を定義する時、配列の要素数などに使うのでなければ後者にすべし。
>>217
(゚Д゚)ハァ?
一体どういうメモリ領域の計算をしてるんだ?
- 220 名前:デフォルトの名無しさん 投稿日:03/01/23 16:15
- >>219
言い方が悪かったかもしれん。
const float PI は変数としての記憶領域を必ず使うが、#defineの場合
はマクロなので、変数としての記憶領域は使わない。しかし出てくる
度にコードが少しずつ長くなっていく可能性があると言いたかった。
floatの例だとわかりにくいが、char *s = "hogehogehoge"; などの例を
考えてみればわかりやすい。これと #define s "hogehogehoge"を比較
してみれば、*sの方は "hogehogehoge" がメモリのどこかに確保される
が、一度しか確保しない。それに比べて#define sの方は、一度も使わな
ければ確保されないが、もし使うと使う度にメモリを消費していく。
コンパイラによっては同一の文字列リテラルはマージする場合もあるから
一概には言えないが。
- 221 名前:219 投稿日:03/01/23 16:16
- 書き忘れ。
const は書き換え不能だが変数なので、普通の変数と同じようにスコープを限定
できる。
- 222 名前:デフォルトの名無しさん 投稿日:03/01/23 16:16
- >>219
constの方は即値にならないと言いたいんじゃない?
- 223 名前:219 投稿日:03/01/23 16:18
- >>220
納得しますた。
- 224 名前:219 投稿日:03/01/23 16:18
- >>222
最適化によって即値になることもあるよ。
- 225 名前:デフォルトの名無しさん 投稿日:03/01/23 16:19
- コマンドライソで渡す引数の3番目の文字が
(つまり$hoge omaemona で言うところの"a")
何々だったらあーせよってしたいんですけど
argv[1][2]みたいな指定方法は可能でしか??
- 226 名前:デフォルトの名無しさん 投稿日:03/01/23 16:21
- >>224
それは分かっている。
アドレスを得るようなことをすればメモリーにおかれるだろうけど。
>>225
他にどうしろと?
*(argv+1)か?
- 227 名前:226 投稿日:03/01/23 16:22
- 三番目の引数じゃなくて三番目の文字か(^_^;)
とにかくargv[1][2]でOK
- 228 名前:デフォルトの名無しさん 投稿日:03/01/23 16:27
- >>224
こういう場合ってやっぱり最適化はかからないのかな?
const float PI = 3.14;
*(float*)&PI = 3.;
エラー無しで通るね。
- 229 名前:デフォルトの名無しさん 投稿日:03/01/23 16:32
- >>225
それくらい訊く前に試せよ
- 230 名前:デフォルトの名無しさん 投稿日:03/01/23 16:38
- 試せるじょうきょうにないのです・・・
すみません
- 231 名前:デフォルトの名無しさん 投稿日:03/01/23 16:40
- >>230
不幸だな。コンピュータやコンパイラの動作を人間が脳内シミュレート
しなければならないのか。俺だったら発狂するかも。
- 232 名前:デフォルトの名無しさん 投稿日:03/01/23 16:50
- 次スレ
http://pc3.2ch.net/test/read.cgi/tech/1042646178/l50
- 233 名前:デフォルトの名無しさん 投稿日:03/01/23 16:51
- >>232
氏ね
- 234 名前:デフォルトの名無しさん 投稿日:03/01/23 18:44
- >>232
次スレでなく 兄弟 でしょ?
- 235 名前:山崎渉 投稿日:03/01/23 19:57
- (^^)
- 236 名前:デフォルトの名無しさん 投稿日:03/01/23 20:00
- X on Windows+ オフィシャルガイドブックについているCDから
X on Windows LEをインストールして、C言語を使っていましたが、
values.hというヘッダーファイルが無いようです。
これって、LE版だからですか?
あと、どうすればよいですか。
- 237 名前:デフォルトの名無しさん 投稿日:03/01/23 21:23
- up
- 238 名前:デフォルトの名無しさん 投稿日:03/01/23 21:37
- 質問です 参考書から激しく抜粋なのですが
typedef struct node_tag{
struct node_tag *next; /*次ノードへのリンク*/
struct node_tag *prev; /*前ノードへのリンク*/
void *data;
}node_t;
っていうリスト構造体があったとして
int list_is_empty(node_t *head)
{
return head==head->next;
}
って関数があるとします
参考書によるとリストが空かどうか判断する関数らしいのですが
なんでhead->nextなheadを返すことによって
真か偽かを判断できるのでしょうか?
厨房でごめんなさい
- 239 名前:デフォルトの名無しさん 投稿日:03/01/23 21:42
- >>238
両方ともNULLを指しているか、nextが自分自身を指していれば==に
なるね。どちらかで空を表現してるんだろう。
- 240 名前:デフォルトの名無しさん 投稿日:03/01/23 21:46
- >>239
headがNULLの時はまずいと思ふ
- 241 名前:デフォルトの名無しさん 投稿日:03/01/23 21:55
- >>240
そう言われてみればそうだな。
NULL->nextなんてのはあり得ないから。
- 242 名前:デフォルトの名無しさん 投稿日:03/01/23 22:03
- 間にデータが一つも無いって表現の方があっているでしょ?
head->next==tailとか
- 243 名前:デフォルトの名無しさん 投稿日:03/01/23 22:08
- リストの末尾(リング構造だから先頭の一つ手前でもある)にでも、空のノードを
一つ入れるようにしてるんじゃないの。リストが空の時はノードはその一つだけ
しかないから、当然 next も prev も自分自身を指すようになる。
だから head == head->next で判断できるのではないかと。
- 244 名前:デフォルトの名無しさん 投稿日:03/01/23 22:15
- headを初期化(初期設定)しているところを探してみそ>238
- 245 名前:238 投稿日:03/01/23 22:17
- あっ なんとなくわかったぽです
headが空の場合はnextもprevもあるはずないんだから
head自身がnextでありprevにもなるってことですか?
それで>>240さんはheadが空なんだから
nextも何も表現できないはずってことを言ってわけですよね?
- 246 名前:デフォルトの名無しさん 投稿日:03/01/23 22:24
- ぬるぽ->next
- 247 名前:デフォルトの名無しさん 投稿日:03/01/23 22:40
- K&LのC言語って、どんな言語で作られたんですか?
- 248 名前:デフォルトの名無しさん 投稿日:03/01/23 23:16
- >>247
ラテン語。
- 249 名前:デフォルトの名無しさん 投稿日:03/01/23 23:16
- >>247
韓国語。
- 250 名前:デフォルトの名無しさん 投稿日:03/01/23 23:17
- ( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>246
- 251 名前:デフォルトの名無しさん 投稿日:03/01/23 23:17
- >>247
K&Lとはなんぞや。
K&Rのことであれば、開発者に聞け。
バージョンによっても違うだろうし。
初期の開発者はデニス・リッチーさんだ。
- 252 名前:デフォルトの名無しさん 投稿日:03/01/23 23:18
- L&R
- 253 名前:デフォルトの名無しさん 投稿日:03/01/23 23:19
- K&L = 韓国語 + ラテン語
という事か。
- 254 名前:デフォルトの名無しさん 投稿日:03/01/23 23:26
- >>253
Korean & Latinか。
- 255 名前:デフォルトの名無しさん 投稿日:03/01/23 23:44
- K&L とは 関西&言語 の略で日本では関西弁と呼ばれています
- 256 名前:デフォルトの名無しさん 投稿日:03/01/23 23:50
- キリ番ゲッツ
- 257 名前:デフォルトの名無しさん 投稿日:03/01/24 01:11
- >>219数字定数って型チェック入らないの?
- 258 名前:デフォルトの名無しさん 投稿日:03/01/24 06:33
- 俺はこれから川口浩探検隊に行って来る。
- 259 名前:デフォルトの名無しさん 投稿日:03/01/24 10:56
- アールとエルの区別もできないくせに!
- 260 名前:デフォルトの名無しさん 投稿日:03/01/24 15:06
- このスレにおける電波の送受信を許可します。
- 261 名前:デフォルトの名無しさん 投稿日:03/01/25 05:51
- if ((denpa = socket(AF_DENPA, SOCK_STREAM, 0)) < 0) {
perror("socket");
exit(1);
}
- 262 名前:デフォルトの名無しさん 投稿日:03/01/25 14:12
- >>261
AF_DEMPAじゃストリーム通信できないYO!
SOCK_DGRAMで常にSO_BROADCASTが立ってるYO!
- 263 名前:デフォルトの名無しさん 投稿日:03/01/25 20:38
- >>216
そういえばgccってconstで定義してる変数の値を変えてもウォーニング出るだけなんですけど、
これはCの仕様なんですかね?
g++だとエラーになるんですが。
- 264 名前:デフォルトの名無しさん 投稿日:03/01/25 20:56
- >>263
gccのバージョンとコンパイルオプションでけっこう挙動が変わるぞ。
Cについては昔の資産を活用するために、寛容にしていることが多い。
- 265 名前:デフォルトの名無しさん 投稿日:03/01/25 21:19
- return 0
ってなんでゼロなの?いったいどういう意味?return 1
とかreturn 2とかじゃあかへんのですか?
- 266 名前:デフォルトの名無しさん 投稿日:03/01/25 21:24
- >>265
その関数の仕様を決めた奴に聞け。
- 267 名前:デフォルトの名無しさん 投稿日:03/01/25 21:27
- >>266
????と思ったが、別に>>265はmain関数だとは言っていないな。
>>266の言うとおりだな(笑)
- 268 名前:デフォルトの名無しさん 投稿日:03/01/25 22:02
- main関数のことなら既出過ぎる品(藁
スレにひとつはある質問だな。
- 269 名前:デフォルトの名無しさん 投稿日:03/01/25 22:18
- もちろんメインのリターン零だ
どういうこと?
- 270 名前:デフォルトの名無しさん 投稿日:03/01/25 22:30
- >>269
main() でも、一緒だ。
- 271 名前:デフォルトの名無しさん 投稿日:03/01/25 22:57
- randで65536こ乱数作りたいんだけどどうすんですか
- 272 名前:デフォルトの名無しさん 投稿日:03/01/25 23:01
- (int)(rand()*65536)
・・・かな
- 273 名前:デフォルトの名無しさん 投稿日:03/01/25 23:01
- rand() % 65536;
???????????????
- 274 名前:デフォルトの名無しさん 投稿日:03/01/25 23:03
- int i , arr[65536];
for(i = 0;i < arr;i++)
arr[i] = rand();
- 275 名前:デフォルトの名無しさん 投稿日:03/01/25 23:03
- それだと32767?までしかでないんすけどどうでしょうか
無知なおいらを助けてくだせい
- 276 名前:デフォルトの名無しさん 投稿日:03/01/25 23:04
- それって・・・・・・どれ??
- 277 名前:デフォルトの名無しさん 投稿日:03/01/25 23:05
- Cのrandは整数を返すのか・・・
- 278 名前:デフォルトの名無しさん 投稿日:03/01/25 23:05
- >>269
シェルで && とか || とかで使う
バッチなら if errorlevel とか
- 279 名前:272 投稿日:03/01/25 23:05
- コンパイラが16ビットなのかな。
受け取り元をunsignedにしてみたら?
- 280 名前:デフォルトの名無しさん 投稿日:03/01/25 23:06
- >>265
return EXIT_SUCCESS か return EXIT_FAILURE にしたら?
(#include <stdlib.h>で)
- 281 名前:271 投稿日:03/01/25 23:12
- unsignedにしてもどうも・・・
まあ頑張ります みなさんありがとうございました
- 282 名前:デフォルトの名無しさん 投稿日:03/01/25 23:15
- rand は,周期 2 の 32 乗の乗法合同法を用いて乱数を発生し,
呼び出されるたびに 0〜RAND_MAX の間の疑似乱数を返します。
Borland Turbo C
- 283 名前:デフォルトの名無しさん 投稿日:03/01/25 23:16
- >>281
256の乱数を二回取れば良いじゃん
- 284 名前:デフォルトの名無しさん 投稿日:03/01/25 23:16
- RAND_MAXが0x7fffなんでしょ。
- 285 名前:デフォルトの名無しさん 投稿日:03/01/25 23:17
- R = 256*r1 + r2;
- 286 名前:271 投稿日:03/01/25 23:26
- >285
ありがとうございます
- 287 名前:デフォルトの名無しさん 投稿日:03/01/26 00:35
- >>271の質問だと>>274の回答が適切な気がする。
for(i=0;i<sizeof(arr);i++)
だけどな。
- 288 名前:デフォルトの名無しさん 投稿日:03/01/26 02:09
- int i , arr[65536]; //unsigned?,long?
for(i=0;i<sizeof(arr);i++)
arr[i] = rand()%65536;
- 289 名前:デフォルトの名無しさん 投稿日:03/01/26 03:31
- >>288
16ビットの罠
- 290 名前:デフォルトの名無しさん 投稿日:03/01/26 13:41
- ワイルドカードってなんですか?
PC初心者板逝けとか言われるかもしれませんが
厨房でごめんなさい
- 291 名前:デフォルトの名無しさん 投稿日:03/01/26 13:42
- >>290
PC初心者板逝け
- 292 名前:デフォルトの名無しさん 投稿日:03/01/26 13:42
- *
- 293 名前:デフォルトの名無しさん 投稿日:03/01/26 14:13
- >>290
>>292
- 294 名前:デフォルトの名無しさん 投稿日:03/01/26 15:18
- ?
- 295 名前:290 投稿日:03/01/26 15:28
- >>293
ポインタのことですか?
- 296 名前:デフォルトの名無しさん 投稿日:03/01/26 15:57
- >295
http://www.geocities.co.jp/AnimalPark-Lucky/2482/shiri.jpg
- 297 名前:デフォルトの名無しさん 投稿日:03/01/26 17:24
- 配列に値をいれようとすると
access violation とかいうエラーメッセージが出てしまうのですが、
どうしてなんでしょう?
- 298 名前:デフォルトの名無しさん 投稿日:03/01/26 17:26
- >>297
int a[100];
a[150] = 38;
- 299 名前:デフォルトの名無しさん 投稿日:03/01/26 17:41
- >>298
指定領域以内のところでダメになるので、
他が原因だと思うのですがわかりません。
それに値を参照するときにエラーが出ることもありますし。
一体どういうこと?
- 300 名前:デフォルトの名無しさん 投稿日:03/01/26 17:42
- >>299
ソースを出すように。情報が少なすぎてよくわからん。
- 301 名前:デフォルトの名無しさん 投稿日:03/01/26 18:32
- >>300
unsigned char *m = new unsigned char[4500*4000];
for(j=0; j<ySize; j++){
for(i=0; i<xSize; i++){
k = j*(xSize_c)+i;
m[k] = t[j][i];
}
}
という感じですが。
何が原因でしょうか?
- 302 名前:デフォルトの名無しさん 投稿日:03/01/26 18:57
- >>301
1. new は成功しているのか?
つーか C++ かよ!! ここは C のスレだぞ。
2. xSize, ySize, t の正体は?
- 303 名前:デフォルトの名無しさん 投稿日:03/01/26 18:57
- xSize_c もナー
- 304 名前:デフォルトの名無しさん 投稿日:03/01/26 19:51
- >>301
C++のスレへ行け。
- 305 名前:デフォルト名無しさん 投稿日:03/01/26 20:35
- >>301
とりあえずキャストをしろ
- 306 名前:デフォルトの名無しさん 投稿日:03/01/26 21:11
- stdio.h
などのヘッダーファイルってどうやってみれるか教えれ
- 307 名前:デフォルトの名無しさん 投稿日:03/01/26 21:13
- >>306
適当なエディタで開くといいよ。
- 308 名前:デフォルトの名無しさん 投稿日:03/01/26 21:16
- >>307
エディタってなんすか?
初心者でスマソ
- 309 名前:デフォルトの名無しさん 投稿日:03/01/26 21:23
- メモ帳でみれ
- 310 名前:デフォルトの名無しさん 投稿日:03/01/26 21:24
- type stdio.h | more[Enter]
- 311 名前:デフォルトの名無しさん 投稿日:03/01/26 21:26
- >>310
なんでパイプするの?
- 312 名前:デフォルトの名無しさん 投稿日:03/01/26 21:29
- 1ページずつ表示するため
- 313 名前:デフォルトの名無しさん 投稿日:03/01/26 21:31
- >>312
そういう意味じゃなくてさ、more stdio.hでいいでしょ?ということ。
- 314 名前:デフォルトの名無しさん 投稿日:03/01/26 21:34
- UNIXではたしかにそうだ
- 315 名前:デフォルトの名無しさん 投稿日:03/01/26 21:36
- DOSでも同じでは?
- 316 名前:デフォルトの名無しさん 投稿日:03/01/26 21:39
- DOSは>>310かmore < stdio.h
- 317 名前:デフォルトの名無しさん 投稿日:03/01/26 21:43
- MS-DOS では確かに type stdio.h | more[Enter] か more < stdio.h しかダメだ。
ただし、Windows のコマンドプロンプト (含む 95) では more stdio.h も OK。
- 318 名前:デフォルトの名無しさん 投稿日:03/01/26 22:11
- どうでもいいけどmoreコマンドだと見にくくない?
個人的にはnotepad激しく推奨
- 319 名前:デフォルトの名無しさん 投稿日:03/01/26 22:16
- 質問者の環境がわからなかったので
まあ今頃はエディタが何かを調べてもう見終わってるとは思うけど
- 320 名前:318 投稿日:03/01/26 22:22
- ウチは普通に窓だけど
UNIXでもcdコマンドとかdirコマンドとか普通にあるの?
- 321 名前:デフォルトの名無しさん 投稿日:03/01/26 22:25
- UNIXでもcdはおなじ
dirはのかわりにlsというのがある
- 322 名前:デフォルトの名無しさん 投稿日:03/01/26 22:46
- > cdはおなじ
厳密に言うと違うわけだが
- 323 名前:デフォルトの名無しさん 投稿日:03/01/26 22:47
- BSD厨発見
- 324 名前:デフォルトの名無しさん 投稿日:03/01/26 22:50
- 何で BSD?
- 325 名前:デフォルトの名無しさん 投稿日:03/01/26 23:18
- 図星のようだな
- 326 名前:デフォルトの名無しさん 投稿日:03/01/26 23:36
- 意味わからん。
- 327 名前:デフォルトの名無しさん 投稿日:03/01/27 07:19
- struct point{
double x;
double y;
};
struct point R[100],*Q;
Q = &R[1];
int main()
{
....
}
こんな感じでグローバル変数でポインタを定義したんですけど、gccでコンパイルすると
エラーになります。それで次に
struct point R[100],*Q;
Q = &R[1];
これをmainの中に入れてやると無事コンパイルできます。
なんでですかね?
- 328 名前:デフォルトの名無しさん 投稿日:03/01/27 07:25
- struct point R[100],*Q; ←変数の宣言
Q = &R[1]; ←実行コード
実行コードは関数(この場合はmain)の中に記述する必要がある。
- 329 名前:デフォルトの名無しさん 投稿日:03/01/27 07:28
- >>328
定義ではないかと
- 330 名前:デフォルトの名無しさん 投稿日:03/01/27 07:42
- >>329
Q=&R[1];はどうみても代入処理だろ。
書くならstruct point R[100],*Q=R+1;
- 331 名前:327 投稿日:03/01/27 07:46
- >>328
>Q = &R[1];
これがまずかったのか。そういえばそんなルールあったな。
サンクス
- 332 名前:デフォルトの名無しさん 投稿日:03/01/27 07:49
- >>330
struct point R[100],*Q; ←変数の宣言 // ←これが定義
>>331
>>330のようにしても、初期化自動変数じゃないと出来ないからね
- 333 名前:デフォルトの名無しさん 投稿日:03/01/27 07:52
- 何か書き間違えた上に変な回答になってるな…
初期化自動変数×
変数を参照する初期化は自動変数○
- 334 名前:333 投稿日:03/01/27 07:58
- あれ…出来るね…
ポインタは出来るのかな…?
まぁ良いや、時間がないから調べられないけど
正しい答えは他の誰かが答えてくれるでしょう
- 335 名前:デフォルトの名無しさん 投稿日:03/01/27 08:11
- 外部への変数はどれぐらい確保できるの?
int A[1000000000]; とかアリ?
あと、関数内の変数で
void a(void)
{
int B[10000000];
//このあとB[n]すべてに値代入。
}
とかやったら外部変数の値を潰してたんだけど、そういうものなの?
- 336 名前:デフォルトの名無しさん 投稿日:03/01/27 08:30
- ファイルへのパスを生成するような処理で文字列を使う時、
char *parh = "OMAEMONA";
はポインタ以下の値になにがあるからわからないから危険ですか?
char path[32];
strcpy( path,"OMAEMONA");
と、配列をたくさん確保してからにすべきでしょうか。
- 337 名前:デフォルトの名無しさん 投稿日:03/01/27 08:39
- >>335
配列を確保できるサイズは環境依存。
int A[1000000000]; は・・・64 bit 環境ならいけるかもな。
今主流の 32 bit 環境では多分無理だ。
int B[10000000]; と宣言した場合、ANSI 準拠である限り B[0] 〜 B[9999999]
の領域は他の変数とは絶対にかぶらない。
よって外部変数が潰れる事は無いので、何か別のミスをしているだろう。
- 338 名前:デフォルトの名無しさん 投稿日:03/01/27 08:41
- >>336
「ポインタ以下の値になにがあるからわからないから危険」 の意味するところが
不明だが・・・。
とりあえず 「C FAQ」 の 「1.32: 以下の二つの初期化の違いは。」 を読んでくれ。
http://www.catnet.ne.jp/kouno/c_faq/c1.html#32
- 339 名前:デフォルトの名無しさん 投稿日:03/01/27 11:03
- 入力されたデータを整数型かどうか判断するにはどうしたらいいでようか?
以下のプログラムを作ってみたところエラーもでず妙な動作をして終わってしまいます。
int a, b;
scanf("%d",&a);
scanf("%d",&b);
printf("%d\n",a);
printf("%d\n",b);
- 340 名前:デフォルトの名無しさん 投稿日:03/01/27 11:14
- すばらしい、ハラショー
- 341 名前:デフォルトの名無しさん 投稿日:03/01/27 11:20
- もう少し状況を報告しる!
ひょっとしたら新しい発見があるかもしれない。
- 342 名前:デフォルトの名無しさん 投稿日:03/01/27 11:54
- scanf() で数字以外を入力したら無限ループにはまると思うが・・・
- 343 名前:デフォルトの名無しさん 投稿日:03/01/27 12:32
- >342
そーですか?
%sでふつーに文字列とか入れちゃってますが、、、
- 344 名前:デフォルトの名無しさん 投稿日:03/01/27 12:57
- C言語で24bitのビットマップのファイルを読み込み、そのまま保存するってどうしたらいいの?
バイナリモードで開いて、ヘッダとデータ部分を切り離してそれぞれ配列に保存して、それをfwriteで書き込み専用のファイルに書くってだけだと思うんだけど…
具体的なソースを示してくれたら嬉しいです。
- 345 名前:デフォルトの名無しさん 投稿日:03/01/27 13:00
- そのまま、だったら
何の加工もせずに読み込んで書き出したら良いだけでは?
- 346 名前:デフォルトの名無しさん 投稿日:03/01/27 13:04
- >>344
データ部分だけ欲しいのかな
でも、ヘッダがないと、タテヨコのサイズもわからなくなるし、、、
- 347 名前:デフォルトの名無しさん 投稿日:03/01/27 13:15
- >>339 scanfの戻り値(a,bに代入される値じゃないよ)は
「変換された項目の数」だから0なら数値が入らなかったということ。
123Aとか入れたら123が変換される。
- 348 名前:デフォルトの名無しさん 投稿日:03/01/27 13:20
- CUIのアプリケーションを書いているのですが、
プロセスに入力を与える際、
入力した文字がすぐにプロセスに渡るようにするにはどうしたらいいでしょうか?
つまり、
普通のreadなどを使う際には、
入力時に「hogehoge<LF>」と、最後に改行の入力を必要としますが、
改行を押さずに、hogehogeが
h o g e h o g e と、一文字ずつ即時にプロセスに渡るようにしたいのです。
ご存知の方がいらっしゃったら教えてください。
(「{Cで and/or CUIで}やるかぎり出来ない」ならスレ違いごめんなさい)
- 349 名前:348 投稿日:03/01/27 13:21
- と、書き込んで思ったのですが、これはプログラム側の問題ではなく、
むしろ入力サイド(シェル?)の問題なのでしょうか。
- 350 名前:デフォルトの名無しさん 投稿日:03/01/27 13:33
- >>348
//Cは最近さわってないんで、わすれてきてるが
getch getche getcharなどの関数で、一文字づつ処理してもNG?
- 351 名前:デフォルトの名無しさん 投稿日:03/01/27 13:33
- >>345
うーん、そうなんですが…
例えば300×300の大きさのビットマップを、その大きさのままCで読み込もうとする時、なぜか途中で強制終了してしまいます。
ヘッダ部分のデータの大きさも考慮して大きめに600×600で読み込むと、確かにビットマップは読み込まれるのですが、格納した配列のデータを違うビットマップの画像に保存した際、画像に縦線や横線などの雑音が入っているのです。
- 352 名前:デフォルトの名無しさん 投稿日:03/01/27 13:39
- 該当部のソースを晒せ、読み込んだデータを加工せずに出力してそないな事になるかいな
- 353 名前:デフォルトの名無しさん 投稿日:03/01/27 13:42
- ビットマップのソースなんですが…
このサイトのを参考にしていました。
http://asapc1.cc.it-hiroshima.ac.jp/stu/c04/c04.html
画像の縦横の大きさだけ変えてやろうとしたのですがうまくいかず…
>>346
画像のデータ部分が欲しいです。そのデータ部分を2次元配列に代入して、簡単な処理を目指しています。
そのために、一番ネックとなる画像の読み込みに挑戦していたのですが、うまくいかず状態なのです つД;)
- 354 名前:348 投稿日:03/01/27 13:43
- >>350さん
ありがとうございます。curse関連ですね。調べてみます。
取り急ぎお礼のレスだけしておきます。
- 355 名前:デフォルトの名無しさん 投稿日:03/01/27 13:48
- >>353
つーか、画像処理板でするか、こっちでするか、どっちかにしろよ、、、
マルチで書かれてもな。
- 356 名前:348 投稿日:03/01/27 13:58
- >>350さん
うーん。
DOSだと手軽にその関数が使えるようですが、UNIXだと面倒なようです。
curse端末がどうのこうの、、、(調査中)
- 357 名前:デフォルトの名無しさん 投稿日:03/01/27 14:17
- >>348
http://www.st.rim.or.jp/~phinloda/cqa/cqa9.html
ご参考までに。
- 358 名前:デフォルトの名無しさん 投稿日:03/01/27 14:19
- >>356
$stty raw
$./a.out
- 359 名前:デフォルトの名無しさん 投稿日:03/01/27 14:31
- 0x34 #hoge
0x38 #piyo
0x39 #gabi
0x32 #poyo
0x35 #boyo
上記テキストファイルを読みこみ
下記の処理を行いマスタ
while(!feof(ifp)){
s=getc(ifp);
if(s=='#'){
putc('\n',ofp);
while(!feof(ifp)){
s=getc(ifp);
if(s=='\n') break;
}
}
else {
putc(s,ofp);
}
}
putc('\n',ofp);
そうすると書きこまれたファイルは最終行が
\377となってしまいます・・・
原因がよくわからないっす。
どなたかご教授お願い致します。
- 360 名前:348 投稿日:03/01/27 14:45
- 調べたところでは、
curse・ioctl・stty
という3つの方法があるようです。
とりあえず、目的の処理はcurse+getchで可能でした。ありがとうございます。
が、思わぬ副作用が出ているので、時間があればioctlの方を調べて試してみます(敷居が高いが。。。)
sttyは最終手段のように紹介されていたのですが、
>>358さんの書かれたようにやってみたら、プログラムから何の反応もなくなり、
Ctrl-Cすら受け付けなくなってしまってビクーリしたので、ちょっと保留です。
- 361 名前:デフォルトの名無しさん 投稿日:03/01/27 14:54
- まあ、ちゃんと(?)使うときはプログラムの中で、
入力前に system("stty raw");
入力が終ったら system("stty -raw");
- 362 名前:デフォルトの名無しさん 投稿日:03/01/27 15:20
- termsioとか使えない?
- 363 名前:デフォルトの名無しさん 投稿日:03/01/27 15:25
- >>360
副作用というのが、どんなものかなという好奇心が・・・
#MSのOSしか今、手持ちになくて試せない
- 364 名前:デフォルトの名無しさん 投稿日:03/01/27 15:31
- >>359
sがchar型で宣言されている。かな?
\377は0xFFという意味
- 365 名前:デフォルトの名無しさん 投稿日:03/01/27 15:38
- >364サソ
ご回答ありがdございます。
sはちゃんとint型で宣言しているのですが・・・
なんででしょぅ・・・
- 366 名前:デフォルトの名無しさん 投稿日:03/01/27 15:47
- 01:while(!feof(ifp)){
02: s=getc(ifp);
03: if(s=='#'){
04: putc('\n',ofp);
05: while(!feof(ifp)){
06: s=getc(ifp);
07: if(s=='\n') break;
08: }
09: }
10: else {
11: putc(s,ofp);
12: }
13:}
14:putc('\n',ofp);
02行目でEOF(-1)が発生した場合に12行目の処理を行っているから
-1(\377)が出力される
こういう場合、01行目は
while((s = getc(ifp)) != EOF) {
と書くのが定石
- 367 名前:348 投稿日:03/01/27 15:52
- >>361さん
ちゃんと(?
system("stty raw");
(入力を受け取る処理)
system("stty -raw");
としたんですが、
そうしても、一文字ずつの読み込みをしてくれませんでした。
というか反応なしで、ただただ入力がエコーされるのみ。。。
前述のように、Ctrl-Cも受け付けてくれなかったので、仕方なくターミナルをDestroyしました。
>>363さん
いや、好奇心を持つほど大したことじゃありません。
対話的な動作を期待するプログラムを書いていたので、
それまでprintfで書いていた部分を書き直すのが大変だなぁと思った。
というだけです(^^;
また、initscr()の時点で、端末がclearされてしまいますよね。
- 368 名前:デフォルトの名無しさん 投稿日:03/01/27 16:03
- >366サソ
ほんとありがdございます!
すげぇっす。イパーツで解析なさるなんて。
うらやますぃ。。。
精進イタシマス
- 369 名前: ◆Ou1AsATmFg 投稿日:03/01/27 17:26
- つぎのようなプログラムで,変数を配列にして一気に処理するようにするにはどうすればいいのでしょう?ご教授願います.
#include <stdio.h>
void hogera(int *x, int *y, int *z)
{
*x=1000;
*y=2000;
*z=3000;
}
main()
{
int a, b, c;
hogera(&a, &b, &c);
printf("%d %d %d\n",a, b, c);
return(0);
}
- 370 名前:デフォルトの名無しさん 投稿日:03/01/27 17:29
- 一気に何をしたいのかが分からんのですよ
- 371 名前:デフォルトの名無しさん 投稿日:03/01/27 17:31
- >>369
int ia[]={*x,*y,*z};をhogeraに。
- 372 名前:371 投稿日:03/01/27 17:33
- アドレスをそのまま入れたかったらint *ia[]={x,y,x};
- 373 名前:372 投稿日:03/01/27 17:33
- {x,y,x}じゃなくて{x,y,z}
- 374 名前:デフォルトの名無しさん 投稿日:03/01/27 18:05
- 多くのアルゴリズムの本がある中
「よくわかるアルゴリズム入門」
の逆順の線形リストと入力順の線形リスト
を習得しました。
今度は、まったく違った構造体に
組み込めなくちゃいけない。
typedef struct{
int no;
char name[20];
}Data;
typedef struct __node{
Data data;
struct __node *next;
}Node;
typedef struct{
Node *head;
Node *crnt;
}List;
- 375 名前:デフォルトの名無しさん 投稿日:03/01/27 18:06
- void Buff_Node(List *list)
{
Node *ptr=list->head;
Data temp;
while(scanf("%d %s",temp.no,temp.name)!=EOF){
InsertFront(list,temp);
list->head->next=ptr;
ptr=list->head;
}
}
逆順のリストは、できたが入力順のリストはわからない。
適当な、Buff_Node()入力順をを教えてほしい。
- 376 名前:デフォルトの名無しさん 投稿日:03/01/27 18:57
- 初心者君ですみませんが、
int型をファイルにバイナリで書きこむ
方法ってありますか??
- 377 名前:デフォルトの名無しさん 投稿日:03/01/27 18:57
- fopen(〜,"wb");で、出来たかな?
- 378 名前:デフォルトの名無しさん 投稿日:03/01/27 18:58
- あります
- 379 名前:デフォルトの名無しさん 投稿日:03/01/27 18:59
- 習得したんなら後はそれを応用すりゃあ良いだろうに・・
- 380 名前:デフォルトの名無しさん 投稿日:03/01/27 19:00
- >>376
fwrite
- 381 名前:デフォルトの名無しさん 投稿日:03/01/27 19:01
- >>379
ぬるぽ
- 382 名前:デフォルトの名無しさん 投稿日:03/01/27 19:04
- ( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩ アアア・・・
_/し' //. V`Д´)/
(_フ彡 / ←>>381
- 383 名前:デフォルトの名無しさん 投稿日:03/01/27 20:30
- >>376
man putw
- 384 名前:デフォルトの名無しさん 投稿日:03/01/27 20:31
- ( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩ アアア・・・
_/し' //. V`Д´)/
(_フ彡 / ←>>383
- 385 名前:デフォルトの名無しさん 投稿日:03/01/27 20:35
- >>383
man putw
NAME
`putw'--write a word (int)
SYNOPSIS
#include <stdio.h>
int putw(int W, FILE *FP);
...
どうやって使うんでしょうか?
- 386 名前:デフォルトの名無しさん 投稿日:03/01/27 20:39
- ( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩ アアア・・・
_/し' //. V`Д´)/
(_フ彡 / ←>>385
>>385
書いてあるだろ
- 387 名前:376 投稿日:03/01/27 21:06
- みなさんご回答ありがdございます。
バイナリで書きこんで、そのファイル開くと
読めなくなってるものですよね??
fopen( ,"wb")で開いても
ファイル開くと見た目普通っす。。。
どうなってんだこりゃー。
どなたか詳しくお教えください。。。
おながいしま・・・す
- 388 名前:デフォルトの名無しさん 投稿日:03/01/27 21:23
- >>387
"wb"で開いても、fprintf("%d", ...) なんかで書き込んだら一緒だろ。
fwrite()でも使え。putw()は標準にはないらしいし。
- 389 名前:デフォルトの名無しさん 投稿日:03/01/27 21:31
- putw()なんて関数初めて知りますた。勉強になりますね…
- 390 名前:デフォルトの名無しさん 投稿日:03/01/27 21:34
- >>389
ならない。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/putw.3.htmlでもfwriteを使えと言っている。
- 391 名前:デフォルトの名無しさん 投稿日:03/01/27 22:06
- >>http://www.linux.or.jp/JM/nullpo/LDP_man-pages/man3/putw.3.htmlでもfwriteを使えと言っている
どこに?
- 392 名前:デフォルトの名無しさん 投稿日:03/01/27 22:09
- >>391
ふしあなさんですか?
「説明」の末尾にきっかり書いてある。
- 393 名前:デフォルトの名無しさん 投稿日:03/01/27 22:09
- C言語でもWINDOWS上で起動するプログラム作れますか?
- 394 名前:デフォルトの名無しさん 投稿日:03/01/27 22:18
- >393
もちろん
- 395 名前:393 投稿日:03/01/27 22:21
- >>394ありがとう
- 396 名前:デフォルトの名無しさん 投稿日:03/01/27 22:40
- >>390
つまり、linux.or.jpのJMに従え。JMは神!ってことか。
- 397 名前:デフォルトの名無しさん 投稿日:03/01/27 22:42
- >>396
理由がわかった上で使いたいのであれば、別に止めはしないわけだが。
- 398 名前:デフォルトの名無しさん 投稿日:03/01/27 22:50
- >>396
好きにすれば?
- 399 名前:デフォルトの名無しさん 投稿日:03/01/27 23:42
- あつし君はC言語得意なのかな?
- 400 名前:デフォルトの名無しさん 投稿日:03/01/27 23:49
- >>399
C なら得意なんじゃないの?
- 401 名前:デフォルトの名無しさん 投稿日:03/01/27 23:53
- 1人でCなら得意です。
- 402 名前:デフォルトの名無しさん 投稿日:03/01/28 00:43
- C sus4 なら
- 403 名前:デフォルトの名無しさん 投稿日:03/01/28 01:13
- >>396
もちろん翻訳前のman putwにも書いてあるわけだが。
- 404 名前:デフォルトの名無しさん 投稿日:03/01/28 01:46
- >> 348
http://www.nurs.or.jp/~asada/FAQ/UNIX/UNIX.FAQ.html
の「4.1」。
あるいは man termios。ICANON解除、ECHO解除、VMIN/VTIMEを適当に。
curseってなに。cursesだろ。
- 405 名前:デフォルトの名無しさん 投稿日:03/01/28 11:25
- 文字をsscanfでファイルに書きこむと
それはパックされているということで
よろしいのでしょうか?
- 406 名前:デフォルトの名無しさん 投稿日:03/01/28 13:10
- どうしても出来ないんで御教授お願いします。
n及びn+2がともに素数になる数の内15000以上の最小の数値の組み合わせ
nとn+2を求めるプログラムを作成せよ。って問題なんですが
お願いします。
- 407 名前:デフォルトの名無しさん 投稿日:03/01/28 13:20
- 双子素数だな。
まぁ、ガンガレ
- 408 名前:デフォルトの名無しさん 投稿日:03/01/28 13:25
- 宿題スレへ逝け
- 409 名前:デフォルトの名無しさん 投稿日:03/01/28 13:30
- >>407
双子素数ってなんですか?
どんな感じで関数を定義すればいいのですか?
- 410 名前:デフォルトの名無しさん 投稿日:03/01/28 16:29
- >>409
まあ普通のスタイルで定義すればいいと思うよ。
ただ、センセーが古いスタイルの関数定義しか知らない化石のような人なら
古いスタイルで定義しないと減点されるかも知れないけど。
- 411 名前:391 投稿日:03/01/28 18:20
- ・・・叩かれないもんだな。。
- 412 名前:デフォルトの名無しさん 投稿日:03/01/28 18:28
- ( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>391
- 413 名前:デフォルトの名無しさん 投稿日:03/01/28 18:28
-
- 414 名前:デフォルトの名無しさん 投稿日:03/01/28 19:53
- >>406
とりあえず自分で考えろ。
で、C言語のレベルで問題がおきたらまた来い。
- 415 名前:デフォルトの名無しさん 投稿日:03/01/28 21:12
- age
- 416 名前:デフォルトの名無しさん 投稿日:03/01/30 13:50
- わからないので是非おしえてくだせぇ。
今ファイル入出力で***,txtファイルから行単位で文字列(char)や数値(int)を読み込みたいんですが
どうすればいいのですか?
- 417 名前:デフォルトの名無しさん 投稿日:03/01/30 13:51
- fgets
- 418 名前:416 投稿日:03/01/30 13:53
- fgetでint型で数値よみこめますか?
- 419 名前:デフォルトの名無しさん 投稿日:03/01/30 13:55
- int型が欲しいのならint型に変換すればよろしいのではなくて?
- 420 名前:デフォルトの名無しさん 投稿日:03/01/30 13:55
- ファイルにかかれているものに型もなにもない。
- 421 名前:デフォルトの名無しさん 投稿日:03/01/30 14:07
- freadならsite_t
- 422 名前:デフォルトの名無しさん 投稿日:03/01/30 14:07
- まちがえた、size_t
- 423 名前:416 投稿日:03/01/30 14:15
- int buf;
fgets((char *)buf,255,*fp);
みたいでいいですか?
- 424 名前:デフォルトの名無しさん 投稿日:03/01/30 14:19
- (o ̄∇ ̄)=◯)`ν゜)・;' ←416
- 425 名前:デフォルトの名無しさん 投稿日:03/01/30 14:20
- >>423
読み込むファイルがテキストファイルなら
char buf[256];
fgets(buf,255,*fp);
で、bufからsscanf()やatoiでintに変換する
- 426 名前:デフォルトの名無しさん 投稿日:03/01/30 14:21
- >>423>>425
*fpじゃなくてfpでしょ。
FILE **fp;と宣言しているならいいけど・・・
- 427 名前:デフォルトの名無しさん 投稿日:03/01/30 14:22
- >>425
なんで256じゃなくて255なの?
- 428 名前:416 投稿日:03/01/30 14:31
- char buf[256];
int buf2
fgets(buf,256,fp)
sscanf(buf,%d,buf2);
でいい?
- 429 名前:デフォルトの名無しさん 投稿日:03/01/30 14:33
- どうして sizeof(buf) と書かない・・・?
- 430 名前:425 投稿日:03/01/30 14:35
- >>426
コピペ(イイワケ)
>読み込んだ文字数が n -1 になるかのいずれかに最初に遭遇するまで
>続きます。結果は string に格納され、NULL 文字 ('\0') が付加されます。
どちらも同じ数値でよかったのか、NULL文字追加しか覚えてなかったから、、、
まぁ、文字列関係の関数はくせで+1してしまうけど
- 431 名前:デフォルトの名無しさん 投稿日:03/01/30 14:37
- >sscanf(buf,%d,buf2);
sscanf(buf, "%d", buf2);
だな、
- 432 名前:431 投稿日:03/01/30 14:38
- ちがった
sscanf(buf, "%d", &buf2);
- 433 名前:416 投稿日:03/01/30 14:44
- みなさんありがとございます!こんなぶっきらぼうな僕におしえてくれて・・・
じゃーやってみます!
- 434 名前:416 投稿日:03/01/30 15:16
- やってみたんですがメモリのエラーがでてしまって、パソコンが悪いのかプログラムが悪いのかわからないので
下のプログラムまちがってるばしょあるでしょうか?
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
intbuf;
char*buf2;
char*a;
FILE*fp;
fp=fopen("input.txt","r");
a=fgets(buf2,256,fp);
sscanf(buf2,"%d",&buf);
printf("%d",buf);
fclose(fp);
}
あとこのCファイルと同じ場所にinput.txtファイルおいてます
- 435 名前:デフォルトの名無しさん 投稿日:03/01/30 15:19
- わざとやってるんじゃないかという悪寒
- 436 名前:416 投稿日:03/01/30 15:21
- char buf2[256]
でいいのかな?うごきまちた
- 437 名前:デフォルトの名無しさん 投稿日:03/01/30 15:33
- #define TITLE_LEN 12
void PRT(char *ttl, int len, unchar *adr)
{
int i;
char msgA[TITLE_LEN + 1];
char msgB[] = " = ";
if (strlen(ttl) > TITLE_LEN){
printf("ttl(%s) length over\n");
return;
}
memset(msgA, ' ', sizeof(msgA)-1);
msgA[sizeof(msgA)-1] = NULL;
memcpy(msgA, ttl, strlen(ttl));
for (i=0; i<len; i++){
if(i%16 == 0){
if(i == 0){
printf("%s%s", msgA, msgB);
}else{
printf("\n ");
}
}
if (i%16 == 8) printf(" ");
printf("%02X ", *(adr+i));
} printf("\n");
fflush(stdout);
return;
}
- 438 名前:437 投稿日:03/01/30 15:34
- >>437ってどんな処理してるか
ご説明きぼーんぬ
- 439 名前:デフォルトの名無しさん 投稿日:03/01/30 16:20
- >>437
> printf("ttl(%s) length over\n");
これはいかんだろ。引数が足りない。
> msgA[sizeof(msgA)-1] = NULL;
型が合わない。
> memcpy(msgA, ttl, strlen(ttl));
わざわざこんなことするなんて、null文字をつけたくないからなのかしら・・・
- 440 名前:416 投稿日:03/01/30 18:51
-
charbuf[256];
FILE*fp;
intsuuzi;
char*mozi;
char *a
a=fgets(buf,256,fp);
sscanf(buf,"%s %d",mozi,&suuzi);
上でまちがってるとこありますか?最後の行を書くとメモリエラーとでちゃうのですが
- 441 名前:デフォルトの名無しさん 投稿日:03/01/30 18:52
- またか
わざとやってるんじゃないかという確信
- 442 名前:416 投稿日:03/01/30 18:56
- いやまったくわざとじゃなく、本気なんですが・・・
- 443 名前:デフォルトの名無しさん 投稿日:03/01/30 18:57
- ってかageんなよ
- 444 名前:デフォルトの名無しさん 投稿日:03/01/30 18:57
- intsuuzi; って、わざと?
- 445 名前:416 投稿日:03/01/30 18:59
- int suuzi;
のことです、コピペしたもので。
- 446 名前:デフォルトの名無しさん 投稿日:03/01/30 19:01
- #include <stdio.h>
main()
{
printf("入力してください。\n");
int a;
scanf("%d",&a);
}
int a;のところでコンパイルエラーが出るんですが、なぜですか?
でもprintfのある行より前にint a;と書くとうまくいくのですが。
- 447 名前:デフォルトの名無しさん 投稿日:03/01/30 19:03
- mozi にバッファのアドレス入れれ。
- 448 名前:デフォルトの名無しさん 投稿日:03/01/30 19:11
- 434と同じ間違いをしていてはなぁ
- 449 名前:416 投稿日:03/01/30 19:20
- やっぱいれないとだめなんですね。どもです
- 450 名前:デフォルトの名無しさん 投稿日:03/01/30 19:23
- >446
変数宣言は先頭でやるのが基本だから
- 451 名前:446 投稿日:03/01/30 19:28
- そうなんですか。
なるべく先頭で宣言するようにします。
- 452 名前:デフォルトの名無しさん 投稿日:03/01/30 19:31
- >>446
Cの仕様だろ。C++ なら通るんじゃない?
- 453 名前:デフォルトの名無しさん 投稿日:03/01/30 20:05
- >>452
実装があるかどうかしらんが、C99では可能。
- 454 名前:デフォルトの名無しさん 投稿日:03/01/30 20:15
- >>451
なるべくってあんた・・・
変数が通用する領域に習って、"{"のすぐあとに宣言すれば間違いない
- 455 名前:デフォルトの名無しさん 投稿日:03/01/31 00:35
- 初心者ですがお邪魔いたします。
構造体の中身を表示したのですが
printf("NO.1 = %s\n", kouzoutai.no1);
printf("NO.2 = %s\n", kouzoutai.no2);
というように、力技で押し切るしかないのでしょうか?
構造体の中身が100くらいあって困ってます。
ご教授いただけると幸いです。
- 456 名前:デフォルトの名無しさん 投稿日:03/01/31 00:42
- C言語勉強したいんだけどおすすめのフリーのソフトとかありますか?
- 457 名前:デフォルトの名無しさん 投稿日:03/01/31 00:50
- >>455
それしか方法はない。
もし構造体の要素が同じ型なのであれば、配列にすると多少マシになる。
for(i = 0; i < 2; i++)
printf(("NO.%d = %s\n", i + 1, kouzoutai.no[i]);
- 458 名前:デフォルトの名無しさん 投稿日:03/01/31 00:50
- >>456
それだけでは何を欲しがっているのかわからん。
- 459 名前:デフォルトの名無しさん 投稿日:03/01/31 01:00
- >>456
gcc環境が入ったFreeBSDとかLinuxとかがフリーで入手できます。
gcc環境を入れることのできるSolarisもメディア代+手数料で入手できます。
- 460 名前:デフォルトの名無しさん 投稿日:03/01/31 01:10
- >>459
ソラリスのフリー版の配布は終わったんじゃなかったっけ?
- 461 名前:デフォルトの名無しさん 投稿日:03/01/31 01:14
- >>460
終わったのはダウンロードのことだろ?
- 462 名前:デフォルトの名無しさん 投稿日:03/01/31 01:17
- >>459
これから勉強を始めようという人に、独自拡張の最右翼を奨めるその心は?
- 463 名前:461 投稿日:03/01/31 01:17
- ・・・・と思ったらいつのまにか変わっていたか・・・
http://jp.sun.com/products/software/solaris/binaries/index.html
まあずっと前に落としたからいいけど。
- 464 名前:デフォルトの名無しさん 投稿日:03/01/31 01:20
- >>462
拡張機能使わなければ関係ないのでは
- 465 名前:デフォルトの名無しさん 投稿日:03/01/31 01:20
- >>455
そう言う作業が定期的に何度も発生するなら
ソースを自動生成するスクリプトを書いてしまうのが吉かと。
若しくは自分でパースするのでもいいと思うけど。
- 466 名前:デフォルトの名無しさん 投稿日:03/01/31 01:35
- >>464
知らずに使うこともあるだろう。
コンパイルが通るからというだけの根拠で、規格外のコードは書いたことは
無いか?
- 467 名前:デフォルトの名無しさん 投稿日:03/01/31 01:39
- >>466
規格外の関数ならいくらでも使ったことあるけど、それ以外はない。
- 468 名前:デフォルトの名無しさん 投稿日:03/01/31 01:43
- gccなら-Wall -ansiつけておけば平気じゃない?
- 469 名前:デフォルトの名無しさん 投稿日:03/01/31 01:44
- -pedanticもよろしく(ワラ
- 470 名前:デフォルトの名無しさん 投稿日:03/01/31 01:45
- >>466
gccがいやなら、SolarisならSunの、
Linux(FreeBSDでも!)Intelのコンパイラが使えるよ。
ま、gcc -ansi -pedantic で大体チェックできるわけだが。
一方、bcc32やVC++なんかの方が、よっぽど変な動作があることあること。
- 471 名前:デフォルトの名無しさん 投稿日:03/01/31 01:47
- これから勉強を始めようという人に、自分でオプションをいじれと?
BCC や VC++ なら、C++ はともかく C では案外しっかりしているぞ。
- 472 名前:デフォルトの名無しさん 投稿日:03/01/31 01:48
- >>468-470
3Pですね。おめでたいね。
- 473 名前:464 投稿日:03/01/31 01:51
- >>466
C使い始めのときint a[i]とやったことがあった
後//とinline使ってたけど次からは使えるみたいだし
まあいいかなと
- 474 名前:デフォルトの名無しさん 投稿日:03/01/31 01:52
- C99ってgccに合わせてやったということらしいけど、本当なの?
- 475 名前:デフォルトの名無しさん 投稿日:03/01/31 01:54
- 拡張機能と言えば、
VC++で拡張機能をオフにするとWindowsヘッダーがコンパイルできなくなるのはかなり痛い。
- 476 名前:デフォルトの名無しさん 投稿日:03/01/31 02:02
- >>472
祝福してくれてありがとう。
- 477 名前:デフォルトの名無しさん 投稿日:03/01/31 09:27
- >437
うう、すげぇ無駄な処理の塊・・・
仕事なら塵箱行きだ。
- 478 名前:デフォルトの名無しさん 投稿日:03/01/31 12:52
- >>477
すっきりまとめてくれい
- 479 名前:455 投稿日:03/01/31 18:01
- >>457,>>465サソ
ありがとうございます
ところで
ソースを自動生成するスクリプト
↑こんなことができるのでせうか?
またそれはどのように実現するもの
なのでしょうか?
そしてパースとは??
ほんと厨質ばかりでご迷惑お掛け致しますが
ご教授お願い致します。
- 480 名前:デフォルトの名無しさん 投稿日:03/01/31 19:07
- >>479
google さんに聞いて見れ
ここだけが情報源というわけじゃなかろ
- 481 名前:デフォルトの名無しさん 投稿日:03/01/31 21:19
- >>479
結果報告よろしく。
- 482 名前:477 投稿日:03/02/01 01:15
- >>478
やってみよう。ちょっと待ってケロ。
>>479
エディタのキーボードマクロでも(半)自動生成できるよ。
「パース」とはこの場合、ソースコード解析のことだね。
- 483 名前:482=477 投稿日:03/02/01 02:01
- 一部意図的に誤解してみた。
#define TITLE_LEN 12
#define TITLE_FORM "%-12s"
#define MsgB " = "
void
PRT(char *ttl, int len, unchar *adr)
{
int i;
if (strlen(ttl) > TITLE_LEN){
printf("ttl(%s) length over\n", ttl);
return;
}
printf(TITLE_FORM MsgB, ttl);
for (i=0; i<len; i++){
if(i % 16 == 0){
putchar('\n');
}
if (i % 8 == 0) {
putchar(' ');
}
printf("%02X ", *(adr+i));
}
putchar('\n');
fflush(stdout);
return;
}
- 484 名前:482=477 投稿日:03/02/01 02:02
- 行数オーバーしたようなので連続スマソ。
・最初の一回だけの処理はループの外へ。
・文字列の加工はsprintf()を使うべし。
・(環境にも拠るけど)putchar()で済むことはprintf()しない。
課題
・タイトル文字列の制限は余り意味がなさそうだ。
・先頭からのオフセットを左端に表示したら判りやすいだろう。
・適当なファイル入力ルーチンを組み合わせればダンプツールになるね。
- 485 名前:デフォルトの名無しさん 投稿日:03/02/01 03:21
- >>484
>・(環境にも拠るけど)putchar()で済むことはprintf()しない。
積極的にspriintfの使用を推奨しているのに、
printfを使わせない理由がよくわからん…
スタティックリンクする処理系だとprintf族を使わないのは
意味があったりするもんだが、sprintfを使わせるんだから
それも意味をなさないような。
つか、putcharで済ますってことは、
printf("%s", s);
を
for (*p = s; *p; p++)
putchar(*p);
ってやれってことか…。よーわからん課題だな。
- 486 名前:デフォルトの名無しさん 投稿日:03/02/01 15:37
- >>485
誰もそんなこと言ってないと思う。
- 487 名前:デフォルトの名無しさん 投稿日:03/02/01 23:24
- >for (*p = s;
((((;゚Д゚)))ガクガクブルブル
- 488 名前:デフォルトの名無しさん 投稿日:03/02/01 23:34
- C初心者ですがよろしくおねがいします。
画面にhogeを表示するとき、ソースはこう書くじゃないですか。
#include <stdio.h>
int main(void)
{
printf("hoge");
return 0;
}
でも、このソースでもまったく同じ効果なのですが、どう違うのでしょうか?
#include <stdio.h>
int main(void)
{
printf("hoge");
}
これは、戻り値がないってことですよね?
main()には戻り値は返さなくていいということですか?
それとも、1番目のソースと2番目のソースじゃ表示は同じだけど
内部の動きは違うということですか?
よろしくお願いします。
- 489 名前:デフォルトの名無しさん 投稿日:03/02/01 23:38
- >>488
Warning
出ない?
大して大袈裟な事ではないと思うが。
- 490 名前:デフォルトの名無しさん 投稿日:03/02/01 23:45
- >>488
最近の規格では、mainに限ってはreturnが無い場合、0を返すと見なす。
- 491 名前:488 投稿日:03/02/01 23:48
- >>490
ありがとうございました。
なるほど、そういうことだったんですね。
それはmain関数だけでそれ以外の関数はちゃんと戻り値を
返すようなのですね。これでなぞが解けました。
また勉強を続けたいと思います。
>>489
BCCでコンパイルしてますが、エラーは出ませんでした。
- 492 名前:デフォルトの名無しさん 投稿日:03/02/01 23:50
- >>490
>最近の規格
ISO/IEC14882
こんくらい空で言えろ
- 493 名前:デフォルトの名無しさん 投稿日:03/02/01 23:52
- >>492
そんな事言えんの規格マニアだけでしょう
- 494 名前:デフォルトの名無しさん 投稿日:03/02/01 23:53
- >>492
ハァ?
これスレでは
ISO/IEC 9899:1999
だろ。
- 495 名前:デフォルトの名無しさん 投稿日:03/02/02 00:13
- >>488
それもそうだけど、改行しておかないでいいの?
- 496 名前:488 投稿日:03/02/02 00:18
- >>495
いや、いつもは改行してますよ。
ただ、2chにソース貼るには、少しでもシンプルにしたほうが
いいかな、と思って\nをつけなかっただけです。
- 497 名前:デフォルトの名無しさん 投稿日:03/02/02 08:28
- windowを表示させるだけのcソースを教えてけれ。
- 498 名前:デフォルトの名無しさん 投稿日:03/02/02 11:05
- #include <stdio.h>
int main(void){printf("window");return 0;}
- 499 名前:デフォルトの名無しさん 投稿日:03/02/02 11:27
- うむむ。何かが違うがありがとう。
- 500 名前:デフォルトの名無しさん 投稿日:03/02/02 11:29
- C++の方がもっと色々できるのに、どうして「C」に拘るの?
- 501 名前:デフォルトの名無しさん 投稿日:03/02/02 11:29
- fjだと改行しないと表示されない処理系があるとか言ってくる馬鹿がいたもんだが
2chは平和だな…
- 502 名前:デフォルトの名無しさん 投稿日:03/02/02 11:29
- C++コンパイラがないから。
- 503 名前:デフォルトの名無しさん 投稿日:03/02/02 11:31
- >>502
無料のコンパイラいっぱいあるじゃん。
- 504 名前:デフォルトの名無しさん 投稿日:03/02/02 11:31
- >>501
それってラインバッファのせい?
ストリームを閉じたりバッファがいっぱいになれば表示されるけど。
- 505 名前:デフォルトの名無しさん 投稿日:03/02/02 11:32
- >>503
有料のものも含めて、俺の環境用のものはない。
- 506 名前:デフォルトの名無しさん 投稿日:03/02/02 12:00
- Cで時間はかる関数教えてください!
できたらミリ秒まで計れるほうがいいのですが。
- 507 名前:デフォルトの名無しさん 投稿日:03/02/02 12:01
- >>506
clock_t
- 508 名前:デフォルトの名無しさん 投稿日:03/02/02 12:02
- >>506
clock
ミリ秒は無理だけど。
- 509 名前:506 投稿日:03/02/02 12:09
- timeGetTime()
これはC言語でつかえます?
- 510 名前:デフォルトの名無しさん 投稿日:03/02/02 12:09
- 使えるかどうかはやってみればわかる。
ただし、移植性がないことは確か。
- 511 名前:デフォルトの名無しさん 投稿日:03/02/02 12:29
- >>508
ミリ秒まで知りたければ1000で割って工夫をすれば十分。
- 512 名前:デフォルトの名無しさん 投稿日:03/02/02 12:31
- 一度CLOCKS_PER_SECで割ったものをさらに1000で割るのかよ・・・
- 513 名前:デフォルトの名無しさん 投稿日:03/02/02 12:34
- 馬鹿だな。
CLOCKS_PER_SECで割らないんだよ。
例えば、
int a,b;
clock_t start,end;
start=clock();
・・・何かの処理・・・
end=clock();
a=(end-start)/1000;
b=(end-start)-a*1000
とすれば、aはカンマ以上の秒を表して、bはカンマ以下の秒を表す。
- 514 名前:デフォルトの名無しさん 投稿日:03/02/02 12:38
- >>513
カンマ??
- 515 名前:513 投稿日:03/02/02 12:41
- ああ。カンマだよ。ピリオドじゃねーぞ。
将軍様がカンマと言ったらカンマだ。
- 516 名前:デフォルトの名無しさん 投稿日:03/02/02 12:42
- CLOCKS_PER_SECって俺の環境じゃ1000000になってる。
- 517 名前:デフォルトの名無しさん 投稿日:03/02/02 12:43
- ピリオドのことか・・・
なんで(end-start)/1000が整数部になるわけ?
clockが返す値の単位(?)は決まっていないよ。
- 518 名前:513 投稿日:03/02/02 12:44
- >>517
とりあえずやってみれ。
俺の環境はVC++6.0だけれども。
- 519 名前:517 投稿日:03/02/02 12:56
- やってみた。
Linux+gccとWindows+VC++6.0で全然結果が違うんだが・・・・
- 520 名前:513 投稿日:03/02/02 12:58
- そうでしたか・・・。
Linux+gccではどうでした?
俺はLinux持ってないもので。
- 521 名前:デフォルトの名無しさん 投稿日:03/02/02 12:58
- なら、CLOCKS_PER_SEC で割ってみるとか
- 522 名前:デフォルトの名無しさん 投稿日:03/02/02 12:59
- >>520
Linuxの方が正しい結果だったよ(^_^;)
↓プログラムはこれでいいんでしょ?
#include <stdio.h>
#include <time.h>
int main()
{
int a,b,i=70000000;
clock_t start,end;
start=clock();
while(i--) ;
end=clock();
a=(end-start)/1000;
b=(end-start)-a*1000;
printf("%d.%dミリ秒\n",a,b);
return 0;
}
- 523 名前:522 投稿日:03/02/02 13:00
- ちなみにCLOCKS_PER_SECの値はVC++が1000で、Linuxが1000000
- 524 名前:デフォルトの名無しさん 投稿日:03/02/02 13:02
- >>521
そうすると少数以下の秒が表されないのよ、、、少なくともVC++6.0だと。
>>522
いや・・・何が正しかったのか???
- 525 名前:522 投稿日:03/02/02 13:03
- >>524
0.5秒なら500ミリ秒でしょ?
Linuxでの結果はだいたいそれくらいだった。
でもWinだと1ミリ秒にもならなかった。
- 526 名前:522 投稿日:03/02/02 13:06
- ああ、すまん。
printf("%d.%dミリ秒\n",a,b);じゃなくてprintf("%d.%d秒\n",a,b);か。
それならWinの方がただしい。
じゃあ1000で割らずにCLOCKS_PER_SECで割ればいいか。
- 527 名前:デフォルトの名無しさん 投稿日:03/02/02 13:10
- すまんかった。。。
cout << CLOCKS_PER_SEC << end;
で試した。
VC++6.0なら、定数CLOCKS_PER_SECは1000。
すまんかった。。。
- 528 名前:デフォルトの名無しさん 投稿日:03/02/02 13:43
- ポインタ『adr』のなかに文字列
1.春夏秋冬
2.東西南北
3.温故知新
という文字列が含まれているとき、
『西』という言葉を入れたら
2.東西南北
と出てくるような文字列検索プログラムはどのようになるのでしょうか…?
熟練のかたがた、よろしければご教授ください
- 529 名前:デフォルトの名無しさん 投稿日:03/02/02 13:45
- >>528
adrの中にどう含まれているんだ?
char *adr="1.春夏秋冬\n2.東西南北\n3.温故知新";か?
- 530 名前:デフォルトの名無しさん 投稿日:03/02/02 13:47
- char str[3];
fgets(str,sizeof str,stdin);
if(!strcmp(str,"西"))
puts("2.東西南北");
- 531 名前:デフォルトの名無しさん 投稿日:03/02/02 13:48
- >>529
そうです
1行目2行目とかの検索だったらできるのですが、
特定の文字列の検索の方法がわからなくて…
- 532 名前:デフォルトの名無しさん 投稿日:03/02/02 13:49
- >>531
strstr
- 533 名前:デフォルトの名無しさん 投稿日:03/02/02 15:28
- >>531
先ずは英語版をつくって、納得がいってから日本語版を作ることをお勧めします。
- 534 名前:デフォルトの名無しさん 投稿日:03/02/02 20:12
- ++のスレッドから誘導されてきました。
charの列へのポインタの指す文字列をcharの配列へ
列全体をコピーする関数にはどんなのがあるでしょうか?
char dist[32];
char *src;
strcpy(dist,src);//文字列のコピー。
ってのはありでしょうか 御教授お願いします
- 535 名前:デフォルトの名無しさん 投稿日:03/02/02 20:15
- >>534
strdup()とかどうですか?
- 536 名前:デフォルトの名無しさん 投稿日:03/02/02 20:25
- >>534
それでいいんじゃない?
但し、dist のサイズに気をつけてな。
- 537 名前:534 投稿日:03/02/02 20:49
- >>535-536様
早速、strdupについて調べてきました。勉強になります。
本当に有り難う御座いました!
- 538 名前:デフォルトの名無しさん 投稿日:03/02/02 20:59
- >>537=534
free()するのを忘れないようにね。
- 539 名前:デフォルトの名無しさん 投稿日:03/02/02 21:10
- 質問します。
char 型二次元配列( char abc[10][32];)を memset で初期化する場合、
memset( abc , '\0' , sizeof(abc));
でいいのでしょうか?
- 540 名前:デフォルトの名無しさん 投稿日:03/02/02 22:17
- >>539
全部0で埋めなければいけない積極的理由があるならいいんじゃない?
- 541 名前:デフォルトの名無しさん 投稿日:03/02/02 22:29
- C言語を極めるってことはどういうことだと思いますか?
- 542 名前:539 投稿日:03/02/02 22:30
- すいません。ageます。
>>540
ありがとうございます。
もう一つ質問なのですが、このような二次元配列を宣言した場合、
メモリ上の連続した領域が確保されるという保証はあるのでしょうか?
>539 の例の場合だと、abc の320バイトはつながった領域をとってくれるのですか?
abc[0] の最終バイト目の次が abc[1]の先頭バイト目に必ずなりますか?
- 543 名前:デフォルトの名無しさん 投稿日:03/02/02 22:49
- >>542
とってくれる
- 544 名前:デフォルトの名無しさん 投稿日:03/02/02 23:07
- (CLOCKS_PER_SEC/1000.0) で割れば。
- 545 名前:デフォルトの名無しさん 投稿日:03/02/02 23:08
- >>541
Cで現実的に実現可能かどうか瞬時に分かる。とか。
- 546 名前:デフォルトの名無しさん 投稿日:03/02/02 23:09
- >>541
C言語の欠点を言える。
- 547 名前:デフォルトの名無しさん 投稿日:03/02/02 23:10
- コンパイル中...
yakyu.c
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x81' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x40' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x81' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x40' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x81' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x40' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x81' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x40' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(107) : fatal error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー
yakyu.exe - エラー 9、警告 0
何度も確認しましたが間違いはないはずなのこうなってしまいます。どうすればいいですか?
- 548 名前:デフォルトの名無しさん 投稿日:03/02/02 23:13
- >>547
またコピペか。
- 549 名前:デフォルトの名無しさん 投稿日:03/02/02 23:13
- >>547
日本語か何かの文字コード変じゃないか?
- 550 名前:デフォルトの名無しさん 投稿日:03/02/02 23:14
- >>547
さよなら!
- 551 名前:デフォルトの名無しさん 投稿日:03/02/02 23:14
- >>547
0x8140は、ShiftJISで空白文字ですね。
インデントに2バイト空白使ってませんか?
#もしエディタにそういう設定があるなら、2バイト空白と1バイト空白の見た目を変えておこう。
- 552 名前:デフォルトの名無しさん 投稿日:03/02/02 23:15
- >>541
世界中のCコンパイラーを全てインストールしているパソコンを持ち歩いている。
- 553 名前:547 投稿日:03/02/02 23:16
- 釣れた(w
- 554 名前:デフォルトの名無しさん 投稿日:03/02/02 23:17
- >>547
exe名が駄目なんだと思うよ。yakyu.exeじゃあね。
- 555 名前:デフォルトの名無しさん 投稿日:03/02/02 23:17
- コンパイルする前に、
全角スペースを半角スペースに置換。
- 556 名前:デフォルトの名無しさん 投稿日:03/02/02 23:18
- >>553
釣られ上等。
1%でもマジの可能性があれば、喜んで釣られるよ。
- 557 名前:547 投稿日:03/02/02 23:19
- 続きはこちらでお願いします(w
http://pc.2ch.net/test/read.cgi/prog/1043845897/290-
- 558 名前:デフォルトの名無しさん 投稿日:03/02/02 23:23
- ありがとうございました、なんとかなりそうです
なんか名前がばれちゃいましたw
- 559 名前:547 投稿日:03/02/02 23:29
- error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー
ってなんですか?
- 560 名前:デフォルトの名無しさん 投稿日:03/02/02 23:33
- レスつかないようなのでもっかいききます。
error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー
ってなんですか?
- 561 名前:デフォルトの名無しさん 投稿日:03/02/02 23:40
- とりあえずもいっかいききます
error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー
ってなんですか?
- 562 名前:デフォルトの名無しさん 投稿日:03/02/02 23:42
- なんでそんな何回も書きこむんだ?
error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー
ってなんですか?
- 563 名前:デフォルトの名無しさん 投稿日:03/02/03 00:04
- timeGetTime関数ってCでつかえます?
以下のプログラムでまわしたんですがエラーがでてしまいました。
以下のプログラムは某ホームページから引用させてもらいました。
time関数とtimegettime関数の比較をおこなってます
include <stdio.h>
#include <time.h> // for clock()
#include <windows.h> // これと下のヘッダーはマルチメディアタイマーに必要です
#include <mmsystem.h> // winmm.lib をリンクするのを忘れずに
int main(int argc, char* argv[])
{
int i;
clock_t oldTime, newTime;
oldTime = clock();
for (i = 0; i < 10; i++) {
while (oldTime == (newTime = clock())) ;
printf("clock [sec] = %.3f \n",
(float)oldTime / (float)CLOCKS_PER_SEC);
oldTime = newTime;
}
DWORD oTime, nTime;
oTime = timeGetTime();
for (i = 0; i < 10; i++) {
while (oTime == (nTime = timeGetTime())) ;
printf("timeGetTime [ms] = %d \n", oTime);
oTime = nTime;
}
return 0;
}
- 564 名前:デフォルトの名無しさん 投稿日:03/02/03 00:07
- >>563
エラーの内容を書かないような奴には教えない。
- 565 名前:563 投稿日:03/02/03 00:14
- すいません。エラーは
error C2275: 'DWORD' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。
c:\program files\microsoft visual studio\vc98\include\windef.h(141) : 'DWORD' の宣言を確認してください。
error C2146: 構文エラー : ';' が、識別子 'oTime' の前に必要です。
error C2065: 'oTime' : 定義されていない識別子です。
error C2065: 'nTime' : 定義されていない識別子です。
です。
- 566 名前:デフォルトの名無しさん 投稿日:03/02/03 00:18
- >>565
コンパイラとOSを書かないような奴には教えない。
- 567 名前:デフォルトの名無しさん 投稿日:03/02/03 00:21
- >>566
メッセージみりゃ、コンパイラとOSくらい察しはつくが。
- 568 名前:563 投稿日:03/02/03 00:22
- win2000でvc
です
- 569 名前:デフォルトの名無しさん 投稿日:03/02/03 00:23
- コンパイラとOSを書けないような奴には教えない。
- 570 名前:デフォルトの名無しさん 投稿日:03/02/03 00:26
- CPUのリソースを無駄に食わないよう
する手法にsleep関数使うことやスレッド優先度を下げるという
のがあるそうですが、スレッド優先度を下げるとはどうやるんですか?
具体的にサンプルソース提示して教えてたも〜
- 571 名前:デフォルトの名無しさん 投稿日:03/02/03 00:35
- >>570
O S は ?
あなたが使ってる環境なんて、知りませんから。
- 572 名前:デフォルトの名無しさん 投稿日:03/02/03 00:39
- >>571
SUPER-UNIXです
教えてたも〜
- 573 名前:デフォルトの名無しさん 投稿日:03/02/03 00:46
- >>572
nice だの renice だのというコマンドで優先度は上下可能かなあ
- 574 名前:デフォルトの名無しさん 投稿日:03/02/03 00:49
- >>563
bccは通った。
- 575 名前:デフォルトの名無しさん 投稿日:03/02/03 00:50
- スレッドごとのは、使ってるスレッドライブラリによると思う
でも、下手な小細工するよりも、CPUバウンドな処理と
IOバウンドな処理に分けてしまったほうがいいかもしれんよ。
- 576 名前:563 投稿日:03/02/03 00:52
- >>574
どもです。
c++ではとおったんですが、Cではとおらなくて・・・
timegettime関数がCでは無理なのか、それとも違うところで引っかかってるのかわからなくて、
よければ助言ねがいます
- 577 名前:デフォルトの名無しさん 投稿日:03/02/03 00:54
- もうすぐC言語検定があるんですが、3級受けたことある人いらっしゃいますか?
申し込みはしたんですが、どういう問題が出るのかさっぱりわからないので不安です。
- 578 名前:デフォルトの名無しさん 投稿日:03/02/03 00:59
- C言語検定って・・・
http://piza.2ch.net/tech/kako/993/993631480.html
- 579 名前:デフォルトの名無しさん 投稿日:03/02/03 00:59
- >>577
C言語の歴史が高頻度で出題されるとあった
くだらね・・・
- 580 名前:577 投稿日:03/02/03 01:12
- 役にたたないのか・・・鬱
4300円出したのに・・・
しかも合格できなそうなのが怖い
- 581 名前:デフォルトの名無しさん 投稿日:03/02/03 01:14
- 資格って、履歴書の空欄を埋めるためとか、
会社の技能手当てという役にはたつんじゃない?
実戦の知識とかは、また別の話だし。
- 582 名前:デフォルトの名無しさん 投稿日:03/02/03 01:20
- >>581
その通り
- 583 名前:577 投稿日:03/02/03 01:22
- とりあえず明日本屋いって対策テキスト探します。
通販できるサイトはあるけど試験が5日後だから間に合わなし
とりあえずC言語の歴史でもサイトで勉強しようw
- 584 名前:デフォルトの名無しさん 投稿日:03/02/03 01:24
- >>583
何で受けようと思ったの?
落ちそうなら尚更…
- 585 名前:デフォルトの名無しさん 投稿日:03/02/03 01:31
- int *a, *b;
と
int *a;
int *b;
って同じですか?
- 586 名前:577 投稿日:03/02/03 01:31
- >>584
今大学2年で、情報学科でCを少し勉強してきたからそろそろとっとこうかな、と。
つーか、試験受けることにしたら勉強するようにならないかな?っていうダメダメな理由だったりする。
丁度春休み入って堕落する時期だし
- 587 名前:デフォルトの名無しさん 投稿日:03/02/03 01:46
- >>586
必要になれば、嫌でも習得しようと努力する
さして、必要と思ってない時期にやってもまるで身につかない
とういか、理工系で暇な今な時期に遊ばないでどうする・・・
遊べ!!
それが現時点での最重要項目だ・・・
- 588 名前:デフォルトの名無しさん 投稿日:03/02/03 01:50
- >>576
timeGetTime() は C で使える。
むしろ、Win32 API は C から使うために設計されたようなものだ。
エラーの原因は、宣言 DWORD oTime, nTime; がブロックの途中に現れる
という事だ。
C では変数宣言をブロックの先頭で行わなければならないという原則を
忘れたのか?
それと、エラーの報告では行番号を省くな。
もしくは、どこがエラーになったのかちゃんと示せ。
あと、#include <mmsystem.h> はいらないんじゃないかという気がする。
VC++ なら、#pragma comment(lib , "winmm.lib") を入れておくと、自分で
リンク時のライブラリを指定する必要がなくなる。
- 589 名前:577 投稿日:03/02/03 02:00
- >>587
たぶんその辺は心配いらず
- 590 名前:563 投稿日:03/02/03 02:11
- >>588
ありがとうございます!!
そしてご指摘ありがとうございます。
今後きおつけます。
- 591 名前:デフォルトの名無しさん 投稿日:03/02/03 02:23
- >今後きおつけます。
気を付けてくれ
- 592 名前:デフォルトの名無しさん 投稿日:03/02/03 10:02
- はぁー、c言語の宿題がわかりません。
だれか助けてくれませんか?
今日の4時までなんですが・・・もうだめぽ
- 593 名前:デフォルトの名無しさん 投稿日:03/02/03 10:20
- もう過ぎているから大丈夫
気にするな
- 594 名前:デフォルトの名無しさん 投稿日:03/02/03 10:31
- >>585
同じです。
以下は別物です。
(1)
int* a,b;
(2)
int *a,b;
(3)
int *a;
int b;
(1)(2)(3)も、これはこれで同じです。
この点注意が必要です。
- 595 名前:デフォルトの名無しさん 投稿日:03/02/03 10:41
- #define PINT int*
typedef int *pint;
PINT a, b;
pint c, d;
- 596 名前:デフォルトの名無しさん 投稿日:03/02/03 10:45
- ヒントでPINT
- 597 名前:デフォルトの名無しさん 投稿日:03/02/03 10:51
- >>594発展
>>595応用
>>596ボケ
>>597ツッコミ
ヽ(`Д´)ノ ゴラッー
- 598 名前:デフォルトの名無しさん 投稿日:03/02/03 10:51
- >>595
犯人はBだっ!
- 599 名前:デフォルトの名無しさん 投稿日:03/02/03 13:55
- ワラタ
いーなーこの感じ
- 600 名前:デフォルトの名無しさん 投稿日:03/02/03 14:04
- -------------------------------------------------------------------------
実数値の小数点以下2桁目が6、7のときだけ+1する8Bの実数型の関数を作れ。
プロトタイプ宣言は不要。引数は1個とし、引数によって関数の結果を返してはいけない。
-------------------------------------------------------------------------
これ解ける人いますか?;;
- 601 名前:デフォルトの名無しさん 投稿日:03/02/03 14:08
- 宿題スレ逝け
プロトタイプ宣言は不要というのは何か意味あるんだろうか
- 602 名前:デフォルトの名無しさん 投稿日:03/02/03 14:24
- >>601
言うまでもなくちんとマルチポストしてますよ。
- 603 名前:デフォルトの名無しさん 投稿日:03/02/03 14:27
- double func(double val)
{
char buf[22];
int ch;
sprintf("%20.15f", val);
ch = strchr(buf, '.')[2];
if (ch == '6' || ch == '7') {
return val + 1.0;
}
return val;
}
- 604 名前:デフォルトの名無しさん 投稿日:03/02/03 14:36
- >>603
問題文の 2 行目の最後は見えてます?
あと、602 は読んでくれてない?
- 605 名前:デフォルトの名無しさん 投稿日:03/02/03 14:39
- >>604
素朴な疑問だけど、>>603は「引数によって関数の結果を返してはいけない」と思うけど?
- 606 名前:デフォルトの名無しさん 投稿日:03/02/03 14:39
- > 引数によって関数の結果を返してはいけない。
嫁ていないのは誰だろうか
- 607 名前:デフォルトの名無しさん 投稿日:03/02/03 14:52
- return val;
- 608 名前:デフォルトの名無しさん 投稿日:03/02/03 14:53
- んじゃ、一時変数に入れればいいじゃん。
- 609 名前:デフォルトの名無しさん 投稿日:03/02/03 14:53
- 600=602=604=607なのかな?(・∀・)ニヤニヤ
- 610 名前:デフォルトの名無しさん 投稿日:03/02/03 14:55
- >>609
同意。
そしてマルチポスト野郎にまともに答えてくれる香具師はいない罠。
- 611 名前:デフォルトの名無しさん 投稿日:03/02/03 15:14
- 漏れは 600 ではないけど、602=604=607 だよ。
ついでに 「向こう」 の 771。
- 612 名前:デフォルトの名無しさん 投稿日:03/02/03 15:17
- 「引数によって」をどう捉えるかだろうね(問題文作ったヤシが阿呆)
- 613 名前:デフォルトの名無しさん 投稿日:03/02/03 15:22
- >>601
宿題検収の際に、いちいち確認するのが面倒だからプロトタイプは不要。
という事では?
- 614 名前:デフォルトの名無しさん 投稿日:03/02/03 16:13
- つ〜か、お前らマルチポストにされたこと分かってて
何レス付けてんだよ。マルチポストした奴と同程度のマナー違反だよ。
- 615 名前:デフォルトの名無しさん 投稿日:03/02/03 16:20
- int *wall_type,*wall_p_type;
をポインタを使わないで記述する方法を教えてください。
- 616 名前:デフォルトの名無しさん 投稿日:03/02/03 16:23
- ポインタを使わないでポインタを記述することはできません。
- 617 名前:615 投稿日:03/02/03 16:26
- 他の記述法はないのですか?
- 618 名前:デフォルトの名無しさん 投稿日:03/02/03 16:29
- 何を目的としたコードかも書いてもいないのに、代替案なんか出せると思いますか?( -д-) 、ペッ
- 619 名前:デフォルトの名無しさん 投稿日:03/02/03 16:30
- >int *wall_type,*wall_p_type;
はポインタ変数の定義に見えるんだけど、
ポインタ変数はポインタなんだから他の定義方法はありません。
#これが引き数だって言うんなら*演算子を使わないこともできるけど。
- 620 名前:デフォルトの名無しさん 投稿日:03/02/03 16:33
- 代替案
int a = 123;
unsigned long b;
b = reinterpret_cast<unsigned long>(&a);
std::cout << *reinterpret_cast<int*>(b);
- 621 名前:デフォルトの名無しさん 投稿日:03/02/03 16:33
- Cじゃないし。鬱。
- 622 名前:デフォルトの名無しさん 投稿日:03/02/03 16:34
- それの何処がc言語なんだと小一時間……
- 623 名前:デフォルトの名無しさん 投稿日:03/02/03 16:35
- 宿題なら宿題スレにどうぞ。
#って、移動するならきちんと断ってからね。
- 624 名前:615 投稿日:03/02/03 16:40
- ポインタの定義をしてその後、
fscanf(fp1,"%*s %d",wall_type)と書かれているんだけど
これをポインタじゃない方法で処理ってできますよね?
結局、漏れが何をしたいのかというと
ポインタで書かれているトコを他の書き方に変えてそれを
FORTRANに書き換えたいんだが・・・C初心者でスマソ(´・ω・`)
- 625 名前:デフォルトの名無しさん 投稿日:03/02/03 16:47
- コピペミスッってんのか何なのか、断片的過ぎて何とも。
int wall_type;
fscanf(fp1,"%d", &wall_type);
こうか?
ファイルからの入力関数なんで、FORTRANの入力関数に置き換えるんだろー
- 626 名前:615 投稿日:03/02/03 16:52
- fscanf(fp1,"%*s %d",fluid); /* number of fluids */
fscanf(fp1,"%*s %d",wall_type); /* type of fluid treated as wall */
fscanf(fp1,"%*s %d",wall_p_type); /* type of fluid treated as wall+pressure */
for(i=0;i<*fluid;i++)
いやコピペはミスってないでつ。
- 627 名前:デフォルトの名無しさん 投稿日:03/02/03 16:55
- 凄く濃そう>8B
- 628 名前:デフォルトの名無しさん 投稿日:03/02/03 16:58
- %*sって使ったことないから知らんかったスマソ、scanf…
scanfに渡すのは変数のアドレスなんで、
int *wall_type;
fscanf(fp1,"%d", wall_type);
これを
int wall_type_value;
fscanf(fp1,"%d", &wall_type_value);
こうで良いのでは、って意味。
- 629 名前:デフォルトの名無しさん 投稿日:03/02/03 17:01
- っていうか、見る限りそもそもポインタ変数を使う理由のない状況じゃん。
なんでそこでポインタ変数を使っているのか判らないと正解は出ないと思われ。
- 630 名前:デフォルトの名無しさん 投稿日:03/02/03 17:05
- >>624
C のソースの処理内容を把握して、新規にコードを起こせ。
つーか FORTRAN スレ逝け。
C のコードが何を意味するのかわからないという質問なら、このスレでも
回答はつくかも知れない。
- 631 名前:615 投稿日:03/02/03 17:10
- ぉぉぉ!
>>627タンさんくす!
その書式で書き直せまする?
けどこれ書いた人なんでポインタ使ってんだろ・・・
後からなんか弊害出てきますかねー?
- 632 名前:デフォルトの名無しさん 投稿日:03/02/03 17:27
- > 627タンさんくす!
間違いにしてもワラタ
- 633 名前:デフォルトの名無しさん 投稿日:03/02/03 17:28
- では8Bで書き直そうか
- 634 名前:デフォルトの名無しさん 投稿日:03/02/03 17:30
- wall_type には、fprintf() に入る前に何か代入されてないの?
もしそうでなかったらそれはまともなプログラムじゃないよ。
- 635 名前:デフォルトの名無しさん 投稿日:03/02/03 17:38
- それってぬる(ry
- 636 名前:デフォルトの名無しさん 投稿日:03/02/03 17:38
- ぽ
- 637 名前:デフォルトの名無しさん 投稿日:03/02/03 19:51
- ぽ
- 638 名前:デフォルトの名無しさん 投稿日:03/02/03 20:18
- NULLならいいが、初期化されていない場合、なにが
はいっているかわかったもんじゃないので……
- 639 名前:デフォルトの名無しさん 投稿日:03/02/03 23:12
- >>638
初期化しなかったchar型配列の値を晒すスレ
http://pc2.2ch.net/test/read.cgi/tech/1041327869/l50
- 640 名前:デフォルトの名無しさん 投稿日:03/02/04 06:05
- >>639
腐ってるスレの URL なんか貼るなよ
- 641 名前:635 投稿日:03/02/04 09:42
- やっぱ指摘されちった
- 642 名前:デフォルトの名無しさん 投稿日:03/02/05 22:02
- sub (char *adr1, char *adr2){
int wkint;
char wkchar[3];
memset(wkchar,NULL,sizeof(wkchar));
memcpy(wkchar,adr1,2);
sscanf(adr1,"%x",&wkint);
*adr2 = wkint;
}
こんな感じのサブルーチンがあります。
このルーチンがどのような処理をしているのか、
また、動作するのか?
以上2点をお教えいただきたいです。
厨房ですいみませんがよろしくお願い致し枡。
- 643 名前:デフォルトの名無しさん 投稿日:03/02/05 22:11
- たとえ省略可能でも関数の戻り値の型はかけ。int の四文字くらいなんてことないだろ。
- 644 名前:デフォルトの名無しさん 投稿日:03/02/05 22:13
-
> memset(wkchar,NULL,sizeof(wkchar));
memsetの第二引数の型はint。
intにポインタを渡すな
- 645 名前:デフォルトの名無しさん 投稿日:03/02/05 23:21
- てst
- 646 名前:デフォルトの名無しさん 投稿日:03/02/05 23:28
- int *p;
int w;
p[w]++; ← と 同じ処理をするものはどれかっていう問題で、
選択肢が、
A. ++*( p + w )
B. *( p + w) ++
何ですが、違いがわかりません。教えてください。
- 647 名前:デフォルトの名無しさん 投稿日:03/02/05 23:34
- また釣りか
- 648 名前:デフォルトの名無しさん 投稿日:03/02/05 23:36
- ハァ?
この問題出した奴晒せ。
(*(p+w))++;
- 649 名前:デフォルトの名無しさん 投稿日:03/02/05 23:36
- >647
どれが餌ですか?
- 650 名前:デフォルトの名無しさん 投稿日:03/02/05 23:38
- >646
C言語検定の問題集です。
- 651 名前:デフォルトの名無しさん 投稿日:03/02/05 23:42
- んじゃ回答集を良く余目。
- 652 名前:デフォルトの名無しさん 投稿日:03/02/05 23:47
- 解答集の解説
配列の内容を参照して加算する。
「++*( p + w)」 は、
@*( p + w )の番地を参照し、
A参照した値に+1をする
演算式である。
- 653 名前:デフォルトの名無しさん 投稿日:03/02/05 23:56
- んじゃAが正解?。
- 654 名前:デフォルトの名無しさん 投稿日:03/02/06 00:01
- Aが正解でした。
- 655 名前:デフォルトの名無しさん 投稿日:03/02/06 00:06
- さて>>648はとんだ恥晒しだった訳だが
- 656 名前:デフォルトの名無しさん 投稿日:03/02/06 00:07
- >>653
Bはコンパイル通らないぞ
- 657 名前:デフォルトの名無しさん 投稿日:03/02/06 00:16
- >>646 の問題は自動車免許の学科試験と同じく
注意力を試してるいるんだな(w
- 658 名前:デフォルトの名無しさん 投稿日:03/02/06 00:46
- 正解は (*( p + w ))++ じゃねーの?
- 659 名前:デフォルトの名無しさん 投稿日:03/02/06 00:47
- >>658
俺もそう思った。
- 660 名前:デフォルトの名無しさん 投稿日:03/02/06 00:49
- >>658>>659
(゚Д゚)ハァ? 選択肢に無い解答書いといて何が
「正解は…じゃねーの?」だ。おめでてー頭してんなこいつら。
- 661 名前:デフォルトの名無しさん 投稿日:03/02/06 00:51
- >>660
千と千尋の10頭の豚から両親を捜すと言う問題では「この中にはいない」と言う例外が正解になっていたが。
- 662 名前:デフォルトの名無しさん 投稿日:03/02/06 00:57
- >>660
なっていたが ・・・・・・
- 663 名前:220 投稿日:03/02/06 01:41
- >>660
例え不適当な選択でも点数さえ稼げればいいのだと強硬に主張する
あさましい >>660 が居るスレはここですか?
- 664 名前:663 投稿日:03/02/06 01:41
- 名前欄の番号は無視してくだせぇ
アヒャーー
∧∧
(゚∀゚ )⌒ヽ ≡≡ = = -
,.、,,U‐U^(,,⊃_ /i ≡≡≡ = = -
;'゚∀゚ 、、:、.:、:, :,.: ::`゙:.:゙:`''':,'.´ -‐i = ≡≡≡ = = -
'、;: ...: ,:. :.、.:',.: .:: _;.;;..; :..‐'゙  ̄  ̄
`" ◎ ''`゙ ◎ ´´ - = ≡ = = -
- 665 名前:デフォルトの名無しさん 投稿日:03/02/06 02:00
- p[w]++;
がp[w]を評価しておらず、効果が副作用だけなんでAでも正解といえば正解なんだが。
正直、引っ掛け問題だよなこれ。悪問だと思う。
x = p[w]++;
とかなってたらまた別なんだがな。
- 666 名前:デフォルトの名無しさん 投稿日:03/02/06 02:11
- p[w] = p[w]++;
- 667 名前:デフォルトの名無しさん 投稿日:03/02/06 02:20
- >>666
キタ━━━━━(゚∀゚)━━━━━!!!!
- 668 名前:デフォルトの名無しさん 投稿日:03/02/06 03:35
- #define ぬるぽ NULL
- 669 名前:デフォルトの名無しさん 投稿日:03/02/06 05:11
- >B. *( p + w) ++
* と ++ ってのは、演算子の優先順位は同じだが、結合規則が「右から左」なので、
*( (p+w)++ )
って意味になるのだよワトソ(ry
- 670 名前:デフォルトの名無しさん 投稿日:03/02/06 14:16
- >>669
そんな話は誰もしていない。
- 671 名前:デフォルトの名無しさん 投稿日:03/02/06 16:38
- 中身が"OMAEMONA"という文字の
char s[512]があり、その中身を
16進数でchar hoge[512]に移したいんですけど
どのようにすればよろしいでしょうか?
初心者で申し訳ないですが
おながいいたします。
- 672 名前:デフォルトの名無しさん 投稿日:03/02/06 16:47
- >>671
> 16進数でchar hoge[512]に移したいんですけど
> おながいいたします。
もうすこしネタとばれにくいネタを書け
- 673 名前:671 投稿日:03/02/06 17:05
- >>672
いやこれまじなんすよ・・・・
void Wakaranchi (char *adr1, char *adr2){
int wkint;
char wkchar[3];
bzero(wkchar, sizeof(wkchar));
memcpy(wkchar, adr1, 2);
sscanf(adr1, "%x", &wkint);
*adr2 = wkint;
}
こんな感じのサブルーチンじゃできないっすかね??
初心者でマタークわからんのです。。。
ほんと助けてくんろー!!
おながいします。。。
- 674 名前:デフォルトの名無しさん 投稿日:03/02/06 17:21
- >>671
#include <stdio.h>
void str2hex(char *dest, const char *src)
{
if(*src)
{
do {
dest += sprintf(dest, "%02x ", (unsigned char)src++);
} while(*src);
dest--;
}
*dest = '\0';
}
int main()
{
char s[512] = "OMAEMONA", hoge[512];
str2hex(hoge, s);
puts(s);
puts(hoge);
getchar();
return 0;
}
- 675 名前:デフォルトの名無しさん 投稿日:03/02/06 17:40
- pc2.2ch.net/test/read.cgi/tech/1042640474/674内の
関数str2hexにバッファーオーバーランによるセキュリティ・・・
- 676 名前:デフォルトの名無しさん 投稿日:03/02/06 17:45
- >>575
え? 関数str2hexは無罪だろ。
まさかstrcpyもバッファーオーバーランによるセキュリティがあると思ってる?
- 677 名前:デフォルトの名無しさん 投稿日:03/02/06 17:58
- >>676
まさかstrcpyにバッファオーバーランの危険がないと思ってる??
- 678 名前:674 投稿日:03/02/06 17:59
- そりゃ 「セキュリティ」 は無いわな
- 679 名前:デフォルトの名無しさん 投稿日:03/02/06 18:01
- >>677
皆無とは言わないが、取り立てて言う程のことでもない。
gets() と違い、strcpy() は使い方さえ間違えなければ問題は絶対発生しない。
- 680 名前:デフォルトの名無しさん 投稿日:03/02/06 18:03
- セキュリティの問題とクラッシュの問題を混同している >>675 >>677 が居る
スレはここですか?
- 681 名前:671 投稿日:03/02/06 18:35
- >>674サソ
ご丁寧にありがdございます。
作成いただいたプログラムを走らせたところ
OMAEMONO
4c 4d 4e 4f 50 51 52 53
↑このような結果になりました。
これって、アドレスかなんかなんでしょうか?
厨房でよくわからずご迷惑お掛け致しますが
御教授お願い致します。
- 682 名前:デフォルトの名無しさん 投稿日:03/02/06 18:46
- dest += sprintf(dest, "%02x ", (unsigned char)src++);
ここ
dest += sprintf(dest, "%02x ", (unsigned char)*src++);
だべ。
- 683 名前:デフォルトの名無しさん 投稿日:03/02/06 18:53
- >>681
訊く前に、674 がどういうプログラムなのか読み取ってみようとは
思わないのか?
- 684 名前:デフォルトの名無しさん 投稿日:03/02/06 18:55
- >>681
ちょとワラタ
あんさん…じぶんでゆうといてそりゃ…
- 685 名前:デフォルトの名無しさん 投稿日:03/02/06 19:17
- >>684
いや、あれは確かにアドレスの成れの果てだぞ
- 686 名前:681 投稿日:03/02/06 19:21
- >>682サソ
ありがとんごぜぇます。
>>683サソ
ヨミトレネェンダヨォォ...
おせぇてくれよ。処理内容を。
ニホンゴで。
>>684
ワライゴトジャネーヨ
ヽ(`Д´)ノ ウワァァン!!
- 687 名前:デフォルトの名無しさん 投稿日:03/02/06 19:26
- >>686
処理内容なら、あんたが自分で言ったぞ。
- 688 名前:デフォルトの名無しさん 投稿日:03/02/06 19:28
- >>686
何がわからないのかも述べず、単に教えてくれと繰り返すだけの香具師には、
説明してやる気にはなかなかなれないもんだ。
- 689 名前:デフォルトの名無しさん 投稿日:03/02/06 19:29
- 確かにアドレスかなんかなだな。断言できる。
- 690 名前:デフォルトの名無しさん 投稿日:03/02/06 19:42
- 素朴な疑問なんだが、「初心者」で処理を提示されても
理解できないような香具師が、なんでまた
こんな問題を解決しなければならないんだ?
>中身が"OMAEMONA"という文字の
>char s[512]があり、その中身を
>16進数でchar hoge[512]に移したいんですけど
>どのようにすればよろしいでしょうか?
それがもし、課題かなにかなら擦れ違いだし、
仕事かなにかならこんなところで他人に頼ってちゃダメだろ。
それともなにか? 今後何か出るたんびにここで聞こうってのか?
- 691 名前:デフォルトの名無しさん 投稿日:03/02/06 19:56
- >>690
そりゃぁ「あっしに聞け」だからな。
- 692 名前:デフォルトの名無しさん 投稿日:03/02/06 20:33
- >>1 に書くべきことを >>2 に書いてしまった 1 が全部悪い
- 693 名前:デフォルトの名無しさん 投稿日:03/02/06 21:29
- ascU code.
- 694 名前:デフォルトの名無しさん 投稿日:03/02/06 21:41
- memcpy(hoge,s,sizeof(hoge));
関数はmemcpy,strncpyどっちかだな。
strcpyはサイズ指定出来ないから領域破壊の元だ。やめとけ。
つうか、技術評論社のC言語辞典読んどけ。
- 695 名前:デフォルトの名無しさん 投稿日:03/02/06 21:54
- >>679
そんなこと言い出したら gets() だって使い方間違えなきゃ問題は絶対発生しないぞ。
- 696 名前:デフォルトの名無しさん 投稿日:03/02/06 22:30
- >>695
gets() を呼び出したらそれだけで問題の回避は不能だとあれほど
- 697 名前:デフォルトの名無しさん 投稿日:03/02/06 22:37
- だからCなんか捨ててC++に鞍替えしれとあれほど
- 698 名前:デフォルトの名無しさん 投稿日:03/02/06 22:55
- >>694
getsとstrcpyは外界と接点があるかどうかという点で大きく異なる。
strcpyは使い方さえ誤らなければ安全に使うことが可能。
外界と接点がないところで使えば、コードで安全であることを保障できる。
getsは外界と接点があるゆえに、コードだけでは安全であることを保証できない。
- 699 名前:デフォルトの名無しさん 投稿日:03/02/06 23:22
- gets用のバッファを4ギガ分用意すれば、
環境によってはもんだいは起きない。
- 700 名前:デフォルトの名無しさん 投稿日:03/02/06 23:32
- >strcpyはサイズ指定出来ないから領域破壊の元だ。やめとけ。
正気か?
- 701 名前:デフォルトの名無しさん 投稿日:03/02/06 23:49
- >>699
何を問題と定義するかによるけどね。
- 702 名前:デフォルトの名無しさん 投稿日:03/02/07 00:33
- まともに C やってる人で、領域破壊の可能性がある状況で strcpy() を使う
香具師が居るとは思えないが・・・。
- 703 名前:デフォルトの名無しさん 投稿日:03/02/07 00:34
- >>699
そういう阿呆な事をする前に、fgets() の使用を検討しろ。
- 704 名前:デフォルトの名無しさん 投稿日:03/02/07 01:35
- >>702
うん、だから普通はstrmove()を作る
- 705 名前:デフォルトの名無しさん 投稿日:03/02/07 01:39
- strcpyなんてC特有の関数だよなあと思った
- 706 名前:デフォルトの名無しさん 投稿日:03/02/07 03:18
- >>702
getsと違い、対策すれば完全に防げるが。
- 707 名前:デフォルトの名無しさん 投稿日:03/02/07 04:43
- >>706
>>702
>領域破壊の可能性がある状況で
日本語が理解できないなら即ち氏ね
- 708 名前:デフォルトの名無しさん 投稿日:03/02/07 05:34
- >>707
ああスマン
つっこまれるまで気づかなかった。
- 709 名前:デフォルトの名無しさん 投稿日:03/02/07 09:38
- 結論
gets()は使うな。
strcpy()で領域破壊の可能性を拭い切れないならstrdup()でも使え。
だからと言ってstrncpy()は別な問題を発生させるから心して使え。
いっそ、sprintf()で%.*sでも使うほうがよっぽどましだ。
strcpy()が一切使えないなんていってると、strlen()さえ使えないことになるぞ。
こんなところかな。
- 710 名前:デフォルトの名無しさん 投稿日:03/02/07 13:50
- >>709
> strdup()でも使え。
そういう人が使うとメモリリークのバグをうみそう・・・
- 711 名前:デフォルトの名無しさん 投稿日:03/02/07 16:26
- >>710
バッファオーバーランよりはマシ。
もっともそれだとバグに気が付かなくて、コードの修正も本人の技量向上も望めそうにないが。
- 712 名前:デフォルトの名無しさん 投稿日:03/02/07 17:09
- >>711
そそ、それが悩みの種。
- 713 名前:デフォルトの名無しさん 投稿日:03/02/07 18:27
- イオン導入を考えております。
最適なビタミンC誘導体は何ですか?
また、何所で手に入りますか?
- 714 名前:デフォルトの名無しさん 投稿日:03/02/07 18:56
- >>713
ネタはageで。
- 715 名前:デフォルトの名無しさん 投稿日:03/02/07 20:11
- >>713
あなたの脳髄が最適です。
あなたの尊い犠牲によって入手できます。
- 716 名前:デフォルトの名無しさん 投稿日:03/02/07 21:02
- ちょっと質問させてください。
char型の配列 10.111 を
double型のデータ 10.111 に変換する方法ってあります?
- 717 名前:デフォルトの名無しさん 投稿日:03/02/07 21:03
- strtod
- 718 名前:デフォルトの名無しさん 投稿日:03/02/07 21:05
- strtod() なんて面倒っちい
atof() でええやん
- 719 名前:デフォルトの名無しさん 投稿日:03/02/07 21:06
- なんで面倒なのかわからん
- 720 名前:デフォルトの名無しさん 投稿日:03/02/07 21:07
- ぬるぽ与えるのが面倒
- 721 名前:716 投稿日:03/02/07 21:17
- なるほど。ありがとうございます。
- 722 名前:720 投稿日:03/02/07 21:22
- 殴られずに済んだぜ( ̄ー ̄)
- 723 名前:デフォルトの名無しさん 投稿日:03/02/07 22:37
- for文を使って、1から1000までの7の倍数を表示して、
変数sevenが49の倍数の時に改行、というプログラムをつくりたいのですが、
いまいちうまく行きません。ソースの一部を貼ります。
これをコンパイル&実行するとDOS窓にずらーっと数字が出てきてとまりません。
どこがおかしいのでしょうか?
まだfor文の使い方がよくわからないところもあるので、
どうやればできるのか、教えていただけないでしょうか?
for(seven=1; 1000>=seven; seven*7)
{
if((seven%49)==0)
{
printf("%d、\n",seven);
}
else
{
printf("%d、",seven);
}
}
- 724 名前:デフォルトの名無しさん 投稿日:03/02/07 22:39
- >>723
seven*=7
- 725 名前:デフォルトの名無しさん 投稿日:03/02/07 22:41
- #include <stdio.h>
int main()
{
int seven;
for(seven=1;seven<=1000;seven++){
if(!(seven%7)){
printf("%5d",seven);
if(!(seven%49))
printf("\n");
}
}
return 0;
}
- 726 名前:725 投稿日:03/02/07 22:42
- 1ずつ足す必要ないじゃん・・・
- 727 名前:723 投稿日:03/02/07 22:47
- >>724
seven*=7でなんで=が必要なのでしょうか?
for文内では必要なのですか?
>>725
その方法もありましたね。
気づきませんでした。
そっちのほうが早く処理できるかな?
それは7ずつ足せばいいということですか?
seven=seven+7
これで下のif文を省いて・・・
今からいろいろ試してきます。
- 728 名前:724 投稿日:03/02/07 22:51
- >>727
seven*7
だけでは、いつまでたってもsevenの中身は変わらないよ。
やるなら
seven=seven*7
これは
seven*=7
と書ける・・・・
でもこれだと、1,7,49・・・になっちゃうね・・・・
seven=seven+7
が正解だね・・・・欝
- 729 名前:723 投稿日:03/02/07 22:58
- >>728
今試したらそうなっちゃいました(笑)
なので>>725さんの方法でやりました。
seven=seven+7で。
今まで変数はnとかiだったんですけど変数をsevenとかに
するとソースが書きやすいですね。
- 730 名前:デフォルトの名無しさん 投稿日:03/02/07 22:59
- >>698
> getsとstrcpyは外界と接点があるかどうかという点で大きく異なる。
で、どこまでが外界なんだ ?
自分が作ったファイルを読むんなら gets() だって安全じゃねーのか ?
他のプロセスが作ったメモリーマップドファイルの内容を strcpy() するのは危険じゃねーのか ?
少なくとも、strcpy() が外界と接点がないと思い込む方が危険だよ。
- 731 名前:723 投稿日:03/02/07 23:18
- 質問ではないのですが、
for(seven=1; seven<=1000; seven=seven+7)
だと1、8、・・・となってしまうので最初の初期化はseven=0;にしないと
ひとつずれてしまいました。
それだけです。
- 732 名前:デフォルトの名無しさん 投稿日:03/02/07 23:53
- >>730
第三者が存在する場合に、サイズ計算せずにstrcpy()使うのが悪い。
計算した上でstrcpy()が危険なら、安全な関数は標準ライブラリにはない。
つまり、文字列の終端までアドレスが有効かを調べなきゃいけないということ。
strcpy()はサイズを事前に計算するなり、strncpy()を使えばいい。
gets()は、実際にバッファが溢れない限り検知する手段がないのが問題。
- 733 名前:デフォルトの名無しさん 投稿日:03/02/08 00:01
- >>730
>他のプロセスが作ったメモリーマップドファイルの内容を strcpy() するのは危険じゃねーのか ?
もちろん危険だ。そのままやっちゃうとアウトだろうね。
普通そんなことする前にstrlen使ってサイズを調べたりしないか?
想定外の異常なサイズだとエラー出して止まるなり何なり実装するんじゃないか?
それは外界と接点があるところだろう。
だったら何のチェックもせずにstrcpyを使うのは危険極まりないぞ。
「使い方さえ間違わなければ」とはそういう意味で使ってる。
>自分が作ったファイルを読むんなら gets() だって安全じゃねーのか ?
そのファイルが何らかの要因で書き換わらない保証はあるのか?
そうなったときにgetsだとバッファオーバーランを防ぐ方法はないぞ。
- 734 名前:デフォルトの名無しさん 投稿日:03/02/08 00:24
- libsafe 使っとけ。
- 735 名前:デフォルトの名無しさん 投稿日:03/02/08 01:07
- >>733
>普通そんなことする前にstrlen使ってサイズを調べたりしないか?
'\0'で終わってるか分からない文字列にstrlen()は使わない
つーか、何が入ってるか分からない可能性のあるデータは
効率が悪くても、strncpy()かmemcpy()の、その場に適してる方を使う
- 736 名前:デフォルトの名無しさん 投稿日:03/02/08 01:21
- で、なんでまたstrncpy()なんて使うんだ?
- 737 名前:DD 投稿日:03/02/08 01:25
- #include <stdio.h>
int main(void){
int item[5]={3,1,6,7,2},a,b,t,count;
for(a=1;a<count;a++)
for(b=count-1;b>=a;b--){
if(item[b-1]>item[b]){
t=item[b-1];
item[b-1]=item[b];
item[b]=t;
}}
for(t=0;t<count;t++)printf("%d",item[t]);
return 0;}
- 738 名前:DD 投稿日:03/02/08 01:26
- バブル
- 739 名前:デフォルトの名無しさん 投稿日:03/02/08 01:50
-
char *a = "100";
int b = 100;
この2つの100を一箇所の#defineで管理する方法ってあるの?
- 740 名前:デフォルトの名無しさん 投稿日:03/02/08 02:06
- >>735
> '\0'で終わってるか分からない文字列に
そもそも\0で終わってない可能性のあるものを文字列として扱おうとするのが間違い。
- 741 名前:デフォルトの名無しさん 投稿日:03/02/08 02:08
- >>739
C-FAQ嫁。
#define Str(x) #x
#define Xstr(x) Str(x)
#define NUM 100
char *a = Xstr(NUM);
int b=NUM;
- 742 名前:デフォルトの名無しさん 投稿日:03/02/08 02:08
- >>730
ファイルを読むのになんでgetsを使うの??
- 743 名前:740 投稿日:03/02/08 02:12
- 文字列として扱おうとしているものを、\0で終わっていない可能性のあるままにしておくのが間違い。
と言うべきか。
- 744 名前:デフォルトの名無しさん 投稿日:03/02/08 02:18
- >>743
じゃstrcpy()で、ええやん
- 745 名前:デフォルトの名無しさん 投稿日:03/02/08 02:33
- お望みとあらば。
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>720
- 746 名前:デフォルトの名無しさん 投稿日:03/02/08 02:33
- このスレ、ばかばっか。
- 747 名前:デフォルトの名無しさん 投稿日:03/02/08 02:58
- で、strcpyは悪なの?
- 748 名前:デフォルトの名無しさん 投稿日:03/02/08 03:17
- >>747
まあ、strncpy 使えってこった。
- 749 名前:デフォルトの名無しさん 投稿日:03/02/08 11:33
- strncpy()使う奴は馬鹿。
- 750 名前:デフォルトの名無しさん 投稿日:03/02/08 11:37
- ホコリ臭い議論だ。Cはまだこんなことで悩めるのか。
- 751 名前:デフォルトの名無しさん 投稿日:03/02/08 11:51
- >>733
> >>730
> >他のプロセスが作ったメモリーマップドファイルの内容を strcpy() するのは危険じゃねーのか ?
> もちろん危険だ。そのままやっちゃうとアウトだろうね。
> 普通そんなことする前にstrlen使ってサイズを調べたりしないか?
> 想定外の異常なサイズだとエラー出して止まるなり何なり実装するんじゃないか?
> それは外界と接点があるところだろう。
> だったら何のチェックもせずにstrcpyを使うのは危険極まりないぞ。
> 「使い方さえ間違わなければ」とはそういう意味で使ってる。
> >自分が作ったファイルを読むんなら gets() だって安全じゃねーのか ?
> そのファイルが何らかの要因で書き換わらない保証はあるのか?
> そうなったときにgetsだとバッファオーバーランを防ぐ方法はないぞ。
- 752 名前:デフォルトの名無しさん 投稿日:03/02/08 12:05
- >>733
> そのファイルが何らかの要因で書き換わらない保証はあるのか?
そんな極論言い出したら、あんたが strcpy() でコピーしようとしているメモリーだってデバッガで書き換えられるかも知れんぞ。
発生確率に違いがあるかも知れんが、本質は一緒だよ。
>>730 に書いた通り、「どこまでを外界と見なす」かの問題だよ。
- 753 名前:デフォルトの名無しさん 投稿日:03/02/08 13:07
- >>752
バカですか?
デバッガ勝手に動かされたら、脆弱性以前の問題なのだが。
それを確率とか逝ってるし。
- 754 名前:デフォルトの名無しさん 投稿日:03/02/08 13:12
- >>730
>自分が作ったファイルを読むんなら gets() だって安全じゃねーのか ?
おまえは 「gets() は必ず "自分が作ったファイル" を読む」
という仕様の関数を書くのか?
お前と一緒に仕事する奴に同情するよ・・・
- 755 名前:デフォルトの名無しさん 投稿日:03/02/08 13:22
- >>753
本質が見えてない奴だな。
システムとして、「そのファイルが何らかの要因で書き換わらない保証」ぐらいできるだろ。
>「どこまでを外界と見なす」かの問題だよ。
と言うのをちゃんと理解しろ。
>>754
> おまえは 「gets() は必ず "自分が作ったファイル" を読む」
> という仕様の関数を書くのか?
日本語喋れ。
お前と一緒に仕事できる奴なんていないんだろうな...。(藁
- 756 名前:デフォルトの名無しさん 投稿日:03/02/08 13:27
- seven+=7にしろや。
- 757 名前:デフォルトの名無しさん 投稿日:03/02/08 13:30
- 結局さ、ライブラリで考えた場合、
・仕様をきちんと定義する。
・仕様外、想定外の利用をされた場合の救済策を充分練る。
のは当たり前でしょう。
その上で、完全に安全なものは作れないのだから、
・仕様を徹底して異常な利用はさせない。
・定期的に利用方法、仕様を再検討する。
と言った運用で逃げるしかないっしょや。
- 758 名前:デフォルトの名無しさん 投稿日:03/02/08 13:34
- まあ道具は使う人しだいって言うことだろ。
あふぉが使えばアフォなりだよ。
gets()が悪いわけではない。
- 759 名前:デフォルトの名無しさん 投稿日:03/02/08 13:37
- いや、gets()は悪い。
- 760 名前:ダンディ坂野 投稿日:03/02/08 13:40
- ゲッツ
- 761 名前:723 投稿日:03/02/08 13:52
- >>756
seven=seven+7
は
seven+=7なんですか?
つか、なんでですか?
- 762 名前:デフォルトの名無しさん 投稿日:03/02/08 13:55
- >>733
> そのファイルが何らかの要因で書き換わらない保証はあるのか?
アプリの一部として提供しているファイルを書き換えたとすれば、アプリを破壊されたのも同然です。
実行ファイルを書き換えられたのと本質的な相違はありません。
gets()の方がfgets()などに比べて扱いやすく、効率もよいのは確かなので、使いこなせるだけの能力
を持ち合わせた人ならば、適切に使うべきなのでは?
- 763 名前:デフォルトの名無しさん 投稿日:03/02/08 14:00
- >>761
Cの文法がそうだから。
- 764 名前:デフォルトの名無しさん 投稿日:03/02/08 14:01
- >733
strcpyすると危険なメモリ領域は、strlenしても危険だとおもう。
- 765 名前:デフォルトの名無しさん 投稿日:03/02/08 14:07
- もう春だね。
- 766 名前:デフォルトの名無しさん 投稿日:03/02/08 14:13
- gets()擁護の人に聞きたいんだけど、
なんでファイルからの入力に標準入力を使いたがるの?
しかもアプリの一部として提供しているファイルを?
それってつまり、利用者がパイプラインを使ったりすることを妨げるよね。
逆に、標準入力からでもfgets()使う方は理解できるんだけどねぇ。
- 767 名前:デフォルトの名無しさん 投稿日:03/02/08 14:13
- アセンブラの方が危険だろ
まあ馬鹿に刃物持たすなってことだ
- 768 名前:デフォルトの名無しさん 投稿日:03/02/08 14:17
- 何故いきなりアセンブラが?!
- 769 名前:デフォルトの名無しさん 投稿日:03/02/08 14:17
- >>755
>日本語喋れ。
そんなに言っている事が分からんか? じゃあ、実例。
void myfunc()
/* 注意!: この関数を呼ぶ時は必ず stdin が "myfile.txt" を指していなくてはならない。*/
{ char b[8]; gets(b); }
こんな関数、誰も使ってくれないし、自分も使いたくない。
間違いなくバクの温床。
- 770 名前:デフォルトの名無しさん 投稿日:03/02/08 14:27
- 機械語はあふぉには使えんから
逆に安心だぞ。
- 771 名前:デフォルトの名無しさん 投稿日:03/02/08 14:27
- >>766
> それってつまり、利用者がパイプラインを使ったりすることを妨げるよね。
ユーザの誤使用を回避するには有効かも。
普通は専用の子プロセスを使ってファイルを読むことになるだろうけど。
単にfgets()を使えば安心と考えている人が多いのがむしろ問題としては大きいと
思う。
改行で終わったのか、ファイル終端で終わったのか、バッファが足りなかったのか、
エラーが発生したのか、一切調べずに得られた文字列を妄信する馬鹿がいかに多い
ことか...。
- 772 名前:デフォルトの名無しさん 投稿日:03/02/08 14:29
- 機械語?バイナリコーディングするんか?
- 773 名前:デフォルトの名無しさん 投稿日:03/02/08 14:30
- >>766
細かい事だが教えてくれ。
世間一般では「パイプ」の事を「パイプライン」とも呼んでいるのか?
俺は「パイプ」と「パイプライン」はまったく別のものだと思っていたが?
- 774 名前:デフォルトの名無しさん 投稿日:03/02/08 14:31
- >>771
激しくナンセンス。持論を擁護するためにそこまで阿呆に成り下がらなくてもいいだろうに。
それに、そんな馬鹿がgets()使ったらどう思う?
- 775 名前:デフォルトの名無しさん 投稿日:03/02/08 14:32
- パイプ(|)で繋げられた連(ライン)だからパイプラインでいいんじゃないのか?
- 776 名前:デフォルトの名無しさん 投稿日:03/02/08 14:35
- たとえば
C3xxxx
が無条件ジャンプとか....
- 777 名前:デフォルトの名無しさん 投稿日:03/02/08 14:36
- >>771
>単にfgets()を使えば安心と考えている人が多いのがむしろ問題としては大きいと
お前、「自動車事故」と「自動車自体の欠陥」の違いが分からんのか?
全く次元の違う話だろうが。
- 778 名前:デフォルトの名無しさん 投稿日:03/02/08 14:39
- >>776
あ、Z80までならバイナリコーディングしてたよ。
尤も、精々100-200バイト程度だと思ったけど。
ジャンプ命令なんかは予め00入れておいて、
後から書き換えるから2パスだけどね。
- 779 名前:デフォルトの名無しさん 投稿日:03/02/08 16:35
- Rubyを使えばこんなくだらないことで悩む必要がなくなるのに。
- 780 名前:デフォルトの名無しさん 投稿日:03/02/08 16:41
- >>779 RubyでOS書いてみ
- 781 名前:デフォルトの名無しさん 投稿日:03/02/08 16:50
- >>769
あの日本語から、これを想像しろと ?
こんな奴が「一緒に仕事する奴に同情するよ」とかほざいていたのか ?
gets() 使うなら、これぐらいしろと言うのなら別に「そりゃそうだ」と思うだけだ。
でも、俺は gets() が常に安全だと言ってるわけじゃなくて、strcpy() と本質的に変わらないと言ってるだけだ。
(つまり、>>679 がアフォだと言うことだ。)
そこは理解できているのか ?
- 782 名前:デフォルトの名無しさん 投稿日:03/02/08 16:53
- >>764
誰でも判っていることとは思うが、strcpy() が危険な場合に常に strlen() が危険とは限らない。
- 783 名前:デフォルトの名無しさん 投稿日:03/02/08 16:58
- >>781
gets()の安全な使い方のサンプルを提示してください。
- 784 名前:デフォルトの名無しさん 投稿日:03/02/08 17:04
- 2つの複素数a+bi,c+diの除算(a+bi)/(c+di)を行いその結果を複素数e+fiに代入する。
複素数は2つの実数を使って表現せよ。”i”は虚数単位である。
という問題なのですが全くできません。お願いします。
- 785 名前:デフォルトの名無しさん 投稿日:03/02/08 17:17
- >>784
マルチ氏ね
- 786 名前:デフォルトの名無しさん 投稿日:03/02/08 17:41
- #define gets(x)
gets(s);
- 787 名前:デフォルトの名無しさん 投稿日:03/02/08 18:04
- ↓これって未定義?
- 788 名前:デフォルトの名無しさん 投稿日:03/02/08 18:14
- int m;
- 789 名前:デフォルトの名無しさん 投稿日:03/02/08 18:17
- javaによって皆さんの抱えている問題のほとんどを解決できます。
- 790 名前:デフォルトの名無しさん 投稿日:03/02/08 18:18
- Rubyならね
- 791 名前:デフォルトの名無しさん 投稿日:03/02/08 18:31
- RubyはCで書かれています
http://www.ruby-lang.org/ja/FAQ/rubyfaq-jp-8.html
- 792 名前:デフォルトの名無しさん 投稿日:03/02/08 18:32
- >>781
>あの日本語から、これを想像しろと ?
つーか、俺は
>自分が作ったファイルを読むんなら gets() だって安全じゃねーのか ?
の一文から想像できた使用方法は >>769 のようなコードしか無かったのだが。
それなら >>781 はどういう使用方法を想定していたのか、
ぜひとも教えてもらいたいものだ。
- 793 名前:デフォルトの名無しさん 投稿日:03/02/08 18:32
- 符号付整数jをn〈整数)ビット右に算術シフトし結果を符号付整数kに代入するcの構文を書け,なのですがどうすればいいんですか?
- 794 名前:デフォルトの名無しさん 投稿日:03/02/08 18:37
- >>793
k=j>>n;
- 795 名前:デフォルトの名無しさん 投稿日:03/02/08 18:47
- >>793
処理系依存
- 796 名前:デフォルトの名無しさん 投稿日:03/02/08 20:11
- >>795
signed をシフトすると必ず算術シフトになった気がするんだが。
標準仕様にはなってなかったっけ?
- 797 名前:デフォルトの名無しさん 投稿日:03/02/08 20:19
- >>796
signedは正の数である時のみ結果が保証される。負の数をシフトした
場合は処理系依存。
- 798 名前:デフォルトの名無しさん 投稿日:03/02/08 20:19
- >>796
ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00050.html
だそうだ。このページが正しいかどうかは知らんが。
- 799 名前:デフォルトの名無しさん 投稿日:03/02/08 21:22
- >>783
一行のサイズが、バッファを越えないなら安全だよ。
(頼むから、>>733 へループしないでくれよな。)
>>791
別に、上に書いてあることが保証できればいいんじゃないの ?
と言うか、「gets() が常に安全ではない」という主張に反対してるわけじゃないぞ。
「gets() が読むファイルの内容が保証できるなら、gets() だって安全に使うことができる。」と言うだけのことだ。
(何回書けばわかるんだ ?)
- 800 名前:デフォルトの名無しさん 投稿日:03/02/08 22:11
- だから、具体的なサンプルを提示してよ。
っていうか、なんでファイルの読みこみにわざわざ標準入力を使うのかさ。
- 801 名前:577 投稿日:03/02/08 22:13
- いやいや、C言語検定3級うけてきますた。
超楽勝ですた。間違った問題は
・配列の宣言の際に、初期化子の数が配列の要素数より大きい場合は、多い分が無視される。○か×か?
・2次元配列a[サイズ1][サイズ2]のサイズ指定は、サイズ1は省略できるがサイズ2は省略できない。○か×か?
の二問くらいの予感。
- 802 名前:デフォルトの名無しさん 投稿日:03/02/08 22:29
- >>801
間違えるなよ。
- 803 名前:577 投稿日:03/02/08 22:39
- >>802
もう一問間違えたっぽい。
C言語はALGOLを元につくられた。○か×か?みたいな問題
- 804 名前:デフォルトの名無しさん 投稿日:03/02/08 22:43
- B言語でしょ?
答えは×
- 805 名前:デフォルトの名無しさん 投稿日:03/02/08 22:47
- >>804
正解
UNIX開発者のひとりのKenがつくったんだっけ?>B言語
- 806 名前:577 投稿日:03/02/08 22:51
- >>804
ゴメン、問題が確かじゃないから、もしかしたらALGOLの流れを汲むか?てな表現だったかもしれない。
今検索してみたら○っぽい、と思った。
まあ終わったからスッキリ!!どうせなので次回は2級受けるつもりです
- 807 名前:804 投稿日:03/02/08 22:54
- やった。
高1だけど受けてみようかな。
C言語検定。
閑話休題、質問なんですけど
#define hoge 5
マクロを定義するときってhoge=5になるじゃないですか。
で、マクロの定義はもっと複雑な作業をやらせることができるんですか?
例えばよくテキストエディタで「この条件に一致するものには○○をする」
ってやつとかのことです。
- 808 名前:デフォルトの名無しさん 投稿日:03/02/08 23:03
- ↓のような2値化処理を高速化したいのですが、どうするのがいいですか?
----------------------------------------------
#define SIZE 65536
unsigned char src[SIZE], dst[SIZE];
int i, value;
value = 128;
for (i=0; i<SIZE; i++)
dst[i] = ((src[i] >= value)?255:0);
----------------------------------------------
とりあえず、
A ?:の代わりにif-elseを使用
→ ちょっと速くなった?ただの誤差かも
B forループ内の処理を256ずつにしてループのオーバーヘッドを減らした
→ そこそこ速くなった
C unsigned long *に変換して、マスク処理で各バイト毎に判定
→ ちょっと速くなったけど、longで読んだ意味無し?
なんてのを試してみました。
- 809 名前:デフォルトの名無しさん 投稿日:03/02/08 23:10
- 何回書けば分かるんだ?
だれも >>799 が「gets()が常に安全だ」等と主張しているとは言っていない。
皆が問題にしている部分は
>>752
>発生確率に違いがあるかも知れんが、(安全性について)本質は一緒だよ
と言ってる部分だ。
gets() の場合、>>769 のような非現実的なコードを書かない限り、
プログラマは安全性を保証できない。
strcpy() の場合、終端等、プログラムを設計する時点で普通に
気をつけていれば安全性を保証できる。
皆、これは「発生確率(何だそりゃ?)の差」等というものではなく、
絶対的な違いだと考えているって事。
単純に「安全性の濃淡」で話を一くくりにできるのなら、
極端な話「そのコードを一回も実行しない事」が仕様となれば
どんなコードも「発生確率に違いがあるかも知れんが、本質は一緒だよ」
と言える事になる。
- 810 名前:デフォルトの名無しさん 投稿日:03/02/08 23:11
- >>808
初期化しとけば代入の回数が減る
ポインタ使った方が速いかも
- 811 名前:デフォルトの名無しさん 投稿日:03/02/08 23:18
- >>808
計算後の値をあらかじめいれとけ。
- 812 名前:デフォルトの名無しさん 投稿日:03/02/08 23:28
- >>807
折れ中3だけど
お前折れよりヒドイな
折れ以下の香具師がいて安心した
- 813 名前:デフォルトの名無しさん 投稿日:03/02/08 23:34
- >>808
811とかぶるかもしれないけど、判定元がcharなら判断後の値のテーブルを作る。
条件分岐にしないで、テーブル参照だけにすれば速いかと。
dst[i] = ((src[i] >= value)?255:0);
の代わりに
dst[i] = table[src[i]];
って事ね。
- 814 名前:デフォルトの名無しさん 投稿日:03/02/08 23:51
- >>809
非現実的かも知れんが、そう言うコード (gets() が安全である) は書けるんだろ ?
これには、Yes or No どっちなんだ ?
No と言うなら、書けない事を証明してくれ。
Yes と言うなら、gets() が安全である時があることには同意するんだよな。
つまり、strcpy() も gets() も「安全である時もそうでない時もある」と言うだけのことだろ。
> 皆、これは「発生確率(何だそりゃ?)の差」等というものではなく、
> 絶対的な違いだと考えているって事。
お前だけじゃねーのか ? (藁
> 単純に「安全性の濃淡」で話を一くくりにできるのなら、
> 極端な話「そのコードを一回も実行しない事」が仕様となれば
> どんなコードも「発生確率に違いがあるかも知れんが、本質は一緒だよ」
> と言える事になる。
何言いたいのかよくわからんよ。
- 815 名前:デフォルトの名無しさん 投稿日:03/02/08 23:52
- だからjava使えって言ってるのに。
- 816 名前:デフォルトの名無しさん 投稿日:03/02/08 23:55
- >>813
テーブル参照 = メモリアクセスだからキャッシュに載ると言ってもちょっと遅いような気が...。
- 817 名前:デフォルトの名無しさん 投稿日:03/02/08 23:57
- >>808
こんな短いループを高速化したいなら、インラインアセンブラの出番かと。
- 818 名前:デフォルトの名無しさん 投稿日:03/02/09 00:00
- 255movより符号付にしてdec
- 819 名前:デフォルトの名無しさん 投稿日:03/02/09 00:03
- >>808
とりあえず根本的な対策。
(これは別に一休さんみたいな
とんちの利いた解答という訳ではなく、
あくまでマジレス)
1.その2値化処理自体を必要としない方法を考える。
2.ハードの力を使う。
- 820 名前:デフォルトの名無しさん 投稿日:03/02/09 00:09
- >>808
Cはだめじゃない?あらかじめlongの配列として宣言しておかないと。
- 821 名前:デフォルトの名無しさん 投稿日:03/02/09 00:13
- とりあえずMMXでも。
- 822 名前:デフォルトの名無しさん 投稿日:03/02/09 00:14
- Rubyを使えば速くなるのに
- 823 名前:デフォルトの名無しさん 投稿日:03/02/09 00:16
- 符号付にしてシフトするだけ
- 824 名前:デフォルトの名無しさん 投稿日:03/02/09 00:21
- >>814
・・・付き合うのやめた。あとは勝手にやってくれ。
(どうせ >>814 も実際は現場で gets() を
使っていないのは分かりきっているし)
- 825 名前:デフォルトの名無しさん 投稿日:03/02/09 00:24
- >>814は現場ではCなんか使っていません。
- 826 名前:808 投稿日:03/02/09 00:37
- >>809
初期化とは、最初にdstを0(or255)に初期化して代入処理を減らすということですか?
memset使ったら逆に遅くなりました(;´Д`)
ポインタは試してないので、明日にでも試してみます。
>>811 >>813
ウチの環境だと、条件分岐にしたときと殆ど同じ速度でした(;´Д`)
>>817
インラインアセンブラは使ったことがないので、勉強してみます。
>>818-823
ヽ(`Д´)ノ ウワァァァァン
あ、valueは0〜255までの任意の値です。128以外もあり得ます。
- 827 名前:デフォルトの名無しさん 投稿日:03/02/09 00:40
- >>826
基本的な事だけどアンロールしてる?
- 828 名前:デフォルトの名無しさん 投稿日:03/02/09 01:05
- >>827
アンロールって何ですか??
- 829 名前:デフォルトの名無しさん 投稿日:03/02/09 01:05
- だからさ、限定条件に置かないと安全に使うことができないgets()を
使わないといけない理由なんてないでしょ。
つまり、始めからgets()擁護は机上の空論。
- 830 名前:577 投稿日:03/02/09 01:17
- getsってモテモテですね
- 831 名前:デフォルトの名無しさん 投稿日:03/02/09 01:23
- malloc()/free()にゃ負けるよ
- 832 名前:デフォルトの名無しさん 投稿日:03/02/09 01:28
- >>824
>(どうせ >>814 も実際は現場で gets() を使っていないのは分かりきっているし)
もちろん、普通は gets() なんか使わんよ。
(これぐらいは、>>695 の「そんなこと言い出したら」のくだりでわかりそうなもんだが...。)
>>829
ここまでくるとネタか ?
> だからさ、限定条件に置かないと安全に使うことができないgets()を
> 使わないといけない理由なんてないでしょ。
> つまり、始めからgets()擁護は机上の空論。
じゃ聞くが、strcpy() は限定条件を置かなくても安全に使えるのか。
そう言う意味で、なんで gets() は安全じゃなくて、strcpy() は絶対安全なんだ ?
(>>679 参照)
ところで誰が gets() を擁護してるの ?
俺は、「gets() が安全な (* 場合も *) ありえる。」と書いてるだけだぞ。
(>>781, >>799, >>814 見れ。何回書けばわかるんだ ?)
- 833 名前:デフォルトの名無しさん 投稿日:03/02/09 01:28
- 過去一番モテたのは scanf。
- 834 名前:デフォルトの名無しさん 投稿日:03/02/09 01:29
- NULLだろ、ぬる。
- 835 名前:デフォルトの名無しさん 投稿日:03/02/09 01:30
- strcpyはプログラマが気をつければ問題を回避できるけど、
getsはどうすることもできないからじゃないの??
- 836 名前:デフォルトの名無しさん 投稿日:03/02/09 01:32
- 擁護といって悪ければ、「安全な場合も有り得る」などといいつつその例を提示できないで足掻いている。
と言い替えておきましょうか。
- 837 名前:デフォルトの名無しさん 投稿日:03/02/09 01:32
- >>833
対象をライブラリ関数に絞らなきゃ
i = i++; (= いわゆる未定義) だと思う。
- 838 名前:デフォルトの名無しさん 投稿日:03/02/09 01:34
- もっと実用的な話をしようよ・・・
だからってわけじゃないけど質問。
strncpyの代わりにsprintf使えって言われたけどどうやるの?
- 839 名前:デフォルトの名無しさん 投稿日:03/02/09 01:36
- >>838
snprintfの間違いじゃないのか。
- 840 名前:デフォルトの名無しさん 投稿日:03/02/09 01:36
- printfは重いから使うなっていわれた。
ふざけるなと思った。
- 841 名前:デフォルトの名無しさん 投稿日:03/02/09 01:36
- >>835-836
>>830 は見てんのか ?
> 自分が作ったファイルを読むんなら gets() だって安全じゃねーのか ?
(ついでに、それに対するレスも見といてくれよ。)
- 842 名前:デフォルトの名無しさん 投稿日:03/02/09 01:37
- dst[i] = (char)-(src[i] >= value);
- 843 名前:デフォルトの名無しさん 投稿日:03/02/09 01:37
- >>840
状況がわからないから、あんたが正しいのか、使うなって言う奴が正しいのか判断できん。
- 844 名前:デフォルトの名無しさん 投稿日:03/02/09 01:37
- %5sでできない?
- 845 名前:XYZ 投稿日:03/02/09 01:41
- C言語とC++言語の根本的な設計思想の違いを教えてください。
- 846 名前:デフォルトの名無しさん 投稿日:03/02/09 01:41
- >>845
すれ違い
- 847 名前:デフォルトの名無しさん 投稿日:03/02/09 01:41
- char *
mock_strncpy(char *dst, char const *src, size_t len)
{
sprintf(dst, "%.*s", len, src);
return dst;
}
- 848 名前:デフォルトの名無しさん 投稿日:03/02/09 01:43
- 型のあとに改行する派か。
- 849 名前:デフォルトの名無しさん 投稿日:03/02/09 01:43
- >>841はついに錯乱し始めたようです。
- 850 名前:デフォルトの名無しさん 投稿日:03/02/09 01:50
- なんで>>841はそんなに必死なんだ?
おまえの書いたプログラムなんて誰も使わんのだから
gets()使いたければ勝手に使っとけ。
まともなプログラマがまともなプログラムを書くときは
100% gets() は使わない。
strcpy() は状況によっては使うこともある。
- 851 名前:デフォルトの名無しさん 投稿日:03/02/09 02:09
- >>850
絶対にやってはならない事の例として使う
(↑はまともなプログラムでしょう?)
- 852 名前:デフォルトの名無しさん 投稿日:03/02/09 02:14
- >>849-850
具体的な例出されたら、必死とか言うだけですか ?
> gets()使いたければ勝手に使っとけ。
またでたよ。何回書けばわかるの ? 真性のアフォですか ?
>>832 に...
| もちろん、普通は gets() なんか使わんよ。
| 俺は、「gets() が安全な (* 場合も *) ありえる。」と書いてるだけだぞ。
と書いてるように、安全な場合があると言ってるだけで gets() を使ってるとか使うのが望ましいと言ってるわけじゃないんだよ。
(つーか、普通は使わんとはっきり書いてあるんだが...。)
で、ぐちゃぐちゃ書いてるけど、結局 >>830 に対して反論できるの ? できないの ?
- 853 名前:デフォルトの名無しさん 投稿日:03/02/09 02:21
- >>834
ナル
- 854 名前:デフォルトの名無しさん 投稿日:03/02/09 02:26
- >>852
*>>830*には反論できません(てかする気もありません)が何か?
おまえ
あ せ り す ぎ (ワラ
- 855 名前:デフォルトの名無しさん 投稿日:03/02/09 02:28
- >>gets()もろもろ
飽きたから他のスレでやってくれ
- 856 名前:デフォルトの名無しさん 投稿日:03/02/09 02:32
- >>855
他のスレっつーなら行き先ぐらい張れよ
http://pc2.2ch.net/test/read.cgi/tech/1031355713/
- 857 名前:デフォルトの名無しさん 投稿日:03/02/09 02:37
- >>854
> (てかする気もありません)が何か?
する気があったらできるの ?
こんなこと書いてて恥ずかしくないの ?
まして...
>おまえ
>あ せ り す ぎ (ワラ
に至っては、わけわからんし。
まあ、悔しいから何か書きたかったんだろうね。(ププッ
>>855
ごめんよ、ループする奴多くてさ。
- 858 名前:デフォルトの名無しさん 投稿日:03/02/09 02:48
- >>857
>Mail : ここから釣りです。
さっさと寝ろ。
- 859 名前:デフォルトの名無しさん 投稿日:03/02/09 08:54
- >>858
何怒ってんの ?
- 860 名前:デフォルトの名無しさん 投稿日:03/02/09 11:34
- いい加減やめれ。
面白くない
- 861 名前:デフォルトの名無しさん 投稿日:03/02/09 12:09
- ポインタのことで質問です。
今、5人の点数をユーザーが入力してint test[5]に入れるものなのですが、
これでfor文を使って入力とそれぞれの点数表示はできたのですが
平均を求めるやり方がわかりません。
int test[5]に格納した点数をすべて合計して5で割りたいのですが
どうすればint test[5]に格納した点数を合計できるのでしょうか?
よろしくお願いします。
- 862 名前:デフォルトの名無しさん 投稿日:03/02/09 13:02
- >>861
int total=0;
for(test){
total+=test[i]
}
- 863 名前:デフォルトの名無しさん 投稿日:03/02/09 13:07
- >>861
これでも呼べば。
double
calcAve(size_t len, int *pVal)
{
int ic;
int sum = 0;
for (ic = 0; ic < len; ic++) {
sum += pVal[ic];
}
return (double) sum / len;
}
- 864 名前:デフォルトの名無しさん 投稿日:03/02/09 13:11
- double
calcAve(size_t len, int *pVal)
この書き方されると俺のエディタは関数の検出できなくて激しく不便なんだよな。
- 865 名前:861 投稿日:03/02/09 13:16
- みなさん本当にありがとうございます。
まずは>>862氏の方法からやってみます。
- 866 名前:デフォルトの名無しさん 投稿日:03/02/09 13:16
- なるほど、不便なエディタだね。
私はいろんなエディタ使うから、grepで探しやすいようにしてるんだけどさ。
- 867 名前:デフォルトの名無しさん 投稿日:03/02/09 13:21
- なるほど、不憫な環境だね。
私はいろんなエディタ使うけど、定義の検索くらいエディタのマクロ探すようにしてるんだけどさ。
- 868 名前:デフォルトの名無しさん 投稿日:03/02/09 14:06
- みなさんに質問。
俺はC/C++学び始めですが、みなさんは
「C/C++を普段使っているけど、この機能についてはあまり知らない」
ってことあります?
例えばC++ならclassを使った方が綺麗に仕上がるけど、
構造体の方が使い慣れてるから構造体で済ましてしまうとか。
個人的にはあまりにもC/C++は多機能過ぎて(特にC++)いっぺんに
覚え切れなくて不安です。
- 869 名前:デフォルトの名無しさん 投稿日:03/02/09 14:16
- >>868
テストに出るわけでなし、取りあえず組めればそれで良いでしょう。
存在する制限の中でどれだけのことが出来るか追求してみるのもおもしろい。
勉強を怠らなければ新機能への理解も必ず出来る。
がんばっとけ。
- 870 名前:デフォルトの名無しさん 投稿日:03/02/09 14:26
- 構造体を定義して、その構造体へのアクセスする関数を定義したらそれはもう、クラスにした方がいい。
特徴的な型を定義して、そのデータ型間の演算を多用するならそれはもう、クラスにしてオーバーロードした方がいい。
いずれにしても一遍に覚える必要はない。
私はCからC++に入ったけど、C++を最初から勉強するのもいいね。
がんがれ〜
- 871 名前:868 投稿日:03/02/09 14:39
- >>869
>>870
有難うございます。
毎日少しずつでも進歩できる様に勉強します。
- 872 名前:デフォルトの名無しさん 投稿日:03/02/09 15:10
- type
func(arg...)
この形は激しください。
- 873 名前:デフォルトの名無しさん 投稿日:03/02/09 17:38
- このエラーってなんですか handle_exceptions: Exception:
STATUS_ACCESS_VIOLATION
- 874 名前:デフォルトの名無しさん 投稿日:03/02/09 17:48
- >>873マルチ
- 875 名前:名無しさん@Emacs 投稿日:03/02/09 18:13
- gcc使ってるんですけど、
> hoge.c:256: dereferencing pointer to incomplete type
というエラーが止まりません。
構造体へのポインタを通してメンバにアクセスしようとするとこうなるのですが、
何が悪いのでしょうか?
ほとんど見たことないエラーなので、対処の方法が分かりません。
どこらへんをチェックすればいいでしょうか?
- 876 名前:名無しさん@Emacs 投稿日:03/02/09 18:15
- 具体的には、構造体の中のファイルデスクリプタ hoge->sock に触ると
上記エラーが出るんですが、該当するコードを削除して、
gdbでステップ実行すると hoge->sock には触れるんです。
- 877 名前:デフォルトの名無しさん 投稿日:03/02/09 18:25
- >>876
hogeの指す構造体がhoge.cのコンパイル中に定義されているか確認汁。
宣言だけで使ってるとそんなエラーがでるはず。
- 878 名前:名無しさん@Emacs 投稿日:03/02/09 19:56
- >877
ありがとうございました。まさにそんな感じでした。
サーバ側とクライアント側のライブラリやヘッダファイルが
ごちゃごちゃになって、どこに定義があるのか判然としませんでした。
- 879 名前:デフォルトの名無しさん 投稿日:03/02/09 21:14
- const char *p;
char const *p;
char * const p;
の違いってなんですか?
実際に試すと、1番目と2番目が同じ動きで、3番目が違う動きをします。
解説お願いします?
- 880 名前:デフォルトの名無しさん 投稿日:03/02/09 21:18
- 指すものがconstかポインタ自体がconstかの違い
- 881 名前:デフォルトの名無しさん 投稿日:03/02/09 21:18
- 前の2つは、*p = 5とかが禁止される
最後のは、p++とかが禁止される
- 882 名前:879 投稿日:03/02/09 21:21
- >>881
そんなのは試せばわかる。理屈でわかりやすく説明してくれ。
- 883 名前:デフォルトの名無しさん 投稿日:03/02/09 21:21
- >>882
>>880
- 884 名前:879 投稿日:03/02/09 21:24
- >>883
1番目と2番目の違いがわからん
- 885 名前:デフォルトの名無しさん 投稿日:03/02/09 21:38
- Cでwindowsプログラムを組むのに、
1番いい勉強法は何ですか?
- 886 名前:デフォルトの名無しさん 投稿日:03/02/09 21:40
- >>885
本を読む
- 887 名前:デフォルトの名無しさん 投稿日:03/02/09 21:41
- >>886
どんな?
- 888 名前:デフォルトの名無しさん 投稿日:03/02/09 21:42
- >>884=879
char が const か、
const な char か、の違い。
つまり一緒。
ついでに言えば、
char *p;
char const *p;
char *const p;
char const *const p;
で全部意味が違う。
- 889 名前:886 投稿日:03/02/09 21:43
- マルチに反応しちまった…
- 890 名前:885 投稿日:03/02/09 21:44
- >>889
いや、まじめに聞いてるんですが…
- 891 名前:デフォルトの名無しさん 投稿日:03/02/09 21:47
- >>889
つーか、>>882 の時点で ネタ もしくは、真性の アフォ だろ。
>>880-881 の説明以上に的確な説明は思いつかないよ。
- 892 名前:891 投稿日:03/02/09 21:48
- >>891
間違えた。
×: ネタ
○: 釣り
- 893 名前:808 投稿日:03/02/09 23:08
- >>810
レス番号間違えてました。失礼しました。m(_ _)m
ポインタ使った処理は、使い方が分かってないのかもしれませんが、gccで最適化した場合では元の処理と同じくらいでした。
>>827
・・・最適化オプションの存在を忘れてました・゚・(ノД`)・゚・
オプション(cygwin gcc: -O2 -funroll-loops、vc++ cl: /O2)を付けたら劇的に速くなりました(;´Д`)
gccでは、テーブルを使った処理→>>842さんの式の順で、またvc++では、テーブルを使った処理と>>842さんの式がほぼ同等の速さになりました。
>>817-818 >>821
MMXのアセンブラが面白そうなので、ちょっと勉強してみます。
>>827
してなかったので、ちょっと調べてみました。
>>842
勉強になります。
- 894 名前:808 投稿日:03/02/09 23:08
- あと、午後のこーだの作者さんのWebぺーじがいろいろと参考になりそうです。
BBSの過去ログにこんなの↓があったので、いろいろと調べてみようと思います。
以下勝手に転載。
--------------------------------------------------
最近書いたコードから;RGB各8bitのピクセ
ルで、RGBそれぞれで独立に
二値化(0か0xff)するというもの。
p: ピクセルの値(RGB32)
a = p | 0x1010100;
a = (a - 0x808080) & 0x1010100;
a = a - (a>>8);
0x808080が閾値で、RGB独立に変更でき
ます。細かく見ていくと誤差が
あるのですが、その辺が問われない場合
であれば充分かと思います。
(このフィルターそのものが使い途に困る
という話もありますが…)
--------------------------------------------------
ttp://homepage1.nifty.com/herumi/adv/bbslog/bbs10.html の459より転載
レス、どうもありがとうございました。m(_ _)m
- 895 名前:デフォルトの名無しさん 投稿日:03/02/09 23:14
- C言語でrand,srandを使って確率的に1/2で0と1を
得たいのですが
ちょうど、交互に出てきてしまいます。
別の方法なにか、ありますか?
- 896 名前:デフォルトの名無しさん 投稿日:03/02/09 23:16
- void swap(int *array,int a,int b)
{
int tmp;
tmp=array[a];
array[a]=array[b];
array[b]=tmp;
}
void sort(int *array,int num)
{
int i,n;
num-=1;
for(i=0;i<num;i++)
{
for(n=0;n<num;n++)
{
if(array[i]<array[n])
{
swap(array,i,n);
}
}
}
}
こういうソートアルゴリズムってなんて言うんですか?
- 897 名前:896 投稿日:03/02/09 23:38
- age
- 898 名前:577 投稿日:03/02/09 23:38
- バブルソート
- 899 名前:896 投稿日:03/02/09 23:41
- どうもありがとうです(^^)
- 900 名前:577 投稿日:03/02/09 23:50
- >>895
rand()%2じゃダメ・・・?
- 901 名前:デフォルトの名無しさん 投稿日:03/02/09 23:58
- >>900
ダメです。
- 902 名前:デフォルトの名無しさん 投稿日:03/02/10 00:08
- 厨な質問で申し訳ありませんが、
標準ライブラリのみでマウスからの入力を行なうには
どんな関数を使えばいいのでしょうか?
googleで検索してもわからないのですが
- 903 名前:デフォルトの名無しさん 投稿日:03/02/10 00:12
- >>902
fread
- 904 名前:デフォルトの名無しさん 投稿日:03/02/10 00:16
- >>895
srand((unsigned int)time(NULL));
s=rand()%2;でやってるんですぅ。
奇数と偶数が交互にでない乱数は、どうやるんですかー?
- 905 名前:デフォルトの名無しさん 投稿日:03/02/10 00:20
- >>895
rand()の系列は偶数と奇数が交互に出ているので、
a=0;
if ( rand()%11<6 ) a=1;
とかしてみるのはどうでしょう?
- 906 名前:デフォルトの名無しさん 投稿日:03/02/10 00:36
- >>904
rand で使われてる乱数生成ルーチンでは、
下位 n bit の周期は 2 の n 乗になる。
なるべく上位のビットを使うようにしないと駄目。
>>905
そんな面倒なことしなくても、最上位ビット取ればいいと思う。
- 907 名前:デフォルトの名無しさん 投稿日:03/02/10 00:38
- >>906
生成ルーチンって仕様で決まっているの?
- 908 名前:デフォルトの名無しさん 投稿日:03/02/10 00:39
- もっと性能の良い乱数発生関数を使う手もある。
http://www.math.keio.ac.jp/~matumoto/mt.html
- 909 名前:デフォルトの名無しさん 投稿日:03/02/10 00:49
- 性能のいい乱数発生関数・・・
- 910 名前:デフォルトの名無しさん 投稿日:03/02/10 00:51
- ちなみにCだとこれね
http://www.math.keio.ac.jp/matumoto/CODES/MT2002/mt19937ar.c
コメント多すぎ。誰か削って見やすくしてくれ。
- 911 名前:デフォルトの名無しさん 投稿日:03/02/10 00:53
- C++だとここだな。
http://www.boost.org/libs/random/index.html
- 912 名前:デフォルトの名無しさん 投稿日:03/02/10 01:11
- ハードウェアならこれだな。
http://www.toshiba.co.jp/product/abwr/random/
- 913 名前:デフォルトの名無しさん 投稿日:03/02/10 01:23
- 今までCを独習してきて、「配列」というものは
難しいものだと思いこんでたらまったくそんなことありませんね。
意外と簡単でした。
それだけです。
今思いついた質問ですが、実際にアプリを作るとき、配列を使うなら
なるべく量は少ないほうがメモリリークしにくくなるんですか?
メモリを確保しないで済む分。
どうなんですか?
- 914 名前:デフォルトの名無しさん 投稿日:03/02/10 01:27
- 性格のいい淫乱発生関数・・・
- 915 名前:デフォルトの名無しさん 投稿日:03/02/10 01:38
- 下位ビットの周期が短いのを誤魔化す為に
下位ビットと上位ビットを入れ替えてから返すような実装ってある?
- 916 名前:デフォルトの名無しさん 投稿日:03/02/10 01:59
- 下位ビットを捨てる実装ならみたことある
- 917 名前:デフォルトの名無しさん 投稿日:03/02/10 03:56
- >>913
やっぱり君にとっては配列は難しいのだと思う
- 918 名前:デフォルトの名無しさん 投稿日:03/02/10 03:58
- >>916
なるほど。
流石に下位ビットを再利用したりはしないか…。
- 919 名前:デフォルトの名無しさん 投稿日:03/02/10 11:38
- >>913
メモリリークを小一時間調べて見ろ。
結論から言うと配列だけしか使用しない場合、メモリリークは発生しない。
更に言うとまともなOSならばプログラム終了時にアプリが確保したメモリは
全て解放される。
- 920 名前:デフォルトの名無しさん 投稿日:03/02/10 13:31
- ネタですか?激しく処理系依存ですが。
↓
- 921 名前:デフォルトの名無しさん 投稿日:03/02/10 13:33
- intは4バイトだよ
- 922 名前:デフォルトの名無しさん 投稿日:03/02/10 13:34
- ユーザーの入力した文字をエコーバック無しで取得したいんですけど。
- 923 名前:デフォルトの名無しさん 投稿日:03/02/10 13:37
- ナニで?
- 924 名前:デフォルトの名無しさん 投稿日:03/02/10 13:41
- プリプロセッサに通した時点でint(など)の型の大きさを得ることはできませんよね??
そんなマクロは標準では定義されていませんよね?
- 925 名前:デフォルトの名無しさん 投稿日:03/02/10 14:22
- >>922
環境依存しない方法では無理です。
- 926 名前:デフォルトの名無しさん 投稿日:03/02/10 14:38
- limits.h
- 927 名前:デフォルトの名無しさん 投稿日:03/02/10 14:59
- >>924
何故型の大きさがプリプロセッサの段階で必要?
私は大抵の場合、sizeof演算子で済ませちゃってるけど。
#稀に(>>926の指摘の通りlimits.hをincludeして)INT_MAXを参照するくらい。
- 928 名前:デフォルトの名無しさん 投稿日:03/02/10 15:47
- configure使うとか。
- 929 名前:デフォルトの名無しさん 投稿日:03/02/10 17:28
- >>927
int型が4バイトでない場合はコンパイルさせたくないので・・・・
>>926-927
そういえばint型が4バイトならINT_MAXの値は常に一定になりますね。
言われるまで気づきませんでした。ありがとうございます^^
- 930 名前:デフォルトの名無しさん 投稿日:03/02/10 20:42
- > int型が4バイトでない場合はコンパイルさせたくないので・・・・
どういうプログラムをしているのか、参考までに教えてくれないか?
- 931 名前:デフォルトの名無しさん 投稿日:03/02/10 20:55
- for(i=sizeof(int)-4;i<n;i++)
- 932 名前:デフォルトの名無しさん 投稿日:03/02/10 21:55
- 現在、あるアプリケーションから別のコンソールアプリケーションをspawnlで親の方が待ち状態になるようにして呼び出して使ってるんですが、その子がstdoutやstderrに出力する内容を親側で取得するにはどうすればいいですか?
親の方は子が動いてる間、待機状態になるのであれば呼び出し方はこだわりません。
どなたか教えていただけますでしょうか。
- 933 名前:デフォルトの名無しさん 投稿日:03/02/10 23:03
- >>932
環境依存しない方法では無理です。
unixなら、pipe(2) or popen(3)。
- 934 名前:デフォルトの名無しさん 投稿日:03/02/10 23:18
- プログラミングのプの字もわからんのですが、
ここで話されてることが理解できるようになるには
何時間くらい勉強すればよろしいでしょうか?
1日1時間として1年じゃ話になりませんか?
- 935 名前:デフォルトの名無しさん 投稿日:03/02/10 23:20
- 何だ?プログラミングに興味が在るのか?
悪いことは言わない。ここから立ち去りなさい。
そしてC言語なんてものには興味を持たないこと。いいね?
- 936 名前:デフォルトの名無しさん 投稿日:03/02/10 23:40
- >>934
本人のやる気と才能しだい。
中学卒業程度の数学の知識の持ち主が、高校2年生レベルの数学がわかるようになるって程度。
- 937 名前:デフォルトの名無しさん 投稿日:03/02/10 23:43
- >>934
おれは会社に入って1年間くらい休みなし、
毎日残業10時間とかいう状況で無理やりCを覚えた(w
デスマーチっつうか人手がたりなかったんよ…。
おかげで1ヶ月前に書いた自分のコードが幼稚に見えて仕方がないという
状態が1年も続いた。つい直しちゃったりしてな(w
一年後にはオブジェクト指向の真似事をやってみたり、
MS-DOSでタイマ割り込み使ったプリエンプティブっぽいスレッドライブラリ
作ってアプリの性能上げたりとかやってたぞ。
じじいの昔話さ(w
- 938 名前:デフォルトの名無しさん 投稿日:03/02/10 23:56
- >>937
質問の答えにまったくなっていないどころか、ただの自慢ときたもんだ。
能力もたかがしれてるな。
- 939 名前:デフォルトの名無しさん 投稿日:03/02/10 23:56
- > 状態が1年も続いた。つい直しちゃったりしてな(w
命が惜しかったらぐっとこらえとけ。
- 940 名前:デフォルトの名無しさん 投稿日:03/02/11 00:08
- すみません
次のソースで、func()を使って、a=bになるようにしたいのですが
func()をどのように書けばいいのか分かりません
教えて下さい!
void func(int *t,int w){
//ここが分からない
}
void main(){
int a=0,b=1;
func(&a,b);
}
- 941 名前:デフォルトの名無しさん 投稿日:03/02/11 00:13
- void func(int *t,int w){
*t=w;
}
ポインタと、ポインタによる関数間での値の受け渡しを復習しておけ。
- 942 名前:デフォルトの名無しさん 投稿日:03/02/11 00:13
- void func(int* t, int* w) { *w = *t; }
int main() { int a = 0, b = 1; func(&a, &b); }
- 943 名前:デフォルトの名無しさん 投稿日:03/02/11 00:13
- あ‘ーまじがったー
- 944 名前:デフォルトの名無しさん 投稿日:03/02/11 00:13
- *t
=
w;;
- 945 名前:デフォルトの名無しさん 投稿日:03/02/11 00:18
- グローバル変数な
- 946 名前:940 投稿日:03/02/11 00:24
- 皆さん、有難うございます!
- 947 名前:デフォルトの名無しさん 投稿日:03/02/11 00:36
- >>910
それなら、7行スレにあったよ。
- 948 名前:デフォルトの名無しさん 投稿日:03/02/11 01:10
- > w;;
(・∀・)イイ!!
- 949 名前:デフォルトの名無しさん 投稿日:03/02/11 01:15
- ログ出力関連で質問。
ログ吐ける関数用意したんで適当に埋め込んでくれ、って頼まれたんだが、関数名が判るようにしてね!って言われたんです。
メッセージに関数名コピペするっての芸が無いなぁ、と思いつつ。
なんかうまい方法ありませんか?
- 950 名前:デフォルトの名無しさん 投稿日:03/02/11 01:20
- >>949
標準ではうまい方法は無い。
せいぜい __FILE__ マクロと __LINE__ マクロを使うぐらいだ。
コンパイラによっては __FUNCTION_ マクロを用意しているものもある。
- 951 名前:949 投稿日:03/02/11 01:46
- >950
ども。そうですか。VC++6ですが __FUNCTION_ は無さそうでしたので、これは手作業でいきます。
ところでマクロってのも苦手なんですが、展開を2度行わせるような方法が判りません。
例えば PutLog(LPCSTR lpmsg) が用意されてて
#define PUTLOG() PutLog(__FILE__)
ってのはダメで、どうしても埋め込み箇所でPUTLOG(__FILE__)
って書かなきゃいけませんかね?
まぁ仕事なんで時間費やしても構わないんですけど、余興って事でお願いします。
- 952 名前:デフォルトの名無しさん 投稿日:03/02/11 01:58
- >>951
マクロは基本的にそれが書かれた時点で展開されるから、あなたの思っている
ような使い方はできない。
どうしても自動化と言うなら、__FUNCTION__ を展開するプログラムを自分で
書いて、プリプロセッサとして起動する。
・・・そんなツールどっかに落ちてないかな?
- 953 名前:デフォルトの名無しさん 投稿日:03/02/11 02:08
- g++ だと普通にできるけどねえ。。
- 954 名前:デフォルトの名無しさん 投稿日:03/02/11 03:07
- >>933
ありがとうございます。
何時間か探してみたんですが、system()コマンドで"appli.exe 2> stderr.txt"のように叩いてstderrをファイルへリダイレクトしてそれを読み込む、という方法で無理矢理解決しました。
- 955 名前:デフォルトの名無しさん 投稿日:03/02/11 04:33
- なまえつきぱいぷは?
- 956 名前:デフォルトの名無しさん 投稿日:03/02/11 07:49
- int i = 'A';
char c = 'A';
/* あのぅ、'A'ってint型ですか? char型ですか? */
- 957 名前:デフォルトの名無しさん 投稿日:03/02/11 07:54
- >>956
Cではintです。
- 958 名前:デフォルトの名無しさん 投稿日:03/02/11 08:07
- 問題は、'ab'もintなのはいいけどエンディアンに拠って
0x6162だったり0x6261だったりすることだね。
- 959 名前:デフォルトの名無しさん 投稿日:03/02/11 08:21
- 殆どのアプリはVBで作られていると思うのですが
Cでつくられたアプリってどんなものがあるの?
趣味で作るアプリならVBで充分だと思うのですが?
- 960 名前:デフォルトの名無しさん 投稿日:03/02/11 08:24
- int func( size )
int size;
{
static char buf[size];
return 0;
}
↑C99では、こんなことが出来るって本当なの!?
なんかキモイよ…
- 961 名前:デフォルトの名無しさん 投稿日:03/02/11 08:36
- >>959
>殆どのアプリはVBで作られていると思うのですが
藁
- 962 名前:デフォルトの名無しさん 投稿日:03/02/11 09:00
- VC++はVC++で作られています。
- 963 名前:デフォルトの名無しさん 投稿日:03/02/11 09:07
- >>959
誰にそんな嘘教えられたのですか?
- 964 名前:デフォルトの名無しさん 投稿日:03/02/11 09:12
- >>960
C99では配列のサイズに変数が使えるようになったらしいが、
これはどうなんだろな。
別にこんなのmallocすりゃ済むのにな。
何の為の仕様変更なんだろな。
- 965 名前:デフォルトの名無しさん 投稿日:03/02/11 09:19
- >>963
アプリはVBで作られていないの?
ゲーはC++だと思いますが。
- 966 名前:デフォルトの名無しさん 投稿日:03/02/11 09:20
- >>964
mallocしないで済むための仕様変更に決まってるだろ。
- 967 名前:デフォルトの名無しさん 投稿日:03/02/11 09:33
- ていうか、誰か960にツっこんでくれよ。
- 968 名前:デフォルトの名無しさん 投稿日:03/02/11 10:04
- 配列のサイズに変数使ったとしても
それはスタック変数になるの?
もしそうだとしたら
「定数 + sp」
で参照出来なくならない?
どうやってるの? ヒープ?
- 969 名前:デフォルトの名無しさん 投稿日:03/02/11 10:33
- >>968
定数+spというのがよくわからないのですが
今試してみたらespからサイズ分引いて
スタックに確保しているように思いますよ。
ただサイズ分ちょうどではなくて変な計算してるようですけど。
- 970 名前:デフォルトの名無しさん 投稿日:03/02/11 10:37
- >>965
アプリもVC++やDelphi多くない?まあ、殆どVBって事は無い。
- 971 名前:デフォルトの名無しさん 投稿日:03/02/11 10:45
- >>960
C99 のこと言ってんのに引数宣言が K&R かよ...。(これで満足 ? >>967)
それはさておき、自動変数の動的配列は10年ぐらい前から GCC は拡張機能としてサポートしていたよ。
>>964
free() を忘れて、メモリーリークしまくる奴の救済と、プログラムの終了時に free() するかしないかで戦争になるのを避けるため。
>>968
> それはスタック変数になるの?
スタック変数 ? スタックに割り当てられるのかと言うことか ?
当然実装依存だよ。(スタックのないマシンもあるからね。)
> 「定数 + sp」
[変数 + SP] で参照すりゃいい。
もちろん実装依存だが、固定領域を先に確保して、可変部を後に確保すれば、固定領域は従来通り [定数 + SP] で参照できる。
なお、普通の C でも処理系によっては、同様の効果のある alloca() をサポートしているものもある。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/alloca.3.html
- 972 名前:デフォルトの名無しさん 投稿日:03/02/11 10:59
- >>971
ごめん、960は、
「static」の部分…
- 973 名前:デフォルトの名無しさん 投稿日:03/02/11 11:08
- >>972
ありゃ...、見落としてました。
- 974 名前:デフォルトの名無しさん 投稿日:03/02/11 11:21
- http://www.zdnet.co.jp/news/0105/15/e_vb.html
統計の取り方にもよると思うが、プログラマーのうち約半数はVisualBasicということらしい。
- 975 名前:デフォルトの名無しさん 投稿日:03/02/11 11:26
- 実はmallocに置き換えてスコープ抜けたらfreeとか。
- 976 名前:デフォルトの名無しさん 投稿日:03/02/11 12:54
- >>975
gccはalloca()で確保していたと思った。
>>974
私はプログラマだけどVisualBasicじゃないよ。
たまには使うけど。
- 977 名前:デフォルトの名無しさん 投稿日:03/02/11 13:08
- >>974
> プログラマーのうち約半数はVisualBasicということらしい。
約半数は、VB を使う ≠ 約半数は VB しか使わない
一つの言語しか使わないプログラマってあんまりいないから、これをもって「プログラマーのうち約半数はVisualBasicということ」と主張するのは「私プログラマに向いてません」と言ってるようなもんだぞ。
- 978 名前:デフォルトの名無しさん 投稿日:03/02/11 14:12
- 新スレ
C言語なら、俺に聞け! <50>
http://pc2.2ch.net/test/read.cgi/tech/1044938752/
- 979 名前:デフォルトの名無しさん 投稿日:03/02/11 15:00
- >>959
Windowsでしか動かないVB製アプリがほとんどを占めているなんて考えられない。
- 980 名前:デフォルトの名無しさん 投稿日:03/02/11 15:10
- まあ、俺も最初はVBから始めたからなあ・・
なんせボタンをポチポチ貼りつける感覚でプログラムが出来るんだもん。
でも、次第に不満な点が出てきてあまり使わなくなった。
- 981 名前:デフォルトの名無しさん 投稿日:03/02/11 15:34
- >>979
JavaとANSI C完全準拠+Qtでどこまで戦えますか?
- 982 名前:デフォルトの名無しさん 投稿日:03/02/11 15:41
- Javaって段階で終わってる。
- 983 名前:デフォルトの名無しさん 投稿日:03/02/11 16:57
- >>976
確かVC++でもローカル変数がデカい時は似たようなもんだったよ。
スタックフレーム作るときにページ境界飛び越すとGPFな可能性あるから。
- 984 名前:デフォルトの名無しさん 投稿日:03/02/11 17:25
- 9*系だとスタック溢れることあったから怖かったね。
2000*2000以上の再帰の為にスタックを50MB位にしたりしてたよ。
今はもう意味ないけどね…
- 985 名前:デフォルトの名無しさん 投稿日:03/02/11 19:14
- >>976
内蔵のalloca()に置き換わって(古いgccだと確か__builtin_alloca()だったかなんだったか)
最終的にただのスタック操作としてアセンブリコードが出力されると思う。