2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語なら私に聞け(33)

1 :ジョブ子:02/09/21 20:01
姉です。30年プログラムを作りつづけて嫁に行きそびれてしまいました。
でもC言語の腕には自身があるので何でも聞いてね。

PS
関連擦れは面倒なのでほかの人に任せます。ウフッ

2 :デフォルトの名無しさん:02/09/21 20:03
無責任一代女かYO!

3 :せめて、前スレくらい:02/09/21 20:06
http://pc3.2ch.net/test/read.cgi/tech/1031905402/

4 :前スレ950に代わってお詫びします:02/09/21 20:09
【コンパイラ】
gcc
http://gcc.gnu.org/

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

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html

5 :前スレ950に代わってお詫びします:02/09/21 20:09
【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

【注意】
Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
まともな処理系を使いましょう。

6 :前スレ950に代わってお詫びします:02/09/21 20:10
C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART 5
http://pc3.2ch.net/test/read.cgi/tech/1027593322/

7 :デフォルトの名無しさん:02/09/21 20:11
【過去ログ】
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://pc3.2ch.net/test/read.cgi/tech/1026048820/
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
23 http://pc.2ch.net/tech/kako/1023/10230/1023024817.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/1003/10034/1003418249.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

8 :前スレ950に代わってお詫びします:02/09/21 20:11
【過去ログ】
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://pc3.2ch.net/test/read.cgi/tech/1026048820/


9 :前スレ950に代わってお詫びします:02/09/21 20:12
うお、カブッタ。。鬱

10 :デフォルトの名無しさん:02/09/21 20:14
おっつっつ。>>1

11 :デフォルトの名無しさん:02/09/21 20:16
>>10
世の中間違ってる。。。

12 :デフォルトの名無しさん:02/09/21 20:21
>>11
気持ちはわかるが一応立てたことだし。

13 :デフォルトの名無しさん:02/09/21 20:21
<33>
だと かちゅ〜しゃ で化けることがあるからなのか?
subject.txt取得後だと問題ないんだけど。


14 :デフォルトの名無しさん:02/09/21 20:53
>>13
そう

15 :デフォルトの名無しさん:02/09/21 23:58
だんだんこのスレの>>1は面白みに欠けてきてる・・・

16 :  :02/09/22 00:48
質問です
配列を宣言と同時に初期化する際、
array[] = "ABCDEFG";
とするような感じで、文字列ではなく
数字を入れる方法がありましたら教えてください。



17 :打・サイタマ@受信料未払い:02/09/22 00:51
>>16
array[] = {1,2,3,4,5,.......};
じゃダメなん?

18 :デフォルトの名無しさん:02/09/22 00:53
>>16
int n[]={4,12,76,3,0,65};

19 :デフォルトの名無しさん:02/09/22 00:53
>>16
型は一体何なんだ、ボケナス。

20 :デフォルトの名無しさん:02/09/22 00:56
>>15
君のコメントほどじゃないかと

21 :16:02/09/22 00:58
大事なことを書き忘れました。
関数の引数として
func("ABCDEFG");
のように使える関数をつくりたいのです。
で、文字列だと上記のように渡せるのに、数字だと""で囲めない?ので
困っています。
型は、char型を考えています。

22 :打・サイタマ@受信料未払い:02/09/22 00:59
>>21
もう一回文字列リテラルのこと調べなおすべし!

23 :16:02/09/22 01:01
>>22
あおりは勘弁してください。

24 :デフォルトの名無しさん:02/09/22 01:01
>>21の言ってる意味がわからんのは俺だけか?

25 :16:02/09/22 01:03
>>24
難しい質問だから聞いているんです。
もう少し考えてください。お願いします。

26 :デフォルトの名無しさん:02/09/22 01:04
違ってるかもしれんが、
func("\x01\x02\x03");
という意味なのか?

渡されるのがポインタだということは
わかってるんだよな?ボケナス。

27 :デフォルトの名無しさん:02/09/22 01:05
>>25
質問の意味がわかりません。

28 :16:02/09/22 01:08
>>27
何がわからないのかがわかりません。
わからないことを書いていただかないと質問に答えられません。

29 :デフォルトの名無しさん:02/09/22 01:08
配列に入れて渡すのはダメなの?

30 :16:02/09/22 01:10
脱いでもすごいです。

31 :デフォルトの名無しさん:02/09/22 01:10
ネタかこいつ。面白くないから無視。

32 :デフォルトの名無しさん:02/09/22 01:11
>>28
何がと言うか、ぜんぜんわかりません。
初歩的なことですみませんが、はじめから教えてもらえませんか?

33 :デフォルトの名無しさん:02/09/22 01:12
いいかげんウザイ

34 :16:02/09/22 01:13
       ε=ε=ε=ε=ヾ(;@×@)ノ

35 :16 ◆Ms2nrv3c :02/09/22 01:14
あの、23、25、28、30は偽者です
面白ければ放置しようとおもっていたのですが。。。
いま、実験しています

36 :16:02/09/22 01:15
いつのまにか偽者がたくさん。だから2ちゃんは...

37 :打・サイタマ@受信料未払い:02/09/22 01:15
>>23
すまん、煽りじゃないんだよ。
func()内で中身を入れ替えたりするなら気をつけよう。
....ところで、ポインタって知ってるかい?

38 :デフォルトの名無しさん:02/09/22 01:16
関数に直接配列か、それは無理だった気が。
C99ではできるんだっけ?

39 :16 ◆a9RattCo :02/09/22 01:17
誰に口聞いてんだ貴様ら

40 :デフォルトの名無しさん:02/09/22 01:18
>>39

( ´,_ゝ`) プッ

そこまでやるか普通?

41 :16:02/09/22 01:20
プログラムやるやつは糞だと聞いていましたが、
ホントだったようですね。
失望しました。

42 ::02/09/22 01:22
>41
あのさ、とりあえず俺は真面目にあんたの
質問聞いてやってるつもりだよ。
その言い方はないんじゃない?
はっきり言ってあんたの質問の意味がわからん。
関数作りたいなら
void Test(char* s);
じゃだめなのか?
なんでこれが駄目なのかよくわからん。

43 :16:02/09/22 01:22
全員16を名乗るスレはここですか?

44 :打・サイタマ@受信料未払い:02/09/22 01:22
やれやれ、まだ夏厨の残党が
いたのか・・・。荒ちまったな。申し訳ない。

45 :デフォルトの名無しさん:02/09/22 01:23
16ウイルス、自己増殖中・・・。

46 :16:02/09/22 01:23
最近涼しくなったよねー。

47 :デフォルトの名無しさん:02/09/22 01:24
>>42
偽物だと気付けよ。
本物は mailto: が全角の空白1文字になってる。
これより上のカキコだけはな。

48 ::02/09/22 01:25
そろそろオレも「C++なら全手俺に聞け」というスレでも立てるか・・・。

49 :16:02/09/22 01:26
♪人生1616〜

50 :16 ◆Ms2nrv3c :02/09/22 01:27
>>偽者
痛いところを疲れて完全にキレられたようですね
>>26
ポインタはわかっています
\xというのは使ったこと無いのでよくわかりませんでした。
>>37
もちろん、入れ替えたりしません。
>>22
文字列リテラルに数値をもぐりこませることは出来ないと言う意味でしょうか

51 :デフォルトの名無しさん:02/09/22 01:30
本物は 16,21,35,50 だけ。
残りは2人の低能な偽物による荒らし。

52 :16 ◆Ms2nrv3c :02/09/22 01:32
それと、
>>29
配列に入れないといけないようでは使い勝手が落ちると思い、
このような質問をすることになりました。

53 :デフォルトの名無しさん:02/09/22 01:33
相変わらず16のしたいことがわからないんだが

func( int[]{ 0, 10, 20 } ); 風にしたいってことですか?

54 :デフォルトの名無しさん:02/09/22 01:34
使い勝手って何?

55 :打・サイタマ@受信料未払い:02/09/22 01:39
>>50
文字列って言っても、要はキャラクターコードが入ってる配列のポインタを関数に渡しているってことだから、渡したいchar型数値に該当するキャラクターコードを突っ込んだ文字列リテラル作って渡すこと可能だよ。
array[] = "abc" なら array[]={ 0x41,0x42,0x43} と同じものが入っていると考えてもいける。

でも、素直に

char array[] = {1,2,3};
func(array,sizeof(array));

とかしたほうが良さそうだけど・・・。

56 :16 ◆Ms2nrv3c :02/09/22 01:39
>>53
文字列だと
char array[] = "ABCDEFG";
func(array);

func("ABCDEFG");
にできるのに、
数字だと
char array[] = {0, 10, 20};
func(array);

func({0, 10, 20});
みたいにできればメモリ領域の節約にもなるし
関数としては使い勝手がいいとおもうのです。

57 :打・サイタマ@受信料未払い:02/09/22 01:41
あ、array[]={ 0x41,0x42,0x43}なら "ABC"だな・・・鬱だ。

58 :デフォルトの名無しさん:02/09/22 01:42
>>57
それよりももっと重要な'\0'を付加することを忘れているぞ。

59 :デフォルトの名無しさん:02/09/22 01:44
今日は電波強いね

60 :デフォルトの名無しさん:02/09/22 01:44
ようやく16のやりたいことが見えてきた。

61 :58:02/09/22 01:46
>>59
俺のこと?
もしかして間違っている?(^_^;)

62 :打・サイタマ@受信料未払い:02/09/22 01:47
>>57
ああ、やってしもうた・・・。出直してきます。

63 :デフォルトの名無しさん:02/09/22 01:47
そんで、結局のところC99で型安全かつ可変の引数を受け取る関数は書けるようになったの?

64 :デフォルトの名無しさん:02/09/22 01:47
>>61
間違ってないぞボケナス。
でもこれは揚げ足とも言う。

65 :デフォルトの名無しさん:02/09/22 01:48
>>63
...の部分の引数の型がチェックされるということ?

66 :58:02/09/22 01:48
>>64
ごめん。

67 :デフォルトの名無しさん:02/09/22 01:49
16にはC#をお勧めしたい

68 :59:02/09/22 01:50
>>61
いや16のことだよ

69 :16 ◆Ms2nrv3c :02/09/22 01:50
>>55
逆に、
{0x41,0x42,0x43}を渡したいのであれば、
"ABC"を渡すことで可能ですが、その方法だと
{0x01,0x02,0x03}を渡したいときに
対応するASCII文字が無く、不可能になってしまいます。

また、
char array[] = {0, 10, 20};
func(array);
な方法だと配列の宣言&初期化とfunc()が離れてしまって見づらく
なりますし、初期化をfunc()の直前でやるのもあほらしいなと。



70 :デフォルトの名無しさん:02/09/22 01:51
#defineじゃ・・・

71 :デフォルトの名無しさん:02/09/22 01:52
>>69
"\x01\x02\x03"

これってできなかったかな。

72 :打・サイタマ@受信料未払い:02/09/22 01:52
あああ! >>58 と間違えたぁ!
あかん、残業しすぎや・・・。

73 :デフォルトの名無しさん:02/09/22 01:52
>26
これは?

74 :71:02/09/22 01:52
>>26で既出やん。

75 :デフォルトの名無しさん:02/09/22 01:53
よく見たら間違ってた
"\01\02\03"

76 :デフォルトの名無しさん:02/09/22 01:53
>>69
エスケープシーケンス

77 :sage :02/09/22 01:55
>>65
>>67 という意味です。

78 :デフォルトの名無しさん:02/09/22 01:57
[\x1b2J]は(・O・)イイ!

79 :デフォルトの名無しさん:02/09/22 01:59
>>1
今更だが乙。

80 :デフォルトの名無しさん:02/09/22 02:02
>>56
> メモリ領域の節約にもなるし

リテラル文字列であっても静的なメモリ領域に
置かれることには違いない。
まあ、autoな記憶クラスの配列よりはスタックを
節約できると思うが。

81 :デフォルトの名無しさん:02/09/22 02:09
#define するのが一番素直か

82 :16 ◆Ms2nrv3c :02/09/22 02:09
エスケープシーケンスでできました。みなさんありがとうございました。
勉強になりました

83 :デフォルトの名無しさん:02/09/22 02:11
毎回エスケープシーケンス使うほうが直前に変数に入れるよりもさらに面倒だと思うが・・・

84 :デフォルトの名無しさん:02/09/22 02:14
16がスタック消費をそんなに気にするなら
extern const int table[] = { ... };
function( table);
にしたらいいんでないの
まあどうでもいいことだけどね…。

85 :デフォルトの名無しさん:02/09/22 02:15
ところでなんで16は「関数の直前で初期化できる配列>>69」を
関数に渡そうとするんだ?

そんなもん関数内でローカルに扱えと思うのは漏れだけか?

86 :デフォルトの名無しさん:02/09/22 02:20
漏れもそうおもふ.

87 :打・サイタマ@受信料未払い:02/09/22 02:25
中身を触らず、かつfunc()内でしか使わないなら、
func()内にstatic const で持つのもいいかなとか思いますです。

88 :16 ◆Ms2nrv3c :02/09/22 02:32
>>84
そんなことが出来るんですか。
配列の中身を静的領域に置くテクニックですか。
でも外部変数は使わない方針なんです。
>>85-87
関数としての汎用性がおちる気がして。。

89 :デフォルトの名無しさん:02/09/22 02:41
メモリを気にしてるんだったらスコープつければ?
{
char bbb[]={1,2,3,4};
Saru(bbb);
}


90 :デフォルトの名無しさん:02/09/22 02:46
>>89
?

91 :デフォルトの名無しさん:02/09/22 02:46
>>89
スコープの意味わかってんのか?

92 :デフォルトの名無しさん:02/09/22 02:53
スコープ抜けたときに変数のスタック領域って開放されるんじゃないの?
 {
 char A[]={1,2};
 Func(A);
 }

 Func("\x01\x02");
でメモリの使われ方に違いが有るの?

93 :デフォルトの名無しさん:02/09/22 02:53
>>89
その場合メモリは関係ないですよ( ´,_ゝ`)

94 :デフォルトの名無しさん:02/09/22 02:56
例えば関数printfの実物をみてみよう
ということで
stdio.hをみてみたのですが
プロトタイプの宣言はあるものの
それらしきものが見当たらない気がするのですが
気のせいですか?

95 :デフォルトの名無しさん:02/09/22 02:57
>91
立派なブロックスコープでつがなにか?

96 :デフォルトの名無しさん:02/09/22 02:59
>>95
>>91はそれがメモリの節約と何か関係あるのか?と言っているんだと思うぞ。

97 :デフォルトの名無しさん:02/09/22 03:00
>>94
ライブラリのソースを見よう。

98 :デフォルトの名無しさん:02/09/22 03:00
>>94
そりゃhファイルだからねぇ…
\Program Files\Microsoft Visual Studio\VC98\CRT\SRC
あたりにあるCファイルにないか?

# CRTって何? C Run timeってことかな?

99 :デフォルトの名無しさん:02/09/22 03:01
実装レベルで即座に解放されるかは知らんが、
変数が有効でなくなる立派なスコープだわな。

100 :デフォルトの名無しさん:02/09/22 03:01
>>98
C Run Timeか・・・俺もわからんかった。
コンパイル済みのライブラリなら、\Program Files\Microsoft Visual Studio\VC98\Bin\LIBC.LIBの中にあるね。

101 :デフォルトの名無しさん:02/09/22 03:02
>>96
んで>>92のような問いかけに戻る、と。

102 :デフォルトの名無しさん:02/09/22 03:03
実際のところ>>92のほうはどうなのよ?
最適化も何もしない素コンパイラだったら節約になりそうな気はする。

103 :デフォルトの名無しさん:02/09/22 03:03
>>101
解放されてもメモリーを消費することにはかわらんだろ。
使っている時間の長さが違うだけで。

それとも、
void func()
{
int a,b;
}
と、
void func()
{
{int a;}
{int b;}
}
で違うと言いたいのか?

104 :デフォルトの名無しさん:02/09/22 03:05
>>103
むしろスタック分だけ余計にメモリ使いそうな気がする

105 :デフォルトの名無しさん:02/09/22 03:07
スタックは関数から返れば、解放されるから節約しても無駄。
ブロックスコープ変数は、ほとんどのコンパイラで関数突入時に確保される。

106 :デフォルトの名無しさん:02/09/22 03:09
関数内のブロックスコープって人間様のためじゃなかったのか…


107 :デフォルトの名無しさん:02/09/22 03:10
下記ならメモリの使用量としては変わらないね。

Func("\x01\x02");
 ->2Byte分の領域が確保され、関数を抜けたときに開放される。

{
 char A[]={1,2};
 Func(A);
}
 ->2Byte分の領域が確保され、スコープを抜けたときに開放される。

108 :デフォルトの名無しさん:02/09/22 03:11
>>107
前者が解放されるのってプログラム終了時じゃないの?

109 :108:02/09/22 03:13
"\x01\x02"へのポインタが解放されるのは関数を抜けたときだけど。

110 :デフォルトの名無しさん:02/09/22 03:13
>108
それなら後者の方が得ということになるの?

111 :デフォルトの名無しさん:02/09/22 03:14
コンパイラスレになってきました

112 :デフォルトの名無しさん:02/09/22 03:14
>105
速度で見ればローカル変数使うだけ当然遅くなる。
あと、関数呼び出しも戻りのアドレスをスタックに待避する処理や引数を
渡す処理が入るので当然遅くなる。

113 :デフォルトの名無しさん:02/09/22 03:15
後者だと、A[]={1,2};でメモリコピーが走らない?
前者の利点が見えないんだけど

114 :空気を読めない奴:02/09/22 03:15
たかだか数バイトけちんなよ。

115 :デフォルトの名無しさん:02/09/22 03:16
>>114
。・゚・(ノД`)・゚・。

116 :デフォルトの名無しさん:02/09/22 03:19
要するに、↓のコードの前者と後者でメモリ使用量が違うか?
ということだな。

hoge()
{
 { char A1[]={1,2}; Func(A1); }

 { char A2[]={1,2}; Func(A2); }

 { char A3[]={1,2}; Func(A3); }
}

hoge()
{
 char A1[]={1,2};
 char A2[]={1,2};
 char A3[]={1,2};

 Func(A1);
 Func(A2);
 Func(A3);
}

ソースに記述したブロックの通りにスタックを確保すれば、
後者より前者の方がスタック使用量を節約できるわけで。

ただ、実際にはソースと同じような確保はしてくれない
と思った方がいいだろうな。

117 :105:02/09/22 03:20
>>112
すみません言ってることの意味が分かりません。
>>103 は処理が違うということでしょうか?


118 :デフォルトの名無しさん:02/09/22 03:20
>>116
しかも前者は読みづらいね。
あまり現実的じゃないよね。

119 :デフォルトの名無しさん:02/09/22 03:22
>>116
スタック節約してどうすんの?

120 :デフォルトの名無しさん:02/09/22 03:23
>>119
16君がメモリの消費に神経質だから。

121 :120:02/09/22 03:23
あ、俺は>>116ではないです。

122 :116:02/09/22 03:24
>>119
俺も知らんよ。(再帰関数でもない限り)
最初に書いた奴はこういうことが言いたかったんだろ?
と書いただけ。

123 :105:02/09/22 03:24
>>116
仮にブロックスコープで確保解放が行われるとして、スタック操作に掛かる
コストのほうが、スタック消費量を抑えることより問題だと思われ
for(int i=0; i<10000; i++ )
{
int n;
...
}
とかやると、大変なことに。。。


124 :デフォルトの名無しさん:02/09/22 03:24
>>1
スレタイトルの番号を囲んでいる括弧が、左は半角で右は全角なのが気になる。

125 :105:02/09/22 03:26
ぐは、またやっちまった
技術板でこのスレだけ進行早すぎ
それと、10000くらいなら全然平気でした

126 :デフォルトの名無しさん:02/09/22 03:26
>>123
16以外はみなそう思っていると思うぞ(笑)

でもC++だとfor(int i=0;i<100000;i++)とかやるんだよな・・・あれもスタックに取ると思うんだけど。

127 :126:02/09/22 03:27
おっと、スタックに確保する操作はforにはいったときの一回か。

128 :デフォルトの名無しさん:02/09/22 03:27
話を元に戻すと
まず16さんが下記の記述はいやだと、
char[] A = {1,2};
Func(A);
理由、メモリを無駄にしたくないから。

よって
Func("\x01\x02");
ではどうだと、、、

それよりも
{
char[] A = {1,2};
Func(A);
}
こうすれば、同じことだしFunc("\x01\x02")より分かりやすいんでは?
という流れ。

129 :デフォルトの名無しさん:02/09/22 03:28
>>128
そんな感じだね。

130 :116:02/09/22 03:28
>>123
俺もそう思うよ。
ただ、スタック操作だけならx86ではespを加算と減算だけだわな。
初期化が問題だな。

131 :デフォルトの名無しさん:02/09/22 03:31
>112
スレを前から読んでないのでよく解らんが
要するにスピードを重視するのか容量を重視するのかというわけで
そのトレードオフによって決めるべきかと。


132 :デフォルトの名無しさん:02/09/22 03:35
話かわるけど、VC++のqsortって関数の再帰呼び出しは使っていないみたいだね。
これはスタックオーバーフロウが起らないようにしているのかな?
それともやっぱりパフォーマンスを向上させるためかな。


133 :デフォルトの名無しさん:02/09/22 03:36
パフォーマンスに一票

134 :116:02/09/22 03:41
でもスタックオーバーフローの可能性があるqsortなんかいやだな。
最近のコンパイラでもあるのかな?

135 :デフォルトの名無しさん:02/09/22 03:46
>>128
本題じゃないが、
数字をcharの配列で渡そうとしているあたりに16の徹底ぶりがうかがえる(w

136 :デフォルトの名無しさん:02/09/22 03:48
>>135
なるほど。気づかなかった。
きっとそうなんだろうな。

137 :デフォルトの名無しさん:02/09/22 03:48
intは(例えば)4バイトも消費するからもったいないです!!ってか?(w

138 :デフォルトの名無しさん:02/09/22 03:50
じゃあfloatでいいところでもdouble使っている俺はやばいな(鬱
実際それはまずいんだろうけど。なんとなくfloatは嫌い。

139 :デフォルトの名無しさん:02/09/22 03:51
>>137
それはそれですごいなw
0〜255(-128〜127)の値しかとらないことが分かっているのかな?


140 :デフォルトの名無しさん:02/09/22 03:57
エスケープシーケンス使うってことは初期化に変数使えないんじゃ・・・

141 :デフォルトの名無しさん:02/09/22 04:01
> intは(例えば)4バイト
> 0〜255(-128〜127)
この辺にもツッコミ禁止の徹底ぶりがうかがえる。

ネタですた。謝ります。スマソ。

142 :137:02/09/22 04:06
>>141
だってここの人怖いもん(;_;)
おかげで注意深くなれたけど(w

143 :デフォルトの名無しさん:02/09/22 05:53
MinGWで
--------------------------------
main () {
  void *pa, *pb;
  {
    int a;
    pa = &a;
  }
  {
    int b;
    pb = &b;
  }
  printf ("&a = %p\n", pa);
  printf ("&b = %p\n", pb);
}
--------------------------------
&a = 0073FDDC
&b = 0073FDD8
--------------------------------


144 :デフォルトの名無しさん:02/09/22 06:16
>>143
それが何か?

145 :デフォルトの名無しさん:02/09/22 06:34
・・・荒れてる(?)っぽいけど、質問して良いかな?

2次元配列へのポインタってどうやって記述すればいいんですか?
手元にある参考書には配列へのポインタは書いてあるんだけど
2次元配列へのポインタについては全く書いてないんで。

146 :デフォルトの名無しさん:02/09/22 06:52
>>144
もしブロック終わったら解放するってんなら、a と b は同じ領域を
共有するかもしれないって思ったわけだが、違うらしいなって事
>>116の話題ね

147 :デフォルトの名無しさん:02/09/22 07:00
>>145
ポインタと配列の関係については、ここをひととおり目を通すといい
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

「配列へのポインタ」というのはまー慣用的な表現で、
実際には配列の先頭へのポインタの意味する事が多い。
char a[3]; char *p = a;
で、この例の先頭がさらに配列(char[5])だった場合を考えてみればいい
char b[3][5]; char (*q)[5] = b;
これとは別に、(別途確保した)配列(の先頭)をさすポインタの配列、
というものを使うことも多い

148 :デフォルトの名無しさん:02/09/22 07:12
>>146
そんなもんコンパイラはもとよりコンパイルオプションによって変わるぞ。
VC++6 なら、Debug なら共有しないが、Release なら共有する。

何で実装依存なのに、一つの結果見ただけで「違うらしいな」なんて結論付ける
かなぁ...。

149 :デフォルトの名無しさん:02/09/22 07:33
>>148
馬鹿ですか?「MinGWで」って書いてるのに

150 :デフォルトの名無しさん:02/09/22 07:58
>>149
アフォですか ? 「コンパイルオプションによって変わる」と書いてあるのに

151 :デフォルトの名無しさん:02/09/22 08:28
> 「違うらしいな」なんて結論付ける

プ

152 :デフォルトの名無しさん:02/09/22 08:41
逆コンパイルするツール何か教えれ。

153 :デフォルトの名無しさん:02/09/22 08:54
忘れていたが、はるか昔、俺も16と同じこと考えたことあった。
いまとなってはなんでそんな事考えたのかも思い出せないけど。

メモリの節約しようって発想はなかったけど、使い勝手から結局va_list使った。パスカル文字列風に先頭はデータ数入れて。でも、va_listで自動キャストされる規則をわすれたりして型を間違えると誤動作する。

154 :名無しさん@Emacs:02/09/22 09:02
3D ライブラリが無い環境 (Palm 等) で 3D グラフィックを表示する
アプリケーションを作りたいのですが、参考になりそうなソースコード
がありましたら教えて下さい。
今は cbzone のソースを読んでいます。

155 :デフォルトの名無しさん:02/09/22 09:37
>>152
こっちで聞け。
http://pc3.2ch.net/test/read.cgi/tech/1014404990/l50

>>151
その程度の書き込みしかできないなら、止めとけ。ヴァカみたいだぞ。
(みたいじゃねーのかもな。ププ)

156 :nobodyさん:02/09/22 15:01
もう156.早い.


157 :デフォルトの名無しさん:02/09/22 15:23
聞け!

158 :デフォルトの名無しさん:02/09/22 16:14
VC買うのと無料のBCCつかうのって、どっちがいい?

159 :デフォルトの名無しさん:02/09/22 16:30
>>158
売ってるティッシュ買うのと街頭で配ってるティッシュ使うのって、どっちがいい?

160 :デフォルトの名無しさん:02/09/22 16:32
>>159
どっちでも良いってことですか?

161 :デフォルトの名無しさん:02/09/22 16:35
ケツの拭き心地が違うということ

162 :デフォルトの名無しさん:02/09/22 16:38
>>161
ケツの拭きごこちってどう言う意味?
作業のしやすさ?

163 :デフォルトの名無しさん:02/09/22 16:40
>>162
配ってるティッシュ使ってみて不満があるなら売ってるの買えや

164 :デフォルトの名無しさん:02/09/22 16:42
>>163
わかりました。
ありがとうございました。

165 :デフォルトの名無しさん:02/09/22 16:42
>>163
僕は意味を聞いているのですが!
ケツの拭きごこちとプログラムを作るのと何の関係があるの?
あおりはやめてください。

166 :デフォルトの名無しさん:02/09/22 16:48
>>165
騙りやめれ

167 :デフォルトの名無しさん:02/09/22 16:49
なんでこれぐらいの事で怒るのか。

168 :デフォルトの名無しさん:02/09/22 16:50
BCCでCのソースをコンパイルするとき拡張子を必ず.cにしないと
いけないと聞きました。Cのソースを.cppでコンパイルしたらどんな
不都合があるのですか。「倉薫」の入門本にもそんなくだりがあったが
理由がわかりません。

169 :デフォルトの名無しさん:02/09/22 16:50


 ケ ツ 拭 い て み り ゃ あ わ か る だ ろ う が !


170 :デフォルトの名無しさん:02/09/22 16:51
うっ・・・

171 :デフォルトの名無しさん:02/09/22 16:54
>>168
明らかだろ。オマエがそうやって人に聞いてるの見てると、
もう(。A。)(.Λ.)(:>)(゚∀゚)(<:)(.Λ.)(。A。)って感じだな。

172 :デフォルトの名無しさん:02/09/22 16:55
http://www.bloodshed.net/index.html

ここのPascalとC++の統合開発環境はけっこうよかったです。報告まで

173 :デフォルトの名無しさん:02/09/22 16:57
>>171

いっている意味がわかりません。Hello,World程度の簡単なソースを
拡張子.cにしようが.cppにしようがコンパイル結果に関係ないと思うのですが。

174 :デフォルトの名無しさん:02/09/22 17:01
>>168
> BCCでCのソースをコンパイルするとき拡張子を必ず.cにしないと
> いけないと聞きました。Cのソースを.cppでコンパイルしたらどんな
> 不都合があるのですか。「倉薫」の入門本にもそんなくだりがあったが
> 理由がわかりません。

C と C++ で一部非互換のところがあるからだよ。BCC は、使ったこと無いからわからんけど、VC++ では xxx.c なら sizeof 'a' == 4 となるが、xxx.cpp なら sizeof 'a' == 1 となる。

175 :デフォルトの名無しさん:02/09/22 17:01
>>173
全然違う・・・

176 :デフォルトの名無しさん:02/09/22 17:03
CとC++ではNULLの意味が異なります。

177 :168,172,173:02/09/22 17:05
C++ってCのスーパーセットだから、CのソースをC++コンパイラでコンパイルすると
エラーはでないけど、実行時エラーがでる場合があるということですか?

178 :デフォルトの名無しさん:02/09/22 17:06
まぁまぁ。
>>173は未だにトランスレータ式のC++コンパイラ使ってるんだよ。
なのに次からBCC使わなきゃなんなくなって、不安でしょうがないんだよ。

179 :裕美子 ◆lIp1b.Ek :02/09/22 17:09
会話についていけないからもう質問はやめにします。すみませんでした。

参考までに、使用コンパイラは 試食版とBCCです。

180 :デフォルトの名無しさん:02/09/22 17:11
>>179
あんただれ

181 :裕美子:02/09/22 17:12
>>180
痴漢が話しかけないで!

182 :デフォルトの名無しさん:02/09/22 17:12
char *c = malloc(128);
C++ではエラー出ます。

183 :デフォルトの名無しさん:02/09/22 17:15
http://pc3.2ch.net/test/read.cgi/tech/1032421426/l50

ここの女の子だよ>>180

184 :デフォルトの名無しさん:02/09/22 17:15
かといって
char* c = static_cast<char*>(malloc(128));
にするとCでコンパイルできなくなる罠

185 :デフォルトの名無しさん:02/09/22 17:19
Cのソースを*.cppでコンパイル必要があるのかと問い詰(ry

186 :デフォルトの名無しさん:02/09/22 17:36
まあ、まあ、これでも見て落ち着けよ

          /:::|:::::::|:::::::::::::/::::::/::::::::::::::/:::::::/`\_
       / ̄\::::::|:::::/:::......-―――--..........__/:::::::::::::::\
   ┌ー ̄::::::::::::ヽ::|:::..-^ ̄            ^ ヽ、:::::::::\
   ヽ::::::::::::::::::::::::::::/                  \::::::::ヽ
    ヽ:::::::::::::::::::::::/             ::::       \:::::ヽ
    ヽ::::::::::::::::::/              ::::::::        \::::|_
     ):::::::::::::::|              ::::*:::::        ヽ:|::::ヽ
     /::::::::::::::::|              ::;;;;:          l::::::::ヽ
    /::::::::::::::::::|             ノ::ii:ヽ::          l::::::::::|
    |::::::::::::::::::::|            /::::;リ:::l::::         |::::::::::::|
    |:::::::::::::::::::::l           ...l::::;リ:::/::         /:::::::::::::|
    .|::::::::::::::::::::::l          . /:ア/:::        /:::::::::::::::i
    l:::::::::::::::::::::::::l          ./::`^:::::        /:::::::::::::::::/
    ヽ::::::::::::::::::::::::l         /::::::::::        /:::::::::::::::::::/
     /:::::::::::::::::::::::l        /:::::::::::::      /::::::::::::::::::::::/
     /::::::::::::::::::::::::i __-ー--=;;;::::::::::::::  ....::::/:::::::::::::::::::::::/

187 :デフォルトの名無しさん:02/09/22 17:40
裕美子脱ぐなよ汚ネェ

188 :デフォルトの名無しさん:02/09/22 18:06
>>186
リリアたん・・・ハァハァ

189 :デフォルトの名無しさん:02/09/22 20:32
charはなんと読むの?

190 :デフォルトの名無しさん:02/09/22 20:33
sageちまった

191 :デフォルトの名無しさん:02/09/22 20:40
>>189
> charはなんと読むの?
もうこの話題はいいよ、「キャー」でも「シャー」でも何でもいいよ。

192 :デフォルトの名無しさん:02/09/22 20:55


193 :デフォルトの名無しさん:02/09/22 20:56
>>191
ぷっ、
シャーだって
ぷぷぷぷぷぷぷ
くっくっくっ

194 :デフォルトの名無しさん:02/09/22 20:57
勝俣

195 :デフォルトの名無しさん:02/09/22 21:04
>>189
友人の飼っていた犬が「ちゃる」だったので、
charも「ちゃる」になりますた。

196 :nobodyさん:02/09/22 21:14
キャッだろ。
キャラクターの略だからな。
キャルかなぁ。


197 :デフォルトの名無しさん:02/09/22 21:15
友人の飼っていた子が「ゆみ」だったので、
charも「ちゃー」になりますた。

198 :16 ◆Ms2nrv3c :02/09/22 21:17
ちょっと気になったのですが、
>>70>>81で出てるdefineではどうやってやるのでしょうか

199 :デフォルトの名無しさん:02/09/22 21:19
>>198
#define VAL_ 0

200 :デフォルトの名無しさん:02/09/22 21:20
200get

201 :16:02/09/22 21:21
とっとと答えんかいっ!!!
糞どもがーーーーっ!!

202 :デフォルトの名無しさん:02/09/22 21:26
#define UZEE 16


203 :デフォルトの名無しさん:02/09/22 21:28
#define 16 メモリケチケチ厨

204 :デフォルトの名無しさん:02/09/22 21:30
#define _16 -1

205 :デフォルトの名無しさん:02/09/22 21:37
#define ANSWER "これ以上メモリ節約なんて考えるなタコ"

206 :デフォルトの名無しさん:02/09/22 21:48
warning C4305: 'argument' : 'const int' から 'char' へ切り詰めます。

#define FLG_AGE 1

void a( char b );

a( FLG_aGE );

どうすればいいんでしょうか?
キャスト?

207 :デフォルトの名無しさん:02/09/22 21:54
#define 206 16

208 :デフォルトの名無しさん:02/09/22 21:59
#define FLG_AGE '\1'

209 :デフォルトの名無しさん:02/09/22 22:06
>>208
間違い
#define FLG_aGE '\1'

210 :206:02/09/23 00:30
放置?

211 :デフォルトの名無しさん:02/09/23 00:33
>>210
> 放置 ?

はぁ ? >>208-209 を見てんのか ?

212 :デフォルトの名無しさん:02/09/23 00:37
別にキャストでいいんじゃないの

a( (char)FLG_AGE );



213 :デフォルトの名無しさん:02/09/23 00:44
FLG_AGEを常にcharにしたい(理由はあえて聞かない)なら、
#define FLG_AGE ((char)1)

あと、C FAQに
   文字リテラル('\1'とか)は実はint型な罠
ってのがあったような気がするのだが、どうか。(C++ではcharだという話も)

214 :デフォルトの名無しさん:02/09/23 00:57
>>213
間違い
#define FLG_aGE ((char)1)

215 :212:02/09/23 01:09
>>214
いや>>206の聞いてる人が既にミスしてるからw

>>#define FLG_AGE 1
>>void a( char b );
>>a( FLG_aGE );
↑ここねw

216 : :02/09/23 01:12
楽しそうですね

217 :デフォルトの名無しさん:02/09/23 01:35
>>206
void a(char b);をvoid a(int b);にする。char型の引数ってあまりみないな。

218 :デフォルトの名無しさん:02/09/23 02:20
>>217
charにしても別にメモリの節約にはならないし(w

219 :デフォルトの名無しさん:02/09/23 02:34
>>218
プ

220 :デフォルトの名無しさん:02/09/23 02:56
unsigned char 型の定数を32ビット右シフトすると、
元の値とまったく同じになるんだけど、何故?環境はVC++6.0SP5


221 :220:02/09/23 02:57
ちなみに31ビット右シフトすると0になります。
もうわけ分かりません。

222 :必要なくね?:02/09/23 03:00
っていうかなんで
8bitの unsigned char 型のデータを
32bit右シフトしてるの?

223 :デフォルトの名無しさん:02/09/23 03:10
全然シフトについての構造とかは知らないけれど、
隣との、xorを取るようなことを繰り返して、
シフトをしているのであれば戻るのかもね。

224 :223:02/09/23 03:15
全然的外れな事書いていたらご免ね。

225 :デフォルトの名無しさん:02/09/23 03:25
数の決まっていない数値データの文字列からタブなどを判別してdouble型の配列に値を代入するにはどうしたらよいのですか?

226 :デフォルトの名無しさん:02/09/23 03:28
ま た 未 定(略

227 :デフォルトの名無しさん:02/09/23 03:31
数の決まっていない数値データの文字列からタブなどを判別してdouble型の配列に値を代入すればいいです。

228 :デフォルトの名無しさん:02/09/23 03:32
ヒントだけでも教えていただけないでしょうか?

229 :デフォルトの名無しさん:02/09/23 03:33
strtokですか?

230 :デフォルトの名無しさん:02/09/23 03:34
分かるとこから書いていけばいいです。
それでも詰まったらコードを晒す。

231 :220:02/09/23 03:34
>>222
こんな感じの文を書いてる。

unsigned char *p;
unsigned long a;
    :
a |= *p >> (32 - s); // 0 <= s <= 32

s=1〜32のときは期待通り動くのが、s=0のときだけ0にならず驚いた。

>>223
こんな夜中にレスつけてくれただけでも有難う。

いろいろ検索してるうちにこの症状について書いてあるページを見つけた。
どうやらこれは処理系依存らしいが、ANSI Cでもそう定められてるのだろうか。
ttp://www.biwa.ne.jp/~chu0296/laboratory/cpp.html


232 :デフォルトの名無しさん:02/09/23 03:43
さて今日もいってみようか

>>231
それは処理系依存ではなく未定義です

233 :デフォルトの名無しさん:02/09/23 03:50
>>231
これ試してみたら多分、まずunsigned charをシフトするときでも
32bitレジスタに値を入れてそれをシフトする命令を出してるらしい。
で、それをシフトするとき何ビットシフトするかを入れるレジスタ
の値が31以上だったとき下位5bitだけ使うっぽい。
だから33bitシフトとすると1bitシフトする。

234 :デフォルトの名無しさん:02/09/23 04:46
ちょっと脱線。

x86形の話だけど、コンパイラはシフトをアセンブラレベルの
シフト命令(shr/sar)に展開するのね。
で、8086の頃は、シフト命令は1ビットだけシフトする命令か、
CLレジスタに数値を入れてシフトさせるしかなかったのね。
で、ハードウェア的には、本当に繰り返しで処理してたのね。
80186(かな?)以降は、直接nビットシフトする命令が出来たんだけど、
これもハードウェア的には(マイクロコードで)繰り返し処理してたのね。
で、386になってから、多ビットシフトのハードウェアが導入されて、
ようやくシフトが"軽い"命令になったわけ。

で、たしか、386からだと思うけど、clレジスタに32以上の数値を指定しても、
下位ビットだけがマスクされて、実際には31ビット以下のシフトしか
行われないようになったわけ。
だから、16bitコンパイラを使って、32bit以上のシフト命令を使ったプログラムを作ると、
むかーしのCPUと今のCPUで結果が異なるわけ。
この結果を、CPU種別の判別なんかに使ってたりしたんだな。

コンパイラは、CPUの判別なんかしない(実行環境は別だし、以降に生まれたCPUにも対応できない)から、
効率重視のC言語において結果が異なる(未定義になる)のは
ある意味仕方がないとも言えるんだろうね。

235 :nobodyさん:02/09/23 05:39
>>234
私、初発言の初心者ですが、>>234さんの説明は目から鱗でした。
なるほど、機種依存ってのはここに根本原因があったのですね。
ありがとうございました。久しぶりに濃い文章だっだなぁ。


236 :220:02/09/23 05:54
>>233-234
235氏と同じく目から鱗でした。
アセンブリ言語の知識はZ80〜8086時代で止まってるからなぁ。
まさに、内部でシフト演算をn回ループしてるものだと思ってたよ。

237 :デフォルトの名無しさん:02/09/23 09:40
double i=0;

for(i=0;i<10;i+=0.1){
printf("%1.1f ",i);
}

表示するとなぜか最後に10.0が入るのはどうしてなんですか。

238 :デフォルトの名無しさん:02/09/23 09:55
  ま た 浮 動 小 数 点 か ( 藁


って、昨日見たのはJavaスレだったか。

239 :デフォルトの名無しさん:02/09/23 10:01
二進数の世界だから、0.1はあらわせなく、誤差が生じて
判定されてしまうって言うのが一般的な回答なのでは?
for(int i=0;i<100;i+=1){ //i++で充分
  printf("%1.1f ",i/10.0);
}
こういうふうにしなさいと言うのもあると思う。
違ってたらご免。

240 :デフォルトの名無しさん:02/09/23 10:04
>>233
2^5(2進5bit)で割った余りか。なるほど。

241 :デフォルトの名無しさん:02/09/23 10:07
>>237
10.0?なんかソースのコピペミスってないか?
最後だけじゃなく、途中経過も書いてみな。


242 :デフォルトの名無しさん:02/09/23 10:15
>>241
ウチだと10.0も出た。たぶん
0.1が0.09999..とかで、
10.0も9.99999...なんだと思われ

243 :デフォルトの名無しさん:02/09/23 10:17
9.99999999999998050000

244 :デフォルトの名無しさん:02/09/23 10:21
>>241
> 10.0?なんかソースのコピペミスってないか?

既に、>>239 で答えでてるよ。初心者が良く陥りやすい罠のひとつ。

0.1 って言うのが本当の 0.1 じゃないから10回めのループの判定の時に i が 10.0... にならなくて、9.9... とかなっているため、もう一回余分に回るだけ。解決策は、>>239 のようにやるのが普通。

ちなみに、最後に i が 10.0... になって無いのに表示が 10.0 となるのは、出力時に四捨五入しているから。

245 :デフォルトの名無しさん:02/09/23 10:21
(0.1)10 = (0.00011001100110011〜〜)2
2進表現内での循環小数になる。=>まぁこれが誤差などの原因かな

246 :デフォルトの名無しさん:02/09/23 10:24
double i=0;

for(i=0;i<10;i+=0.1){
printf("%.20f ",i);
}

http://www.google.com/search?q=%95%82%93%AE%8F%AC%90%94+%8C%EB%8D%B7&ie=Shift_JIS&hl=ja&lr=lang_ja

247 :デフォルトの名無しさん:02/09/23 12:26
#include <stdio.h>
void main()
{
printf( "%f\n", 1 );
}

表示するとなぜかアプリケーションがクラッシュするのですがどうしてなんですか。


248 :デフォルトの名無しさん:02/09/23 12:41
http://www.catnet.ne.jp/kouno/c_faq/c15.html#3
15.3:
解けなくてイライラしていた問題が実は、

        printf("%d", n);

で起きていることがわかった。ANSIの関数プロトタイプは上のような 引数の型
の不一致から守ってくれると思っていたのだが。

A:

関数が可変数個の引数を取るとき、プロトタイプは可変数個の引数の 数やその
データ型についての情報を与えない(そもそも出来ない)。よっ て通常の保護の
仕組みは、可変数個の引数リストの可変長の部分には あてはまらない。コンパ
イラは暗黙の変換も(通常の)データ型の不 一致も警告もできない。

質問5.2, 11.3, 12.9, 15.2も参照のこと。

249 :デフォルトの名無しさん:02/09/23 13:04
>>247
main()の型がvoidだからです。
標準Cではmain()の型はintと決まっています。

250 :デフォルトの名無しさん:02/09/23 14:29
>>249
ネタにマジレスするが
そんなOS依存環境依存なことをどうどうと正論ぶるのはやめにしませんか?

251 :247:02/09/23 14:37
>>248
レスありがとうございます。
しかし、浮動少数点が正しく表示されないのならば
まだ分かるのですが、なぜクラッシュするのでしょうか?

>>249
int main() にしてもダメでした。


252 :デフォルトの名無しさん:02/09/23 15:16
>>251
sizeof( double )!=sizeof( int )だからでないの?

253 :デフォルトの名無しさん:02/09/23 15:22
>>247
環境も書いてないし、クラッシュしたとは具体的にどうなったのかも
提示されていない。

254 :デフォルトの名無しさん:02/09/23 15:44
void なら return ;
int なら return 0;
を入れなさいという事では?(コンパイラの要求)

255 :デフォルトの名無しさん:02/09/23 15:50
>>247
printf( "%f\n", 1.0 );
intとdoubleの大きさの違いを思い知れ スッタコ

あと頓珍漢な回答してた>>253も氏ね アホボケ

256 :デフォルトの名無しさん:02/09/23 15:51
>>250
> ネタにマジレスするが

メールアドレス見た ?

257 :デフォルトの名無しさん:02/09/23 15:56
>>251
呼び出し側がスタックに投げ入れるデータの量と、
呼び出された関数がスタックから取り出すデータの量が食い違えば、
スタックポインタがずれて、まともに動作できなくなる。

とゆーシナリオを想像するんだけど、事実は知らん
そして事実がどうであれ、保証を失う事をしておいて「なぜ?」と問う
自分のセンスを疑ったほうがいいのではないか。
「やっぱり」と思ってほしいぞ

258 :デフォルトの名無しさん:02/09/23 16:02
>>255 にしても、クラッシュっていうのは?

259 :258補足:02/09/23 16:05
だって引数いっこだし、sp弄らないはずだよねえ?
とおもったけど、リターンアドレスもスタックに積んでるか。


260 :デフォルトの名無しさん:02/09/23 16:09
うーん、3時間半で11レスか
思ったより釣れたな

一応用意していた回答は
「printfは引数の型チェックを行えないので
浮動小数点を使う場合は、明示的に使ってやらないと
CPUが浮動小数点ユニットを切り離してしまうから
クラッシュする」でした。

ちなみに環境はVC6ですが、インテル系のCPU使っていれば大体どんな
コンパイラ使ってもクラッシュすると思う。

#include <stdio.h>
double d; // <-- 追加
void main()
{
printf( "%f\n", 1 );
}

コレなら表示はおかしいけど死にはしない。



261 :デフォルトの名無しさん:02/09/23 16:10
>>257
もちろん実装によるけど...

> 呼び出し側がスタックに投げ入れるデータの量と、
> 呼び出された関数がスタックから取り出すデータの量が食い違えば、
> スタックポインタがずれて、まともに動作できなくなる。

なんてことは、普通起こらない。スタックポインタの操作は呼び出し側の仕事だから、呼び出され側がスタックから一つも読まなくても、ポインタがずれたりはしない。
つーか、printf() なんかだといくつ積まれて呼び出されるかわからないから、呼び出され側でスタックポインタの操作をしようが無い。

> とゆーシナリオを想像するんだけど、事実は知らん

今回の件は、多分 (int)1 の値とその後ろのスタックの内容を (double) として見た時に浮動小数点じゃねーぞって言って怒られたんだと思う。

> そして事実がどうであれ、保証を失う事をしておいて「なぜ?」と問う
> 自分のセンスを疑ったほうがいいのではないか。
> 「やっぱり」と思ってほしいぞ

ここは、同意。「何で、これぐらいうまくやってくんねーんだよ。」とか思う奴は、C なんか使っちゃいかん。

262 :258:02/09/23 16:11
>260 あー俺FPU意識しなきゃいけない石使ったことなかったよ

263 :デフォルトの名無しさん:02/09/23 16:21
ドキュソ質問で申し訳ないですが、、、

int buff;

(char)buff; と書いてあればbuffをchar型にキャストせよと言う事ですが
(char*)buff; ならばどーゆー意味でしょう?buffをchar型のポインタ型とせよ、ってことであってます?

264 :デフォルトの名無しさん:02/09/23 16:23
bccだとクラッシュしなかった・・・(0.000000と表示された)

265 :デフォルトの名無しさん:02/09/23 16:32
>>260
> 「printfは引数の型チェックを行えないので
> 浮動小数点を使う場合は、明示的に使ってやらないと
> CPUが浮動小数点ユニットを切り離してしまうから
> クラッシュする」でした。

やっぱりただのアフォだったか...。printf() 使ってる時点で、浮動小数点ルーチンは組込まれるよ。うそだと思うなら、printf() のソース見てみ。(VC++ なら、output.c だよ。)

> コレなら表示はおかしいけど死にはしない。

たまたまだ。最適化オプションちょっと変えるだけで、クラッシュしたりしなかったりするよ。

266 :デフォルトの名無しさん:02/09/23 16:35
>>260
ちょっとまった。それでクラッシュしないのと
浮動小数点ユニットを切り離してしまうのとは
まったく別次元なんだけど、そこは認識してる?

つーか、>>260の回答は間違っている。

267 :デフォルトの名無しさん:02/09/23 16:35
>>258
スタックオーバーフロー

268 :デフォルトの名無しさん:02/09/23 16:37
>>263
> (char*)buff; ならばどーゆー意味でしょう?buffをchar型のポインタ型とせよ、ってことであってます?

まあ、あってる。多分 int のビット幅と char へのポインタのビット幅が同じ (か、int の方が広い) なんだろうな。

デバッガなんかを作っていて、アドレス値を整数 (多分 16進数から変換して) で入力させて、そのアドレスからデータを引き出すとかやる時に使ったりする。

269 :263:02/09/23 16:51
>>268
でも

int a = 10;
char b = (char)a;
printf("%c\n" , b);

で10と表示されませんが。

270 :デフォルトの名無しさん:02/09/23 16:51
>>260
それでしなないのは、それこそ「たまたま」じゃん。
スタックが増えたからでしょ。 dになんか入れれば表示も変化するよ。
FPU切り離しって何言ってんだかわかんない。
もし万が一そうだとしてもprintf使ってりゃありえんことを理解してよ。

271 :デフォルトの名無しさん:02/09/23 16:52
>>269
a=65を突っ込んで、もう一度報告してみろ

272 :デフォルトの名無しさん:02/09/23 17:08
俺は
int a = 'A';
をお薦めする

273 :デフォルトの名無しさん:02/09/23 17:11
>269 ネタだよね?

274 :デフォルトの名無しさん:02/09/23 17:12
>>269
%cなんだから10になるわけないのでは?


275 :デフォルトの名無しさん:02/09/23 17:14
場が荒れてしまって、申し分け有りませんでした。

こちらで、起きているエラーはこれです。
http://msdn.microsoft.com/library/en-us/vccore98/html/r6002.asp

> たまたまだ。最適化オプションちょっと変えるだけで、クラッシュしたりしなかったりするよ。

確かにグローバル変数で取っても、最適化でクラッシュしますね。

#include <stdio.h>
void f(){ double d=0.0; } // 明示的にFPUを使う
main()
{
printf("%f\n", 1 );
}

これでもクラッシュするオプションあったら教えて欲しいです。


276 :デフォルトの名無しさん:02/09/23 17:54
VC++で、各標準関数に対応するソースファイルはどうやったらわかりますか?

277 :デフォルトの名無しさん:02/09/23 17:56
真実は知らんがどうせなら __int64 を使って欲しかった。

278 :デフォルトの名無しさん:02/09/23 18:12
>>275
VC++だとFloating pointがロードされていないとでるかな。
ちょっとやってみよう。

279 :278:02/09/23 18:14
やってみた
void f(){double d=0.0; }があると出ないのか・・・

280 :デフォルトの名無しさん:02/09/23 18:20
>>257
なるほどな。可変個の引数ゆえにか。
double型の引数を取ると分かっていればintを渡してもdoubleに変換されるんだろうけどね。

281 :280 :02/09/23 18:22
>>261
いや、違うのか(汗

282 :デフォルトの名無しさん:02/09/23 18:30
printf側でスタックに積んだ量よりも多く読もうとしてアクセス違反が起きたということはないの?
数バイトで起るとは思えないけど。

283 :デフォルトの名無しさん:02/09/23 18:50
>>275
> http://msdn.microsoft.com/library/en-us/vccore98/html/r6002.asp

ふむ、確かに "%f" の変換ルーチンがテーブルになっていて、浮動小数点関連の操作をしていない時は、エラールーチンを指すようにしている。
大昔に、8087 が必要だった頃の名残りか、ちょっとでも実行サイズを減らそうとする努力なのかも知れないな。
そこまで読めなかったよ、すまん。(ちょっと言い訳すると、IDE で実行すると R6002 の前に、アサーションエラーが先に出るので気付かなかったよ。)

284 :デフォルトの名無しさん:02/09/23 18:55
>>282
printf( "%08x %08x\n", 1 );
をリリースモードで実行したところ
00000001 00401145
     ↑mainのアドレス
と表示されますので、アクセス違反は起きていないと思います。

>>283
5年くらい前に、学校の授業ではまったバグです。
ネタのつもりで書き込んだのですが、場が荒れてしまい
申し訳ありませんでした。

285 :デフォルトの名無しさん:02/09/23 19:24
C言語での未定義の振る舞いの原因を
議論すること自体がナンセンス。

たとえ外科医を雇って鼻を解剖したとしても
原因の確証はつかめないだろう。

286 :デフォルトの名無しさん:02/09/23 19:28
と、アメリカンを気取ってみた。

287 :デフォルトの名無しさん:02/09/23 19:35
>>285
でもバグの原因追求するときには必要な知識なんだよ。
とくに、クライアントが「結果」しか教えてくれないときとか。

288 :デフォルトの名無しさん:02/09/23 19:35
>>285
> C言語での未定義の振る舞いの原因を
> 議論すること自体がナンセンス。

まあ、たまには処理系べったりの議論も悪くないさ。ここだとちょっとスレ違いかもしれないけどね。久々に output.c のソースなんかも見たしね。
(でも、結局誰が 変換ルーチンのテーブルセットしてるか良くわかんなかったけと。)

289 :デフォルトの名無しさん:02/09/23 20:59
C言語なら私に聞け

290 :デフォルトの名無しさん:02/09/23 21:20
>>289
質問!

Cで、mallocされたあとに使われてなくなった(参照の無くなった)メモリを
ガーベッジコレクトしてくれるような仕掛けをどうにか作りたいと考えてるんだけど
どうしたらいいかな?

今考え中なのはmallocで返却されるポインタをすべてライブラリで一元管理して
ポインタへのポインタを持ち歩いてもらうことでリソースの利用状況を監視できる
ようなものを考えたんだけどスコープの外れたスタック変数なんかは
どうしても監視しようが無くて困ってまぅ

291 :289:02/09/23 21:40
よし!次!

292 :デフォルトの名無しさん:02/09/23 21:41
>>290
> Cで、mallocされたあとに使われてなくなった(参照の無くなった)メモリを
> ガーベッジコレクトしてくれるような仕掛けをどうにか作りたいと考えてるんだけど
> どうしたらいいかな?

基本的に C でやるのは難しいし、あまり益が無い。そう言うのを作るのが楽しいと言うのでなければ、Java とかにした方がいい。

> 今考え中なのはmallocで返却されるポインタをすべてライブラリで一元管理して
> ポインタへのポインタを持ち歩いてもらうことでリソースの利用状況を監視できる
> ようなものを考えたんだけどスコープの外れたスタック変数なんかは
> どうしても監視しようが無くて困ってまぅ

基本的に C にはその手の監視機能が無いから、プログラマーに関数から抜ける時は ○○の関数を呼んでね、としておいてその関数が頑張ってスコープの外れたポインタを知るようにするしかないと思う。
ソース自体に書くのはあまりにも面倒だから、プリプロセサに手を入れるとかする必要があると思う...、とか考えるとせめて C++ にした方がいい。

293 :デフォルトの名無しさん:02/09/23 21:42
DLLをつかってプログラムを作りたいのですが
DLLに処理を渡すときはどういう風にするのですか?

294 :デフォルトの名無しさん:02/09/23 21:42
>>290
http://homepage2.nifty.com/aito/gc/gc.html

295 :デフォルトの名無しさん:02/09/23 21:43
さっき友達から電話かかってきて、質問受けたけど
コンパイル時に「Sample.obj(Sample):Undefined symbol:_power_」などと表示され、プログラムを実行したときに途中で止まってしまうらしい
なんか心当たりはある?

296 :290:02/09/23 21:50
>>294
わーお!
これナイスだな。 GCのタイミングは良くわかんないけど。
そうか、スタックもヒープも全部検査するか、そうきたか。
遅いかなーと思って敬遠気味だったけどそれが楽だしな。

297 :デフォルトの名無しさん:02/09/23 21:52
>>296
これナイスってアンタ、死ぬほど有名だぞ………


298 :デフォルトの名無しさん:02/09/23 21:52
Boehm GCって速度的にはどうなんだろう。

299 :デフォルトの名無しさん:02/09/23 21:53
>>295
*途中で*止まるのなら面白いね


300 :デフォルトの名無しさん:02/09/23 21:54
>>298
w3mでも使ってみればええやんけ。


301 :デフォルトの名無しさん:02/09/23 21:57
>>300
なんですかそれ?

302 :デフォルトの名無しさん:02/09/23 21:58
調べろよ厨


303 :デフォルトの名無しさん:02/09/23 22:02
>>297
> これナイスってアンタ、死ぬほど有名だぞ………

使ってんの見たことないけど...。

304 :デフォルトの名無しさん:02/09/23 22:05
>>303
w3mでつかってるよ

305 :デフォルトの名無しさん:02/09/23 22:07
今日大学の授業で課題がでました。
課題の内容がWindowsのコマンドプロンプトで動作するアドレス帖です。
そんなプロでも作れるかどうかわからないものを学生に作れという教授に問題がある、という皆さんの意見はわかりますが僕は何とか作って提出したいと思っています。
そこで皆さんにお願いがあります。

作って!!

306 :デフォルトの名無しさん:02/09/23 22:09
>>305
そんなプロでも作れるかどうかわからないものを学生に作れという教授に問題がある。

307 :デフォルトの名無しさん:02/09/23 22:11
>>305
そんなプロでも作れるかどうかわからないものを学生に作れという教授がいる大学に入る>>305に問題がある。

308 :デフォルトの名無しさん:02/09/23 22:13
アドレス帖って、住所の一覧表示するだけ?

309 :デフォルトの名無しさん:02/09/23 22:13
>>305
了解!
#include <stdio.h>
int main(void)
{
 printf("漏れのアドレスは%p\n", (void*)main);
 return 0;
}

310 :デフォルトの名無しさん:02/09/23 22:13
>>305
何も制限無いんだったら、適当に作ってアドレス長帳だと言い張れば?

311 :デフォルトの名無しさん:02/09/23 22:13
>>305
「アドレス帖」 というのが何かのソフトウェアだと仮定しよう。
それがどういう動作をするものなのか教えてくれないかな?

たとえば、実行したら Hello,wolrd! と出力する、という仕様なら
それはプロでなくてもできるレベルだよね。

312 :305:02/09/23 22:18
>>311
すみません。アフォの相手をするつもりはありません。
あおりは別スレにいってください。つーか氏ね。

313 :デフォルトの名無しさん:02/09/23 22:19
今度は305祭りか、、

314 :デフォルトの名無しさん:02/09/23 22:19
このスレでの 305の将来が決定いたしました!!

315 :デフォルトの名無しさん:02/09/23 22:21
>>312
てゆーか、仕様書けよ、と言ってるんだけど。
オフィスやアウトルックにあるような他アプリ連動型とかいきなり作るわけでもないっしょ

316 :305:02/09/23 22:22
>>312は偽者ですので無視してください。ということで、

作って!!

317 :デフォルトの名無しさん:02/09/23 22:23
つーか、宿題やってってとこだろ

318 :デフォルトの名無しさん:02/09/23 22:24
C言語初心者で、問題を沢山こなしたいんですが
〜を作れ!という初級問題があるサイト無いでしょうか?

319 :デフォルトの名無しさん:02/09/23 22:25
>>316
309が丁寧に作ってくれたじゃないか。
ということで君の問題は解決済みと判断する。

320 :デフォルトの名無しさん:02/09/23 22:25
>>381
子を作れ!


321 :デフォルトの名無しさん:02/09/23 22:25
>>318
305は?

322 :先生:02/09/23 22:26
>>318
どこか寂れた誰も使ってないスレッドに誘導してくれれば
sage進行でオレがみっちり鍛えてやるよ。

323 :デフォルトの名無しさん:02/09/23 22:33
[Q1]渡した文字列を反転して返す関数fugaを作れモルァ
{Q2]メモリを確保する関数hogeを作れ
- 内部でmallocを使ってよい
- そのmallocがNULLを返したらabortする
- hogeの戻りはvoid。引数は好きにしな

>>318


324 :323:02/09/23 22:35
風呂に入ってくるのでその間に回答ヨロシク


325 :とんでもなく超初心者318:02/09/23 22:38
…もっと勉強して出直してきます。ありがとうございました。(;´д⊂)

326 :デフォルトの名無しさん:02/09/23 22:39
>>325
マ、マジでつか?

327 :デフォルトの名無しさん:02/09/23 22:40
#include <string.h>
unsigned int hh(const char *s)
{
  const char *p;
  unsigned int n = 0;

  if(s) {
    p = s + strlen(s);
    while(--p >= s) n = (n<<1) + *p;
  }
  return n;
}

上の関数を作って実行したところ、愛しいあの子にコクられました。
何がよかったんでしょうか?

328 :318:02/09/23 22:41
char *fuga(char *s) {
 int len;
 char *p;
 len = strlen(s);
 p = (char*)malloc(len);
 strcpy(p , len);
 for(i = 0;i < len ; i++)
  s[i] = p[len - i - 1];

 free(p);
 return s;
}

329 :デフォルトの名無しさん:02/09/23 22:43
>>328
strcpyもついでにやっちゃえ

330 :デフォルトの名無しさん:02/09/23 22:47
char *fuga(char *s) {
 for(i = 0;i < strlen(s) ; i++)
  s[i] = ~s[i];
 return s;
}


331 :デフォルトの名無しさん:02/09/23 22:48
>>328
ネタ?だよね?

332 :323:02/09/23 22:48
>>328
fugaではmalloc禁止で。


333 ::02/09/23 22:49
文字列AとBを比較して
Aの中にBの文字列が含まれているかどうかを
調べる標準関数ってありませんか?
一文字ずつ自分でif文で比較していくのがいいのでしょうか?
いい方法あれば教えてください。

334 :デフォルトの名無しさん:02/09/23 22:49
>>330
エレガントに書け!

while(*s=~*s++);

335 :デフォルトの名無しさん:02/09/23 22:50
>>330
正解!!
int i;
が無いけど。

336 :デフォルトの名無しさん:02/09/23 22:50
strstrのこと?

337 :デフォルトの名無しさん:02/09/23 22:50
>>333
index

338 :323:02/09/23 22:51
>>333
strstr(3)


339 :デフォルトの名無しさん:02/09/23 22:52
>331
あ、漏れもそういうコードよく見るよ。


340 :デフォルトの名無しさん:02/09/23 22:53
>>334
ネタ?だよね?

341 :デフォルトの名無しさん:02/09/23 22:53
>>334
物凄い勢いで2箇所ほど突っ込み鯛。

342 :333:02/09/23 22:54
ありがとうございます。
やってみます。

343 :334:02/09/23 22:55
>>341
おれも書いた瞬間に感じたよ。 やっちゃったって感じさ。

344 :323:02/09/23 23:01
>>337
それなに?


345 :327:02/09/23 23:06
漏れの質問は放置かゴルア!

346 :デフォルトの名無しさん:02/09/23 23:09
>>345 放置です。

347 :デフォルトの名無しさん:02/09/23 23:09
>>345
かっこつけずに手続きをきちんと書き直してみなよ

348 :C初心者:02/09/23 23:11
>>225 面白そうなのでちょっとやってみたっす。それ以前に、まだ、このスレみてますか?
struct suji {
char tmpbox[512]; double suji[64];
} box={ {0x00}, {0} };
int dblsave( struct suji *TpData, const unsigned char *rec, const char *kugiri )
{
    int i, s, c;
    for( i=s=c=0; *(rec+i)!=0x00; ){
        if( 0x30<=(int)*(rec+i)&&(int)*(rec+i)<=0x39 )
            *(TpData->tmpbox+s++)=*(rec+i++);
        else if( memcmp("0", rec+i, 2)<=0 && memcmp(rec+i, "9", 2)<=0 ){
            *(TpData->tmpbox+s++)=*(rec+i+1)-0x1f; i+=2;
        }
        else if( !memcmp(rec+i, kugiri, strlen(kugiri))){
            TpData->suji[c]=atof(TpData->tmpbox); c++; s=0; i+=strlen(kugiri);
            memset(TpData->tmpbox, '\0', sizeof(TpData->tmpbox));
        }
        else return (-1);
    }
    if( !*(TpData->tmpbox) ) c--;
    else    TpData->suji[c]=atof(TpData->tmpbox);
    return (c);
}
void main( void )
{
    int i,c; char test[256]={"123|123|"}; /* 7c を tab に変換してテストしてチョ */
    if(-1==(i=dblsave( &box, test, "|" ))) exit(1); /* "|" を "\t" に変更 */
    for( c=0; c<=i; c++ )  printf( "%lf\n", box.suji[c] );
}

349 :327:02/09/23 23:12
>>347
どういう意味でしょうか。

350 :デフォルトの名無しさん:02/09/23 23:14
>>349
きちんと分解してロジックを見直せばわかるよ、ということ。
練習だと思ってやってごらん

351 :デフォルトの名無しさん:02/09/23 23:20
C言語ってポインタが使えるからいいなあ。

352 :デフォルトの名無しさん:02/09/23 23:25
printfで、 \ から始まる特殊文字の一覧ってどこにあるんすか?

353 :327:02/09/23 23:25
>>350
うむむ。分解するとますます分からなくなりますた。
  if(s) {
    p = s + strlen(s);
    p--;
    while(p >= s) {
      n <<= 1;
      n += *p;
      p--;
    }
  }

354 :デフォルトの名無しさん:02/09/23 23:27
>>352
> printfで、 \ から始まる特殊文字
??

355 :352:02/09/23 23:29
>>354
\n とか \r とか、その辺の一覧

356 :デフォルトの名無しさん:02/09/23 23:30
あまり詳しくなくてよくわからんのですが、
>>334
int i = 0;
while(~(TempString[i] = ~TempString[i++]));
TempString[i] = '\0';
return TempString;

こんな感じならいいの?

357 :デフォルトの名無しさん:02/09/23 23:32
>>356
n=n++; がおもっくそ未定義だったんだよウワァン

358 :デフォルトの名無しさん:02/09/23 23:34
>>353
どこも間違ってないです


359 :デフォルトの名無しさん:02/09/23 23:36
>>357
何か勘違いしてると思うよ。

360 :359:02/09/23 23:39
あ、いや俺の勘違いか。スマソ。

361 :356:02/09/23 23:39
334の俺の解釈は下記ですがOK?
・ポインタが進んでしまう
・'\0'が反転されてwhileの判定がおかしくなる
・最後の'\0'が0xFFになってしまう

362 :デフォルトの名無しさん:02/09/23 23:40
http://www.catnet.ne.jp/kouno/c_faq/c3.html#0

363 :356:02/09/23 23:41
>>362
ということは359もダメということですね。

364 :デフォルトの名無しさん:02/09/23 23:41
>>355
その辺の文字はprintfにおいて特別な意味はありません。

365 :デフォルトの名無しさん:02/09/23 23:42
>>361
25点

・ポインタが進んでしまうのは間違いじゃない
・\0が反転されておかしくなる
・だから、上のと同じことだ

あとは後方演算子++の挙動がこの場合未定義だっつーことで

366 :デフォルトの名無しさん:02/09/23 23:43
>>364
言い方が悪かった。

といってもなんと言えばいいかうまく言えないけど
\r とか

367 :356:02/09/23 23:46
>>363 訂正
ということは356もダメということですね

368 :デフォルトの名無しさん:02/09/23 23:47
> ということは356もダメということですね
だね。

369 :356:02/09/23 23:49
一応、356を修正しておきます。
int i = 0;
while(~(TempString[i] = ~TempString[i])) i++;
TempString[i] = '\0';
return TempString;


370 :デフォルトの名無しさん:02/09/23 23:49
渡した文字列を反転って、ビット反転じゃなくて順番を入れ替えろってことじゃなかろうか。
0xFF が 0 になっちまうし

371 :デフォルトの名無しさん:02/09/23 23:50
>>370
漏れもそう思った。

372 :デフォルトの名無しさん:02/09/23 23:51
そりゃそうだろ


373 :デフォルトの名無しさん:02/09/23 23:52
>>370
ネタから派生した疑問ということで、、

374 :デフォルトの名無しさん:02/09/23 23:52
>>369
fuge(char *s){
char *d=s;
while(*s){*s=~*s;s++;}
return d;
}
こうしなきゃならんかったわけだね

375 :デフォルトの名無しさん:02/09/23 23:53
プログラム中でLinuxのコマンド(cpとかrouteとか)を呼び出したいのですが、
どうしたらいいのでしょうか?

376 :デフォルトの名無しさん:02/09/23 23:53
>>374
たしか、参照型とポインタ型で、この char *d を省くことができたような。
よく覚えてないから誰かフォローして

377 :デフォルトの名無しさん:02/09/23 23:54
>>375
system("ls");

378 :デフォルトの名無しさん:02/09/23 23:54
000
001
 ・
 ・
100
という風にファイルに3桁の番号を順番に書き込みたいのですが
fprintf(fp,"%3d\n",i);
では上の桁の0が追加されません
どうすれば上のように3桁で書けますか?

379 :デフォルトの名無しさん:02/09/23 23:54
>>375
呼ぶな || perl使え || system(3) || popen(3) || die


380 :デフォルトの名無しさん:02/09/23 23:55
>>378
%03d

381 :デフォルトの名無しさん:02/09/23 23:55
%03d


382 :デフォルトの名無しさん:02/09/23 23:56
*s=~*s;

*s^=0xFF;
ってどっちが速そう?

383 :378:02/09/23 23:58
できました。ありがとうございました。
ここのスレってsage推奨のようですね・・あげてしまってすみませんでした。

384 :デフォルトの名無しさん:02/09/23 23:59
>>382
出来の悪いコンパイラでなければどっちも同じになる。

385 :デフォルトの名無しさん:02/09/24 00:00
>>382
fuge(char *s){
char *d=s;
while(~(*s++^=~0));
return d;
}
って感じ? 動くんかな

386 :デフォルトの名無しさん:02/09/24 00:01
>>376
そんなもの省いてもメリットなし。
値を返さない関数にしてもいいわけだし。

387 :デフォルトの名無しさん:02/09/24 00:02
>>386
一応、お題的にポインタをそのまま返して欲しそうだったから。

388 :デフォルトの名無しさん:02/09/24 00:03
>>383
質問はageてもらわないと困る

389 :デフォルトの名無しさん:02/09/24 00:05
>>382
同じくなるのか・・・コンパイラの最適化ってすごいな。

390 :デフォルトの名無しさん:02/09/24 00:07
なんで&&と||はあるのに^^はないの?

391 :デフォルトの名無しさん:02/09/24 00:08
>>390
必要ないから

392 :デフォルトの名無しさん:02/09/24 00:09
>>390
元に戻るからじゃん?

393 :デフォルトの名無しさん:02/09/24 00:09
>>390
^ひとつで十分だからじゃない?
(a=b)^(c=d)

394 :デフォルトの名無しさん:02/09/24 00:10
>>392
>>390の言う^^って、多分どちらかの式が真のときのみ真となる演算子という意味だと思うぞ。

395 :デフォルトの名無しさん:02/09/24 00:11
^^ は !!(a) ^ !!(b) という意味だと思う
滅多に使わないが、有っても良かったかな



396 :386:02/09/24 00:12
>>387
だったら少なくとも変数(仮引数含む)が2つは必要だね。

397 :デフォルトの名無しさん:02/09/24 00:19
じゃあ>>385で完成だ

398 :C初心者:02/09/24 00:22
>>323 [Q1]ならできそうなのでやってみたっす。
[Q2]はちょっと... 一応2byte文字対策も前提で作成してみました。
文字列の反転 EX)あいうえお -> おえういあ みたいな感じでいいのですか?
void *fuga( void *buf, const void *rec )
{
    int i;
    int c;
    int l=strlen((char *)rec);

    *((char *)buf+l)=0x00;
    for( i=c=0; *((char *)rec+i)!=0x00; i+=c,l-=c )
    {
        if((0x81<=(int)*((unsigned char *)rec+i)&&(int)*((unsigned char *)rec+i)<=0x9f)
        || (0xe0<=(int)*((unsigned char *)rec+i)&&(int)*((unsigned char *)rec+i)<=0xfc))
            c=2;
            else    c=1;
        memcpy( (char *)buf+l-c, (char *)rec+i, c );
    }
    return ((char *)buf);
}


399 :デフォルトの名無しさん:02/09/24 00:25
void厨ウザイ

400 :デフォルトの名無しさん:02/09/24 00:25
>>399
どんな厨房だよ(^_^;)

401 :デフォルトの名無しさん:02/09/24 00:27
>>398
ナイスボケ!
あとはいいツッコミ役を探さなくては・・・

402 :突っ込み厨:02/09/24 00:30
>>398
呼ばれたので
"あaいbうcえdおe"こんなのは?
もんだに前提が無いのでEUCとか全ての文字コードに対応しよう。

403 :デフォルトの名無しさん:02/09/24 00:34
>>327 も未定義。

404 :デフォルトの名無しさん:02/09/24 00:36
というネタだったんだろな。

405 :出題者:02/09/24 00:36
もしマルチバイト文字に対応するなら、wchar_t型の文字列に変換できる
エンコーディングのみに対応でいいよ。>>398

#と、難しくしてみるテスト


406 :デフォルトの名無しさん:02/09/24 00:38
Shift_JISなら
if ( ch^0x20-0xA1&0xFF<0x3C )
でマルチバイトらしい

407 :名無し募集中。。。:02/09/24 00:39
>>323の問題ってどちらもK&Rに載ってる香具師だな

408 :出題者:02/09/24 00:40
あ、そうなん?
即席なんだけど。


409 :デフォルトの名無しさん:02/09/24 00:40
327のしたいことがよくわからないのです

410 :デフォルトの名無しさん:02/09/24 00:41
被K&R洗脳厨ウザイ

411 :406:02/09/24 00:42
演算子の優先順位考慮すんの忘れてた・・・まあいいか

412 :デフォルトの名無しさん:02/09/24 00:43
>>409
いや、だから未定義の箇所を探せっていう
ネタじゃないの?

413 :デフォルトの名無しさん:02/09/24 00:46
マルチするなよ〜〜(違っ)

414 :デフォルトの名無しさん:02/09/24 00:47
>>413
意味わかんね

415 :デフォルトの名無しさん:02/09/24 00:47
俺には未定義が見つけられない(´д`;)

416 :出題者:02/09/24 00:49
>>415
俺漏れも


417 :デフォルトの名無しさん:02/09/24 00:52
未定義箇所は未定義です

418 :403:02/09/24 00:57
>>415,416

この部分 ↓
> while(--p >= s)

419 :デフォルトの名無しさん:02/09/24 00:59
だめなん?なんでだめなん?


420 :403:02/09/24 01:05
>>419
これでどう?
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa3.html#Q19

421 :デフォルトの名無しさん:02/09/24 01:10
>>420
へえ
勉強になりますた。

それで暴走する処理系があったら紹介きぼん。遣って見たい



422 :デフォルトの名無しさん:02/09/24 01:11
しまった、気づかなかった
p が s の前に行った瞬間に未定義か・・・

423 :デフォルトの名無しさん:02/09/24 01:12
>>418
そこゼンゼン問題ないよ。
p >= s の評価前に p をデクリメントするから。
ちなみに、もし仮にここが
p-- >= s であったとしても未定義ではない。(ロジックはでたらめになるけど)
なぜなら、デクリメントはwhileの式評価のあとに直ちに行われるから
( {}のあととか、そういうことは決してない。 for文の挙動を思い出そう )

424 :デフォルトの名無しさん:02/09/24 01:12
やっぱり駄目だな、C言語は。
という結論。


425 :デフォルトの名無しさん:02/09/24 01:12
>>423
多分君はとても阿呆


426 :デフォルトの名無しさん:02/09/24 01:14
>>422
問題ないよ
アドレスの比較であってアドレスの指し示す中身を取り出してるわけじゃないしね

427 :デフォルトの名無しさん:02/09/24 01:14
アドレスの比較すら駄目な罠


428 :デフォルトの名無しさん:02/09/24 01:15
フレームになる前にさっさと誰か規格の英文引用汁!



429 :デフォルトの名無しさん:02/09/24 01:16
アドレスの比較=単なる数値比較 だけど
それでもダメな理由はなんだろう・・・

430 :デフォルトの名無しさん:02/09/24 01:16
>429
駄目になっても文句が言えないだけで駄目な処理系なんてないだろ


431 :デフォルトの名無しさん:02/09/24 01:16
アドレスが連続しているとは限らない

432 :デフォルトの名無しさん:02/09/24 01:17
アドレスが単なる直列な数値とは限らないからでわ

433 :デフォルトの名無しさん:02/09/24 01:17
>>430
>駄目になっても文句が言えない
ここがおかしいと思う。「文句が言えない」という理由がないよね。

434 :デフォルトの名無しさん:02/09/24 01:17
C++だとどうなんだろう。ポインタ演算なんてまずしないけど
ちょっと気になるな。同じくIS引用希望。


435 :403:02/09/24 01:18
>>423
> p >= s の評価前に p をデクリメントするから。

そうなの?
評価前にデクリメントするから問題なんじゃないの?

ループを終了するには p < s になる必要があるよね。
sより小さくなったpを比較に使った時点でアウトなんじゃない?

436 :デフォルトの名無しさん:02/09/24 01:18
432が妥当 >>433


437 :デフォルトの名無しさん:02/09/24 01:18
>>431
ああ、そういうこと言いたかったのね。
しかし、この場合はそれでも問題ないと思うよ。


438 :403:02/09/24 01:19
>>432
俺もそう思う。

439 :デフォルトの名無しさん:02/09/24 01:19
>>437
>しかし、この場合はそれでも問題ないと思うよ
何故?小一時間。


440 :323:02/09/24 01:24
sのアドレスが0x0でかつNULLとは!=であったならどうだろうか?
と言ってみるテスト


441 :デフォルトの名無しさん:02/09/24 01:24
アドレスが連続空間にないという前提だと、
char *t=hoge[256];
このtをインクリメントしていったときにもtは不連続に変化する、ということにならない?
配列でとった部分は連続なんだっけ?
--t は、やっぱり t-sizeof(char) にならない?

442 :デフォルトの名無しさん:02/09/24 01:25
愛しいあの子にコクられる処理系なら漏れも使ってみたい

443 :デフォルトの名無しさん:02/09/24 01:25
>>441
char (*t)[256]; のtなら256バイト毎に変化するかも。

444 :デフォルトの名無しさん:02/09/24 01:26
>>440
あーそれかー。 それなら、えーと
(--p >= s) じゃあなくて (--p-s>=0) であれば問題ないね。

445 :デフォルトの名無しさん:02/09/24 01:28
>>432 この理由なら
下記がいいという説明がつかない。
while (head + 1 < tail) { /* +1は、なくても動作する */
一応、ルーチンの先頭で型定義してるので、
連続して無くても問題ないのでは?

未定義なのは別の理由じゃないかな?

446 :デフォルトの名無しさん:02/09/24 01:28
未定義厨ウザイ

447 :デフォルトの名無しさん:02/09/24 01:29
別の理由は440じゃだめなん?>>445


448 :デフォルトの名無しさん:02/09/24 01:30
>>446
C言語なんてもはや頭の体操にしか使えないんだから微笑ましいじゃねえか。
黙って見守れ。

449 :デフォルトの名無しさん:02/09/24 01:33
わたくし、間違っておりました!

--p>=s はダメですね。
配列のアドレスで許容されているポインタ(アドレス)の可動範囲は
hoge[HOGE]なら hoge〜hoge+HOGEまででした! (hoge〜hoge+HOGE-1ではない)

どーもすみませんでした


450 :デフォルトの名無しさん:02/09/24 01:33
>>447
sが0x7FFFFF(32Bitアドレスとして)の場合は?

451 :440:02/09/24 01:34
駄目だね。ごめんよ。


452 :デフォルトの名無しさん:02/09/24 01:34
いや、とにかくポインタってのは規格の上では
整数値と同等に考えちゃだめなのよ。
 char *p;
この pが有効なオブジェクトの範囲を指していない場合は
 p++;
を実行した後のpの値は予測できない ってことでどうよ?

453 :デフォルトの名無しさん:02/09/24 01:35
>>444
同一の配列を指していないポインタ同士の減算は未定義なので、
結局同じこと。

454 :デフォルトの名無しさん:02/09/24 01:35
>>452
それはOKだって。
なんでそういう規格にしたんだろう?ってのが話題。


455 :デフォルトの名無しさん:02/09/24 01:36
たとえば処理系によってはポインタの上位16バイトでさしている配列のID
下位16バイトで配列内でのオフセット
とかなってるかもしれない

ptr<Tail
は仕様によって保障されているから、内部表現に関わらずOKだけど
ptr>=Head
はこういう処理系では誤作動するよね

456 :デフォルトの名無しさん:02/09/24 01:37
>>452
規約では+1までは移動だけは許可されておりますです!
さらにそのポインタの指すものも取り出せるであります!
しかし、そのときの取り出したもの(*p)の中身はぐちゃぐちゃであります!

457 :デフォルトの名無しさん:02/09/24 01:37
なぜ
> (hoge〜hoge+HOGE-1ではない)
なんだろう。

458 :452:02/09/24 01:38
>>454
ごめんなさい。逝ってきます。

459 :デフォルトの名無しさん:02/09/24 01:38
>>457
>>456であります!

460 :デフォルトの名無しさん:02/09/24 01:39
>>458
うんうん。ガス管でな。



461 :デフォルトの名無しさん:02/09/24 01:39
>>454
カニチャーハンにその辺ちょっぴり載ってた。
C-FAQにも出てたよ

462 :452:02/09/24 01:39
>>456
ごめんなさい。逝きます。

463 :デフォルトの名無しさん:02/09/24 01:39
>カニチャーハン
微藁


464 :デフォルトの名無しさん:02/09/24 01:39
>>454
典型的な例がx86のfarポインタ。
規格を決めた当時、最も使われていたアーキテクチャを無視することは
できなかったのでは?

465 :デフォルトの名無しさん:02/09/24 01:40
>>420
どうでもいいことなんだけど、そのint len;ってなんのために定義しているんだろう。

466 :デフォルトの名無しさん:02/09/24 01:41
>>464
感動した!!


467 :デフォルトの名無しさん:02/09/24 01:42
>>457
char s[100];
char *end = &s[100];
while ( p != end ) ++p ;
を動かすためだろ、C++やるとこんなのがそこら中で出てくる。


468 :デフォルトの名無しさん:02/09/24 01:42
C++でも一緒ですか?


469 :452:02/09/24 01:43
>>456
いや、ちょっと待った。
俺が
> 有効なオブジェクトの範囲
と書いたのはそのことだよ。

470 :デフォルトの名無しさん:02/09/24 01:43
>>467
出てくるがそれはraw pointerではなくてiteratorなわけで、
同じ枠内で議論するには無理があるのでは..?


471 :デフォルトの名無しさん:02/09/24 01:43
char *strrev(char *str)
{
char *head,*tail;
int c;

head=str;
tail=s+strlen(str)-1;

for(;head<tail;head++,tail--)
c=*head,*head=*tail,*tail=c;

return str;
}


これならOK?
俺ならこう書くけど。

472 :467:02/09/24 01:44
すみません
p 宣言するの忘れました。

オマエラいい加減寝ろよ、明日から仕事あるんだろ。
漏れはもう寝る。
乙〜

473 :デフォルトの名無しさん:02/09/24 01:46
>>470
禿同

実際には>>467みたいなのは出てこなくて
std::vector<char>::const_iterator p = v.begin();
while( p != v.end() ) { /* hoge */ p++; }
なわけだが。



474 :467:02/09/24 01:47
>>470
一応、ポインタもお終いの一個先まで保証されている。
それと、vector のイテレータは殆どの実装で生ポインタの
typedef だからそんなに的外れという訳じゃないと思うが、


475 :デフォルトの名無しさん:02/09/24 01:47
>>474
またMSだが、VS7のSTLはちゃうね。


476 :デフォルトの名無しさん:02/09/24 01:50
任意の型のポインタはランダムアクセスイテレータに分類されまする

と手元の STL 本にはあります
だから桶でしょう

477 :デフォルトの名無しさん:02/09/24 01:52
すれ違い

478 :デフォルトの名無しさん:02/09/24 01:52
>>468
ISO/IEC 14882 によれば、
> If both the pointer operand and the result point to elements of the
> same array object, or one past the element of the array object, the
> evaluation shall not produce an overflow; otherwise, the behavior
> is undefined.
らしいので、一緒のようだ。

479 :デフォルトの名無しさん:02/09/24 01:52
じゃぁやめとこう。そして寝よう。


480 :デフォルトの名無しさん:02/09/24 01:52
>>471
だめっぽい。
sとはなんだ?

481 :デフォルトの名無しさん:02/09/24 01:53
>>478
どうもありがとうございます。


482 :デフォルトの名無しさん:02/09/24 01:58
>>480
あ、、、そこだけ修正し忘れました。sはstrです。
手元で書いた時はsにしたんで。

483 :デフォルトの名無しさん:02/09/24 01:59
結論はネタがみんなの役に立ちましたと。
好きなあの娘にコクられまくってましたと。
アホかと。



484 :デフォルトの名無しさん:02/09/24 02:02
>>482
ようは
char* str="";
のときに、str+1は比較に使ってもよいが、
str-1は比較に使ってはだめだということ。
だと思う、、、、

485 :482:02/09/24 02:04
>>484
あーなるほど。
それでメモリーが連続しているとは限らないと誰かが言っていたのか。
ありがと

486 :デフォルトの名無しさん:02/09/24 02:04
>>484
誰に解説しているの……?


487 :デフォルトの名無しさん:02/09/24 02:07
>>486
>誰に解説しているの……?
>>471 = >>482

488 :482:02/09/24 02:16
ん?まてよ・・・そうすると>>471でもまずいような気が・・・・
↓こうするか・・・

char *strrev(char *str)
{
char *head,*tail;
int c;
size_t len;

len=strlen(str);
if(len<=1)
return str;
head=str;
tail=str+len-1;

for(;head<tail;head++,tail--)
c=*head,*head=*tail,*tail=c;

return str;
}


489 :デフォルトの名無しさん:02/09/24 02:23
>>488
よさげ。

490 :デフォルトの名無しさん:02/09/24 02:41
printf等でよく使う、\r とか\nとかの
完全な一覧表ってどこかにあるんでしょうか?

491 :デフォルトの名無しさん:02/09/24 02:45
エスケープ厨ウザイ

492 :デフォルトの名無しさん:02/09/24 02:45
>>490
ま た お な じ し つ も ん か 。


493 :デフォルトの名無しさん:02/09/24 02:46
ウザイ厨ウザイ

494 :デフォルトの名無しさん:02/09/24 02:47
>>490
入門書とかじゃダメなの?

495 :デフォルトの名無しさん:02/09/24 02:47
>>490
どこかにはあります。
以上。

496 :490:02/09/24 02:52
>>494
不完全なのしか載ってないんだ
\0と\nくらいしかない

>>492
流されちゃったからね

497 :デフォルトの名無しさん:02/09/24 02:53
>>490
abfnrtvだ。さっさと帰れ。

498 :デフォルトの名無しさん:02/09/24 02:56
490=82=16
と推測しますた。

499 :デフォルトの名無しさん:02/09/24 02:58
>>496
立ち読みしてから載ってるのを買ってくればいいじゃん。

500 :デフォルトの名無しさん:02/09/24 03:02
>>490
> printf等でよく使う
とか言ってる段階では、完全なものは必要ないのでは?

501 :デフォルトの名無しさん:02/09/24 03:04
>>497
よくわかんない

502 :デフォルトの名無しさん:02/09/24 03:19
>>501
完全な一覧表だが、見て分からないのか?

503 :デフォルトの名無しさん:02/09/24 03:28
>>502
うん

504 :デフォルトの名無しさん:02/09/24 03:35
じゃあ何読んでも分からないな

505 :デフォルトの名無しさん:02/09/24 03:38
>>490
「エスケープシーケンス」で検索した?
4,000件以上ヒットするよ。

506 :デフォルトの名無しさん:02/09/24 03:44
>>490
ttp://crocro.com/pc/write/hide/chimarl09_01.html#06
こんなところはどうだ?

507 :デフォルトの名無しさん:02/09/24 03:47
わかんなかった

508 :デフォルトの名無しさん:02/09/24 03:48
こっちは?
ttp://www.uri.sakura.ne.jp/~cosmic/yuno/develop/notes/regex_3escape.html

509 :デフォルトの名無しさん:02/09/24 05:04
二次元配列をポインタに代入したいのですが,うまくできません。

char L_box[20][30];
char *P_box[20][30];

P_box=L_box;

どのようにすればいいのでしょうか?

510 :デフォルトの名無しさん:02/09/24 05:07
いったい何がやりたいんだ?
まずそれを明確にしろ。

511 :デフォルトの名無しさん:02/09/24 05:12
L_Boxをポインタ変数に代入して使いたいんです

512 :デフォルトの名無しさん:02/09/24 05:44
FAQですよ>2次元配列とポインタ

513 :デフォルトの名無しさん:02/09/24 05:55
>>6のですか?
見てみます

514 :デフォルトの名無しさん:02/09/24 06:02
わからなかったです

void func(char a[][30]);

のように関数に渡すのはわかるんですが,
同関数ないで,

2次元配列を宣言
@ポインタ変数を宣言
Aポインタ変数にアドレスを渡す

の@の宣言の仕方がよくわかりません。
Aの右辺と左辺,両方の形もよくわかりません

515 :デフォルトの名無しさん:02/09/24 06:08
>もし2次元配列を以下の関数に渡すと
>int array[NROWS][NCOLUMNS]; f(array);
>関数の宣言は以下のどちらかでないといけない。
>f(int a[][NCOLUMNS]) { ... }
>あるいは
>f(int (*ap)[NCOLUMNS]) /* apは配列へのポインター */ { ... }

516 :デフォルトの名無しさん:02/09/24 06:10
char L_box[68][51];
char *box[51];

box = &L_box[51];

error C2440: '=' : 'char (*)[51]' から 'char *[51]' に変換することはできません。

どうすれば・・・?

517 :デフォルトの名無しさん:02/09/24 06:10
http://www.catnet.ne.jp/kouno/c_faq/c6.html#13

518 :デフォルトの名無しさん:02/09/24 06:12
char (*box)[51];


できました

>>515
まじでありがとう
お詫びに今日ごみ一個拾うことにするよ

519 :デフォルトの名無しさん:02/09/24 11:09
>>505
正確には「エスケープシーケンス」という呼称はあてはまらないんですよね。

520 :505:02/09/24 11:18
>>519
よく知らない。

521 :デフォルトの名無しさん:02/09/24 16:02
一文字では「シーケンス」ではないからな

522 :等幅フォントで見れ:02/09/24 16:28
・エスケープシーケンス

\a     BEL: ベル                        \\      \: バックスラッシュ
\b      BS: バックスペース              \?      ?: 疑問符
\f      FF: 改頁                        \'      ': 単一引用符
\n      LF: 改行                        \"      ": 二重引用符
\r      CR: 復帰
\t      HT: 水平タブ                    \ooo     8 進数(o=[0-7])
\v      VT: 垂直タブ                    \xhh    16 進数(h=[0-9a-fA-F])

・演算子の優先順位と結合規則
本文長すぎの為省略

523 :デフォルトの名無しさん:02/09/24 17:09
>>522
それで全部かい?

524 :デフォルトの名無しさん:02/09/24 19:17
0.0fや0L(ゼロ、エル)はわかるんですが
0U(ゼロ、ユー)は何ですか?
あと、他にも直打ち数値のサフィックスってあるんでしょうか?

525 :デフォルトの名無しさん:02/09/24 20:58
>523
\o=ママ バックドロップ

526 :デフォルトの名無しさん:02/09/24 23:01
見える見える

527 :デフォルトの名無しさん:02/09/24 23:07
>>519
エスケープシーケンスでいい。
コンソールを制御する記号列もまた、エスケープシーケンス。
区別したければ「Cの」とか「ANSI端末の」とかつけれ

528 :デフォルトの名無しさん:02/09/24 23:31
>>527
> 区別したければ「Cの」とか「ANSI端末の」とかつけれ

「プリンタの」も忘れないでね。

529 :デフォルトの名無しさん:02/09/24 23:41
char *a="こんにちわ",*b;
scanf("%s",&b);
if(a==b)
printf("正解です\n");
else
printf("違います\n");
}
エラーは出ないけどできません・・・
なぜですか?

530 :デフォルトの名無しさん:02/09/24 23:44
>>529
入力された文字列が何処へ格納されるか考えてみたかい?


531 :デフォルトの名無しさん:02/09/24 23:46
・bが未初期化でメモリが割り当てられてない。
・比較の方法

532 :デフォルトの名無しさん:02/09/24 23:46
>>529
> エラーは出ないけどできません・・・
> なぜですか?

間違ってるからです。strcmp() あたりを調べるがよろし。

533 :デフォルトの名無しさん:02/09/24 23:48
あと、scanfのパラメータが・・・

534 :デフォルトの名無しさん:02/09/24 23:51
>>533
> あと、scanfのパラメータが・・・

それ以前に、b の初期値が...。

535 :デフォルトの名無しさん:02/09/25 00:04
524 にでてるんだけど, 0.0f や 0L のようにサフィックスを
付けなければいけない状況ってどんなときですか ?

536 :デフォルトの名無しさん:02/09/25 00:07
>>535
型あわせだろ。

537 :デフォルトの名無しさん:02/09/25 00:08
直打ち小数演算はdoubleとして扱われるので
float a = 1.0f/0.3f;
とか

538 :デフォルトの名無しさん:02/09/25 00:13
float a = (float)1.0/0.3;

539 :デフォルトの名無しさん:02/09/25 00:22
>>538
> float a = (float)1.0/0.3;

>>537 でいいんだから、キャストはやめようよ。

540 :デフォルトの名無しさん:02/09/25 00:28
あれ ?, 537 と 538 って同じなんだ.
勉強不足だ, 俺 ...

541 :デフォルトの名無しさん:02/09/25 00:55
流れ読めてねーよ

542 :デフォルトの名無しさん:02/09/25 01:02
float a = 1/0.3;
じゃダメなの?

543 :デフォルトの名無しさん:02/09/25 01:10
で、>524がわかる方はいらっしゃいませんのでしょうか?

544 :デフォルトの名無しさん:02/09/25 01:20
U:Unsignedでいかんか?

545 :デフォルトの名無しさん:02/09/25 01:23
>>524
標準だと他にLLがある。VCの拡張ならi64というのも。

546 :デフォルトの名無しさん:02/09/25 01:32
>>543
わからんのならキャストでもしとけ。

547 :デフォルトの名無しさん:02/09/25 02:14
>546
すいません、おっしゃっている意味が全くわかりません
0U(ゼロ、ユー)がコンパイラ(あるいはプリプロセッサ)に
どう解釈されるのか知りたいだけなのですが?

そもそもキャストとかいうC言語の汚点を隠すために
サフィックスが使われているんじゃないんですか?

548 :デフォルトの名無しさん:02/09/25 02:21
>>547 unsigned の Uっしょ。

549 :デフォルトの名無しさん:02/09/25 02:30
>>547
> そもそもキャストとかいうC言語の汚点を隠すために
> サフィックスが使われているんじゃないんですか?

んじゃ、((void*)0) を数値定数で表現してみろ

550 :デフォルトの名無しさん:02/09/25 02:32
先生!スレタイトルの(33)ってのは年齢のことですか?

551 :デフォルトの名無しさん:02/09/25 02:35
>549
キャストを使うなって言ってるんじゃなくて
使わなくて良い所で不用意に使うなって意味なんですが・・・

これだから年寄りは・・・

552 :デフォルトの名無しさん:02/09/25 02:38
−−−−−−−−−−−−−−−−−−−−−−−−−−
俺様用しおり
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< 読んだ読んだ読んだ!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< 読んだ読んだ読んだ読んだ!
読んだ〜〜〜〜!   >( ゚∀゚ )/ |    / \____________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /
                    ̄
−−−−−−−−−−−−−−−−−−−−−−−−−−

553 :デフォルトの名無しさん:02/09/25 02:39
何だ、ただの釣り師かよ・・ツマラン

554 :デフォルトの名無しさん:02/09/25 02:46
>>先生!スレタイトルの(33)ってのは年齢のことですか?
スレが33枚目(32000以上レスがついた)ってこと。

555 :デフォルトの名無しさん:02/09/25 02:47
>>551
> キャストを使うなって言ってるんじゃなくて
勝手に勘違いすんな。

> キャストとかいうC言語の汚点を隠すために
> サフィックスが使われている
と言うのならなんでポインタ等のサフィックスが無いのか?
という意味なんだが。
検索エンジンで探すことすらしない厨房の頭じゃ理解不能か。

556 :555:02/09/25 02:50
あ、555ごっと!

557 :デフォルトの名無しさん:02/09/25 02:55
524=490=352  =スレ立てるまでもない質問スレの820
と断定しますた。

558 :デフォルトの名無しさん:02/09/25 02:56
だいたい、ポインタに即値を代入するのは
ほとんどがヌルポインタだけだと思うが、、、

559 :555:02/09/25 02:58
>>558
あ、確かにそうだわな。

560 :デフォルトの名無しさん:02/09/25 03:01
検索しなかったのは悪いと思うし
後半のレスが無意味だった事も認めるけど
「0Uってどう解釈されるの?他にもサフィックスてあるの?」って問いに
いきなり「キャスト使え」って答えられても困ります

「普通に数値書いただけだと警告がでてしまうので云々」て質問に対してならわかるけど

561 :デフォルトの名無しさん:02/09/25 03:02
>>554
ありがとうございます!!
漏れの脳内では33歳の女性教師が眼鏡とストッキングを着用の上教えてくれるスレ
だとばかり思い込んでしまっていたので真実が知れて胸をなでおろしています
これからはマジメにC言語にハァハァしますので今後ともお見捨てなきようおながいします

562 :デフォルトの名無しさん:02/09/25 03:04
>557
ちがいます

てか、490=352=スレ立てるまでもない質問スレの820
まではあってると思うけど

563 :555:02/09/25 03:10
>>560
それは俺に対して言ってんのか? >>546に言えよ。

答えは上で出てるけど、
数値の型を表すためにサフィックスで使われる文字は
L long (or long double)
U unsigned
F float
合わせ技もあり。
あとはそれぞれの処理系定義かな。あまり自信はないけど。

564 :555:02/09/25 03:13
↑C99ではどうなのか知らんよ。

565 :546:02/09/25 03:33
>>560
> いきなり「キャスト使え」って答えられても困ります

いきなり検索等もせずに質問して、しかも回答されてるのを
無視してたヤツに言う権利はない。キャストでも使っとけ。

566 :デフォルトの名無しさん:02/09/25 03:45
たまに>>560みたいな勘違い坊やが出てくるけど
まあ生暖かく見守ってやろうぜ。

567 : :02/09/25 12:59
毎スレ 毎スレ スレ立て人の歳が違うじゃないか!
男か女か!

自分の歳も性別もわからんのか このぼけどもが!!!

568 :デフォルトの名無しさん:02/09/25 13:18
ランダムな数値の入っている配列全てに、
1度に定数を加えるってことは可能?(int型です)
n[]={5,9,4,7,22,6,10};
*n+=20;  これで出来ないような気がするのです。
結果25,29,24,27,42,26,30になるような。

569 :デフォルトの名無しさん:02/09/25 13:23
>>568
> ランダムな数値の入っている配列全てに、
> 1度に定数を加えるってことは可能?
無理です、そういう関数を作るかループを使ってください。

> *n += 20;
先頭の要素だけが加算され、残りはそのままです。
結果25,9,4,7,22,6,10};


570 :デフォルトの名無しさん:02/09/25 13:24
16進数を10進数に変換するにはどうしたらいいでしょうか?

571 :デフォルトの名無しさん:02/09/25 13:31
>>569
ありがとうございます

572 :デフォルトの名無しさん:02/09/25 13:33
16進数の各桁に、16のn乗を掛け加えて行く。

573 :デフォルトの名無しさん:02/09/25 13:35
>>568
char にして MMX で一気に処理しる

574 :デフォルトの名無しさん:02/09/25 13:35
>>570
質問の意味がわからないが
16進数文字列を数値に変換する関数ならsscanfという関数がある。


575 :570:02/09/25 13:39
>>572
16のE乗とかってあるのですか?
>>574
調べてみます。

あと逆の変換の仕方もわかるかたいますか?

576 :デフォルトの名無しさん:02/09/25 13:43
手順としては、A〜Fを10進数に直してから。

577 :デフォルトの名無しさん:02/09/25 13:46
>>575
> あと逆の変換の仕方もわかるかたいますか?
やっぱり質問の意味が良くわからないのだが、
数値を10進数文字列に変換する関数ならsprintfという関数がある。


578 :デフォルトの名無しさん:02/09/25 13:46
「進数変換」で検索したら?
10進数を16で割っていき、余りを逆順にならべるで出来なかった?

579 :570:02/09/25 13:48
えっと、printfやscanfを使わずに変換する方法を知りたいのですが、
質問の意味わかっていただけましたか?

580 :デフォルトの名無しさん:02/09/25 13:51
わかるやつはサイコメトラー

581 :570:02/09/25 14:05
>>578
15を16で割ったらあまり15ですけど・・・

582 :うんっちっち君:02/09/25 14:11
プログラマ(SE?)で内定ということで
いままで独学で無茶苦茶やってきたプログラムを正しく勉強しなおしているのですが、
まあいままではVCでゲーム作ってばっかりだったので
じつは基本のCが理解できてなかったりします。とくに演算系。

で知らないものがいくつかでてきました。
printf("ああ\n")=puts("ああ")
scanfのかわりのgets、これはもう絶滅した使わないものととらえていいのでしょうか。
if文と同じ処理なんだけど a?b:c ってやつです。
これら3つって使うことあるのでしょうか?
ぜんぶprinf,scanf,ifで済ましたほうが文面的には長くなるけど
のちのち解読しやすいと思うのですが。
しかもコンパイルした時点でどうせおなじ処理なので重さとか処理速度には
関係しませんよね。?

583 :デフォルトの名無しさん:02/09/25 14:13
>>579
> 質問の意味わかっていただけましたか?
わからない。
>16進数を10進数に変換するにはどうしたらいいでしょうか?
16進数とは「数値」なのか?「文字」なのか?
10進数とは「数値」なのか?「文字」なのか?
数値→数値は意味がないし、
文字→数値ならばsscanfがあるし、
数値→文字ならばsprintfがあるし、
文字→文字ならばCでは非常に面倒で私には答えかねる

584 : :02/09/25 14:14
>>582
仕事として やってくならば、リストの解読のしやすさに
重点を置いたほうがいいな。

自分が作ったソースを 他人が 見て修正するなんてことは しょっちゅうだからな。


585 :デフォルトの名無しさん:02/09/25 14:14
0xFBA = 15 * 16^2 + 11 * 16^1 + 10 * 16^0

586 :デフォルトの名無しさん:02/09/25 14:16
>>581
Cライブラリのソース嫁

587 :デフォルトの名無しさん:02/09/25 14:18
>>582
> scanfのかわりのgets、これはもう絶滅した使わないものととらえていいのでしょうか。
使うならfgetsを使え

> if文と同じ処理なんだけど a?b:c ってやつです。
> これら3つって使うことあるのでしょうか?
プログラムを書くためには必要ないかもしれんが、
プログラムを読むためには必要なものだ。
他人のソースを読んでメンテするのもプログラマの仕事の1つだ。

588 :デフォルトの名無しさん:02/09/25 14:20
>582
てか、三項演算は使うぞ
1ステートメントしか入れられない場所で
どうしても条件分岐が必要な事はある

589 :デフォルトの名無しさん:02/09/25 14:22
>>583
文字→数値→文字とやるのが楽。

590 :デフォルトの名無しさん:02/09/25 14:25
>>582
printf("ああ\n") と puts("ああ") とでは前者の方が遅いぞ。
といってもこの程度だと大した差ではないが。

591 :デフォルトの名無しさん:02/09/25 14:33
「printf("ああ\n");」VS「printf("%s", "ああ\n");」だとどうなるのか?

と言ってみるテスト

592 :デフォルトの名無しさん:02/09/25 14:58
後者が遅い













のか?

593 :デフォルトの名無しさん:02/09/25 15:21
>>588
printf("iは%sの数です。\n",i<0?"負":"正");

こんなのとか?

594 :デフォルトの名無しさん:02/09/25 15:55
printf("iは%sの数です。\n",&"負\0正"[(i<0)*3]);

トリッキースレ逝きだな、、、

595 :デフォルトの名無しさん:02/09/25 18:10
>>594
printf("iは%sの数です。\n","負\0正"+((i<0)*3));
せめてこう書こうよ(笑)

596 :595:02/09/25 18:12
printf("iは%sの数です。\n","正\0負"+((i<0)*3));

こうだな。間違った。

597 :デフォルトの名無しさん:02/09/25 18:40
いや、こうしようよ。

printf("iは%sの数です。\n",&(sgn(i)*3["負\0正"]));

むかついて会社辞めるときはこんな感じのソース残して辞めると吉。

598 :デフォルトの名無しさん:02/09/25 18:43
>>592
スタックの積み下ろしがあるからねぇ

599 :デフォルトの名無しさん:02/09/25 18:48
速度なんか大して変わらないからいいんじゃないか?
printf(引数で受け取ったポインタ)とかにさえしてなきゃ。

600 :デフォルトの名無しさん:02/09/25 18:58
>>599
理解を深める
これ大事
アスパラ アスパラ
不法滞在
これは禁止

601 :デフォルトの名無しさん:02/09/25 20:21
柴田望洋の本は読みにくくて学習に時間がかかる。


602 :デフォルトの名無しさん:02/09/25 20:28
ぼーよーの標準関数一覧は便利だったけど、今はlinux.or.jpのJM使っているからいらない。

603 :デフォルトの名無しさん:02/09/25 20:41
>>597
sgn()って標準関数?

604 :デフォルトの名無しさん:02/09/25 20:43
>>603
うえの方に
#define sgn(x) ((x)>=0)
と書かれています。

605 :デフォルトの名無しさん:02/09/25 21:09
const char *s[] = { "aa", "bb", "cc" };
const char *s2[] = { "AA", "BB", "CC", "DD" };
const char *s3[] = { s, s2 };

これでエラーがでるんですけど...どうしてですか?

606 :デフォルトの名無しさん:02/09/25 21:10
引数で渡した文字列を十六進数で
ファイルに書きこみたいんですけど
どーすれば(・∀・)イイ?

607 :デフォルトの名無しさん:02/09/25 21:13
>>606
ファイルを開いてfprintfだね。

608 :デフォルトの名無しさん:02/09/25 21:13
const char **s3[] = { s, s2 };
型が違うから

609 :デフォルトの名無しさん:02/09/25 21:28
配列の配列だからね

610 :デフォルトの名無しさん:02/09/25 21:50
>>606
さっきから何を言っているのかサパーリ。
16進数の文字列でファイルに書きたいの?

611 :デフォルトの名無しさん:02/09/25 22:12
10進とか16進とか言ってるヤツはネタだろ。

612 :デフォルトの名無しさん:02/09/25 23:01
ビット演算子と代入演算子だけでCプログラミングは出来ますか?
一度やってみたことはやったのですが構造化で挫折しますた

613 :デフォルトの名無しさん:02/09/25 23:09
>>612
よく意味がわからんが、ビット演算と代入演算以外の演算子の使用を禁じるってこと?
というか先生! += は代入演算子に入りますか?

614 :デフォルトの名無しさん:02/09/25 23:17
>>613
+とかついてたらだめです。使っていいのは(&|~^=)
で、漏れは関数呼び出し、条件制御が出来なくて挫折しますた
つーか、できたのは足し算関数(論理回路で言う加算器)ぐらいだけど

615 :デフォルトの名無しさん:02/09/25 23:21
どなたか>>276教えてください。お願いします。

616 :デフォルトの名無しさん:02/09/25 23:24
>>615
・デバッガでステップ実行して標準関数の中に入り込む
・grep (VC++なら[ファイルから検索...]とかいうメニュー)

617 :デフォルトの名無しさん:02/09/25 23:32
新卒採用で,externとかたくさん使っていたら落ちますか?

618 :デフォルトの名無しさん:02/09/25 23:36
全てのソースファイルにインクルードするヘッダファイルで外部変数全部extern汁

619 :デフォルトの名無しさん:02/09/25 23:38
>>614
足し算できたのなら引き算は簡単だべ。

620 :デフォルトの名無しさん:02/09/25 23:41
>>606
たとえば「2ch」とか放り込んだのが変換されて、
「0x32 0x63 0x68」になればいいってことなのかしらん?

621 :デフォルトの名無しさん:02/09/25 23:44
>>619
できたのは自然数の足し算なんですよ
符号ビット調べての足し算もやりましたが所々にバグがちりばめられてます
乗除算はシフト使いたくなりますが・・・

622 :デフォルトの名無しさん:02/09/25 23:49
>>570 = >>579 = >>606
全て同一人物とみなしていいのかなぁ?
だとすれば「 "a = 10;" と "a = 0x0A" とは全く同じコードだよ」
とかそういうことが分からないんだろうか?

623 :デフォルトの名無しさん:02/09/25 23:51
>>621
俺も自然数のつもりだった。
自然数の足し算ができたとのことなので、
a - b = a + ~(b) + 1
を使えば自然数の引き算は簡単じゃないかという突っ込み。

624 :デフォルトの名無しさん:02/09/25 23:56
BCD演算のことを言っているのか?

625 :617:02/09/25 23:57
大丈夫みたいね

626 :デフォルトの名無しさん:02/09/25 23:58
>>606
void hoge(char *p)
{
 ・・・
 for(;*p!='\0';p++)
  fprintf(fp,"%x",*p);
 ・・・
}
こういうことですか?

627 :デフォルトの名無しさん:02/09/26 00:01
>>624
BCD(Binary Coded Decimal,2進化10進数)のこと?
いやそういうわけじゃないけど、、

628 :デフォルトの名無しさん:02/09/26 00:04
>>623
2の補数を使うと加算が2回出るじゃないですか
それなら最初からと思うのですが
速度気にするくらいなら普通にしろよ(ワラ


629 :デフォルトの名無しさん:02/09/26 00:11
>>628
それでは、、、、
足し算はレスを見る限り
i1(入力1),i2(入力2),ic(キャリー入力)と
o(出力),oc(キャリー出力)のフルアダーを各ビットごとに
構成して実現したんだよね?
同じように減算回路をソースに落とせば?

630 :デフォルトの名無しさん:02/09/26 00:18
>>629
例えば5+(−8)とか0をまたぐときにバグバグなんです
条件分岐とかはプログラムカウンタいじらないと無理ですか?

631 :デフォルトの名無しさん:02/09/26 00:23
>>630
足し算を629のように作れば5+(-8)も上手くいくはずだよ。
(&|~^=)しか使ちゃだめなら条件分岐に関しては見当もつかない。

632 :デフォルトの名無しさん:02/09/26 00:24
おいお前ら、ここ何のスレだ?
いいかげんウザイ。

633 :デフォルトの名無しさん:02/09/26 00:25
>>631
そうですかでなおしてきます
れすありがとうございました

634 :デフォルトの名無しさん:02/09/26 00:27
>>632
すまん。C言語よりもむしろハードに近い内容になってしまった。

635 :632:02/09/26 00:46
いや半分ネタだから気にすんな。言い過ぎたよ。

636 :606:02/09/26 00:47
ミナサソ

混乱させてしまい大変申し訳ございませぬ。
ワタクシは>570でも>579でもございません。

ワタクシがやろうとしておりますのは
fprintf ( fp , "%x",argv [2] );
ってことでして。。。
これじゃーargv [2]の先頭アドレスを
16進数でfpに書き込むだけなんですよね?

そこで代替案っちゅーか、なんちゅーか。
とにかく
$hoge.c smp.txt 34567
と、したときにsmp.txtに"34567"が16進数で
書き込まれるプログラムをつくりたいんのです。

ほんと糞厨でごめんなさい。

637 :606:02/09/26 00:49
(´Д` )ウワァァン
636禿げしくマチガテルヨ!!

$a.out smp.txt 34567
デスタ・・・

スミマセソ

638 :デフォルトの名無しさん:02/09/26 00:50
argv[]をatoiで整数に変換してからfprintf

639 :デフォルトの名無しさん:02/09/26 00:51
>>638の argv[] は argv[2] に訂正すます

640 :デフォルトの名無しさん:02/09/26 02:50
>>622
×"a = 0x0A"
○"a = \x0A"

>>636
それじゃ16進なんか関係ないじゃん。
「10進数の文字列を数値にしたいんですけど」って聞いとけや

641 :デフォルトの名無しさん:02/09/26 02:58
>>640
( ´,_ゝ`) プッ

ネタ?

642 :デフォルトの名無しさん:02/09/26 03:21
片思いの彼女に16進数で告白したいのですが
どうすればいいですか?


643 :デフォルトの名無しさん:02/09/26 03:49
>>642
コネクションをはってプロトコルを合わせ、文字コードを聞き出したら、喋れ。
内容についてはご自由に。

644 :デフォルトの名無しさん:02/09/26 03:49
>>641 ばかだなあ。ネタに決まってんじゃんプププ



・・・

645 :デフォルトの名無しさん:02/09/26 04:22
どなたか教えてください。Rt-Linuxでロボットの制御をしているのですが、ある間隔でサンプリングしてくるデータをリアルタイムにプロットするにはどうしたらよいのでしょうか?どこかこういうことが説明してあるURLでも構いませんので教えていただけないでしょうか?
よろしくお願いします。

646 :デフォルトの名無しさん:02/09/26 04:41
gnuplotとかのプロッタにパイプで流し込むとか、
Xで書くとかしか思い浮かばないけど

647 :645:02/09/26 04:59
>>646
プログラムも初心者でgnuplotも今日初めて使い出したばかりなので詳しいことがわからないのですが、
今gunuplotを使ってロボットが動いている間中、手動でプロットのコマンドを打っています。シェルを使って自動的に打たせたいとは思っているのですが、gnuplot上のシェルでFor文かWhile文のようなものが記述できるのでしょうか?

648 :デフォルトの名無しさん:02/09/26 05:07
んー詳しくないけど、「gnuplot パイプ」「gnuplot 標準入力」とかを
検索するとヒントになるかも

649 :デフォルトの名無しさん:02/09/26 05:08
>>612
無理。
他のすべてを禁止するということは関数の使用も禁止するんだろ?
無理だね。

650 :645:02/09/26 05:09
ありがとうございます。ではちょっと調べてみます。
助かりました。

651 :デフォルトの名無しさん:02/09/26 10:02
>>612
ああ、大抵できるね。

652 :デフォルトの名無しさん:02/09/26 10:09
>>651
出来ないのって何?

653 :デフォルトの名無しさん:02/09/26 10:13
>>652
わかんない。
ぱっとやってみた幹事ひととおり出来てるけど
抜けがあるかもしれない

654 :デフォルトの名無しさん:02/09/26 10:33
#include <stdio.h>
typedef void (*callback_t)();

int callback(void) { printf("test\n"); return 1; }
void func(void (*callback)(void)) { callback(); }
int main(void) { func((callback_t)callback); return 0; }

コールバックの型が違うのにエラーが出ません。
どうしてなんでしょう?


655 :デフォルトの名無しさん:02/09/26 10:36
>>636
> ワタクシがやろうとしておりますのは
> fprintf ( fp , "%x",argv [2] );
> ってことでして。。。
> これじゃーargv [2]の先頭アドレスを
> 16進数でfpに書き込むだけなんですよね?
文字列の終わりまで繰り返せばいいだけ
char *p;
for(p = argv[2]; *p = '\0', p++)
  fprintf(fp, "%x", *p);
または
int i;
for(i = 0; i < strlen(argv[2]); i++)
  fprintf(fp, "%x", argv[2][i]);
好きな方を使え

656 :デフォルトの名無しさん:02/09/26 11:17
ループの中で strlen を使うのは止めてホスィ(´Д` )

657 :デフォルトの名無しさん:02/09/26 11:27
>>654
引数が空とvoidの違いのことを言ってるのかな?

処理系依存だろうけど、関数の引数が空とvoidでは
普通は全く同じコードが生成されるんで問題なし。

func((callback_t)callback)でキャストしてるから警告も消える。


658 :デフォルトの名無しさん:02/09/26 12:51
>>654
Cでは引数の省略と引数voidは関数定義以外では違うんだってば・・・・


659 :デフォルトの名無しさん:02/09/26 15:02
>>656
655はどう考えてもネタだろ。

660 :デフォルトの名無しさん:02/09/26 21:59
変数の例などで hoge と使ったのは誰が最初ですか?

661 :デフォルトの名無しさん:02/09/26 21:59
時代遅れでも私は使い続けます。
C++に負けるな! VIVA C言語!

662 :デフォルトの名無しさん:02/09/26 21:59
>>660
スレ違い

663 :デフォルトの名無しさん:02/09/26 22:00
22:00げと

664 :デフォルトの名無しさん:02/09/26 22:21
>>660
http://pc.2ch.net/tech/kako/1023/10234/1023448864.html

665 :デフォルトの名無しさん:02/09/26 23:08
揚げ

666 :デフォルトの名無しさん:02/09/26 23:11
おかしい、age入れたつもりだったのに・・・





・・・666get

667 :デフォルトの名無しさん:02/09/26 23:12
おめーん 666 ゲット

668 :667:02/09/26 23:13
取られてた・・・(鬱)

669 :デフォルトの名無しさん:02/09/26 23:22
お前ら質問しる

670 :デフォルトの名無しさん:02/09/26 23:43
float = 0xXXXX; てな感じで、代入したいんすけど、
上記のXXXXの部分をユーザ側からもらうには、どうすりゃいいん
でしょうか?思いつかんので、俺に教えてくらはい!

671 :デフォルトの名無しさん:02/09/26 23:47
int main(int argc, char **argv)

672 :デフォルトの名無しさん:02/09/26 23:56
scanf ?

673 :デフォルトの名無しさん:02/09/27 00:47
>>657,658
そうでは無くてcallback_tの戻り値をvoidにしていて、
callbackの戻り値をintにしてる所です。


674 :デフォルトの名無しさん:02/09/27 00:48
>>673
ポインタってちゃんと理解してる?

675 :デフォルトの名無しさん:02/09/27 01:00
ところで、654は文法エラーのことを言っているのか、
それとも実行時のエラーのことを言っているのか。

676 :デフォルトの名無しさん:02/09/27 01:06
質問です
FILE構造体が利用するバッファ(ストリーム)はどの関数がどのメモリ領域に確保しているのでしょうか

677 :デフォルトの名無しさん:02/09/27 01:09
>>676
どのメモリ領域って何よ?
それと、処理系依存の話なら処理系が何かを書け。

678 :676:02/09/27 01:10
処理系は特に考えてないですが、メモリというのはスタックとか、そういうやつです。

679 :デフォルトの名無しさん:02/09/27 01:13
スタックは無理じゃねーか?

680 :デフォルトの名無しさん:02/09/27 01:13
>>678
ヒープに決まってんだろ

681 :デフォルトの名無しさん:02/09/27 01:15
>>676
printf()やscanf()等が関数の静的変数として確保しています

682 :デフォルトの名無しさん:02/09/27 01:19
>>678
処理系が指定されていなければ答えは出せないな。
一般的な話で言えば、ヒープ領域に確保されるだろうね。
でも自分でsetvbuf等を使ってスタックとかstatic領域を
割り当てることもできるわけだし。

どの関数かは完全に処理系依存。
俺の使っているVC++では_getbufあたりかな。
これをfreadやfgetc等の関数が内部で呼び出している。

683 :デフォルトの名無しさん:02/09/27 01:29
>>678
Linuxの場合はマニュアルによるとデフォルトではmallocを呼び出して確保するみたいだね。とするとヒープか。
プログラマがsetvbufなどで割り当てなければスタックはないと思う。

684 :678:02/09/27 02:02
なるほど。つまり、free()はfclose()がfree(fp->base)な感じで
行っていることになりますか?

685 :デフォルトの名無しさん:02/09/27 02:03
>>684
そうです。

686 :デフォルトの名無しさん:02/09/27 02:26
>>675
両方ともエラーは出ません。
処理系はgcc(version2.95.4)です。


687 :675:02/09/27 02:32
>>686
そういう意味ではなくて、
エラーにならないのがおかしいと思うのは、どっちのエラーのことか?

言い換えると、文法エラーにならないのは当たり前なんだけど
それはわかっているのか?

688 :デフォルトの名無しさん:02/09/27 02:36
>>686
callbackの戻り値がintだろうがなんだろうがそれを無理やりcallback_tにキャストしてんだからエラーはでないでしょ
実行時にどうなるかは知ったこっちゃないけど


689 :デフォルトの名無しさん:02/09/27 02:40
恐らくincompatibleなポインタ型を指摘するメッセージが出ると思う。
エラーと言うかワーニングメッセージ

#include <stdio.h>
typedef void (*func_t)();
int func2(void){return 1;}
int main(void) { func_t func; func = func2; func(); }

これは出た。


690 :デフォルトの名無しさん:02/09/27 02:42
>>689
ネタですか?

691 :デフォルトの名無しさん:02/09/27 02:42
>>688
あ、そう言われればそうですね。


692 :C厨:02/09/27 05:24
チンコウィルスがさ

693 :657:02/09/27 10:18
>>673
多くの処理系では(少なくともIA-32では)longくらいまでの戻り値は
レジスタ経由で返されるから呼び出し側に影響はない。

コンパイル時にエラーにならないのはキャストしてるから。

以上。

694 :デフォルトの名無しさん:02/09/27 11:19
> 多くの処理系では(少なくともIA-32では)
IA32では戻り値に必ずレジスタを使わないといけない
という規約があるとでも言うのだろうか。

そういう俺もレジスタで返す処理系しか知らないのだが。

695 :657:02/09/27 13:47
>>694
Intelが作った呼び出し規約の資料はあるのか知らないけど、
Visual C++やx86版のSoralisでは決まっているから、
それらのプラットフォームではその規約に従う必要がある。

696 :694:02/09/27 15:13
>>695
Visual C++がEAXレジスタで戻り値を返すからといって、
他のコンパイラまでその規約に従う必要はないはず。
API等の外部関数とのやりとりだけを、それ専用の
呼び出し規約で対応してもいいわけだし。

慣習としてこの方式が使われているのは事実だけど、
絶対的な規則ではない気がする。 (間違ってたらごめんよ)

697 :教えて君:02/09/27 15:57
教えてください
char ch[32] = "utudashinou";
と文字列を作ります。この文字列の末尾を指すようにポインタを使うと
char *p;
p = str1 + strlen(str1) - 1;となると本に書いてあるんですが
↑このポインタがどういったアドレス(?)を保持しているのか解らないです
ついでに、
char ch[32] = "utudashinou";←日本語文字だといけないっていうのは解ります
日本語は第1バイト、2バイトで一組で、1バイト目と2バイト目を逆にすると文字にならない
ってことですよね?・・・

698 :教えて君:02/09/27 16:00
あれ、ミスがある・・・
5行目のp = str1 + strlen(str1) - 1
は、p = ch + strlen(ch) - 1
です

699 :デフォルトの名無しさん:02/09/27 16:10
p = ch;    str1の先頭要素のアドレス
p = ch + 1; その次の要素のアドレス
p = ch + 2; その次の次の要素のアドレス
p = ch + 3; その次の次の次の要素のアドレス
p = ch + strlen(ch); 終端NULL文字のアドレス
p = ch + strlen(ch) - 1; 最後の文字(終端NULL文字の1つ前)のアドレス

> 日本語は第1バイト、2バイトで一組で、1バイト目と2バイト目を逆にすると文字にならない
> ってことですよね?・・・
はい。
逆にすると文字にならないというより、おかしなことになるのでやめろ。

700 :699:02/09/27 16:12
訂正。700げと。
× p = ch;    str1の先頭要素のアドレス
○ p = ch;    chの先頭要素のアドレス

701 :デフォルトの名無しさん:02/09/27 16:12
素人です
ポインタ型変数の宣言の時
int *pnt;
int pnt*;
どちらでもよいの?

702 :デフォルトの名無しさん:02/09/27 16:14
>>701
試しに自分でやってみましょう。

703 :教えて君:02/09/27 16:18
ありがとうございました!>>699さん
もう一つよろしいですか?
なんとなくわかるんですが、
char str[][32];
char *p;
として、多重配列になった場合
p = (char *)str;
と、キャストしないといけないのはなぜですか?

704 :デフォルトの名無しさん:02/09/27 16:21
fscanf(fp,"%8d %2d %2d\n",&a,&b,&c);
としたときのフォーマット指定部分の最後の \n は付けると付けないとでどう違うのか分からないのですが
違いはあるんでしょうか?

705 :デフォルトの名無しさん:02/09/27 16:29
>>703
次元が違うじゃん。配列strに適合するポインタは
char (*)p[32] = str; /* 32要素のchar配列(strの先頭要素に相当)へのポインタ */

706 :教えて君:02/09/27 16:33
>>705さんありがとー
次元か。そっかそか
たびたびごめんなさい。がんばってきます

707 :デフォルトの名無しさん:02/09/27 16:35
>>705
char (*p)[32] = str;

708 :デフォルトの名無しさん:02/09/27 16:50
>>707 スマソ

709 :デフォルトの名無しさん:02/09/27 16:52
>>701
多分、
int *pnt;
int* pnt;
の間違いだと思うけど。基本的には好みの問題なのでどっちでもよい。

>>704
付けても付けなくても動作は同じ。
fscanf()のフォーマット文字列のスペース、タブ、改行はどれも、
「スペース、タブ、改行のどれかがあったらなくなるまで読み飛ばす」
という意味。


710 :704:02/09/27 16:55
>>709
サンクス!参考になりました

711 :709:02/09/27 16:56
あ、後にfscanf()が続く場合に動作が変わるかも。スマソ。
>fscanf()のフォーマット文字列のスペース、タブ、改行はどれも、
>「スペース、タブ、改行のどれかがあったらなくなるまで読み飛ばす」
>という意味。
の説明は合ってるはず。


712 :デフォルトの名無しさん:02/09/27 17:57
void hoge(char str[])と
void hage(char *str)は
関数内部に実体を持つか持たないかの差ですか?
hogeにポインタで渡すと配列サイズが分からない気がしますが・・・
やっぱり等価かなぁ

713 :デフォルトの名無しさん:02/09/27 18:00
同じ。

714 :デフォルトの名無しさん:02/09/27 18:01
>>712
つーかやってみろよ。sizeof(str)とか
文字列だったら '\0' で終端がわかるだろ

715 :デフォルトの名無しさん:02/09/27 18:03
http://www.catnet.ne.jp/kouno/c_faq/c6.html#4

716 :712:02/09/27 18:11
よく分かりました
ありがとうございます

717 :デフォルトの名無しさん:02/09/27 18:23
void hoge(char str[])

↑これって関数がポインタを受け取るときは(間接的に)配列を受け取る場合が多いから、わかりやすく書けるようにしただけだよね? 構文糖というかどうかは分からないけど。

718 :デフォルトの名無しさん:02/09/27 18:37
void **p;
これ、どうやってつかうんですか?

719 :デフォルトの名無しさん:02/09/27 18:38
>>718
ポインタ配列

720 :719:02/09/27 21:27
ごめん嘘だvoid **pだったね
CoCreateInstance()とか1つの関数でいろいろな型(クラス)を
作って渡すのに使うのだと思う
例えば簡単に書くと
void hoge(int n,void **p)
{
 switch(n){
 case 0: *p=(char *)new char; return;
 case 1: *p=(float *)new float; return;
 ・・・
 default: *p=(int *)new int; return;
}
・・・これも嘘かも
new使ってるのがスレ違いとか言わないで

721 :デフォルトの名無しさん:02/09/27 21:28
キャスト(void *)の間違い鬱だ

722 :デフォルトの名無しさん:02/09/27 21:34
何を言っておる。
void *a[N];
void **p = a;
って使えるじゃん。ポインタ配列に適合するポインタでもいいんだよ?
それと、配列の生成は new char[n]


723 :720:02/09/27 21:44
>>722
voidのポインタ配列を参照するときにキャストするのならば
最初からキャストする型で宣言した方がいいのでは?と思い直したんですよ
hogeで作るオブジェクトは配列でなくて
1個のインスタンス生成を想定してましたが、

724 :720:02/09/27 21:47
ただC++ならテンプレート使えば済む話ですが

725 :722:02/09/27 21:51
あーそーか勘違いした>配列

726 :デフォルトの名無しさん:02/09/27 23:47
forループの中で,インクリメントされた値を異なる変数名に
順次代入したい場合ってどうしたらいいの?

727 :デフォルトの名無しさん:02/09/27 23:52
なにそれ。こんなのしかイメージできないぞ↓
int a, b, c;
int *vars[] = { &a, &b, &c };
int i;
for (i = 0; i < 3; i++) *vars[i] = i;

728 :デフォルトの名無しさん:02/09/27 23:52
すべての車バイクが電気で動くようになったら暴走族の被害がかなりへるかと

729 :デフォルトの名無しさん:02/09/28 00:07
違法改造で放電しまくってうるさいかもしれない

一体何の関係が

730 :デフォルトの名無しさん:02/09/28 01:06
ループ(for、while等)の中で一回だけ実行するにはどうしたらいい?
例えば、

for(i=0; i<3; i++)
{
printf("%d\n", i)
}

において、一回だけprintfを実行させたい場合。

731 :デフォルトの名無しさん:02/09/28 01:12
/*
for(i=0; i<3; i++)
{
*/
printf("%d\n", i)
/*
}
*/


732 :デフォルトの名無しさん:02/09/28 01:12
for(i=0; i<3; i++)
{
if(i==0)printf("%d\n", i);
}


733 :デフォルトの名無しさん:02/09/28 01:15
ループの外に出すわけにはいかんのだろうか?

734 :デフォルトの名無しさん:02/09/28 01:20
>>720
単純に「void*へのポインタを使いたい時」でいいんじゃない?
たとえば
void free_mem(void **p)
{
 free(*p);
 *p = NULL;
}

でもいいんだし。

735 :デフォルトの名無しさん:02/09/28 01:22
今日、初めてC言語のソースを書きました。
本当に感激しました。
よーし、この調子で明日は少し進むぞ〜

736 :デフォルトの名無しさん:02/09/28 01:24
んじゃ、無限ループのなかにおいてはどう?

737 :デフォルトの名無しさん:02/09/28 01:29
>>736
for(;;) {
  static int only_one=1;
  if ( only_one ) {printf("hoge\n"); only_one=0;}
}

738 :720:02/09/28 01:33
>>734
#define SAFE_DELETES(o) if(o){delete[] o;o=NULL;}
との違いは?
void*使ってたら型安全性もくそもないし
Cスレなのでdelete[] o;が嫌でしたらfree(o);と読んで下さい

739 :デフォルトの名無しさん:02/09/28 01:35
>>737
それメインループの中で初期化するときによくやってる

740 :720:02/09/28 01:37
>>738
マクロと関数の違い。

741 :デフォルトの名無しさん:02/09/28 01:38
オーバーヘッドがある分関数が不利?

742 :720:02/09/28 01:44
>>741
速度を取るかバイナリのサイズを取るかだね。
ただし、free自体にかかるコストがかなり大きいので、
場合によっては全体のコードサイズの関係でマクロの方が
遅くなるケースも考えられる。

743 :720:02/09/28 01:45
↑ アプリケーション全体を考えた時の話ね。

744 :720:02/09/28 01:47
いや、この程度ならマクロでもサイズはほとんど同じかも。
度々スマソ。

745 :デフォルトの名無しさん:02/09/28 03:13
>>730

for(i=0; i<3; i++)
{
printf("%d\n", i);
break;
}

746 :デフォルトの名無しさん:02/09/28 03:50
画像処理でBitmapの読み込み、書き込みに苦労してます。
助けてください。読み込んだあとにHough変換するのですが、
よくわかりません

747 :デフォルトの名無しさん:02/09/28 04:25
マルチウザイ


748 :デフォルトの名無しさん:02/09/28 09:43
>>730
sw=0;
for(i=0; i<3; i++)
{
if(sw==0){printf("%d\n", i);sw=1;}
}
//printf(--) <= ;付けとけよ!

749 :デフォルトの名無しさん:02/09/28 11:14
ポインタのソートの仕方が分かりません。
誰か教えてください。

750 :デフォルトの名無しさん:02/09/28 11:14
qsort関数でも見てみる?

751 :デフォルトの名無しさん:02/09/28 11:19
>>750
学校の課題で出されているんですがqsort関数は使用不可なんです。
ポインタの位置を入れ替えてしないといけないみたいので。

752 :デフォルトの名無しさん:02/09/28 11:22
>>751
http://pc3.2ch.net/test/read.cgi/tech/1021862587/l50

753 :デフォルトの名無しさん:02/09/28 11:26
Base64 エンコードやりたいのですが、
6ビットごとの操作ってところで詰まっています

どっかにサンプルってないでしょうか?

754 :デフォルトの名無しさん:02/09/28 11:34
>>749
if(a<b)
swap(&a,&b);
〜〜〜〜〜〜〜〜〜〜
swap(*aa,*bb){
int *cc;
*cc=*aa;
*aa=*bb;
*bb=*cc;
}
こんな奴かな?

755 :デフォルトの名無しさん:02/09/28 11:47
>>754
構造体のソートなんです。
なんとかんらないでしょか?

756 :デフォルトの名無しさん:02/09/28 11:56
ポインタに構造体の先頭アドレス放り込んだらいいんでないの?

struct tbl tb1, tb2;
struct tbl *ptb1, *ptb2;

ptb1 = &tb1;
ptb2 = &tb2;

こんな感じで

757 :デフォルトの名無しさん:02/09/28 11:59
>>756
もう少し詳しく教えてもらえないでしょうか?
ソートはどうやっておこなうのですか?

758 :デフォルトの名無しさん:02/09/28 12:02
>>749
> ポインタのソートの仕方が分かりません。

>>755
> 構造体のソートなんです。

結局何がしたいのよ ? 構造体を指すポインタの配列があって、それをソートしたいの ? つまり...

struct _s {
 /* ... */
} s[100];

struct _s p[100];

for(i = 0; i < sizeof(p)/sizeof(p[0]); i++){
 p[i] = &s[i];
}

となってて、p[] をソートしたいのか ?

759 :デフォルトの名無しさん:02/09/28 12:12
>>753
> Base64 エンコードやりたいのですが、
> 6ビットごとの操作ってところで詰まっています
> どっかにサンプルってないでしょうか?

「base64 サンプル ソース」 あたりでググレばいっぱいあるぞ。

でも、何故に「6ビットごとの操作ってところで詰まっています」なの ?

unsigned char in[3];
unsigned char out[4];

out[0] = in[0] >> 2;
out[1] = ((in[0] & 0x03) << 4) | (in[1] >> 4);
out[2] = ((in[1] & 0x0f) <<2) | (in[2] >>6);
out[3] = in[2] & 0x3f;

でいいと思うけど...。(適当に書いてるから、バグってたらごめんね。)

760 :デフォルトの名無しさん:02/09/28 12:43
64bit機ではintの大きさは8バイト?

761 :デフォルトの名無しさん:02/09/28 12:46
>>760
オプション次第

762 :デフォルトの名無しさん:02/09/28 12:48
すいません・・・
オプションって何でしょう?

763 :デフォルトの名無しさん:02/09/28 12:50
1バイト三千五百円です・・・・・・・・・・・日給かよっ!安いよっ!

764 :デフォルトの名無しさん:02/09/28 12:53
>>762
自機の後ろについてくるまるくてフワフワした憎いヤツ。
オプションイーターに喰われてスゲー泣ける

765 :デフォルトの名無しさん:02/09/28 12:54
最初にdoubleで宣言してある配列に、
いろいろな小数が入っています。
この配列のそれぞれ整数部分だけを取り出すにはどうしたらいいですか?

766 :デフォルトの名無しさん:02/09/28 12:55
それhグラディウス

767 :デフォルトの名無しさん:02/09/28 13:02
>>761
> オプション次第

つーか処理系 (コンパイラ他) 次第。

768 :753:02/09/28 13:02
おお、なるほど
激しく感謝

769 :デフォルトの名無しさん:02/09/28 13:03
>>765
> 最初にdoubleで宣言してある配列に、
> いろいろな小数が入っています。
> この配列のそれぞれ整数部分だけを取り出すにはどうしたらいいですか?

int で宣言してある配列に代入しろ。

770 :デフォルトの名無しさん:02/09/28 13:05
キャストじゃダメなのかな?

771 :デフォルトの名無しさん:02/09/28 13:09
758のソースも何やってるのかわからんのだが。
* の書き忘れかな?

772 :デフォルトの名無しさん:02/09/28 13:11
>>771
> 758のソースも何やってるのかわからんのだが。
> * の書き忘れかな?

もう少し、頑張りましょう。

773 :770:02/09/28 13:11
>>765
なんならfloor、ceil 調べたら?

774 :765:02/09/28 13:13
>769
なるほど、ありがとうございます。
>770
キャストって何ですか?

775 :デフォルトの名無しさん:02/09/28 13:18
>>774
すかいらーくグループのひとつ

776 :771:02/09/28 13:23
>>772
頑張ってみたがダメだったよ。

あんた以外の人間にもわかるように
あのソースが正しいことを説明してみてくれないか。

777 :756:02/09/28 13:25
> 771

まずやりたいことを詳細に書いたら?
あの内容じゃワケワカラン


778 :758:02/09/28 13:27
>>776
マジなのか ?
どこらあたりがわからんの ?
特に、どこに * を書き忘れたと思うの ?

779 :771:02/09/28 13:33
はあ? おまえら全員でネタ披露してんの?

> p[i] = &s[i];

構造体へ構造体ポインタを代入できるの?

> 特に、どこに * を書き忘れたと思うの ?

struct _s p[100];
 ↓
struct _s *p[100];

780 :758:02/09/28 13:37
>>779
おおなるほど、間違いだ。で、それが「何やってるのかわからんのだが。」ともったいぶって言うことか ?
単に、「間違ってるぞ、ヴォケ !!」ですむ話だと思うが。

781 :デフォルトの名無しさん:02/09/28 13:39
みんな!
もちつけ!
     /\⌒ヽペタン
   /  /⌒)ノ ペタン
  ∧_∧ \ (( ∧_∧
 (; ´Д`))' ))(・∀・ ;)  
 /  ⌒ノ ( ⌒ヽ⊂⌒ヽ
.(O   ノ ) ̄ ̄ ̄()__   )
 )_)_) (;;;;;;;;;;;;;;;;;;;)(_(

782 :758:02/09/28 13:40
>>780
ごめん、悪気はなかったんだよ。
*の書き忘れなのか、それとも &が余計なのか、
それとも他の意図があったのかわからんかった。


783 :770:02/09/28 13:42
>>774
#include <stdio.h>
main(){
  double d=5.239;
  d=(int)d;//(int)<=intへのcast
  printf("%f",d);
  return 0;
}
//こんなプログラムでわかるかな?なんとなくだよ

784 :デフォルトの名無しさん:02/09/28 13:42
↑ の名前は758でなはないです。 771の間違いですだ。

785 :デフォルトの名無しさん:02/09/28 13:43
772が全部悪いということで

786 :デフォルトの名無しさん:02/09/28 13:43
while(*p && *p!=' ')
この条件判定はどういう意味ですか?

787 :デフォルトの名無しさん:02/09/28 13:44
>>786
*p かつ *p が ' ' でないなら
です

788 :デフォルトの名無しさん:02/09/28 13:46
>>786
while(*p=0 && *p!=' ')

789 :デフォルトの名無しさん:02/09/28 13:47
間違えた
while(*p==0 && *p!=' ')


790 :デフォルトの名無しさん:02/09/28 13:48
*p!=0だべ

791 :デフォルトの名無しさん:02/09/28 13:48
>>789
ネタですか?

792 :デフォルトの名無しさん:02/09/28 13:48
間違えた
while(*p!=0 && *p!=' ')

793 :デフォルトの名無しさん:02/09/28 13:49
空白文字で無くポインターの最後まで行っていない間ってところか?

794 :デフォルトの名無しさん:02/09/28 13:49
間違えた
while(*p==0 && *p!======' ')

795 :デフォルトの名無しさん:02/09/28 13:50
>>794
はい、間違えてますが・・・

796 :758:02/09/28 13:50
> 772が全部悪いということで

まあ、心配するな、元を間違った俺が一番悪いのは当然だ、すまん。コンパイルして見りゃ良かったんだけどな。

>>786
p の指す先が文字列の終端でなくてかつ空白でない間...

797 :デフォルトの名無しさん:02/09/28 13:51
海外の比較的マイナーな文学作品を翻訳出版する
小さな出版社がある。そして文学ファンはこういった出版社を
潰さないため、今後も翻訳を続けてもらうために
1人で同じ本を2・3冊買うことが良くある。

我々もこういう時だからこそDelphi7を買って
ボーランドを支えるべきなんじゃないだろうか。
Delphi7の売り上げはDelphi8以降の開発資金となるし、
ボーランドジャパンの今後に大きな影響をもたらすだろう。

Delphi7の出来のみを云々するのは
あまりにも近視眼的ではないだろうか?


798 :デフォルトの名無しさん:02/09/28 13:51
つまり文字列が終了するか空白が現れるまでループってことで。

799 :デフォルトの名無しさん:02/09/28 13:51
>>793
ありがとーベリーマッチ
んじゃ、whlie(*p)っていうのは、ポインターが最後まで行ってない間でFA?

800 :デフォルトの名無しさん:02/09/28 13:52
初心者質問でスマソ
みんなありがとね!

801 :デフォルトの名無しさん:02/09/28 13:53
>>799
> んじゃ、whlie(*p)っていうのは、ポインターが最後まで行ってない間でFA?

Yes, 俺は、while(*p != '\0') と書くけどね。

802 :デフォルトの名無しさん:02/09/28 13:55
>>799
注意。
”文字列を格納した”ポインターだけだよ。

803 :デフォルトの名無しさん:02/09/28 14:03
マジありがと!
大体わかってきたけど、まだポインタを使う意図が理解していません・・・
勉強してるうちにわかってくるもんなのかな?

804 :デフォルトの名無しさん:02/09/28 14:10
>>803
たとえば関数に配列(文字列含む)を渡す時は
ポインタで渡すのが一般的です。

805 :デフォルトの名無しさん:02/09/28 14:13
ふむふむ
まだ多重間接参照とかポインタを仮引数として使った奴とか勉強してないから
修行してきます(・.・;)

806 :ぶた:02/09/28 15:21
#include <stdio.h>
#define N 1500
#define XSIZE 320
#define YSIZE 240
main()
{
int x,y;
int count;
int image1[N][N],image2[N][N];

printf("OK1");
for(y=0;y<N;y++){
count=0;
for(x=0;x<N;x++){
image1[y][x]=count;
count++;
}
}
printf("OK2\n");
for(y=0;y<YSIZE;y++){
for(x=0;x<XSIZE*3;x=x+3){
image2[y][x/3]=image1[YSIZE-1-y][x/3];
printf("x=%d,y=%d, 中身%d\n",x,y,image2[y][x]);
}
}
}
が動きません。理由を教えてください

807 :デフォルトの名無しさん:02/09/28 15:30
int を450万単位確保できるの?
Nで指定した数値を少なくして実行してみて。

808 :765:02/09/28 15:52
>>783
遅くなりましたがありがとうございます

809 :C初心者:02/09/28 16:17
>>806
>理由を教えてください
オーバーフローが原因ではないかと。。。
対策としては、
static int image1[N][N],image2[N][N];
~~~~~~
みたいにしてスタック領域に確保してみては。

810 :デフォルトの名無しさん:02/09/28 16:24
>>809へのツッコミよろしく。

811 :デフォルトの名無しさん:02/09/28 16:25
>807
どのくらい小さくしたらいいと思いますか?

812 :809:02/09/28 16:26
>810
すみません。スタックではなく、静的でした。。。(--;

813 :デフォルトの名無しさん:02/09/28 16:28
スタックではなくスタティックだったというギャグだな

814 :ぶた:02/09/28 16:36
staticを付けたら動くようになりました。
しかし配列のなかにcountの値が格納されません。
どうしてですか?

815 :デフォルトの名無しさん:02/09/28 17:08
if(経験人数==0)
goto 820

816 :ぶた:02/09/28 17:10
>>814
教えてください.countはきちんと表示されるのに実際
image2の中を見ると0ばかりです

817 :C初心者:02/09/28 17:13
>しかし配列のなかにcountの値が格納されません。
格納されていますよ。出力画面で[中身]の値が0でそう思っているのでしたら
printf("x=%d,y=%d, 中身%d\n",x,y,image2[y][x/3]); にかえてみては。
~~~~~
>814がどのような結果を求めているのかはわかりませんが。。。
それにしても、日本語 C が普及しなくてよかったと思った今日この頃っす。



818 :C初心者:02/09/28 17:19
ハァー。また、やってしまった。。。~の位置は気にしないで下さい。(_ _)
ついでに逝ってきます。;y=-( ゚д゚)・∵・ターン

819 :デフォルトの名無しさん:02/09/28 17:48
#include <stdio.h>
main()
{
char name[50];
printf("名前を入力してください\n");
scanf("%s",name);
printf("%sですね\n",name);
return 0;
}
漢字で入力したいのですがどうすればできますか?

820 :デフォルトの名無しさん:02/09/28 17:52
日本語入力モードにする

821 :デフォルトの名無しさん:02/09/28 17:53
alt+半角な

822 :デフォルトの名無しさん:02/09/28 18:00
>>821
できません

823 :デフォルトの名無しさん:02/09/28 18:02
できたけど・・・

824 :デフォルトの名無しさん:02/09/28 18:04
>>819
漢字で入力できないのはそのプログラムのせいではないと思うぞ(^_^;)
ところで、>>819を書いたときはなんで入力できたの?

825 :デフォルトの名無しさん:02/09/28 18:07
単に文字列を入力するだけなのにscanfを使うのもどうかしている。

826 :デフォルトの名無しさん:02/09/28 18:07
>>824
??
scanfで入力するときできないんですが

827 :デフォルトの名無しさん:02/09/28 18:08
>>826
だったらfgetsでもつかっておけ。

828 :827:02/09/28 18:09
scanfのせいだとは思えないけどな。

829 :デフォルトの名無しさん:02/09/28 18:34
質問の時間がやってまいりました。
System::TextとどっかのライブラリのText定義が
曖昧ですよエラーが発生します(´д`;)

簡単に解決するにはどうしたらいいのでしょか。
どっかのライブラリの方は弄りたくないらしい
ですが・・・

830 :デフォルトの名無しさん:02/09/28 18:42
言語を明確にして他スレに書く。

831 :デフォルトの名無しさん:02/09/28 18:47
>>829
C#かな。よー分からんけど、クラス名を明示的に指定してみたら?例えば、
Text var;
   ↓
System::Text var;
たぶん、Textってクラスが名前空間に2つあるから、コンパイラが混乱してるんだと思う。

832 :831:02/09/28 18:50
しまった…ここC言語スレだったんだ…。逝ってくる。

833 :デフォルトの名無しさん:02/09/28 18:53
逝って来るといいつつ滞在する

834 :829:02/09/28 18:56
言語はC++(BCB)らしいです。
使いたい方のライブラリのクラス名が不明なので
もいっかい探してみます・・。

835 :831:02/09/28 18:57
バ、バレてる…(;´Д`)。


836 :デフォルトの名無しさん:02/09/28 19:03
質問です。。
自分のPCだと
printf("\033[%d;%dH",x,y);
の実行結果が
[x;yH
となってしまうのですが・・・(ι ´ェ`)
どうすれば正しくエスケープコードを
認識してくれるようになるでしょうか・・・?

知り合いのPCだと正常に動作したソースを使ってます。
環境はペンティアム3の1.6Gでosはxpです。
他に記載すべき点があれば言ってください・・・。

よろしくお願いします。

837 :836:02/09/28 19:05
追記
[x;yHの前にエンターの記号みたいなのが表示されます(ι ´ェ`)

838 :デフォルトの名無しさん:02/09/28 19:09
>>836
NT系のOSでは、Win32プログラムはエスケープシーケンスは使えない。
Win9xを使うか、16bitコンパイラを使うか、Console APIを使って書き換える必要あり。

839 :836:02/09/28 19:16
>>838
レスありがとうございます。

使えないんですか・・・
そしたら32bitコンパイラでは、
カーソルの位置を指定する方法はないのでしょか?

840 :デフォルトの名無しさん:02/09/28 19:17
標準ライブラリの strstr の実装例のソースってどこかに落ちてませんか?

841 :デフォルトの名無しさん:02/09/28 19:21
#include <stdio.h>
#include <string.h>
int main(){
  char *str1 = "Borland International", *str2 = "atio", *ptr;
  ptr = strstr(str1, str2);
  printf("The substring is %s\n", ptr);
  return 0;
}
//これで充分か?

842 :デフォルトの名無しさん:02/09/28 19:23
838じゃないんだけど

>>839
> Console APIを使って書き換える必要あり
読めないのですか?

843 :840:02/09/28 19:25
>>841
いや、strstr の使い方じゃなくて、strstr のソースが欲しいのです。

844 :デフォルトの名無しさん:02/09/28 19:27
libcのソースってどこにあるんすか?

845 :デフォルトの名無しさん:02/09/28 19:27
>>841
実装霊らしいが…
>>840
ftp://sources.redhat.com/pub/glibc/

846 :デフォルトの名無しさん:02/09/28 19:27
>>843
VC++のCDの中に入ってる。


847 :845:02/09/28 19:28
リロードはきちんとしましょう。

848 :デフォルトの名無しさん:02/09/28 19:28
strstr.c でググれ。

849 :デフォルトの名無しさん:02/09/28 19:29
オリバーのソースってどこにあるんすか?

850 :デフォルトの名無しさん:02/09/28 19:31
strstrの中でstrncmpを使うのは反則?
strncmpを使うとすっきりとかけるんだけど。

851 :836:02/09/28 19:36
>>842
意味がつかめなかったので、読み流してました。
やり方わからないですが、試してみます。

ありがとうございました。

852 :デフォルトの名無しさん:02/09/28 20:00
\x1b[1;31m←これで赤字で出力されます
どなたか解説お願いします

853 :デフォルトの名無しさん:02/09/28 20:08
>>852
エスケープシーケンスについて調べてみれ

854 :852:02/09/28 20:17
>>853
感謝感謝!!
エスケープシーケンスって言葉で検索するだけで情報がいっぱい得られました
ありがとうございました

855 :デフォルトの名無しさん:02/09/28 22:20
質問ですが、
Cを大体マスターしたのですが、あまりにも生産性が低いため次の言語へ
いきたいと思います。
C#なんかよさそうだと思ったのですが、C++を1秒もやらずにC#を習得することは
現実的でしょうか。
C#はC++を改良したものだそうなので、どうしてもC++をやるのが無駄に見えてしまうのですが、
C++をやっておいたほうがよいのでしょうか。それとも、まったくの無駄足になるのでしょうか。

856 :デフォルトの名無しさん:02/09/28 22:24
>>855
C# と C++ は別物。つか、なんでそんな事いちいち人に訊くわけ?

857 :頭悪い人:02/09/28 23:09
10個の数を入力して
順位を求めるプログラム作ってくださいな
#include <stdio.h>
main()
{
int dd[10],jun[10];
int jj,kk;
for(jj=0;jj<10;++jj)
jun[jj]=1;
printf("10個の数字を入力\n");
for(jj=0;jj<10;++jj)
scanf("%d",&dd[jj]);
for(jj=0;jj<10;++jj){
for(kk=0;kk<10;++kk){
if(dd[jj]<dd[kk])
jun[jj]=jun[kk];
}
}
for(jj=0;jj<10;++jj)
printf("%4d",dd[jj]);
printf("\n");
for(jj=0;jj<10;++jj)
printf("%4d",jun[jj]);
return 0;
}
こんな感じで

858 :デフォルトの名無しさん:02/09/28 23:13
http://water.si.hirosaki-u.ac.jp/~slmizu/is2000/is2000/node5.html

859 :デフォルトの名無しさん:02/09/28 23:13
>>857
swap()
作ったら?

860 :デフォルトの名無しさん:02/09/28 23:15
並び替えなくても良いのか?

861 :デフォルトの名無しさん:02/09/28 23:19
>>857
>if(dd[jj]<dd[kk])
>jun[jj]=jun[kk];
if(dd[jj]<dd[kk])
jun[jj]++;
にしてみれば?
それで出来るでしょう。

862 :デフォルトの名無しさん:02/09/28 23:19
>>857=806
宿題代行してもらいたいならインデントくらいきちんとしろ。
読みづらいので放置。

863 :頭悪い人:02/09/28 23:22
並び替えのプログラムと順位求めるプログラムって
考え方違う?よくわからんのだけど

864 :デフォルトの名無しさん:02/09/28 23:24
>>863
順位だと、タイ(同着)があるからちょっぴりだけロジック増える とか

865 :頭悪い人:02/09/28 23:30
>>861
どういうことかはわからないけどできたよ
ありがとう

>>864
ロジック?聞いたことないw

866 :デフォルトの名無しさん:02/09/28 23:33
100回も比較する必要はないと思うのだが。

for(jj=0;jj<9;++jj)
 for(kk=jj+1;kk<10;++kk)
  if(dd[jj]>dd[kk]) jun[jj]++;
  else if(dd[jj]<dd[kk]) jun[kk]++;

867 :デフォルトの名無しさん:02/09/28 23:38
>>865
ほら、順位もついでに表示させたいとか、とういいうことdhじゃろp

868 :866:02/09/28 23:38
あ、インクリメントする添字が逆になってるわ。
  if(dd[jj]>dd[kk]) jun[kk]++;
  else if(dd[jj]<dd[kk]) jun[jj]++;


869 :頭悪い人:02/09/28 23:43
このプログラムの意味がわからない
特にインクリメントのところが

870 :デフォルトの名無しさん:02/09/28 23:43
>>864
そんなロジックいらないでしょ。結果的に。
つかqsort()使えよ。
教師の出題意図を出し抜くくらいでないと大物になれないぞ。

871 :頭悪い人:02/09/28 23:50
クイックソートって難しそう・・

872 :デフォルトの名無しさん:02/09/29 00:01
>>865
> どういうことかはわからないけどできたよ

できたのか ? じゃいいな。とりあえず qsort 使う版作ったけど、必要ないってことで...。

873 :デフォルトの名無しさん:02/09/29 00:24
=と++じゃ++の方が演算子の順位が高いのに、どうして
a = b++;は
a = b;
b = b + 1;
になるんですか?


874 :デフォルトの名無しさん:02/09/29 00:28
ネタデスカ?

875 :デフォルトの名無しさん:02/09/29 00:31
a=b++;とa=++b;の違いを考えて下さい

876 :デフォルトの名無しさん:02/09/29 00:32
あれだ、マジレスすると「ツレター!!!」とか言って大喜びする手合いだ。

877 :デフォルトの名無しさん:02/09/29 00:33
>>873
コンパイラのバグですね。何を使っているんですか?

878 :デフォルトの名無しさん:02/09/29 00:33
>>877
ネタなのか。マジなのか。

879 :デフォルトの名無しさん:02/09/29 00:34
o= --o - o--;

880 :デフォルトの名無しさん:02/09/29 00:35
>>879
せいしだせいしだー

881 :デフォルトの名無しさん:02/09/29 00:35
>>879
未定義厨がくるからヤメレ。

882 :デフォルトの名無しさん:02/09/29 00:46
たいよう と 太陽
そら と 空
などの文字列を比較したときに同じ意味だと判定するロジック、ライブラリ、サンプルソースなどはありませんか?
あったら教えてください.

883 :デフォルトの名無しさん:02/09/29 00:58
マジなのに・・・

884 :デフォルトの名無しさん:02/09/29 00:58
↑873です

885 :デフォルトの名無しさん:02/09/29 01:03
>>884
そういう仕様だから

886 :デフォルトの名無しさん:02/09/29 01:12
>>883
コンパイラのバグだっていってるだろ。
マジなのに・・・

887 :デフォルトの名無しさん:02/09/29 01:13
>>882
ほら...

#include <stdio.h>
#include <string.h>
struct Dictionary_t{
 char *Text;
 char *Reading;
} Dictionary[] = {
 {"空", "そら"}, {"太陽", "たいよう"}
};
int main(int argc, char* argv[])
{
 struct Dictionary_t *p;

 if(argc != 3){
  printf("Usage: %s word1 word2\n", argv[0]);
  return 2;
 }
 for(p = Dictionary; p < &Dictionary[sizeof Dictionary / sizeof Dictionary[0]]; p++){
  if((strcmp(argv[1], p->Text) == 0 && strcmp(argv[2], p->Reading) == 0) ||
   (strcmp(argv[2], p->Text) == 0 && strcmp(argv[1], p->Reading) == 0)){
    printf("%s と %s は同じだよ。", argv[1], argv[2]);
    return 0;
  }
 }
 printf("%s と %s は違うよ。", argv[1], argv[2]);
 return 1;
}
後は、辞書をひたすら入力しろ。

888 :デフォルトの名無しさん:02/09/29 01:19
VC++6.0は,遅くていらいらしてきたんですが,
win98で他に使えるコンパイラってありますか?
動作がなるべく軽いものがいいんですが。

889 :デフォルトの名無しさん:02/09/29 01:20
コンパイラのバグじゃないってば。
b = a++; と b = ++a; の違いも知ってる。
ただ、本みたら= より ++の演算子の方が順位高かったから
あれ?なんでだろ?って疑問に思っただけ。
やっぱそういう仕様だからなのかな。

890 :デフォルトの名無しさん:02/09/29 01:21
>>873
マジレスだけど、演算子の優先順位と、
b++ が加算前の値を返すこととは別の話。
まずは優先順位の意味について調べてみた方がいいと思う。

891 :デフォルトの名無しさん:02/09/29 01:25
>>890
ありがとう

892 :デフォルトの名無しさん:02/09/29 01:27
>>888

>>2-10あたり見てみろ

893 :デフォルトの名無しさん:02/09/29 01:28
>>5

まともな処理系とは?

894 :デフォルトの名無しさん:02/09/29 01:29
では,皆さんは何を使っていますか?
おすすめは?

895 :デフォルトの名無しさん:02/09/29 01:34
VC++

896 :デフォルトの名無しさん:02/09/29 01:36
VC++ gcc

897 :デフォルトの名無しさん:02/09/29 01:38
秋月のオマケ

898 :デフォルトの名無しさん:02/09/29 01:38
gccって英語みたいなんですけど,大丈夫ですかね?
DirectX使えますか?

899 :デフォルトの名無しさん:02/09/29 01:46
>>898
使える
苦労したけど

900 :デフォルトの名無しさん:02/09/29 01:49
>>889
> ただ、本みたら= より ++の演算子の方が順位高かったから

= より ++の方が優先順位が高いというのは、たとえば
b = a++;  という式なら、
b = (a++);  と等価であって、
(b = a)++;  ではないということ。
(後者は実際には文法エラーだけどね)

要するに式内の各演算子の結び付く強さという感じ。

901 :デフォルトの名無しさん:02/09/29 01:54
>>893
こういうこというやつって友達いねぇんだろうな・・・・

902 :デフォルトの名無しさん:02/09/29 01:58
>>>888
VCのコマンドラインコンパイラとか。

903 :デフォルトの名無しさん:02/09/29 02:01
++ のような単項演算子では優先順位云々とかないだろう。
右から左に解釈されるだけでは?

904 :デフォルトの名無しさん:02/09/29 02:02
>>903
おいおい大丈夫?

905 :デフォルトの名無しさん:02/09/29 02:03
>>898
gcc は日本語化するとエラーメッセージがわけ分からなくなるので
英語のまま使え。

906 :デフォルトの名無しさん:02/09/29 02:06
>>903
正しい!

907 :デフォルトの名無しさん:02/09/29 02:08
コンパイラなりの返すエラーメッセージとかってそんなに難しいか?


908 :デフォルトの名無しさん:02/09/29 02:08
先にするのは構文解析だっけ?

909 :デフォルトの名無しさん:02/09/29 02:09
906=903だと信じたい。

910 :デフォルトの名無しさん:02/09/29 02:14
>>901
いなければ何か?
哀れみますか?

911 :901:02/09/29 02:20
>>910
いや、孤独な俺と友達になってもらえるかと。

912 :デフォルトの名無しさん:02/09/29 02:22
>>911
成人式までに職を見つけなければ,友を失う事になるでしょう
来年で良ければ

913 :デフォルトの名無しさん:02/09/29 02:27
構造体の全部のメンバの初期化って,

memset( &Kouzoutai ,0 ,sizeof( DOUZO ) * DOUZO_MAX );

とかでいいんでしょうか?

それとも構造体のメンバ1個1個初期化していくんでしょうか?

914 :デフォルトの名無しさん:02/09/29 02:28
構造体の配列の話?
それとも
memset(&Kouzoutai ,0 ,sizeof(Kouzoutai));
の書き間違い?

915 :913:02/09/29 02:30
あ,ミスりました
構造体のメンバが配列で,
構造体は,ひとつです

916 :デフォルトの名無しさん:02/09/29 02:39
NULLポインタの実際の(実装上の)値がゼロ以外の処理系
があったとすれば、
構造体のメンバにポインタが含まれている場合に
memsetではNULLが入らないね。
それ以外だったらmemsetでいいんじゃない?

または、変数を定義する時に
struct hoge Kouzoutai ={0,};
という感じで初期化してもいい。

917 :デフォルトの名無しさん:02/09/29 02:41
>>913
メンバーにひとつひとつ値を入れていった方がよいぞ。
doubleの場合、すべてのビットが0が0.0と同じになるとはかぎらないらしいし。

918 :913:02/09/29 02:44
double型とポインタ型とかくせのあるものは,今回は使わないので,memsetを使うことにします

>>916
>>917
あとあと知っておいて役に立つ事なので,ありがとうです

919 :デフォルトの名無しさん:02/09/29 02:45
>>913
どうしてもメンバごとの代入がいやなら、
初期状態の構造体をひとつ作っておいて、丸ごと代入。
  (初期化したい構造体) = (初期状態の構造体);

920 :デフォルトの名無しさん:02/09/29 02:46
>>919
なるほど。
ANSIできちんと保証されているしな。

921 :デフォルトの名無しさん:02/09/29 02:52
姫宮ANSI

922 :913:02/09/29 02:58
>>919
画期的
盲点をつかれました
これで,明日はドライブシュートが打てそうな気がします

923 :デフォルトの名無しさん:02/09/29 02:58
Sleep関数の引数って定数でないとダメなの?
つまり、Sleep(1000+x);ってのはダメ?xに数字を代入して。

924 :913:02/09/29 03:00
つーことは,

void a()
{
 KOU Kou;

 Kouzou=Kou; //memcpyの方がいいか?
}

ではだめで,外部変数で用意しなきゃだめってことですよね?
それかa関数の中にstaticで用意するか

925 :デフォルトの名無しさん:02/09/29 03:01
>>923 頭文字からして標準関数ではないヨカン

926 :デフォルトの名無しさん:02/09/29 03:01
>>923
constついてるか確認して

927 :デフォルトの名無しさん:02/09/29 03:01
>>923
なんでそんな質問する気になったの?

928 :デフォルトの名無しさん:02/09/29 03:02
>>923
なんかサイレントヒルの裏世界に迷い込むぐらいの疲労を覚えたよ。

929 :デフォルトの名無しさん:02/09/29 03:04
>>889
> b = a++; と b = ++a; の違いも知ってる。
> ただ、本みたら= より ++の演算子の方が順位高かったから
> あれ?なんでだろ?って疑問に思っただけ。
> やっぱそういう仕様だからなのかな。

ちょっとマジレス。

a++ は、(temp = a, a = a+1, temp) と言う形に展開される。
だから、b = a++; は、
(1) temp = a;
(2) a = a + 1;
(3) b = temp;
となる。ただし、(1) → (2), (1) → (3) の順序は、保証されてるけど、(2) と (3) の順序は保証されていない。((1) → (3) → (2) もありえるし、システムによっては (2) と (3) が同時に実行されるかもしれない。)
だから、a = a++; は、結果が保証されない。

930 :デフォルトの名無しさん:02/09/29 03:05
>>923は大人気。

931 :デフォルトの名無しさん:02/09/29 03:09
>>929は結論は正しいが過程はでまかせ

932 :デフォルトの名無しさん:02/09/29 03:11

923や929見て思ったんだけど、ここってそういうスレなの?

933 :デフォルトの名無しさん:02/09/29 03:12
mov ax,a
inc ax
mov b,ax

934 :デフォルトの名無しさん:02/09/29 03:13
>>924
そんな面倒なことしないでも定義時に初期化すればいいじゃん。
それとも一旦何かに使った構造体を再初期化したいの?
 


935 :デフォルトの名無しさん:02/09/29 03:14
>>931
禿しく同意。

936 :デフォルトの名無しさん:02/09/29 03:26
>>934

1回構造体のメンバに例えばカウントを取る変数とかがあって,毎回0に初期化しないといけないんです
あとは,毎回座標を入れていったり

937 :デフォルトの名無しさん:02/09/29 03:28
>>931, >>935
>>929 は結論は正しいが過程はでまかせ

どこがでまかせか、指摘してみ。

938 :934:02/09/29 03:29
>>936
意味がわからん。
スコープ内で同じ構造体を二回以上初期化する必要があるということ?
もしそうならいいんだけど。

939 :デフォルトの名無しさん:02/09/29 03:30
c=10;

c%50

は,0.5とかになるはずなんですが,なぜに10が返ってきますか?

940 :デフォルトの名無しさん:02/09/29 03:34
>>939
> c=10;
> c%50
> は,0.5とかになるはず

なんて知識をどっから仕入れた ?

941 :デフォルトの名無しさん:02/09/29 03:37
どーいう演算をしたら10と50から0.5がでてくるんだろう?

942 :デフォルトの名無しさん:02/09/29 03:37
加算とインクリメントの区別ができない人間の集まるスレ。

943 :935:02/09/29 03:38
>>937
結論以外全部ってのはダメかな。

主に↓の辺り。
> a++ は、(temp = a, a = a+1, temp) と言う形に展開される。

944 :デフォルトの名無しさん:02/09/29 03:46
>>929は(2)と(3)が入れ替わってもbには加算される前のaが代入されるという罠

945 :935:02/09/29 03:51
>>944
順序が入れ替わるかもしれないと本人も書いてるじゃん。

946 :デフォルトの名無しさん:02/09/29 03:52
a++;ってその戻り値(?)を受け取らなければ最適化で++a;と同じコードが吐き出されることが多い?

947 :デフォルトの名無しさん:02/09/29 03:53
>>946
a++ も ++a も a+=1 も a = a+1 も (temp=a,a=a+1,temp) も同じと思われ

948 :デフォルトの名無しさん:02/09/29 03:54
だから>>929の論理だと、入れ替わってもbの値は変わらないんだって

949 :デフォルトの名無しさん:02/09/29 03:56
>>947
さんきゅ。
じゃあ今までどおりforの中などではa++を使うわ。++aってなんか格好悪くて嫌い。

950 :935:02/09/29 03:56
>>948
ごめん。意味がわかったよ。

951 :デフォルトの名無しさん:02/09/29 04:00
>>950
いや、俺もまちがってたw
>>929の最後は"a=a++"の結果は保証されないって書いてあるので

952 :935:02/09/29 04:01
>>948
やっぱり意味わかんないわ。 

953 :デフォルトの名無しさん:02/09/29 04:02

新スレたてるよ。

954 :935:02/09/29 04:03
>>951
とりあえず了解。

955 :935:02/09/29 04:03
>>948
ああ、やっと意味わかったよ。

956 :デフォルトの名無しさん:02/09/29 04:05
一年間に40スレ消費される勢いですね

957 :935:02/09/29 04:06
>>955
騙るな。

958 :953:02/09/29 04:06
>>1はひねらなくてもいいよね。

959 :935:02/09/29 04:06
>>958
あ、どうもすみません。よろしくお願いします。

960 :デフォルトの名無しさん:02/09/29 04:11
さっきブックマークを整理していたら、
偶然SHOW-Aのライブカメラのページが出てきた。
彼は変わりないようで、ちょっとさびしくマターリ

961 :デフォルトの名無しさん:02/09/29 04:18
http://pc3.2ch.net/test/read.cgi/tech/1033240509/

新スレ
過去ログなどは他の人に頼みます。

962 :935:02/09/29 04:26
>>961
どうもおつかれです。過去ログは追加しました。

963 :929:02/09/29 04:52
>>948
> だから>>929の論理だと、入れ替わってもbの値は変わらないんだって

お前、アホだろ。

b = a++; は、入れ替わろうが変わんないのは当たり前。

入れ替わって困るのは、a = a++; の時。(と書いてあるだろ。)

で、>>929 のどこがでまかせなんだ ?

964 :デフォルトの名無しさん:02/09/29 04:54
>>963
後で訂正してるYO!

965 :デフォルトの名無しさん:02/09/29 05:22
評価の順序とかの話ではなく、
単にa=a++の結果は未定義なのでは?

aがどんな値でもa=a++を実行すると100になるような処理系
もつくることは可能で、当然それはANSIに準拠している。
(そんなことする奴はいないだろうが・・・)


966 :929:02/09/29 05:33
>>964
> 後で訂正してるYO!

ん ? どこで訂正してんのかよくわからんけど、>>929 は、正しいと言うことでいいのか ?

967 :デフォルトの名無しさん:02/09/29 05:36
負け犬が遠吠えしているスレはここでつか?

968 :デフォルトの名無しさん:02/09/29 05:37
http://yahooo.s2.x-beat.com/

969 :デフォルトの名無しさん:02/09/29 05:37
こういう議論をみるたびに思うんだよな。

おまえら、本当にCが好きだな。と。

970 :デフォルトの名無しさん:02/09/29 05:37
( ´,_ゝ`) プッ
今頃。

971 :デフォルトの名無しさん:02/09/29 05:40
粘着厨ウザイ

972 :デフォルトの名無しさん:02/09/29 05:52
ttp://nxt.sourceforge.jp/ のスレはここですか?


973 :デフォルトの名無しさん:02/09/29 05:53
           ,. ''"´    ` ` 、          
           ;'            ':..      
          ;'      ===   ====     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ./        ●     ●    < ウタちゃんですが、何か?
        ./          ⌒  ▼⌒':     \________
  __  ./         彡  ∵人∵ノミ___
    ̄ ./  _         ミ   ノ"ミ ̄ ̄ ̄
   ̄ ̄ ̄ ̄ ̄━━ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ̄ ̄━━━ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄


974 :デフォルトの名無しさん:02/09/29 06:13
結論:まあ、厨はインクリメント/デクリメント演算子は使うなってこった。

975 :デフォルトの名無しさん:02/09/29 07:14
box[50][60];

char (*lpbox)[60];

lpbox=&box[60];

これでやると,おかしくなるんですが,どう直せばいいんでしょうか?

lpbox=&box[50];

でもおかしかったです

976 :デフォルトの名無しさん:02/09/29 07:18
lpbox=box;

こうだろ?

977 :デフォルトの名無しさん:02/09/29 07:19
>>975
新スレの方で質問した方がいいよ。
このスレには粘着厨と煽りしか残ってないもよう。

978 :デフォルトの名無しさん:02/09/29 07:21
>>975
&box[60]はboxの60番目の要素(先頭を0番目とする)のアドレスだぜ。つまりbox+60。

979 :デフォルトの名無しさん:02/09/29 07:52
>>975は質問する以前のレベル。
最初からポインタと配列を勉強しなおせ。

980 :デフォルトの名無しさん:02/09/29 07:58
やっとうまくいきました
ありがとう

981 :デフォルトの名無しさん:02/09/29 11:47
1000!

982 :デフォルトの名無しさん:02/09/29 15:24
うめうめ。

983 :デフォルトの名無しさん:02/09/29 15:30
ume

984 :真・スレッドストッパー。。。&rlo;止停:&lro;:02/09/29 16:08
書けませんよ。。。( ̄ー ̄)ニヤリッ

985 :偽・スレッドストッパー。。。:02/09/29 16:18
書けませすよ。。。( ̄ー ̄)ニヤリッ


986 :デフォルトの名無しさん:02/09/29 16:19
うめやふやせや

987 :デフォルトの名無しさん:02/09/29 16:19
987

988 :未定義・スレッドストッパー。。。:02/09/29 16:20
書けるかもねぇ。。。( ̄ー ̄)ニヤリッ


989 :デフォルトの名無しさん:02/09/29 16:20
ダレモイナイ…

990 :デフォルトの名無しさん:02/09/29 16:21
(~_~)

991 :デフォルトの名無しさん:02/09/29 16:21
久しぶりに1000げっちゅ

992 :デフォルトの名無しさん:02/09/29 16:22
え〜んやこ〜ら


993 :デフォルトの名無しさん:02/09/29 16:23
NULL

994 :デフォルトの名無しさん:02/09/29 16:23
1000ぽ

995 :デフォルトの名無しさん:02/09/29 16:28
さてと。

996 :デフォルトの名無しさん:02/09/29 16:28
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50








997 :デフォルトの名無しさん:02/09/29 16:29
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50


C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50

C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50




998 :デフォルトの名無しさん:02/09/29 16:29

   ∧_∧∩  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ´∀`)/ < 先生!横から1000取ってもいいですか?
__ /    /    \___________
\⊂ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄ ̄||
 ...|| ̄ ̄ ̄ ̄ ̄||

999 :デフォルトの名無しさん:02/09/29 16:29
1000げっちゅ


1000 :デフォルトの名無しさん:02/09/29 16:29
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50
C言語なら俺に聞け<34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/l50







1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

200 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)