C言語ならアタシに聞きなさい<37>

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C言語の質問スレッド37発目です。
C言語は時代遅れなんかじゃないです。
みんな大好きなんです。このシリーズの速さがそれを物語っています。

・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/
推薦図書/必読書のためのスレッド PART6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/

・前スレ <36>
http://pc3.2ch.net/test/read.cgi/tech/1035211039/

コンパイラ、過去ログなどのリンクは>>2-5 あたり
2デフォルトの名無しさん:02/10/26 18:08
【コンパイラ】
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
3デフォルトの名無しさん:02/10/26 18:09
【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

【注意】
Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
まともな処理系を使いましょう。
4デフォルトの名無しさん:02/10/26 18:34
三分の二は関係ない書き込みで残りがくそみたいな質問。
だから回転がはやい。
しかも3すれごとに同じ質問が繰り返されている。
>>4-5
2/5
6デフォルトの名無しさん:02/10/26 18:42
    ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ( ´∀`)/<先生!
 _ / /   /   \オススメのコンパイラーを教えてください。
\⊂ノ ̄ ̄ ̄ ̄\  \_____________              
 ||\        \
 ||\|| ̄ ̄ ̄ ̄ ̄||
 ||  || ̄ ̄ ̄ ̄ ̄||
    .||       
あなざーいぇっとこんぱいらこんぱいら
「水平回転」とはこうですか?

 a) ┏━┳━┓
   . ┃←╂→┃
   . ┗━┻━┛

それとも、こうですか?

 b)  ┏━┓
    . ┃↑┃
    . ┣┿┫
    . ┃↓┃
    . ┗━┛

「水平軸回転」は b) ですよね。
第2問. 「右回り」とはこうですか?

 a)  /⌒
    (   ↑
    ヽ、__ノ

それとも、こうですか?

 b)   ⌒ヽ
   ↑   )
    ヽ、__ノ
104:02/10/26 19:06
5-9
はやくも無駄にスレが使われました。ここまでで意味があるのはかろうじて
1-3
ぐらい。といってもリンクだけだけど。
>>10
まぁ所詮はこの程度でしょ。
12デフォルトの名無しさん:02/10/26 19:11
>>1
あなたは誰ですか?
13デフォルトの名無しさん:02/10/26 19:21
struct servent server;
memset((char*)&server,0sizeof(server));
ってのを本で見かけたんですが
ansiiの規格では
void*memset(void*,int,int,size_t)
っていうふうになってますよね
なんでわざわざchar*型にキャストする必要が
あるんですか?
おしえてくふぁさい
14デフォルトの名無しさん:02/10/26 19:34
fgets関数でファイルを一行ずつ読み込んでいきますが、一行読み込んだら次にまたfgetsを実行したとき次の行を読み込むことになっているのは仕様ですか?
同じ行を読み直すとか、そういう場合には困るような気がするんですが(そういうことする必要ないか?)

ってかよくFILE *fp = fopen(hoge)ってので*fpがつかわれますが、この*fpの先の実体はどうなってるんでしょうか?
15デフォルトの名無しさん:02/10/26 19:38
>>13
作者に聞け。後者のほうが正しい。

>>14
仕様。fseekでも調べろ。
1615:02/10/26 19:40
>>14
ヘッダーでも調べろ。FILEは構造体だ。
>>13
昔は void がなかったので(汎用ポインタには) void * の代わりに char *
を使ったらしいです。その名残ではないでしょうか?
18193→一休さん:02/10/26 19:57
 線形リストが、まだわからない。
>>16
実体はライブラリによって異なるから、
調べる意味がないようなきもする。

が、ライブラリのソースまで追って行くのであれば
それはそれで勉強になるか。
20デフォルトの名無しさん:02/10/26 19:59
風俗にいってからちんちんが妙に痒いんだがどうしたらいい。
てーか何でFILEを表に出しているのか。
22デフォルトの名無しさん:02/10/26 20:01
VirtualAlloc(NULL, Param.Image.BufferLength, MEM_COMMIT, PAGE READWRITE);
では、コミットするページ領域のサイズはいくつになるんでつか?
23デフォルトの名無しさん:02/10/26 20:03
>>22
なぜCスレできくのでつか?
24デフォルトの名無しさん:02/10/26 20:05
ほうれん草を炒める関数の名前はどうしたら良いですか?
25デフォルトの名無しさん:02/10/26 20:06
そうでつね
frySpinach()
27デフォルトの名無しさん:02/10/26 20:30
>>5
あっ、レスありがとうございます!
倉本安奈ちゃんかあ、今度見てみます!どうもですー
28デフォルトの名無しさん:02/10/26 20:43
ある文字列から、スペースをデリミタとして、左辺と右辺に分ける関数を教えてください。結果は char 型のポインタで返ってくると嬉しいのですが。
29デフォルトの名無しさん:02/10/26 20:49
>5 よ。 27 に返事してやれ。
30デフォルトの名無しさん:02/10/26 21:06
>>27はスカ
31デフォルトの名無しさん:02/10/26 21:15
>28
 左側はその文字列の先頭アドレスでいいよね。
 右側は、デリミタを検索(連続はチェックしてね)してその次のアドレスでいいよね。
32デフォルトの名無しさん:02/10/26 21:19
いいよねじゃなくて、、、ソース書いてくれると嬉しいのですが。
ソース
>>32
strchrあたり使ってなんとかすれ。
35デフォルトの名無しさん:02/10/26 21:36
int a[100], b[10];
int i, j, k, *p ;
p = a[i];
k = p[b[j]];
とやるとき
for (i = 0; i < 10; i++)
  b[i] *= sizeof (int);
としておいて
k = *((int *) ((char *) p + b[j]));
とやったほうが速いように思うんですけど
このコードは移植性がありますか?
3631:02/10/26 21:39
>32 31で言った事だけで、もうソース書いたも同然だからあとは出来るはず。
   ていうか、Cを学びたいのであれば、ぜひやってみて下さい。
>>32
それくらい自分でやってくれると嬉しいのですが。
つまり、あなた方はできないわけだ。
出来ません。
40デフォルトの名無しさん:02/10/26 22:07
strchr()の中身みたいんですけど、どこに書いてありますか?なんでもおk
CRT
42デフォルトの名無しさん:02/10/26 22:15
CRTってディスプレイのことじゃないですよね?
いや、そうなんだろうけど、ここでの意味は?
China Raguby Team.
4431:02/10/26 22:19
>38
 そうじゃないです。僭越ですが、私はこのように書きました。
 デリミタが見つからない場合と、文字列の最後に見つかった場合は
NULLを返します。

#define delimit 0x20

char *divide( const char *s )
{
 char *myPtr;

 if( myPtr = strrchr( s, delimit ) )
  if( *(myPtr++) == NULL )
   myPtr == NULL;

  return myPtr;
}
CRTはVC++に入ってるよ。Cランタイムのソースがイパーイと。

char *strchr(const char *str, int c)
{
  c = (char)c;

  while (*str && *str != c)
    ++str;

  if (*str == c)
    return (char *)str;
  return NULL;
}
>>45
それってどこのフォルダにありますか?
47デフォルトの名無しさん:02/10/26 22:23
>46
VCインスコしたディレクトリの中にCRTっていうとこ。
CRTのインスコはオプションだよ。
>>48
ありがとうございました
50デフォルトの名無しさん:02/10/26 22:27
>>22
ほかのスレに書いたんですがレスないでつ。
>>45
> c = (char)c;

なんだコリャ ?
53デフォルトの名無しさん:02/10/26 22:35
VC++なんて持っていません。昔手に入れたワレズのエンタープライズエディションくらいならありますが、使うとやばいので使えません。
>>53
47のでいいじゃねえか。
ついでに、>>44も仕様を満たしてないと思われ
>>53
通報しますた
>>53
通報しました
>>53
もう一回通報しますた
>>53
MSKKにも通報しますた
60デフォルトの名無しさん:02/10/26 22:45
YKKにも通報しますた
>>52
1ビット比較するのと4ビット比較するのはどっちが早いと思う?
6261:02/10/26 23:02
ビット -> バイト
マスクしてるのか?
>>61-62
どういう意味?
charは1バイトでしょ。
4ビットって?
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
67デフォルトの名無しさん:02/10/26 23:29
なぜC++と比べてCの質問スレはこんなに盛況なのですか?








厨ばっかだからか?(プ
>>61
レジスタって知ってる?
69デフォルトの名無しさん:02/10/26 23:45
今、よほどの環境じゃない限り4バイトと1バイトを
切り詰めて比較する必要はないだろう。
70デフォルトの名無しさん:02/10/26 23:45
>>67
笑うとこか?C++はさっさとdat落ちか糞スレになる運命。
int cだけど、1バイトの比較になるか?
72デフォルトの名無しさん:02/10/26 23:49
Cしか知らない爺が多いおかげで喰えるんですから感謝しましょう。
STLで今日もfunctionalかつgenerativeにコーディングしましょう。

73デフォルトの名無しさん:02/10/27 00:04
67は、心が腐った人間の見本
>>52
下位の8ビットだけ使うって事なんでしょ?
char *strchr(const char *str, int c)
何でint変数にcなんて名前つけるの?
>>75
一文字ってことなんじゃないの?
C=C*&FF;
でいいだろ
>>77
それ、コンパイルできるの?
c = c & 0xff って事か?
でもそれじゃダメだな。符号拡張しなきゃ。
どうでもいいけど、Cなら
C &= 0xff;
みたいに書いて欲しい。
8177:02/10/27 00:22
c&=0x80ff;で可能?

さっきはゴメン、頭眠ってるかも・・・オヤスミ...
>>81
それじゃだめじゃん。
つーか普通に c = (char)c; でいいじゃん。
*strとcの比較に影響出る?サイズ変わらないよね
>>83
だから、int cの下位8ビットだけ使うってことでしょ?
>>84
c=(char)c
↑これやるとなにか違いがあるの?
今Cコンパイラないから確認できないけど、意味内と思うよ。
#include <stdio.h>int main(void){ int i = 0x0fffffff; char c = (char)i;printf("%d,%d\n", c,i);/* -1,268435455 */return 0; }c &= 0xff;で良いんじゃ?
87デフォルトの名無しさん:02/10/27 01:10
>>85
たとえば、cの内容が0x1111だったら明らかに違うじゃん。
>>81
アフォか。
char *str と int c を比較すれば int 型に暗黙変換される。
その時の *str が取りうる値は (int が 32-bit として)
0xFFFFFF80 (-128) 〜 0x0000007F (127) だ。
単にビットを切り取っただけだと、0x00000080 (128) を超える
数値ができて比較になんねーだろ。
char が unsigned char の処理系なら問題ないだろうけど。
char c = (char)i
これならなんとなくわかるけど、
実際吐き出すコードはどうなるんだろう
90デフォルトの名無しさん:02/10/27 01:13
吐き出すコードがどうとかってより、挙動がちがうじゃん。
>>89
c = (char)c;

で、VC++ 6.0 は...

 movsx eax, BYTE PTR _c$[esp-4]

と言うコードを吐くから、とりあえず下位8ビットを符号拡張してるね。
>>90
つーか、なんで >>45 のコードに c = (char)c; が必要なの ?
gasだとこんな感じ
movsbl -4(%ebp),%eax
movl %eax,-4(%ebp)

下位1バイトを切り取ってる。
94739:02/10/27 01:27
gasって何だよ(W
GCCだろ.
アセンブラコードありがとうございます。
仮に char c=(char)i だった場合、*strとの比較は1バイトになるんですかね?
なんか4バイト比較しそうな気がする。CPUが命令もってないか、
速度変わらないとかで。
96デフォルトの名無しさん:02/10/27 01:30
重箱のすみをつつくなら正確に。

>>94
GCCだとGNU Compiler Collectionになりますが。
>>95
普通は1バイトずつ比較する。
CPU が命令持ってない時は、マスクして比較する。
>>89-95>>88 を見れ。
アセンブリコードなどこの際関係ない。
下位型と上位型の演算は上位型にキャストされるという大原則を思い出せ。

・・・アセンブラコードって何だよ、アセンブルした時のエラーコードか?
>>94って相当はずかしいな・・・・
100デフォルトの名無しさん:02/10/27 01:37
>>92
その行があるのと無いのでは挙動がちがうじゃん。
わからんの?
>>100
だから、何のために「その違う挙動」が必要なのか聞いてるんだけど。
日本語理解できてないのか ?
102デフォルトの名無しさん:02/10/27 01:40
>>95
>仮に char c=(char)i だった場合、*strとの比較は1バイトになるんですかね?

いや、*strとの比較はintで行われるよ。
んーわからない。
int cにcharの範囲を越えてるようなものを渡されたときのためですか?
94ほどの漢だと、96の意味が理解できない可能性も。
105デフォルトの名無しさん:02/10/27 01:46
>>101
> だから、何のために「その違う挙動」が必要なのか聞いてるんだけど。

strchrの仕様がそうだからだよ。




>>101
> だから、何のために「その違う挙動」が必要なのか聞いてるんだけど。

おまえ、そんなことは聞いてないじゃん。
>>105
> strchrの仕様がそうだからだよ。

c = (char)c; がない時に、strchr() の仕様に合致しない例を挙げよ。
>>47
のコードはそういう処理をしてないよね。
>>75
意外と知られていないが、
'a'などの文字リテラルはCではint型。
>>107
cに0x111が入ってたら?
(つくづくわかってない奴だな…)
これ、最悪の場合意図しない文字の位置を返すんじゃない?
どうして
char c = (char)i;
じゃなくて
i=(char)i;
なんだろ。
int型に入れたらその後の比較でsizeof(int)単位で比較しなきゃいけなくなるでしょ?

char,charの比較ならcmpblで1バイトの比較になる。
>>111
どれのこと言ってるの?
>>110
お前は、アフォか ?
c に 0x111 が入っていた時の挙動が定義されてんのか ?

>>111
そう言う意味では、c = (char)c; があるほうが危険と思うけど。
c = (char)c; がなくて、c に 0x111 があるような状況だと、単にそう言う文字がないだけになるからね。
さっさと誰か規格の原文をコピペ汁

>>112
貴方は、正しい。俺もそう思うし、VC++ 6.0 の strchr() もそうしてる。
(別の変数にはしてないけど、比較の時にキャストしてる。)
>>113
>>45のstrchrです。
そんなもの渡す方が悪いんだろうけど、無い。で帰ってきたほうが親切なような。
>>114
> c に 0x111 が入っていた時の挙動が定義されてんのか ?

え? もしかして挙動がわからのの?
>>114
>c = (char)c; がなくて、c に 0x111 があるような状況だと、単にそう言う文字がないだけになるからね。

やっぱり分かってない。
>>118
わかったから、はよかけよ。その「挙動」とやらを。
みていると>>118のがバカっぽいな。
だから >>101>>88 を見れ
>>120がかわいそうだから誰か教えてやったら?
>>88の単にビットを切り取っただけだと
ってなに?
>>114-118

>c = (char)c;
C言語の標準型はintなのは知ってるのかねえ・・。
*strもintに直されるんで、わざわざint->char->intにして
符号拡張させるんですよ。
バカども。
おまえらアフォか。

  ど う し て 0x111 が 例 に 挙 が る ん だ ?

'ア' を指定したときの動作で十分説明つくだろうが。
>>126
CESは?
>>126
このスレの流れだったら、べつにどっちでもいいやん。
>>125
なんか見当はずれなことを言ってる馬鹿がいますよ。
7bit関係?
131125:02/10/27 02:23
>>129-130
うわ、理解できてないヤシがいるよ(藁
ほんとバカだな・・。

char *r = strchr("abcde\xff",-1);
rには"\xff"が入るっての、理解できる?
'ア' == 0xB1
これを int として渡すと 0xFFFFFFB1
下位 8bit だけを抜き出すと 0x000000B1
一方 *str の取りうる値は 88 の通り 0xFFFFFF80 〜 0x0000007F
なので str に ア が含まれてても発見できない
133デフォルトの名無しさん:02/10/27 02:28
>>131
今の話題って、>>45のソースで
c=(char)c;
がなんで必要かって事だよね?
で、君はいらないと思ってるんだよね?
134デフォルトの名無しさん:02/10/27 02:30
>>132
それは違うよ。
135125:02/10/27 02:30
>>133
逆だよバカ。
c=(char)c;は、* 必 要 * 
136125:02/10/27 02:31
>>132
全然理解できてない。
>>134
違うというだけでなく何がどう違うのか指摘しないと無視されるぞ
わかんねー
どっち派でもいいから、すっきりとした解説おながいします。
139125:02/10/27 02:33
>>132
あのね、str側もchar->intに符号拡張されるんだよ。
だからちゃんとstrの'ア'もみつかるの。
シャッキリポンとした解説おながいします
141125:02/10/27 02:33
だから
char *r = strchr("アイウエオ",'ア');
rは"アイウエオ"
142デフォルトの名無しさん:02/10/27 02:34
>>137
別に無視でもかまわないけど。
143125:02/10/27 02:35
ちなみに下位ビットとかそんな話は関係ない。
単にC言語のchar->int符号拡張の話。
>>135
うるせーよ。ばか。
まったりとして、それでいてしつこくないのがいいです。
146125:02/10/27 02:36
>  while (*str && *str != c)
わかんねーやつは、
このコードで、何が起きているのかよく考えろ。
バカども。
・未定義
・処理系依存
・void main
・符号拡張
148デフォルトの名無しさん:02/10/27 02:37
そもそも文字列の中から特定の文字を探すための関数にcharで表せない値を渡すことが間違っているんじゃ・・・・
>>131
> char *r = strchr("abcde\xff",-1);
> rには"\xff"が入るっての、理解できる?

r じゃなくて、*r だろっ。って言う突っ込みは置いといて、これって規格で決まってんのか ?
char が符号無しの処理系において、-1 なんか渡してもいいのか ?
'\xff' を渡すのなら理解できるが...。
150125:02/10/27 02:38
>>148
だから、何が渡されてもそれなりに処理できる様に作ってあるんだろうが。
このバカ。
いいねえ、レガシーな話題で盛り上がれて。
152125:02/10/27 02:39
>>149
intの値なら何渡そうがいいんだよ。バカ。
符号の有無もc=(char)cで吸収されて関係ない。
>>148
まあ、間違いというか無意味だけど、
今回はstrchr()の挙動の話だから。
154125:02/10/27 02:40
もうバカばっかり。バカバカバカみんなバカ。
>>149
'\xff' はすなわち -1 だ。
char が符号付である処理系では。
>>150
それなりってなんだよ。
キャストしなくても途中で致命的なエラーが発生したりはしないだろ。
>>125の必死な姿が目に浮かぶ。
>>154
なんで、あんたがヒスを起こすの?
125 の固定番号を引きずってる 125 もかなりの DQN
160125:02/10/27 02:42
>>155-156
はいはい、揚げ足取りごくろーさん。
>>155
1の補数表現でも-1になるんだっけ?
>>152
お前は、アフォか ? その時の挙動が規定されてんのか ? って聞いてんだよ。
ちなみに言っとくけど、-1 の下位8ビットが 0xff なんてことは、規定されてねーからな。
163125:02/10/27 02:43
揚げ足取り必死だな
>>125
顔真っ赤ですよ。
>>155
「符号無しの処理系において」と書いてあるの見えない ?
166125:02/10/27 02:44
おまえら全員読解力ゼロのバカ
167125:02/10/27 02:45
>>162
はぁ?
挙動って何?
125 は何も試してないだろ。黙れ。

char *strchr_a(const char *str, int c)
{
  c = (char)c;
  while (*str && *str != c) ++str;
  if (*str == c) return (char *)str;
  return NULL;
}
char *strchr_b(const char *str, int c)
{
  while (*str && *str != c) ++str;
  if (*str == c) return (char *)str;
  return NULL;
}
int main()
{
  const char * str = "abcde \xFF abcde";
  printf("str = %p\n", str);
  printf("strchr_a = %p\n", strchr_a(str, '\xFF'));
  printf("strchr_b = %p\n", strchr_b(str, '\xFF'));
  getchar();
  return 0;
}
あ、0xffffffffじゃなくてint直で0xffを渡したときの挙動かな?
>>162
「規定」というか、決まってるでしょ?

> ちなみに言っとくけど、-1 の下位8ビットが 0xff なんてことは、規定されてねーからな。

はげしく勘違いしてる予感
ここが質問者回答者共々厨房なのはあまりにも有名な話。
俺?もちろん厨房さ。
>>167
> 挙動って何?

日本語もわからんのか...。まあ、落ち着けよ。
173125:02/10/27 02:47
もう、せっかく教えてやってるのに頑なに理解しようとしてないバカがいるね。
174デフォルトの名無しさん:02/10/27 02:48
最初に晒されたコードはVisual C++のものみたいだけど、他の有名なライブラリのstrchrのソースでもcharにキャストしているの?
>>170
> 「規定」というか、決まってるでしょ?

どう決まってんの ?
>>173
ププッ、捨てぜりふモードに入りましたね。
このスレ読んでわけがわからんので100レス遡る。

他人をややオカマ口調でバカバカいう125たんと
0x111とか言った香具師のせいでこんがらがってるだけだな。
たぶんわかった。>>109



必死な>>125がいるスレというのはここですか?


char *strchr(const char *str, int c)
{
for(;*str;str++)
if(*s==(char)c)
return (char *)str;

return NULL;
}

じゃだめなの?
>>179
ここです。
ちなみに125の言うことは間違ってない。
なんていうか、自分の考えを上手く伝えられない自分へのもどかしさも彼をイライラさせる原因に。
184125:02/10/27 02:52
>>180
それじゃ駄目だって。
バカ。
>>174
とりあえず VC++ 6.0 では、

char * __cdecl strchr (
 const char * string,
 int ch
 )
{
 while (*string && *string != (char)ch)
  string++;

 if (*string == (char)ch)
  return((char *)string);
 return(NULL);
}

となってて、char 同士で比較するようになってる。
>>184
なんで?
よし、俺も必要派に転向だ。寝るけど。
確かに 125 は自分で自分の品位を下げるタイプみたいだな.
こういう奴は仮に正しいことを言ってても, 真っ先に白い目でみられんだよね ...
もう少し肩の力を抜けばいいのに...
>>183
それだ
>>182, >>184
だから、ダメな例をちゃんと挙げろよ。
>>175
処理系定義
192125:02/10/27 02:55
>>180
あ、やっぱそれでも合ってる。
おれもバカどものせいで混乱してきた。
つーか、元はと言えば strchr() の c が int である事が間違ってる。
>>184
いいじゃん。
195125:02/10/27 02:57
>>191
処理系依存つっても、普通は2の補数表現使うから
ほとんど決め打ちで考えて問題ないよ。
>>191
だったら、この処理系では結果は不定ですって言うのもありか ?

そうなら、c = (char)c; は不要じゃん。
>>185
この素直じゃないコードを書いた人の顔を見てみたい。
そういえばSolarisのstrcasecmpに8bitな文字列を与えるとものすごいことになるね。
なんでここは話題に事欠かないの。誰かネタ帳でも持ってるの。
>>197
どこら辺がおかしいとお思い ?
>>199
ごゆっくりお楽しみ下さい。
>>199
> なんでここは話題に事欠かないの。誰かネタ帳でも持ってるの。

たいした事ないネタに食いつく奴が (今回は >>125) が多いからだろ。
>>200
なんでわざわざ int ch としてるのか。
204125:02/10/27 03:00
お肌に悪いからもう寝る。
バカどもは徹夜で考えてなさいよ。
つーかまず質問するまえにぐぐれ。
最後はネカマかよw
c = (char)c; となってる理由がぐぐって出てくるのかよ プッ
>>200
素直に一文字ずつ見ていって見つかればそこでreturn。見つからなければ(ループを抜けたら)NULLを返せばいいと思う。
>>199
ネタ帖は>>147に。あとは誰か補完してください。
>>205
>>154 この辺も萌えるよ。
>>147
NULLは0(全ビット0)か?を忘れているぞ。
>>203明日になったら分かるさ。
>>210
つか、C FAQでいいじゃん。
214207:02/10/27 03:05
>>203>>197じゃないのであしからず。
>>212
109は説明になってないよ。

 
>>109
じゃ、ほんとは
int *str = "abcde";
って書くのが正しいの?
>>207
>>180 ってこと ? 大して変わらんと思うけど。
>>217
そうは書けないね。
VC++のライブラリのソースはひどいね。
マクロによってstrspnのソースになったりstrpbrkのソースになったり・・・
関数の引数として渡すと char、short は int に float は double に自動的に変換されるのです
禿しくCPU依存の悪寒
じゃあ結論はcharへのキャストはしたければしろ。したくなければしなくてよい。
ということでOK?
>>223
いや、キャストは必要。
第二部いきまーす
>>222
2の補数を採用してないCPUなんてめったにないだろ
227デフォルトの名無しさん:02/10/27 03:14
strcpyの第二引数にNULLを渡してもうまく動作するなんてどこに書かれているんですか?
>>221
それって、昔の話では…
217 は阿呆か、文字リテラルと文字列リテラルは全然違うのに。
>>229
おまえC++と混同してるだろ。
Cは221で合ってる。
>>226
負数に2の補数を使ってないCPUなんてあるのか?
233デフォルトの名無しさん:02/10/27 03:19
リッチーもひどい言語をつくってくれたものだな!
>>232
PS2のCPUとか。
>>233
はじめっからCは高級アセンブラって位置付けなんだから
変な期待すんな
>>233
モノは使いよう。
クソソースを作るやつがクソ
つーか age る程の話題ではない
>>231
たとえば
void hoge(char ch);
という関数があったら、intに変換されるってこと?
わけわからん。
>>221の意味がわからない。
解説お願いします。
>>235
未定義・処理系依存が多すぎるじゃん!
>>234
マジで?
gccとかやばいんでない?
0x80〜は符号拡張されるから、よくやる
n = c - '0';
みたいなのは0x80をまたいでは使えないんだね。気付かなかった。やらないけど。
>>224
だから、ないとまずい理由をちゃんと書け。
引数がint型に拡張されないと、DLLとかで困ると思うんだが。
>>241
だれに返事してるの?
1の補数表現って8bitの場合、0x00と0xFFは同じ値になるの?
Cと関係なくてスマソ
>>242
つーか、その話題まだ引きずるの?
>>244
ひとりごとだ、スマソ
以降

 独 り 言 禁 止
>>243
それは、Windowsの実装の話でしょ。
C一般の話じゃないよ。
250デフォルトの名無しさん:02/10/27 03:27
>>227は放置ですか?
前スレにstrcpy(str,NULL);やstrcpy(str,0);はOKみたいなことが書かれていたんですけど。
>>249
でも、一般的なPC環境はWindowsだよね
以降

   OS依存、処理系依存禁止
>>250
そんなこと気にしてるの、お ま え だ け だ よ
そんなこと気にしてるの、お ま え だ け だ よ
以降

 ふ か わ り ょ う 禁 止
 ふ か わ り ょ う 禁 止
このスレッド立ってから12時間も経っていないんですけど。
>>217
'A':文字定数->int型として解釈される
"hoge":文字列リテラル:一文字一文字はcharとして解釈される
>>242
あれがないと、'ア'を渡したとき、
int c = 0x000000B1のままになってしまうから。
ではどうですか?
>>256
*strで参照するとintに拡張されますが。
>>251
Winで1バイトの引数を4バイトの領域を使って渡してるのを、
↓これと、混同してるわけ?

>221 :デフォルトの名無しさん :02/10/27 03:09
>関数の引数として渡すと char、short は int に float は double に自動的に変換されるのです

>>246
結局俺は、c = (char)c; が必要かどうか、わからんかった。
誰か、まとめてくれないか ?
>>259
混同ではないよ。
Windowsの規約。
printf が %d で char でも short でも int でも受けれたり、%f で float でも double
でも受けれたりするのを考えれば >>221 は自ずと分かると思いますが
ダメでしょうか?
これスレはテレビの馬鹿番組でも見ているようで楽しいな
>>261
だからCの話と関係ないじゃん。
>>262
>>262
それこそ中でキャストしているだけじゃ・・・
>>262
この話は、それとは違うじゃん。
>>250
それを書いたものだが、そんなことしてOKなんて一言も書いてないぞ。
ただしやっていかんとも書いてない。なぜなら、その時の議論には
全く関係のないことだったからだ。
>>260
必要。
>>264
キミもしつこいね。
strchr() 内における c = (char)c; は、

  0x111 のような文字とは思えないデータでも文字データとして扱うなら必要
  文字とは思えないデータははじいてしまうなら不要

という事でよろしいか?
>>269
理由書けバカ。
>>266
渡された引数の型が分からないのにどうやってキャストするのさ?
>>262
あんな、プロトタイプが与えられてない場合と、不定数引数の場合だけ
charがintに昇格するなどの暗黙の処理が入るんだ。

不定数引数ってのは、
int printf(const char *, ...);
みたいな関数の...の部分な。
>>270
君、勉強不足だね。
>>268

717 :デフォルトの名無しさん :02/10/25 16:37
char a[100];

/* 配列に空文字列をセットする3つの方法 */
strcpy(a, NULL);
strcpy(a, 0);
strcpy(a, "");

どこが関係のないことだ?NULLを渡すと空文字レスがセットされると書いているが?
>>272
教えてもらいたかったら、土下座しろ。
>>269
だから、>>242 にも書いたけど、ないとまずい理由を書いてよ。
>>273
%fならdoubleに、%dならintにキャストすればいいだろ。
>>277
今モニタの前で土下座してます。
281276:02/10/27 03:37
× 空文字レス
○ 空文字列
>>279
( ゚д゚).......
>>276
すまんすまん、おれが書いたのは
http://pc3.2ch.net/test/read.cgi/tech/1035211039/742
だ。
>>258
*strがintに拡張されるのはint型の変数と比較するからだろ。
文字列リテラルの型とは関係あるのか?
ああ、ドキュンが沢山いる
あの変なマクロつかうやつでしょ。
あれは何をやってんだろう。
287279:02/10/27 03:39
>>282
なんかおかしいこといっているか?
>>278
45のソースではc=(char)c;が無いと、仕様どおり動かないから。
>>279
キャストってのはね、「元の型」と「キャストする型」の両方が分かってないとできないのよ
290デフォルトの名無しさん:02/10/27 03:40
>251
 パソコンユーザ全体だと確かにおっしゃる通りなのですが、
プログラマの仕事の環境となると、ハードウエアはPC/AT互
換機が現在では一般的といえたとしても、OSは、wnidowsが
そこまでの一般性があると言い切るのは少し抵抗があります。

 しかし、実勢としては、windowsしか知らないユーザ/プ
ログラマがそのように感じたり言ったりすることが間違いだ
とことさらに否定するほど、windowsの存在は小さなもので
はないので、微妙ではありますね。

 何ごとも、ひとたび多数派となれば、その他の世界を知ら
ないか無視してしまう人も出てくるのは避けられないわけで、
その意味では今はwindows”専門”ユーザ/プログラマが目
立ってしまっているのは事実です。
>>271
> 0x111 のような文字とは思えないデータでも文字データとして扱うなら必要

それ余計にまずくない ?
>>288
その 「仕様」 の文またはポインタをキボンヌ。
>>288
何で、具体的に書いてくれないの ?
どう言う仕様に違反するのさ。
>>288
0x3131 を指定しても '1' として扱うのが仕様なのか?
295279:02/10/27 03:43
>>289
そうだったの。
>>290
環境が普及してるかどうかって問題じゃないんだけど…
みんな楽しそうだなあ
>>296
デファクトスタンダードって言葉がある。
299271:02/10/27 03:45
>>291
漏れはマズイと思う。
でも実際、漏れが 0x111 を指定して strchr() を呼ぶ事はないから問題ない。
>>251, >>290
つーか、「一般的なPC環境はWindowsだよね 」と言うのは、まあ当たってると思う。
しかし、C で作られたプログラムの一般的なプラットフォームが PC と言うのは了見が狭すぎ。
>>293
http://www.mkssoftware.com/docs/man3/strchr.3.asp
自分で探しなよ。
googleで検索したら一番上にあったよ。
>>300
soでもおんなじですが。
>>298
Cの規格にそんな言葉はありませぬ。
>>303
でも、規格はデファクトスタンダードによって作られる。
>>299
> 漏れはマズイと思う。

だったら、c = (char)c; はいらないんじゃないの ?

> でも実際、漏れが 0x111 を指定して strchr() を呼ぶ事はないから問題ない。

と言うなら、特にね。

(何で、これで「必要」と言う結論に至るのか理解できん...。)
>>305
少しは頭使え


  少  し  は  頭  使  え

というか
int hoge(char c);
この関数の引数が、符号拡張されて渡されるなんて言うのは、
議論の余地なく間違ってるよ。
>>301
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strchr.3.html

こっちは書いていないけど。
linux向けとはいえ、標準関数はきちんとANSIに乗っ取って書いてあるはず。
>>305
0x80-0xffを指定したときに、仕様通りに動作しないから
310299:02/10/27 03:50
>>305
おい (怒)
「必要」 とは一言も言ってねえ。
第一、c = (char)c; が問題になるタイムクリティカルな局面では、
C なぞ使わん。
>>307
ネタですか?
>>309
309 は >>168 を試してないだろ。黙れ。
少しも話が進んでいない様ですが
気のせいですか。
>>308
それは記述が省略してあるんじゃない?
>>301 >>308
そんな 1 プラットフォームの実装なんか見せられたって意味ないよ。
ANSI ではどうなってる?
>>313
気のせゴホッゴホッ。。
char = signed charの環境で

char *str="\xff";

if(strchr(str,0xff)) とやると偽になるってこと?
316 は病に倒れました。
>>315
ネタですか?
>>317
ネタですか?
321308:02/10/27 03:55
>>315
いやだから、、標準関数に関してはANSIに乗っ取っているってば。。。
もし拡張しているならきちんと明記してある(strstrの第二引数に""を渡した場合とか)
>>315
ANSIではcharでキャストするらしいよ。
323317:02/10/27 03:55
>>320
わからん。試していないから。
これが真になるなら別にキャストは必要ないような・・・
>>310
> 「必要」 とは一言も言ってねえ。

はあ ?

>>271 「0x111 のような文字とは思えないデータでも文字データとして扱うなら必要」

自分の書いたことぐらい覚えておけ、ヴァカ。

> 第一、c = (char)c; が問題になるタイムクリティカルな局面では、
> C なぞ使わん。

タイムクリティカルだってさ。(藁
おまえらANSIぐらい読めよ。それでもC使いか?
>>312
うん。今度試してみる。
>>317
真になるよ。
charが8ビットなら。
>>325
お言葉ですが、この中に何人C使いがいるとお思いですか?
329308:02/10/27 03:57
>>321
> 標準関数に関してはANSIに乗っ取っているってば。。。
> もし拡張しているならきちんと明記してある

間違いなくそうなのか?
その根拠が示されてないっての。

>>322
情報へのポインタをキボンヌ。
330317:02/10/27 03:57
あ、わりぃ。>>317のstrchrはcharへのキャストがないstrchrと考えて。
>>328
すいません。馬鹿な素人ばかりでした。
>>329
> 情報へのポインタをキボンヌ。

「新ANSI C言語辞典」という本
333310:02/10/27 04:00
>>324
>271 「0x111 のような文字とは思えないデータでも文字データとして扱うなら必要」

おおそうとも、まさにそう書いた。
だが、その後 「文字とは思えないデータははじいてしまうなら不要」 とも書いた。
その状況で、何で漏れが 「必要」 と言いきった事になるんだ?
334java厨:02/10/27 04:01
ポインタではなくて参照でおながいします。


今 夜 は 出 来 の 悪 い 連 中 一 同 徹 夜 で す か
336まつもと@Ruby:02/10/27 04:01
>>334
参照=ポインタです
337329:02/10/27 04:02
スマソ漏れは 315 だった・・・
322 サンクス。
>>334
ここは C のスレです。
>>335
オマエモナー
なんか落ちこぼれが集まって教室のすみで、いろいろ議論しているが
間違ったことばかり言っているのを聞いているようだ。
341まつもと@Ruby:02/10/27 04:03
>>338
Ruby>>>>>>>>>>>>>>>>>>>>>>>C=Javaです
おまえらC言語使わないでくれ。
たのむ。
>>340
オマエモナー
>>342
オマエモナー
>>333
お前は、リンクもたどれねーのか ?

>>271
0x111 のような文字とは思えないデータでも文字データとして扱うなら必要

>>291
それ余計にまずくない ?

>>299
漏れはマズイと思う。

と言うのなら、「0x111 のような文字とは思えないデータでも文字データとして扱う」なんて状況を何故書く ?
ここはオマエモナー厨の巣ですか?
以降

  ruby禁止
>>340
だったら、お前が正しいことを書いてくれ。
納得して、眠りたい。
お前ら

         お ど れ   お ど れ
349317:02/10/27 04:07
そうか・・・
charで表せない値を渡した場合はstrchrを呼んだ奴が悪いとして、
charで表せる(CHAR_BIT == 8として)8ビット目が1となる値を渡した時はcharにキャストしないと環境によってはうまく動かないのか。
>>347
今夜は眠れない。
いや、

    眠    ら   せ   な   い 
以降

  char 禁止
>>349
まだずれとる。
353333:02/10/27 04:08
>>344
  0x111 のような文字とは思えないデータでも文字データとして扱うなら必要
  文字とは思えないデータははじいてしまうなら不要

これは漏れの意思とは関わりのない厳然たる事実。

 > それ余計にまずくない ?
 漏れはマズイと思う。
 
これは漏れの単なる意見。
あんたはその区別がつかないほどの日本語 DQN なのか?
354317:02/10/27 04:09
>>352
どこが?
実際に試してみてそういう結論に至ったんですが。
>>350
楽しませてくれ。
>>354
試さなくてもstrchr()の仕様が分かれば自明じゃん。
つーか、試して確認するってのはむしろ危険だよ。
>>351
それツライっす・・・
>>356
お前の脳内が危険だよ
ISO原文
"The strchr function locates the first occurrence of c (converted to a char)in the
string pointed to by s. The terminating null character is considered to be part of the
string."

わざわざ、括弧で書いてあるね。余計なことを考えさせる隙がない。























ぐぐる:「ISO/IEC 9899:1999(E) pdf」
>>358
なんで?
>>359
無駄な改行うざい
>>359
おお、それで検索するのか。
>>350
もう、えっちなんだからぁ。
あと2回はがんばってよ
そう書いてあるんだから納得しろって、なんか日本の教育みたいだな。
その理由まで考えさせない。
>>359の改行の下には
ぐぐる:「ISO/IEC 9899:1999(E) pdf」
と書いてあります。



 夜 は ま だ ま だ こ れ か ら み た い で す 。


 
>>364
なんでここで、

  日  本  の  教  育  が

出てくるんだ。
void hoge( char c ) ...
とか宣言してても
char ch;
...
hoge( ch );
のとき char -> int 変換される
これ C の仕様......?
>>364
いままで、strchr()の挙動(仕様)に関する議論だったんでしょ?
どういう経緯でそういう仕様になったかって話しも興味深いけど、
それは別の話だしね。
>>368
仕様です。
Cの仕様は

      し よ う  が  な い な ぁ
>>368
仕様ですが何か。
新聞配達がキターヨ
>>371は和田便。
>>368
> これ C の仕様......?

違います。
(このスレに約一名そう主張してる方がいますが)
お前らもうそろそろ結論をまとめようぜ。
>>375
1名ではないようです
>>375
主張していないのが約一名です
379375:02/10/27 04:21
>>377
"約"の意味も知らない馬鹿ハケーン
>>379
こいつニセモノ。
言葉尻を捕らえて揚げ足取るのは

  夜  だ  か  ら  で  す  か  ?
>>375
「仲間ハズレ一人!」
とか言った本人が仲間ハズレだったという罠ですか?
383デフォルトの名無しさん:02/10/27 04:23
>>381
必死だな。
言葉尻を捕らえて揚げ足取るのは

  C  だ  か  ら  で  す
ちなみにCの仕様です。
以降

  独 り 言 解 禁
>>368 の状況で、char -> int の型変換が起きる余地があるのか?
>>382
う。
もしかして仲間はずれかな?
仲間はずれでもいいけど、>>368が仕様だっていってるなら、
根拠を示して欲しいね。
>>387
だからCの仕様だっつってるだろ
以降

  「 以 降 」 禁 止
どうでもいいけど誰か結論書いてよ。
>>391
何に対する結論?
>>387
うちの gcc では起きました
>>388
つーかまず仕様書読め
395デフォルトの名無しさん:02/10/27 04:26
宣言しなかったらcharがintになっちゃうんだってさ。
処理系異存です。
うぉ!
やべ・・・接続時間が2時間すぎた。電話代が・・・
>>387
変換が起きるといってる人は、winでcharがスタックに積まれるときに
4バイト使われるのを「変換される」「Cの仕様」と言ってました。
アホです。
つーか何の話してんの?
異存はありません
>>399
C言語にきまってんだろ
>>359 に照らし合わせると、>>45 は正しいな。
__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
>>398
だから Linux 上の gcc でもなったんだってば
>>398
つーか「4バイト」なんてキミ以外一言も出てきてませんが。
>>402
正しい?
コンパイルエラーになりますが。
結論:キャストは仕様。
>>401
C言語のなんについての話?
>>404
やっぱりアホだ。
結論:

  s t r c h r ( )  は  ク  ソ

という事でよろしいか?
>>408
俺のムスコについて。
結論:キャストは仕様で使用
>>408
strchrの第二引数はcharにキャストする必要があるかないか。
そろそろ

  厨  房  が  暴  れ  そ  う  で  す
void hoge(char);
で、引数がintにキャストなんてされません。
>>409
アホは

  お  ま  え  一  人

>>413
だから、>>359 に従うとすればキャストする必要があるだろう。
結論:キャッスルランドは閉鎖。
>>415
それは

     415  の  希  望
>>416
どう考えても、アホはお前だよ?
>>417
話題は何かと聞かれたからそう答えただけだけど・・・
>>415
だから実際されたんだってば
>>415
>void hoge(char);
型はcharだけど、intの大きさで渡されるよ。
>>419
だから根拠しめしてよ。
規格のどこに書いてあるの?
とにかく仕様でそう決まっているからキャストする必要があるんだよな。
書いていなければしてもしなくてもかまわないと。
>>423
どれは規格じゃないよ。
>>424
仕様書全部読んでから出直して来い
早口言葉:キカクキキカイカイ
どれ?
>>423
規格と実装の区別がついてない…
>>423
なら型変換してないじゃん。単にsize(int)バイト分スタックを消費するというだけで。
>>168やったら、同じになった。
>>431
関数の中の演算はintだよ
>>427
どこにも書いてません。と。
>>413
strchrの第二引数ってintだろ。char渡したらintにキャストされるだろ。それだけの話か?
話がずれてずれてずれまくり
>>435
違う違う。
strchrを実装するさいに、intで渡されたものをcharにキャストする必要があるかないか。
徹マンみたいだな
今日のこのスレは楽しいな。

漏れは寝てたんだが、何かに突き動かされるようにして 2 時頃目を覚まし、
PC の電源を入れて 2 ちゃんを覗いてしまったんだが、思えばこのスレが
呼んでたんだろうな。

・・・オェー
1日で300以上もレスがつくのか。
こえーなあ。
>>437
だからキャスト必要だってば。
void hoge(char);
↑で、引数がintにキャストされるなんて言ってるのはアホです。
>>439
類は友を呼ぶ、ですね(w
>>441
話題について聞かれたからそう答えただけと何回言えば分かるんだよ(;_;)
>>442
実際されるんだからしかたないでしょ
>>437
あんたは >>359>>402>>425 を読め。
>>446
死ね
>>442
多分見解の違い
微妙に話しがズレてる
>>445
されてないよ。
strchrだけで、400レス以上も消費したのか・・・
>>445
それは「キャスト」とは言わない。
>>437
キャストすると決まっていればして
キャストしないと決まっていればしないで
なんも決まってなければてきとーにすればいいだけじゃないのか?
あとは規格を見るだけだろ?
>>452
嫌がらせですか?それとも単なる煽り?
>>445
スタックに渡されるのはint(レジスタの大きさ)だけど、
値はcharとして扱ってるはず。
アセンブラに直すと、上位ビットを切り捨てる処理がどっかに入ってるよ。
キャストと暗黙の型変換を混同してるヤシがいるな
>>447
オマエガナー
457453:02/10/27 04:43
>>452
もしかして、話題について聞いた人?
ならごめん。
スタックに char が int の大きさで積まれるのは
キャストとも暗黙の型変換とも言わん
>>454
ずっとその話をしてるんだけど、なかなか納得してくれない。
460453:02/10/27 04:44
>>456
文脈を判断できないお前が死ね
>>451
int にキャストする時と同じアセンブリコードが生成されるんだけどなぁ......
>>461
それは最適化で省かれたんじゃないの?
どういうコードでテストした?
結局動くけど、仕様でそうなってるからキャストは必要って理解でいい?
>>463
だからキャストは必要だって言ってるだろ
>>457
うん。そうそう。話題について聞いた人。
なんの話してんのよーわからんなぁー。
>>463
そう。

動く動かないはどうでもよいこと。仕様で決まっているからそうせざるをえない。
なぜと問うてはいけないのだ。
>>463
どれの話?
仕様で決まっているから

       し よ う が な い な ぁ 
くどい

       し よ う が な い な ぁ  禁 止

>>462
こういうコードです
char foo(char c) {return c + (char)1;}
int bar(int d) {char c = (char)d; int i; c = foo(c); i = (int)c; return i; }
>>463
> 結局動くけど、
45のコードだと、c=(char)c;がないと挙動が変化する。
(仕様どおりに動かない)
>>470
そのコードじゃ駄目だ。省かれてそう。
所々の(char)のキャストも無意味。
>>471
仕様は動きについてはどう定義しているの?
えー。結論。



        ば か ば っ か   b y ル リ

>>470
でも、fooの戻値の処理で、切り捨てはされてると思う。
>>474
ルリって誰だ?


     ル    リ   っ  て   誰    だ   !


お前か?
>>473
>>359に出てるよ。
>>467
463は>>45のcharキャストの話
アニオタウザイ


   ア   ニ   オ    タ    ウ   ザ   イ
こんな遅くに一体何人参加しているのだろうか?

番号! 1
strchr程度なら仕様書にこう書けとサンプルコードを示してくれればいいのに。
変数名も同じにしないと仕様書違反と。
>>480
もう朝ですが......
>>481
P.J.プラウガーの本でも読め
文字リテラルってCではintですよね。
8ビットコードは-128〜127なんですか?
>>483
プ
なんだそのだせー名前は。
>>484
いったいなんの話をしてるんだ?
>>484
intじゃなくてchar型の文字列。
>>484
文字コードはマイナスにならないよ。
>>484
処理系依存
490487:02/10/27 04:55
s/文字列/配列/
492487:02/10/27 04:56
文字リテラルか。
文字列リテラルと読み間違えた。スマソ
アニオタッテダレダ?

   ア   ニ   オ    タ    ッ    テ    オ    レ    ダ    !
>>488-489
どっちでしょう?ってか489なのかな。
>>488
printf("%d\n", 'ア'); を実行してから言え。
>>495
そう、それでやったらマイナスだった
こうまで話がこじれる原因は、VB厨か?


    V   B   厨   が   い   る   の   か   ?
>>470 をコンパイルしてできるコード(foo の部分だけ)です(gcc on Linux)
pushl %ebp
movl %esp,%ebp
subl $8,%esp
addl $-12,%esp
movsbl 8(%ebp),%eax
pushl %eax
call foo
movsbl %al,%eax
leave
ret
ここの movsbl ってのか char -> int 変換だと思うんですが、違います?
>>495
それはprintf内でsigned intとして扱っているだけ。%uにすればマイナスにはならないし。
500デフォルトの名無しさん:02/10/27 04:59
>>494
文字リテラルの範囲は0〜UCHAR_MAX
>>494
charの大きさは8bit以上としか規定されていないので、
処理系に依存する。

さらに、charがsignedかどうかも規定されていないし、
したがって1の補数か2の補数表現をとるかも規定されていない。
>>498 は s/foo/bar/ です
503デフォルトの名無しさん:02/10/27 04:59
>>498
だから、それをキャストとは言わない。
>>503
なんでよ〜。ぷぅ〜。
500突破!
>>498
ボケ。
それは 8bit → 32bit 変換であって、C の char → int 変換ではない。
第一、C の仕様の話をしているのに何でアセンブリコードが出てくるんだ?
皆なにげに起きてるなあ
>>500
charはunsigned charとは限らないだろ
>>506
なんで?
char c; int i;

i = (int) c;
するときと同じコードが引数渡す前にも出てるじゃん
int c = 'ア';
printf("%d",c);
ってやったらマイナスですた
>>510
それは何の確認にもならないってば(^^;;
512デフォルトの名無しさん:02/10/27 05:03
>>504
たまたま君が調べた処理系がそうなってたってだけで、
Cの仕様とは関係ない。
>>499
じゃあ printf("%08X\n", 'ア'); にしとけ。
あんたの言う事が正しければ 000000B1 になるはずだ。
>(^^;;
2chで見るとなんかむかつく!
%dは影響ないでしょ
516デフォルトの名無しさん:02/10/27 05:04
>>508
文字リテラルが0〜UCHAR_MAXというのはANSIで決まってるんで。
>>514
ゴメソ(^^;;
>>499はアホ。
>>509
キャストとはどうゆうことか口に出していってみろ
ANSI非準拠だったってことですかね
>>516
うるせーバカ。
>>509
だから、何で実際に吐き出されるコードの話をするんだ?
>>519
口に出していってみますた
"文字コード"はマイナスにはならないでしょ(笑)
>>524
うるせーバカ。
>>522
いや......変換されるなんて言ってるやつはアホとか言ってた人がいたから実例を出したまでなんですが......
527デフォルトの名無しさん:02/10/27 05:06
>>516は勘違いだった。ごめん。
ガーン
(^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;
 (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;
  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;
   (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;
    (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;  (^^;;
if('ア' < 0) puts("minus"); else puts("0 or plus");
>>530
その比較は処理系依存(リテラルcharの符号依存)
>>530
甘い。
puts('ア'<0?"minus":"0 or plus");
>>532
七行スレにカエレ
534530:02/10/27 05:10
532 は何を争ってる (笑)
535532:02/10/27 05:11
>>534
コードの見づらさかな、とおもって(w
>>530
minusでした、always trueだそうです。

書いてなかったけど、環境はbcc32.exeです。
文字リテラルがマイナスになることはあっても、(少なくとも現存する)文字コードがマイナスになることはない。
違う?
>>530
うちでも minus (gcc on Linux) でした。
>>537
文字コードの解釈次第。
>>536
デフォルトの char が unsigned char か singed char か、
っつー話じゃなくて?
>>540
それは処理系依存でしょ?
きっと問題はcharのビット数だろう
charは無関係では?
unsignedの実装によるかもしれない
文字リテラルは文字コードをcharに型変換したうえ更にintに型変換したものと考えていい?
謎はすべて解けた!

犯人は
きっと問題はcharの読み方だろう。
キャー
'ア'<0 ってintに格上げされるんだっけ?
>>547
私がチャーと読んでいた犯人です。
おさわがせしてしまって申し訳ありませんでした。
でもアリバイがあるから犯行は不可能なはず・・・
>>549
文字リテラルはint型。
sizeof('ア')ってやってみればわかる。
チャー:天才ギタリスト
キャー:叫び声
シャー:char
まぁcでchar c = 'ア';なんて書く奴は普通いない訳だが。
>>554
その場合はwchar_tだな
ちゃる
それはこのトリックで説明が出来る
じっcharの名にかけて!
guest guest
>>532
甘い
puts(&"0 or plus\0minus" [('ア'< 0)*10]);
でも長くなった・・・
おまえら、もうネタないんだろ?
562532:02/10/27 05:24
>>560
読みづらさにおいて負けました。
すごいですね
すごいですね(^^;;
結局、void hoge(char ...
で char -> int 変換されるってのは仕様ではないんですか?
ちょっと縮んだ
puts("0 or plus\0minus"+('ア'< 0)*10);
ここはすごいインターネットですね
568デフォルトの名無しさん:02/10/27 05:26
寝るね。
お(^о^〃)や(^О^〃)しゅ(^。^〃)みぃ(^-^〃)♪
>>568
カワイイ!
>>565
仕様です。
バイナラ
ラナイバ
>>565
もうそんなことはどうでもいいんだよ!!
573デフォルトの名無しさん:02/10/27 05:28
おはよう!
謎はすべて迷宮入りになった
おっはー
>>570
仕様なのか。じゃあ仕様じゃないって言ってた人はみんなアホだったのね。分かった。寝る
さて、仕事するか
ちなみに「変換」って、キャストのことではないよ
>>577
いまから仕事かよ!
つーか、

  今 日 は 休 日 じ ゃ な い の か ? 

>>576
おいっちょっと待て逃げるきか。
>>578
???
intというか、intと同じサイズのメモリに。じゃないの。
そのメモリから関数側はcharで受けるだけでしょ。
>>579
ヒッキーが働いているふりをするとそうなります。
>>579
国王に休日はありません
これから寝るという、

  大  仕  事  が  控  え  て  ま  す

が何か。
で、charはintなの?
>>586
(゚Д゚)ハァ?ネロ!
飯食おう
>>586
仕様です。
>>552
gcc だと
#include <stdio.h>
int main( int argc, char** argv ){
 printf( "%d\n", sizeof( 'a' ) );
 printf( "%d\n", sizeof( int ) );
}
で出力は
1
4
だったわけですが… これは?
>>590
それは C++ だゴルァ
>>590
こちらでは
4
4
でしたか何か?
ちっ、静まったか。
>>590
ちょっと待て。mainの型省略してコンパイル通るか?
#include <stdio.h>
main(){
 printf( "%d\n", sizeof( 'a' ) );
 printf( "%d\n", sizeof( int ) );
}
595594:02/10/27 05:40
>>594
通る場合もある。
その場合は void とみなされ、ANSI 非準拠。
>>594
全角スペースのせいでコンパイルが通らない罠
598594:02/10/27 05:42
あ、通るや。スマソ
>>590
でも、それはC++だから。
>>591
あ、つい… cppでやっちった。
590 が、C なんか使う気は全くないと白状しました。
>>596
Cならint、C++ならvoidだ
602デフォルトの名無しさん:02/10/27 06:04
int mainなのに戻り値も無しか…。(プ
>>602
C++ならなくてもええからなぁ。
なんでそんなに細かい違いが有るんですか?
#include <stdio.h>
int main( int argc, char** argv ){
 printf( "%d\n", (unsigned char)( 'a' ) );
 printf( "%d\n", (signed char)( 'a' ) );
 return 0;
}
97
97

お前等一晩でいくつレス作ってるんだ!
1日経ってないぞ!
8 頭身スレを超えろ!
CとC++は別物
うお、すげー!!

寝てる間にこんな祭りがあったとは。
しかし確かに話の質がやけに低いな、最近。
しかもなぜかC99の規格まで持ち出してるわ。
ところで >>605のコードは一体何が言いたいんだろう?
('a')
あんまりほいほい答るから低レベル化するのかね。とりあえず609にはレベルの高い話とやらをしてもらいたい。
#include <stdio.h>
int main( int argc, char** argv ){
 printf( "%d\n", (unsigned char)( 'ア' ) );
 printf( "%d\n", (signed char)( 'ア' ) );
 return 0;
}
117
-79

605 も何かとぼけてるな。
ああ
日本の将来が危ぶまれ
>>612
おいおい、少数派の正論者が初心者共に厨呼ばわり
されるような場所で、レベルの高い話とやらをしても
馬の耳に念仏だろが。

つーか、煽る暇があるだったら、誰も指摘しない>>180
間違いでも教えてやれ。
別にどこもおかしくないが。
>>615
漏れは 612 じゃないが・・・。
・・・。
まさか変数名が間違ってるって事じゃないよな?
そんなコンパイルすれば誰もが気付くような間違いを指摘するような
重箱の隅つつきをしてる訳じゃないよな?
そんな情けない事しないよな?

ついでに訊くと、615 は 609 じゃないよな?
煽られたりしてないよな?
明日できることは今日しないし明日もしない
>>615
> 暇があるだったら

プ
>>615
煽り返す暇があるだったら、誰も指摘しない>>180
間違いでも教えてやれ。
>>1
> みんな大好きなんです。このシリーズの速さがそれを物語っています。

ワラタ
おう大好きだよ
622620:02/10/27 12:06
かぶった (;´Д`)
623615=609:02/10/27 13:11
>>616
ん?それだけ?
それよりコードの肝心な誤りの方を指摘してやればいいのに。

>>617
スペルミスならアホでも気付くというか、
いちいち指摘するようなことじゃないわな。
それとも、ここには入力ミスを指摘して喜ぶ
ようなカスでもいるんかいな?

> ついでに訊くと、615 は 609 じゃないよな?
> 煽られたりしてないよな?
よくわからんが、レスを付ける=煽られる
というのなら、煽られてるわけだが。
>>623
ごちゃごちゃ言わずにコンパイルしてみな。
625objective_c--:02/10/27 13:21
typedef struct objective_c
{
  long private_state; // 関数のアドレス
  
  char *public;
  long other;
}
さぁ面白くなってまいりました。
>>625
何が言いたい。
628デフォルトの名無しさん:02/10/27 13:23
>>624
はいはい。してみたよ。で、何か?
>627
C最強(...少しデクリメント)
もともと煽られている色は濃かったが、623 は特濃だな。

>>628
で、どうだった?
strchr() の機能として問題になる動作は出た?
動作テストは当然したんだよね?
まさかコンパイルだけして後は何もしていないなんて間抜けな事はしてないよね?
もちろん変数名の誤りは直した上でコンパイルしたんだよね?
コンパイル通らなかったなんてケチはつけないよね?
631デフォルトの名無しさん:02/10/27 13:37
gccって英語のサイトばっかで、どうしたらいいかわかんないですけど・・・
とりあえず、cygwinはインストールしたんですが
コマンドプロンプトみたいなわけわからんものがあるだけで、
コンパイルとか出来ないです
どうしてらいいんですか?
>>625
関数ポインタの格納に long って・・・。
型が分からないとしても、せめて void *private_state; だろうに・・・。
>>631
「gcc フロントエンド」 でぐぐってくれ。
>>632
確かに...

> 関数ポインタの格納に long って・・・。

VB 厨かも知れんな。
>>631
ウィソ厨はおとなしく bcc でも使ってたらどうかと
628 必死でコンパイル/テスト中
>>628
脳内バグは取れましたか?
あ、終わりですか?
終わりというか焉わり
628 の
>>628 はにげだした!
脳内バグは解決? よかったよかった (・∀・)
>>628 は昼食を摂っている、とか
>>642
いや、>>616-617 から 1 時間以上経ってるから、それは無いだろう。
>>628 の脳内
-------------
Segmentation error (core dumped)
-------------
しかしまあ、あれだな。
脳内バグか本当にバグがあるかは関係無く、問題があるなら普通それを素直に
指摘するよな。
という事は、つもりがあるかは別として 628 は煽りだったわけだ。
漏れらも煽られたわけだな、くそう。
ファイルの同期を取るプログラムを作りたいんですが
ファイルのサイズや更新日時の情報を得るにはどうすれば良いのでしょう?
すみませんが、教えてもらえないでしょうか?
>>646
OSはなんですか?
648デフォルトの名無しさん:02/10/27 14:06
fstat
649464:02/10/27 14:08
とりあえずunix(solalis)でやっています。
それができたらwindowsのdosでやってみようかなと。
うーん、stat 系は環境依存なんだが・・・この際仕方ないか。
模範回答は 647 だな。
651650:02/10/27 14:14
652464:02/10/27 14:17
>>651
ありがとうございます。
あとはがんばってネットで調べてみます。
653650:02/10/27 14:19
いや、すまん、651 は 646 を解決する情報ではないのだが・・・。 
654623:02/10/27 14:24
はあ、なんか煽られてるよ俺。
>>630
回答はすべてYes。
というか、ソースに間違いがあるんだから当たり前だわな。

んで、そういうあんたも動作テストは当然したんだよね?
で、どうだった?
strchr() の機能として問題になる動作は出なかったの?

というか、暇つぶしのネタに乗ってきてくれたのは
うれしいが、低レベルな問題をこれ以上引っ張るのも
アホらしいので答えを教えてあげましょうか?

>>645
> という事は、つもりがあるかは別として 628 は煽りだったわけだ。
煽ってきた612に対してネタを振ったつもりだったんだがな。
こういうのを「たくさん釣れた」っていうのかな?
655デフォルトの名無しさん:02/10/27 14:29
/* フィボナッチ数列を求める */
int fibonacci(int n)
{

if(n==1||n==2)
return(1);

else
return(fibonacci(n-1)+fibonacci(n-2));
}

これを再帰を使わずに書くとどうなる?
>>655
なんか、さんざん出た気がするなぁ
int fibonacci( int n ) {
int a = 1, b = 0;
while ( n-- > 0 ) {
int t = a;
a += b;
b = t;
}
return b;
}
657デフォルトの名無しさん:02/10/27 14:32
>>655
n=3からループさせる。
for(i=0;i<n;i++){a=b+c;b=a;c=b}
659656:02/10/27 14:35
しまったボケなきゃいけなかったのか
int fibonacci( int n ) {
switch ( n ) {
case 1: return 1;
case 2: return 1;
case 3: return 2;
case 4: return 3;
case 5: return 5;
.....
}
return 0
}
>>654
ぜひ答えを教えてくれ。
正直、漏れはあんたが何をいけないと思っているかさっぱりわからん。
お手上げだ。
昨日も >>654 みたいなヤシがいるから祭りになったんだよな

てか、同一人物?
>>654
お帰り。ぜひ回答おねがいします。
654の行動予想。
>>660 >>662などを馬鹿にします。もちろん答えは書きません。
>>660 >>662
そんな言い方ではダメだ!
「おながいします」 と言え!!
おなにーしてきていいですか?
666660:02/10/27 14:42
おながいします。
667660:02/10/27 14:43
>>665
済まないが、654 が回答するまで待っててくれ。
もっとお母さんみたいに言ってくれ。
>>654 の脳内でメモリアクセス違反が発生しました
ただいま再起動中です......しばらくお待ち下さい
670660:02/10/27 14:47
>>668
言いますた。
敗者の弁マダー? >>654
おなにー終わったんですが、ここは進展ないですね
c言語でオブジェクト指向。
674623:02/10/27 14:53
やー何か盛り上がってるね、チミたち。
俺は昨日の祭りの時はいなかったんだよね。

んで、正解は...
180のコードでは第2引数に '\0' が渡された時に
NULLを返してしまう。
strchrでは '\0' も文字列の一部として
その文字位置(ポインタ)を返しましょう。

>>663
お前の予想は外れちゃったね。この馬鹿。
ん?ピタリとレスが止んだなw
グゥ。。。
>>674
ああなるほど、そういう事か。
ありがとう、全然気付かなかった。


・・・とは素直に言えないな。
気付いたなら 615 の時点でも言えたはずだ。
なぜ煽るような事をした?
678663:02/10/27 15:06
>>674
漏れのカキコのおかげで未来が変わったんだよ(w
>>674
やっとわかた。ありがとう。

>>678
その可能性もあるね。
>>674
性格ワル。キモ
>>674
俺は今来たから素直にありがとう
>>673
構造体と対応関数を書けばいくらでもできるだろう。
683623:02/10/27 15:14
>>677
上で書いたように、元々は煽ってきた>>612に対する
ネタ振りのつもりだったんだが、それが
なぜか>>617の書き込みを筆頭に煽られまくっちゃったんだわ。

本当に気分を害した人がいれば謝るよ。ごめんね。

>>663
ワロタ。実はそうだったりしてな。
684677:02/10/27 15:21
>>683
そうだな、確かに 612 は煽りだ。
だが、客観的に見返してみろ、>>615 も立派な煽りだぞ。
それに、煽るつもりが全く無かったのなら >>645 の時点で反省があったはずだが
「こういうのを「たくさん釣れた」っていうのかな?」 ってちょっと調子に乗ってたな。
そこは気に食わなかった。
でも、ちゃんと詫びも入ったし、ケンカ両成敗と言う事で。

・・・C では負けたがナー。
そう、負け惜しみだが、普通 '\0' を探す場合は strlen() を使うから、
全然気がつかなかった。
685684:02/10/27 15:26
そうか、ちゃんと初期化されている文字列なら strchr('\0') が NULL を返す事が
無いから、sprintf(strchr(str, '\0'), "%d", hoge); とかできるわけだ。
今までずっと sprintf(&str[strlen(str)], "%d", hoge); ってやってたよ。
テストの重要性を思い知らされるな。
まだバグがあるかもしれんな。
687デフォルトの名無しさん:02/10/27 15:56
各種ヘッダファイルに対応する関数の説明一覧とかがあるサイトあったら教えて下さい
ぐぐれば見つかるんじゃない?
>>687 www.microsoft.com
690デフォルトの名無しさん:02/10/27 17:14
time(null)

コレの戻り値って何ですか?
>>690
リファレンスやヘルプや参考書が手元に無いの?
さらに、Web で検索はできない?

戻り値は現在の日時で、万国標準時 (UCT) の 1970 年 1 月 1 日の 00:00:00
からの経過時間を秒単位で表した数値。
型は time_t で、実装は処理系依存。
692デフォルトの名無しさん:02/10/27 17:28
strchrって\0も検索対象にいれるのか?
694デフォルトの名無しさん:02/10/27 17:32
>>693
わけわからん。
書いていないから\0も含むってのか?
MAX_PATHはヌル文字を含めた長さですか?
夜中の論争は書籍「エキスパートCプログラミング」の52ページに関するものでしょうか・・・
>>695
ヌル文字を含めた長さであって
ヌル文字を含まない長さである。

って話をどっかで読んだ覚えがある。詳しくは規格書読め下さい。
>>696
持ってないから引用してくれると嬉しいです。
お願いします。
>>694
英語が読めないのか ?

"The terminating null character is considered to be part of the string."

ぐらい訳せよ。
K&R第2版では240ページ?
701デフォルトの名無しさん:02/10/27 17:52
>>699
読めますけど。
702デフォルトの名無しさん:02/10/27 17:53
ANSIとISOの規格って同じもの?
703698:02/10/27 17:54
>>696
>>700に教えてもらったK&Rの方見てみます。お二方どうもありがとう。
>>697
じゃあMAX_PATH+1としておけば間違いないということ?
>>704
そこらへんは環境依存
706デフォルトの名無しさん:02/10/27 18:00
>>359

C99の仕様書の原文なんて持ってこられても困るんですが。
1989年のANSIの企画書の原文を引用してください。
>>701
じぁあ、その訳書いてみ。
情報を小出しにするからCスレはすぐ延びるんだろうな
自信がないから一気に出せないんだよ。
基本的に他人に意見を聞いてからだもん。
>>706
何を今さらって感じだけど、人にものを頼むのにずいぶん偉そうな態度の奴だな。
お前が金出して買えよと言いたくなる。
711デフォルトの名無しさん:02/10/27 18:11
”終端塗る文字は文字列の一部と考えられる”
charが式中でintに変換されるのは本当だったんだね…
>>711
で、理解できた ? > >>692
Cスレ最速記録達成・・・か・・・
715デフォルトの名無しさん:02/10/27 18:27
おお、目を離した隙にまた沸いてるよ。
このスレは 24 時間フル稼動か・・・。

ところで、C99 は C じゃないってつっぱねるのはどうよ?
716デフォルトの名無しさん:02/10/27 18:40
アルファブレンディングとかスプライトを使っているのはゲームプログラマくらいな
ものなんでしょうか?
丸一日で700レスか、、、
>>716
ああ、普通そんな事する必要無いからな。
時々、デスクトップアクセサリを作ってる人がやるくらいだ。
ところでスレ違いだが大丈夫か?
>40 :デフォルトの名無しさん :02/10/26 22:07
>strchr()の中身みたいんですけど、どこに書いてありますか?なんでもおk

すべてはここから始まった・・・
40居るか?でてこーい!
720デフォルトの名無しさん:02/10/27 19:04
>>717
なんだかんだ言ってCはデファクトスタンダードだね
おれが有意義な日曜の休日をすごしてる間もおまえらは、
strchrについて、不毛な議論をしてたですか。
722デフォルトの名無しさん:02/10/27 19:25
改行コードで始まる行を出力しない簡単なやつをつくってみたんですが
ちゃんと改行されてしまいます
どこがおかしいのでしょうか

#include<stdio.h>
int main(int argc,char **argv)
{
char line[BUFSIZ];
FILE* fp;
if((fp=fopen(argv[1],"r"))!=NULL){
while(fgets(line,BUFSIZ,fp)!=NULL){
if(line[0]=='\n')
continue;
printf("%s",line);
}
}else exit(1);
return 0;
}
723デフォルトの名無しさん:02/10/27 19:27
>>722
とりあえず '\r' もとってみたら
>>722
ん?動かしてみたけどちゃんと動いたぞ?
>>722
改行コードで始まると思ってる行が、'\t\n' とか ' \n' とかなってないか ?
>>710
別に頼んでいるわけじゃないんだが・・・
C99を標準だなんて言わないでほしいってこと。
>>722
きっと改行だけしたつもりが、スペースやタブがはいってしまったんでしょ。
>>722
漏れのところも動いた。
テストデータのテキストの方に問題ありそう。

>>726
何を言っているんだ?
C99 も 1 つの標準だろう?
>>728
文書のうえだけでの標準・・・
>>722
スペースやタブが入っていても大丈夫にしてみたぞ。

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

int main(int argc,char **argv)
{
char line[BUFSIZ];
FILE* fp;

if ((fp = fopen(argv[1],"r")) != NULL) {
while (fgets(line, BUFSIZ, fp) != NULL) {
int i = 0;
while (line[i] == ' ' || line[i] == '\t') i++;
if(line[i] == '\n')
continue;
printf("%s", line);
}
} else exit(1);
return 0;
}
>>730
isspaceじゃだめ?
>>731
isspace()では、'\r'や'\n'も飛ばしてしまうよ。
>>722
windowsでデフォルトがバイナリモードにになってるとか
>>732
それで問題ないでしょ?

・・・・あれ?なんか勘違いしているかも、、
isspace()を使って書き換えてみた。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(int argc, char **argv)
{
char line[BUFSIZ];
FILE *fp;

if ((fp = fopen(argv[1],"r")) != NULL) {
while (fgets(line, BUFSIZ, fp) != NULL) {
int i = 0;
while (isspace(line[i])) i++;
if (line[i] == '\0')
continue;
printf("%s", line);
}
} else exit(1);
return 0;
}
どうでもいいけど
printf("%s", line);
ってヤメてくんねぇかな
>>736
fputsをstdoutに使うよりも素直じゃない。
俺ならそうするね。
738デフォルトの名無しさん:02/10/27 20:03
たとえば以下の部分が

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

int main(int argc,char **argv)
{
char line[BUFSIZ];
FILE* fp;

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
char line[BUFSIZ];
FILE* fp;
っていうふうになります?
なりません
なんでかな
ちなみにcygwin上です
関係ないか
739746:02/10/27 20:03
>>736
別にいいんじゃない?
fputs(line, stdout) と書けとでも?
大差ないし。
>>734
isspace()を使う場合は、最後に'\n'でなく'\0'と比較するように書き換える
必要がある。
ここはバカばっかですか?
printf(line);
でいいだろーが
742デフォルトの名無しさん:02/10/27 20:05
>>736
たとえばどんな風に書いたほうがすきですか?
参考のために教えてください
743739:02/10/27 20:05
未来から来てしまった・・・

>>738
何を訴えたいのか読み取れないような。
>>741
lineに%が含まれていたらどうするんだよ・・・・
フォーマット文字列には定数を与えるのが鉄則。
空行のあるなしのことでは?
>>741
ヴォケ。
テキストデータに % が入ってたらどーするんだ。
747743:02/10/27 20:07
>>745
ああ、了解。
738 はソースじゃなくてテキストデータなのね。
748デフォルトの名無しさん:02/10/27 20:10
>>741
>ここはバカばっかですか?
> printf(line);
> でいいだろーが

 当然ネタだろうが、つられておこう。
 line[]に"%s%d"とか入ってたらどうする。
749デフォルトの名無しさん:02/10/27 20:10
>>729
既にgccもDigital MarsもComeauもSGIのもSunのもhpのも、
全部とは言わないが相当程度サポートしてるけど?>C99
750デフォルトの名無しさん:02/10/27 20:10
printfは一般的にスタックの消費が激しいって本当ですか?
以前、スタックの消費を100KB以下に押さえた軽いprintfをつくろうというスレッドがあったと思うんですが。
>>750
printf()でスタックが100KBも消費するならLSI-Cとかどうするんだ?
>>749
規格のすべてをサポートしていないのでは、準拠しているとはいえないのでは?
電波ゆんゆん。
754デフォルトの名無しさん:02/10/27 20:14
>>751
でもそう書いてあったし・・・
100Bじゃなくて100KBだったはず。
755754:02/10/27 20:15
信じられないからきいているんですよ。
>>752
(゚Д゚)ハァ?
749 の何をどう解釈したらそんな言葉が出るんだ?
749 は全てのコンパイラがサポートしているわけではないと言っているが、
規格のすべてをサポートしていないとはこれっぽっちも言っとらん。
>>750 >>754 >755
printf() のソース見れ。
ソース無くて読めなくても、実際使って問題が出てないなら深く考えるな。
>>756
それならANSIの規格だってすべてのコンパイラがサポートしているとは限らないということになるけど?いい?
>>719
>>40はネタ帳を持っている。
760デフォルトの名無しさん:02/10/27 20:19
>>757
じゃあ深く考えないことにします。

(100KBなんて相当再帰処理を繰り返したりしなければ消費しないよな・・・)
つーかまあ、printf() の処理内容考えると、やっぱり 100 KB じゃなくて
100 Bytes だろう。
100 KB もあったら相当なコードとデータを詰めこめる。
762756:02/10/27 20:22
>>758
その上でこのスレは標準規格に則って動いてるんだろ。
何が問題?
>>762
どっちの標準にそって動いているの?
VC6 の printf() のソース、_output() ってソースの無いルーチン呼んでる
だけだから読んでも得るものねーYO・・・
次スレからは>>1にC99の話題は禁止とかいてほしい・・・
つか、DOSのCではprintfが呼び出せなくなるような。
>>763
さあ、人それぞれだろ。
でも、ANSI と ISO がこのスレでぶつかっているところを見たことが無い。
何が問題?
>>764
_output()のソースがどこかにあったと思うよ。
>>766
えっ・・・そりゃ一体どういう状況??
>>767

コンパイル時に大きさの決まらない配列とか・・・・
>764
ハァ?
じゃあoutput.cは何なんだよ?
ネタ帳に
  標準とは何を指すか
を追加
>769
スタック100KByte取るような関数はDOSアプリでは
使えない、というだけの話。
774デフォルトの名無しさん:02/10/27 20:29
>>735
fgets()のバッファのサイズにBUFSIZを使ってるのって変だよな。
>>773
>>716
一体どう言うロジックを組めばスタック 100 KB も取ると思うわけ?
それと、実際にDOSアプリで呼べなかった事あるの?
>>774
なんで?(^_^;)
777775:02/10/27 20:32
ああ、773 は、「だから printf() が 100 KB 食うわけない」 と言いたいのか。
>>775
もしも100KBもとるようならって話でしょ?
でも動くから100KBも消費していないと。
>>774
それほど変でもない。
困る事がありそうで、実際にはなかなか困らないよ。
780デフォルトの名無しさん:02/10/27 20:33
標準関数で100KBも消費するとしたら、再帰使ってかいたqsortくらいか?
多分実用的なライブラリは再帰なんか使っていないと思うけど。
>>780
前半には同意するが、後半には同意できないぞ。
qsort() は実用的ではないとでも言うのか?
782781:02/10/27 20:36
780 の意味を取り違えた。
逝ってきます・・・
>>781
実用的なqsortの実装は再帰を展開してあると思う。
784デフォルトの名無しさん:02/10/27 20:36
コードウォーリアーつかっとる者はおらぬか?
VC++より優れてる点を挙げてくれい、劣ってる点でもよいぞ
785デフォルトの名無しさん:02/10/27 20:37
>>781
違う違う。
勉強のためのqsortのサンプルコードなら再帰を使うだろうけど、glibcだとかVC++だとかの実用的なライブラリのqsortは再帰なんか使わないでかくだろうということ。
786デフォルトの名無しさん:02/10/27 20:38
>>776
たとえばCLOCKS_PER_SECとかCHAR_MAXなんかを、つかってたら変でしょ。
(別に間違いじゃないけどさ)
>>786
なんだ・・・マクロの命名の話か・・・
788デフォルトの名無しさん:02/10/27 20:40
>>787
命名の問題じゃないけど…
>>788
ぼやくだけにしないで、きちんと問題をはっきりとさせること。
そうそう、だから無駄にこのスレは長くなる。
>>741みたくはっきり言うと墓穴を掘るからなるべくあいまいにレスをつけるのがこのスレの常識
>>791
「このくらい自分で分かれよ」と思って教えないのですです。
>>741はいいと思うぞ
簡潔に終了したし
>>789
BUFSIZはsetvbufで使うための定数だから。

fgets(s,CLOCKS_PER_SEC,fp);
みたいに、標準ヘッダーに定義されてる定数を適当に使うのと同じ。
という話なんでしょ?
795741:02/10/27 20:56
人が飯食ってるあいだにバカ供がやけに祭り上げてくれちゃってますね(w











オレが間違ってた。ゴメソ
>>794
それなら命名の話だから>>787でいいんじゃ?
>>788が違うっていうから何の問題かというのが焦点に。
>>796
どあほう。
ぐぐったりリファレンス見たりして分かる情報ならそれでもいいが、
そういう問題じゃないんだろう?
そういうのを指摘してやらないのは嫌がらせか偽善のどちらかだ。

>>793
>>744
>>794
そうだったのか。
setvbufもBUFSIZなんてありきたりな名前を使うなよな。。
799797:02/10/27 21:00
ごめんよ 796。
漏れは 792 に言いたかった。
逝ってきます・・・。
>>797がなぜ>>796に切れてるのかがわからん。

そして>>793>>744を示してる意味もわからん。
>>744のようにすぐ間違いを指摘できたから「簡潔に終了」と言ってるのに。
>>791 が真理だな。
802797:02/10/27 21:03
>>800
漏れ・・・

   も う だ め ぽ
おいおいもう800越えかよ・・・
俺が今までひっかからなかったのはBUFSIZじゃなくてBUFSIZEにしていたからか(笑)
ん〜、やはり相手に「バカ」「アホ」と息巻いてレスをつけると墓穴を掘る方向に・・・
>>802
ワラタ
つーか今朝の c=(char)c; ってうやむやのまま終わったよね。
正直に白状すると、俺はまだよくわかりません。
>>807
蒸し返すな。
C99の規格がそうなっているからキャストが必要なの。
1989年のANSIはしらん。
>>807
結論出てるよ。やらなきゃダメ
蒸し返せ (・∀・)
811デフォルトの名無しさん:02/10/27 21:32
お、やるか

追いかけるのが大変だから、ゆっくりしゃべれ
ところで、strrchr はどうやって実装するのが普通なのかな〜?
test
void func_a(char a)
{
  ・・・
}

という関数があったとすると、引数aは関数の中でint型になっちゃうんですか?
816test&rlo;tets:02/10/27 21:37
tesst
>>815
???
どういう関数を書くときに
c = (char)c;
みたいなことをすればいいのかがわからない。
>>815
ならない。

呼び出し元からスタックへ char が渡されると一旦 int に変換される実装もある
ようだが、関数に突入した時に結局 char として扱われる。

char 変数の値はあくまで char 型として扱われる。
文字リテラルが int と評価される事とは全く関係無い。

引数の受け渡しがどうなっているかは普通は気にする必要は無い。
可変個引数を受け付ける場合は気にする必要がある場合もある。
>>818
だから、「規格通りの」 strchr()。
蒸し返すなって。
それとも >>810
>>818
int に入った文字コードと char を比較するとき
816 ここでテストするな
↓ に逝け
http://pc.2ch.net/test/read.cgi/prog/1035390611/l50
>>807
1990年のISOの規格の翻訳でもこうだね。ANSIの方は氏蘭が。

http://www.jisc.go.jp/ ( JIS X3010 )

> 形式
>  #include <string.h>
>  char *strchr(const char *s, int c);
> 機能
>  strchr関数は、sで指される文字列の中のc(char型に変換する。)の最後の出現を探す。
>  文字列の終端を示すナル文字は、もじれつの一部とみなす。
>>820
てことは規格通りのstrchr以外に書く機会は無いんだ?
ならよかった。
仮に仕様でなくても、
処理系によっては>>818がないとうまく動作しない。
という結論だったよね?
>>824
たいていは char 変数に代入する事で済ますな。
>>825
文字コードが7bit に収まる文字なら処理系関係無くOKじゃないの?
'ア'とかが処理系によっては問題になる
ごめん、>>818だけど、俺が聞きたいのはstrchrについてじゃなくて、
自分で(strchrとは関係ない)関数を書くときに c = (char)c; みたくキャストする場面が
わからないの。
>>821でいいの?
>>812
ログはある程度あんたを待っててくれるから、最新レスについて逝けなくても大丈夫だ。
発言したいなら別だがナー。
>>827
はい。
821 は 826 でいいと思われ
>>831
じゃあ、strchr は
char *strchr( const char *str, int c ) {
char ch = c;
......
みたいでもいいの?
>>813

↓と書いてみたけど、領域が連続していない場合もうまく動作するかわからない。
とりあえずcharにキャストして、第二引数に0を与えても大丈夫。

char *strrchr(const char *s,int c)
{
const char *endp=s;

s=s+strlen(s);
for(;s>=endp;s--)
if(*s==(char)c)
return (char *)s;

return NULL;
}
>>832
つーか、最初から char *strchr( const char *str, char c ); でいいと思う
んだよなー。
クソな仕様だ。
引数を int c ではなく最初から char c と宣言しちゃまずいんでしょうか・・・
>>833
strlen() で余計なコストがかかる罠
837834:02/10/27 21:56
かぶった (;´Д`)
>>833
なんか2度手間じゃない?
char *strchr( const char *str, int c ) {
char *last = NULL;
c = (char)c;
for ( ;*str; str++ ) if ( *str == c ) *last = *str;
if ( *str == c ) *last = *str;
return last;
}
>>838
おいおい大丈夫か ?
last 自体の値は、NULL のままだぞ。
840デフォルトの名無しさん:02/10/27 22:01
>>836
後ろから見てゆくのって駄目?
841838:02/10/27 22:02
>>839
すまない。ミスです
84221世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:07
それにしてもこのスレ早いね
何よりこの速さが世間でのCの需要を物語っている
役に立つとかそんなんより
知らなきゃ話にならんレベルなのか・・・

オレもやろ
843840:02/10/27 22:08
VC++でもやっぱり後ろから見ているよ?
それとも関数を呼ばないでwhile(*s++) ;とやれということ?
>>842 のようにして C 厨房が増えていくわけか
>>840
後ろを見つけるのに文字列全体を1回走査しないといけないからちょっと無駄かもしれない。
>>838 がやろうとしているように、走査している間に指定の文字が見つかったらその位置を覚えておくようにすれば、自然と最後の位置が残る。
846843:02/10/27 22:10
while(*++s);じゃないとだめか。
でも実際どっちがいいかは分からんよね
848843:02/10/27 22:12
>>845
ああそういうことね。
849デフォルトの名無しさん:02/10/27 22:12
strrchr()すら実装できないカスがいるスレはここですか?
>>845
strrchr("aabbccabaaabcbcabbbcca", 'a');
こんな感じだと後ろからやったほうが速い
>>849
ハァ?
>>851
>>849 は自分のことを言ってるんだよ
853C厨房:02/10/27 22:16
C超初心者ですが、質問は許されますか?
>>853
ここは本来そのためのスレだ (笑)
ただし、内容による。
855マチャアキ:02/10/27 22:18
チューボーdeathYO!
そういえばスレタイ、「聞きなさい」 じゃなくて 「訊きなさい」 だよな。
重箱の隅だけど。
>>856
>重箱の隅だけど。

これ付け足せば許されると思ってんのかゴルァ
>>857
あなたに許してもらおうと思ってないから大丈夫です。
859C厨房:02/10/27 22:21
「1月〜12月」の中で「3月」が一番大きく認識させるにはどうしたらいいですか?
>>859
もっと詳しく質問しないとわからないよー
何に認識させるの?
>>857
ウザいから死ね
回答があいまいじゃなくて質問があいまいという斬新な切り口
863846:02/10/27 22:25
おっと、空文字列だとだめじゃん。
やっぱりstrlenでいいね。
>>859
C言語の前に日本語(略
おまいら一体何歳なんだよ!くそっ!!
>>859
月の値を 3 〜 14 で持つ。
4月 5月 6月 7月 8月 9月 10月 11月 12月 1月 2月 3月
3   4  5   6  7   8   9   10   11   12  13  14
実際に月の数字が必要な場合は (m % 12) + 1 を取る。

つーかこれ C の質問じゃないし。
867866:02/10/27 22:26
ずれた Σ(゚д゚lll)ガーン
>>866
スゲー。あの質問でこの答えが出るか?フツー
869C厨房:02/10/27 22:28
>>866 どうも有難うございます!!
>>864>>862 すいません僕って馬鹿なんですよ。エヘ
870866:02/10/27 22:29
この方がいいか。

月の値は普通に 1 〜 12 で持つ。
月の比較の時に (m <= 3? m + 12; m) を取る。
871C厨房:02/10/27 22:30
>>870
あなたは「救世主(メシア)」です
ああ、これイヤかも。
最初に厨解を出しておいて、質問者が去ったら正解を出す、と。
すごい読解力だなあ。
俺いまだにわからんよ。
874866:02/10/27 22:31
>>868
何か直感でわかってしまった。
電波ゆんゆんなのかも。
ああ!!
一番大きくって配列に入れたときの添え字が一番大きいという意味か!!
きっと enum month{4月, 5月・・・・・12月, 1月, 2月, 3月};

すいません。英語で月を書く自信がありませんですた。
877870:02/10/27 22:36
文法エラーだたーよ・・・
(m <= 3? m + 12: m)
878C厨房:02/10/27 22:36
みなさんは、どれくらいでC言語はマスターなされたのですか?
>>878
マスターしていないんで未定です。
ヘイ、マスター!
>>878
お腹の中にいるとき。ママから教えてもらってたからさ。
前スレ 1000 取っちゃったもんね。
995 から連続だけどナー
883C厨房:02/10/27 22:40
>>881
いいママですね 僕のママは主婦なんで駄目です
でもここも 1000 取り合戦間近の気配・・・
>>882
お前、あのスレは良いとこだったのに何しやがんだ
88621世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:41
>>878
一ヶ月でかなり調子にのれるYO!
実際どうかはわからんけど。
あとCと平行してアルゴリズムの勉強したほうが(・∀・)イイ!
887870:02/10/27 22:41
漏れは独学。
ガッコも会社も教えてくれなかったし。
どうして、ム板のコテは神か糞虫かの2種類しかいませんか?
>>883
あんた何歳?
89021世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:44
はやくだれかスレ立てて!
寿命約30時間か・・・
日曜だからかな
うぉーCの話をスレー!Cをやってる人間の話なんかどーでもいいっつーのー!
>>891
漏れはC歴2年ちょいだ
893C厨房:02/10/27 22:46
>>886 今からアルゴリズム勉強します
>>887
僕も今1ヶ月目の独学です。でも詰まった時に聞ける人がいないので皆様のお力を
お借りしました。友達がいないわけじゃないですよ
俺はC未経験なんだよな・・・彼女もできたことないし・・・
895C厨房:02/10/27 22:47
>>891 すいませんもう去ります。有難うございました
896デフォルトの名無しさん:02/10/27 22:48
>>893
ガンガレ
897870:02/10/27 22:48
漏れも周りに訊ける人いなかったが、ついでにネット環境も無かった。
詰まったときは放置。
でもある日突然ひらめいて続行。
そんな感じ。
89821世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:48
>>894
AとBはしたんでつか?
Bで終わったんでつか?
>>898
クソムシ
>>898
彼女ができたことない=全部未経験です
>>900
雑談は他所でおながいします
>21世紀のあいんしゅたいん ◆rGsyzf.Kp2
新手の荒らしか?
90321世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:50
>>897
でもその方がいいかもね。
困ったら聞くのも手だけど、
頼りすぎたら自分のものにならんし。
聞いた後に「はいそうですか」じゃなくて
なんでそうなるか死ぬほど考えなきゃ

と、もう既に去った895に語るテスト
もっとこう殺伐と質問、殺伐と解答ってないのかしら
馴れ合ってんじゃないわよ
90521世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:52
彼女以外の女ともキスまではするべ
そんな事より、だれかオレの問題とけねーがーー

http://pc3.2ch.net/tech/index.html#10
>>905
あの・・・そのリンクは・・・・
90721世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:53
>>904
この微妙な付き合いが2Chっぽくない?
みんな無言で文字打ち合ってる姿がうける
>>902
Yes.
>>905
クソムシは(・∀・)キエロ!!
>>900
900ゲトとか言ってくれよ!欲しかったのに!
ははぁ〜ん。さてはおまえら900超えたからやる気なくなったな?
新スレへ体力を温存だな?

軟弱者!
>21世紀のあいんしゅたいん ◆rGsyzf.Kp2
雑談掲示板から最近2chに着たばかりだと思うに20M$。
>>911
エスパーハケーン
新ソバきぼんぬ
じゃあ俺は2000K&R。
>>909
ところで、クリムシってなんですか?
917デフォルトの名無しさん:02/10/27 23:00
Socket プログラミングについて質問があるんですが。
最初、WSAStartup 関数やって、socket 関数でソケットを取得すると思いますが、
既存のソケット(他のプログラムが作ったソケット)を取得したいんですがやりかたがよくわかりません。
開発環境は WinXP Prp. VC++6.0 です。よろしくお願いします。
API でそういうようのがあればいうことないです。(API なら VB で使える)
911は絶対にセイラさん。
>>916
おい・・・
>>917
俺と同じ開発環境だな
922デフォルトの名無しさん:02/10/27 23:01
less()とexch()を使うにはどうしたらいいんですか?
[栗蟲]クリムシ
昆虫類栗蟲科栗蟲目
主に栗を主食とする昆虫。害虫。
>>917
この糞バカ野郎!いくら900越えでやる気を失った俺らだからと言って
Cスレのプライドまで捨てたわけじゃねぇぞ!
VCスレもWin32APIスレもネットワークプログラミングスレもあるだろうが!
925デフォルトの名無しさん:02/10/27 23:04
うい
926916:02/10/27 23:04
>>923
これで今夜は熟睡できそうです。ありがとう
>>922
何の less() で何の exch() だよ・・・
928隊員NO. ◆rhAfp.iLoU :02/10/27 23:07
はーい!
みんな元気かい?
929隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:08
名前変えますタ
>>928-929
キエロ
932デフォルトの名無しさん:02/10/27 23:09
C言語で2つの値を交換するexch()というものだと思うんですが。
ちょっとよくわからないんで、すみません。
933隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:10
いやだ!質問しにきたんだ!
隊長!
コマンドライン引数でどんな時使うんでつか?
934隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:11
>>931
何!?
>>933
>21世紀のあいんしゅたいん ◆rGsyzf.Kp2
に答えてもらうといいですよ。彼は神だ。
937隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:14
>>936
だれ?
なんで神なの??
>>932
「C」 にそんな関数は定義されてないです。
普通に 2 値を交換するステートメントを書いてください。
tmp = a; a = b; b = tmp;

a ^= b ^= a ^= b; は例の如く・・・
>>937
本人に聞くヨロシ
940デフォルトの名無しさん:02/10/27 23:17
>>938
返信、ありがとうございます。
自分で作ってみます。
941隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:17
どこにいるんだあああ
21世紀のアインシュタイン!!!!
いないならいないと返事しろー!!!!
943デフォルトの名無しさん:02/10/27 23:19
あいーんしたいん。
アインシュタイン = 隊員 = アラシ に 1,000,000 ペソ
>>944
そういわれるとそんな気もしてくるから不思議だ。
まあ、あいんと隊員が何か会話すれば疑惑とかは問題ないでしょ。
さあ!お二方!!
コマンドライン引数(>>933参照)について存分に語りたまへ。
次スレの予感
947隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:27
アインシュタインこねーーー!!!
ていうか誰か教えてクレーーーー
眠れないーーーーー
があああああ
>>833
誰も指摘しないようだが、そのstrrchrの動作は禿しく未定義だぞ。
頑張れ。
>>933
プログラムの起動時にパラメータを与えてやる事によって、再コーディング/再コンパイル
無しに挙動を変えたい時に実装しる。
>>948
ホントだ。未定義キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
951948:02/10/27 23:31
いや、失礼。>>833はそれを承知の上のコードみたいだな。
じゃあ寝る。おやすみ。
95221世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 23:32
オレ=隊員キタ━(・∀・)━!
>>952
意味わかんない。
とりあえず、>>933にこたえてあげなよ。
とりあえず

  9 5 0 は 次 ス レ よ ろ し く

955隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:35
あいんしゅたいんキタ━━━━(゚∀゚)━━━━!
ねね、神なんでつか?
956950:02/10/27 23:35
>>954
ヤダ
957隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:35
オレが次スレ立てる!!!!
958950:02/10/27 23:36
>>957
頼んだ
30 時間足らずで次スレ移行か・・・ヽ(´ー`)ノ ヤレヤレ
新スレのスレタイが・・・
961隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:41
http://pc3.2ch.net/test/read.cgi/tech/1035729526/

NEWすれ立てますた

ただしまちがえますたが何か?
ごめんね、ごめんね・・・
やべー 5 の前に 4 取っちった
隊員がスレ立てしてる間アインシュタインがレスをしないのには
強い政治的意図を感じざるを得ない
>>1
ふんじゃ、削除依頼だしとけよ。
>>963
なかなか鋭いところに目をつけるな・・・
>>963
そういわれるとそんな気もしてくるから不思議だ。
まあ、あいんと隊員が何か会話すれば疑惑とかは問題ないでしょ。
さあ!お二方!!
コマンドライン引数(>>933参照)について存分に語りたまへ。
967隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:48
もうみんな移ろうよ!
せっかくオレがスレたてたのに!!
あいんしゅたいん全然答えてくれないし
n[(month-4+12)%12]
enum { april, may, june, july, august, september, october, november, december, january, february, march };
int main()
{
int i,p;
for( i=-130; i<130; i++ ){
p = (char)i;
if( i != p )
printf("%d %d\n", i, p);
}
}
----
-130 126
-129 127
128 -128
129 -127
void exch( void **a, void **b ) { void *tmp = *a; *a = *b; *b = tmp }
&を使わないようにシフトした感じか?
2日で1000レスですか。。
スゲ━━━━(゚∀゚)━━━━!!
まだ残ってますよ、ザーボンさん(以下略
今夜はさすがに落ち着いてるな。月曜だし。
さて、仕事するか(以下略
977デフォルトの名無しさん:02/10/28 01:30
log(X)の近似値をもとめるためにマクローリン展開したとき
x+(-1/2)x^2+1/3x^3+・・・+(-1/n)(-x)^n
となるのですが、これをホーナー法をつかって計算回数をへらして
プログラムしたいのですがどのようにプログラムをかけばいいのか
全然わかりません。どなたか教えていただけませんか。?
978デフォルトの名無しさん:02/10/28 01:38
ディスクファイルってなんですか?
高水準出力関数は、OSとの間にバッファを持ち、プログラムではこのバッファとの間で
データの入出力を行うイメージになります。このバッファはOSが管理し、自動的に
“ディスクファイル”とデータの入出力を行います。
という使われ方してんねんけど、ディスクファイルだけ意味わからん。
979デフォルトの名無しさん:02/10/28 01:39
>>977
それなんかの本で見たことあるぞ。自分で調べれば
奥村先生の本にあったようななかったような。
1000Get!
つーかせめて次スレに書け。
しかも age るな。
>>977
x+(-1/2)x^2+1/3x^3+・・・+(-1/n)(-x)^n
      ↓
x(1+x(-1/2+x(1/3+x(.....))))

しかも>>978はマルチ
>>977
プログラム的には次のものでOKだと思うが。テイラー展開間違って
ないか?値がおかしいぞ。

#include <stdio.h>
#include <math.h>

int main()
{
double x, y = 0.;
int i, n = 20;

printf("x = ");
scanf("%lf", &x);

for (i = n; i > 0; i--)
y = y * x + x / i * ((i % 2) ? 1 : -1);

printf("log(x) = %f, mylog(x) = %f\n", log(x), y);

return 0;
}
log(x)をテイラー展開したら、
x - 1/2!x + 1/3!x ..... + (-1/n!)(-x)^nにならないか?
記念パピコV(^o^)V
できた。log(1+x)のテイラー展開の間違いだったようだね。

x>>1だと精度が悪くて使い物にならないけど。

#include <stdio.h>
#include <math.h>

int main()
{
double x, y = 0.;
int i, n = 10;

printf("x = ");
scanf("%lf", &x);

for (i = n; i > 0; i--) {
y = y * x + x / i * ((i % 2) ? 1 : -1);
}

printf("log(1+x) = %f, mylog(x) = %f\n", log(1+x), y);

return 0;
}
>>977はマルチ。
http://pc3.2ch.net/test/read.cgi/tech/1029422194/l50
で漏れがレスしたのは無視か?

こんな展開式がlogなわけないだろ。氏ね。
おいおい、前回と違って今度は次スレよりこっちの方が雰囲気悪いぞ。
何か争点が昨晩と全く違ってて面白いな。
ここは本当にム板か?
991977:02/10/28 12:17
すいません まちがえました

log(X)の近似値をもとめるためにlog(x+1)マクローリン展開したとき
x+(-1/2)x^2+1/3x^3+・・・+(-1/n)(-x)^n
となるので
log(x)=log{(x-1)+1} より (x-1)+(-1/2)(x-1)^2+1/3(x-1)^3+・・・+(-1/n){-(x-1)}^n
これをホーナー法をつかって計算回数をへらして
プログラムしたいのですがどのようにプログラムをかけばいいのか
全然わかりません。どなたか教えていただけませんか。?
992977:02/10/28 12:19
>>988さん そのスレへの書きこみは僕ではありませんよ
993977:02/10/28 12:26
>>987さん ありがとうございます。
つまり
for (i = n; i > 0; i--) {
y = y * x + x / i * ((i % 2) ? 1 : -1);
}
この部分がホーナー法で計算回数を減らして計算しているプログラムということで
いいんですか?
994977:02/10/28 12:29
ここから計算回数をカウントすることもできますか?
そんな人に聞いてばっかだと何も身につかないよ。そもそも計算回数って既にここで聞く事では無い気がするが。
よっしゃ! 1000Get
記念パピコV(^o^)V
ふふふ
C
1000デフォルトの名無しさん:02/10/28 14:39
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。