1 :
デフォルトの名無しさん :
02/10/26 18:07
2 :
デフォルトの名無しさん :02/10/26 18:08
3 :
デフォルトの名無しさん :02/10/26 18:09
4 :
デフォルトの名無しさん :02/10/26 18:34
三分の二は関係ない書き込みで残りがくそみたいな質問。 だから回転がはやい。 しかも3すれごとに同じ質問が繰り返されている。
6 :
デフォルトの名無しさん :02/10/26 18:42
∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´∀`)/<先生! _ / / / \オススメのコンパイラーを教えてください。 \⊂ノ ̄ ̄ ̄ ̄\ \_____________ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄|| || || ̄ ̄ ̄ ̄ ̄|| .||
あなざーいぇっとこんぱいらこんぱいら
「水平回転」とはこうですか? a) ┏━┳━┓ . ┃←╂→┃ . ┗━┻━┛ それとも、こうですか? b) ┏━┓ . ┃↑┃ . ┣┿┫ . ┃↓┃ . ┗━┛ 「水平軸回転」は b) ですよね。
第2問. 「右回り」とはこうですか? a) /⌒ ( ↑ ヽ、__ノ それとも、こうですか? b) ⌒ヽ ↑ ) ヽ、__ノ
5-9 はやくも無駄にスレが使われました。ここまでで意味があるのはかろうじて 1-3 ぐらい。といってもリンクだけだけど。
12 :
デフォルトの名無しさん :02/10/26 19:11
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でも調べろ。
>>14 ヘッダーでも調べろ。FILEは構造体だ。
>>13 昔は void がなかったので(汎用ポインタには) void * の代わりに char *
を使ったらしいです。その名残ではないでしょうか?
線形リストが、まだわからない。
>>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
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
31 :
デフォルトの名無しさん :02/10/26 21:15
>28 左側はその文字列の先頭アドレスでいいよね。 右側は、デリミタを検索(連続はチェックしてね)してその次のアドレスでいいよね。
32 :
デフォルトの名無しさん :02/10/26 21:19
いいよねじゃなくて、、、ソース書いてくれると嬉しいのですが。
ソース
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])); とやったほうが速いように思うんですけど このコードは移植性がありますか?
>32 31で言った事だけで、もうソース書いたも同然だからあとは出来るはず。 ていうか、Cを学びたいのであれば、ぜひやってみて下さい。
>>32 それくらい自分でやってくれると嬉しいのですが。
つまり、あなた方はできないわけだ。
出来ません。
40 :
デフォルトの名無しさん :02/10/26 22:07
strchr()の中身みたいんですけど、どこに書いてありますか?なんでもおk
CRT
42 :
デフォルトの名無しさん :02/10/26 22:15
CRTってディスプレイのことじゃないですよね? いや、そうなんだろうけど、ここでの意味は?
China Raguby Team.
>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; }
47 :
デフォルトの名無しさん :02/10/26 22:23
>46 VCインスコしたディレクトリの中にCRTっていうとこ。 CRTのインスコはオプションだよ。
50 :
デフォルトの名無しさん :02/10/26 22:27
>>22 ほかのスレに書いたんですがレスないでつ。
>>45 > c = (char)c;
なんだコリャ ?
53 :
デフォルトの名無しさん :02/10/26 22:35
VC++なんて持っていません。昔手に入れたワレズのエンタープライズエディションくらいならありますが、使うとやばいので使えません。
60 :
デフォルトの名無しさん :02/10/26 22:45
YKKにも通報しますた
>>52 1ビット比較するのと4ビット比較するのはどっちが早いと思う?
ビット -> バイト
マスクしてるのか?
charは1バイトでしょ。 4ビットって?
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
67 :
デフォルトの名無しさん :02/10/26 23:29
なぜC++と比べてCの質問スレはこんなに盛況なのですか? 厨ばっかだからか?(プ
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なんて名前つけるの?
C=C*&FF; でいいだろ
c = c & 0xff って事か? でもそれじゃダメだな。符号拡張しなきゃ。
どうでもいいけど、Cなら C &= 0xff; みたいに書いて欲しい。
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バイトを切り取ってる。
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 を見れ。
アセンブリコードなどこの際関係ない。
下位型と上位型の演算は上位型にキャストされるという大原則を思い出せ。
・・・アセンブラコードって何だよ、アセンブルした時のエラーコードか?
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() の仕様に合致しない例を挙げよ。
>>75 意外と知られていないが、
'a'などの文字リテラルはCではint型。
>>107 cに0x111が入ってたら?
(つくづくわかってない奴だな…)
これ、最悪の場合意図しない文字の位置を返すんじゃない?
どうして char c = (char)i; じゃなくて i=(char)i; なんだろ。 int型に入れたらその後の比較でsizeof(int)単位で比較しなきゃいけなくなるでしょ? char,charの比較ならcmpblで1バイトの比較になる。
>>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 わかったから、はよかけよ。その「挙動」とやらを。
>>88 の単にビットを切り取っただけだと
ってなに?
>>114-118 >c = (char)c;
C言語の標準型はintなのは知ってるのかねえ・・。
*strもintに直されるんで、わざわざint->char->intにして
符号拡張させるんですよ。
バカども。
おまえらアフォか。 ど う し て 0x111 が 例 に 挙 が る ん だ ? 'ア' を指定したときの動作で十分説明つくだろうが。
>>126 このスレの流れだったら、べつにどっちでもいいやん。
>>125 なんか見当はずれなことを言ってる馬鹿がいますよ。
7bit関係?
>>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
>>133 逆だよバカ。
c=(char)c;は、* 必 要 *
>>134 違うというだけでなく何がどう違うのか指摘しないと無視されるぞ
わかんねー どっち派でもいいから、すっきりとした解説おながいします。
>>132 あのね、str側もchar->intに符号拡張されるんだよ。
だからちゃんとstrの'ア'もみつかるの。
シャッキリポンとした解説おながいします
だから char *r = strchr("アイウエオ",'ア'); rは"アイウエオ"
142 :
デフォルトの名無しさん :02/10/27 02:34
ちなみに下位ビットとかそんな話は関係ない。 単にC言語のchar->int符号拡張の話。
まったりとして、それでいてしつこくないのがいいです。
> 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' を渡すのなら理解できるが...。
>>148 だから、何が渡されてもそれなりに処理できる様に作ってあるんだろうが。
このバカ。
いいねえ、レガシーな話題で盛り上がれて。
>>149 intの値なら何渡そうがいいんだよ。バカ。
符号の有無もc=(char)cで吸収されて関係ない。
>>148 まあ、間違いというか無意味だけど、
今回はstrchr()の挙動の話だから。
もうバカばっかり。バカバカバカみんなバカ。
>>149 '\xff' はすなわち -1 だ。
char が符号付である処理系では。
>>150 それなりってなんだよ。
キャストしなくても途中で致命的なエラーが発生したりはしないだろ。
125 の固定番号を引きずってる 125 もかなりの DQN
>>152 お前は、アフォか ? その時の挙動が規定されてんのか ? って聞いてんだよ。
ちなみに言っとくけど、-1 の下位8ビットが 0xff なんてことは、規定されてねーからな。
揚げ足取り必死だな
>>155 「符号無しの処理系において」と書いてあるの見えない ?
おまえら全員読解力ゼロのバカ
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 > 挙動って何?
日本語もわからんのか...。まあ、落ち着けよ。
もう、せっかく教えてやってるのに頑なに理解しようとしてないバカがいるね。
174 :
デフォルトの名無しさん :02/10/27 02:48
最初に晒されたコードはVisual C++のものみたいだけど、他の有名なライブラリのstrchrのソースでもcharにキャストしているの?
>>170 > 「規定」というか、決まってるでしょ?
どう決まってんの ?
>>173 ププッ、捨てぜりふモードに入りましたね。
このスレ読んでわけがわからんので100レス遡る。 他人をややオカマ口調でバカバカいう125たんと 0x111とか言った香具師のせいでこんがらがってるだけだな。
char *strchr(const char *str, int c) { for(;*str;str++) if(*s==(char)c) return (char *)str; return NULL; } じゃだめなの?
ちなみに125の言うことは間違ってない。
なんていうか、自分の考えを上手く伝えられない自分へのもどかしさも彼をイライラさせる原因に。
>>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 同士で比較するようになってる。
よし、俺も必要派に転向だ。寝るけど。
確かに 125 は自分で自分の品位を下げるタイプみたいだな. こういう奴は仮に正しいことを言ってても, 真っ先に白い目でみられんだよね ... もう少し肩の力を抜けばいいのに...
>>180 あ、やっぱそれでも合ってる。
おれもバカどものせいで混乱してきた。
つーか、元はと言えば strchr() の c が int である事が間違ってる。
>>191 処理系依存つっても、普通は2の補数表現使うから
ほとんど決め打ちで考えて問題ないよ。
>>191 だったら、この処理系では結果は不定ですって言うのもありか ?
そうなら、c = (char)c; は不要じゃん。
>>185 この素直じゃないコードを書いた人の顔を見てみたい。
そういえばSolarisのstrcasecmpに8bitな文字列を与えるとものすごいことになるね。
なんでここは話題に事欠かないの。誰かネタ帳でも持ってるの。
>>199 > なんでここは話題に事欠かないの。誰かネタ帳でも持ってるの。
たいした事ないネタに食いつく奴が (今回は
>>125 ) が多いからだろ。
>>200 なんでわざわざ int ch としてるのか。
お肌に悪いからもう寝る。 バカどもは徹夜で考えてなさいよ。 つーかまず質問するまえにぐぐれ。
最後はネカマかよw
c = (char)c; となってる理由がぐぐって出てくるのかよ プッ
>>200 素直に一文字ずつ見ていって見つかればそこでreturn。見つからなければ(ループを抜けたら)NULLを返せばいいと思う。
>>147 NULLは0(全ビット0)か?を忘れているぞ。
>>109 じゃ、ほんとは
int *str = "abcde";
って書くのが正しいの?
VC++のライブラリのソースはひどいね。 マクロによってstrspnのソースになったりstrpbrkのソースになったり・・・
関数の引数として渡すと char、short は int に float は double に自動的に変換されるのです
禿しくCPU依存の悪寒
じゃあ結論はcharへのキャストはしたければしろ。したくなければしなくてよい。 ということでOK?
第二部いきまーす
>>222 2の補数を採用してないCPUなんてめったにないだろ
227 :
デフォルトの名無しさん :02/10/27 03:14
strcpyの第二引数にNULLを渡してもうまく動作するなんてどこに書かれているんですか?
?
217 は阿呆か、文字リテラルと文字列リテラルは全然違うのに。
>>229 おまえC++と混同してるだろ。
Cは221で合ってる。
>>226 負数に2の補数を使ってないCPUなんてあるのか?
233 :
デフォルトの名無しさん :02/10/27 03:19
リッチーもひどい言語をつくってくれたものだな!
>>233 はじめっからCは高級アセンブラって位置付けなんだから
変な期待すんな
>>233 モノは使いよう。
クソソースを作るやつがクソ
つーか age る程の話題ではない
>>231 たとえば
void hoge(char ch);
という関数があったら、intに変換されるってこと?
わけわからん。
>>221 の意味がわからない。
解説お願いします。
0x80〜は符号拡張されるから、よくやる n = c - '0'; みたいなのは0x80をまたいでは使えないんだね。気付かなかった。やらないけど。
>>224 だから、ないとまずい理由をちゃんと書け。
引数がint型に拡張されないと、DLLとかで困ると思うんだが。
1の補数表現って8bitの場合、0x00と0xFFは同じ値になるの? Cと関係なくてスマソ
以降 独 り 言 禁 止
>>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 は自ずと分かると思いますが
ダメでしょうか?
これスレはテレビの馬鹿番組でも見ているようで楽しいな
>>262 それこそ中でキャストしているだけじゃ・・・
>>250 それを書いたものだが、そんなことしてOKなんて一言も書いてないぞ。
ただしやっていかんとも書いてない。なぜなら、その時の議論には
全く関係のないことだったからだ。
strchr() 内における c = (char)c; は、 0x111 のような文字とは思えないデータでも文字データとして扱うなら必要 文字とは思えないデータははじいてしまうなら不要 という事でよろしいか?
>>266 渡された引数の型が分からないのにどうやってキャストするのさ?
>>262 あんな、プロトタイプが与えられてない場合と、不定数引数の場合だけ
charがintに昇格するなどの暗黙の処理が入るんだ。
不定数引数ってのは、
int printf(const char *, ...);
みたいな関数の...の部分な。
>>268 717 :デフォルトの名無しさん :02/10/25 16:37
char a[100];
/* 配列に空文字列をセットする3つの方法 */
strcpy(a, NULL);
strcpy(a, 0);
strcpy(a, "");
どこが関係のないことだ?NULLを渡すと空文字レスがセットされると書いているが?
>>273 %fならdoubleに、%dならintにキャストすればいいだろ。
× 空文字レス ○ 空文字列
>>258 *strがintに拡張されるのはint型の変数と比較するからだろ。
文字列リテラルの型とは関係あるのか?
ああ、ドキュンが沢山いる
あの変なマクロつかうやつでしょ。 あれは何をやってんだろう。
>>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' として扱うのが仕様なのか?
>>290 環境が普及してるかどうかって問題じゃないんだけど…
みんな楽しそうだなあ
>>296 デファクトスタンダードって言葉がある。
>>291 漏れはマズイと思う。
でも実際、漏れが 0x111 を指定して strchr() を呼ぶ事はないから問題ない。
>>251 ,
>>290 つーか、「一般的なPC環境はWindowsだよね 」と言うのは、まあ当たってると思う。
しかし、C で作られたプログラムの一般的なプラットフォームが PC と言うのは了見が狭すぎ。
>>303 でも、規格はデファクトスタンダードによって作られる。
>>299 > 漏れはマズイと思う。
だったら、c = (char)c; はいらないんじゃないの ?
> でも実際、漏れが 0x111 を指定して strchr() を呼ぶ事はないから問題ない。
と言うなら、特にね。
(何で、これで「必要」と言う結論に至るのか理解できん...。)
というか int hoge(char c); この関数の引数が、符号拡張されて渡されるなんて言うのは、 議論の余地なく間違ってるよ。
>>305 0x80-0xffを指定したときに、仕様通りに動作しないから
>>305 おい (怒)
「必要」 とは一言も言ってねえ。
第一、c = (char)c; が問題になるタイムクリティカルな局面では、
C なぞ使わん。
少しも話が進んでいない様ですが 気のせいですか。
>>301 >>308 そんな 1 プラットフォームの実装なんか見せられたって意味ないよ。
ANSI ではどうなってる?
char = signed charの環境で char *str="\xff"; if(strchr(str,0xff)) とやると偽になるってこと?
316 は病に倒れました。
>>315 いやだから、、標準関数に関してはANSIに乗っ取っているってば。。。
もし拡張しているならきちんと明記してある(strstrの第二引数に""を渡した場合とか)
>>315 ANSIではcharでキャストするらしいよ。
>>320 わからん。試していないから。
これが真になるなら別にキャストは必要ないような・・・
>>310 > 「必要」 とは一言も言ってねえ。
はあ ?
>>271 「0x111 のような文字とは思えないデータでも文字データとして扱うなら必要」
自分の書いたことぐらい覚えておけ、ヴァカ。
> 第一、c = (char)c; が問題になるタイムクリティカルな局面では、
> C なぞ使わん。
タイムクリティカルだってさ。(藁
おまえらANSIぐらい読めよ。それでもC使いか?
>>317 真になるよ。
charが8ビットなら。
>>325 お言葉ですが、この中に何人C使いがいるとお思いですか?
>>321 > 標準関数に関してはANSIに乗っ取っているってば。。。
> もし拡張しているならきちんと明記してある
間違いなくそうなのか?
その根拠が示されてないっての。
>>322 情報へのポインタをキボンヌ。
あ、わりぃ。
>>317 のstrchrはcharへのキャストがないstrchrと考えて。
>>329 > 情報へのポインタをキボンヌ。
「新ANSI C言語辞典」という本
>>324 >271 「0x111 のような文字とは思えないデータでも文字データとして扱うなら必要」
おおそうとも、まさにそう書いた。
だが、その後 「文字とは思えないデータははじいてしまうなら不要」 とも書いた。
その状況で、何で漏れが 「必要」 と言いきった事になるんだ?
ポインタではなくて参照でおながいします。
今 夜 は 出 来 の 悪 い 連 中 一 同 徹 夜 で す か
スマソ漏れは 315 だった・・・ 322 サンクス。
なんか落ちこぼれが集まって教室のすみで、いろいろ議論しているが 間違ったことばかり言っているのを聞いているようだ。
>>338 Ruby>>>>>>>>>>>>>>>>>>>>>>>C=Javaです
おまえらC言語使わないでくれ。 たのむ。
>>333 お前は、リンクもたどれねーのか ?
>>271 0x111 のような文字とは思えないデータでも文字データとして扱うなら必要
>>291 それ余計にまずくない ?
>>299 漏れはマズイと思う。
と言うのなら、「0x111 のような文字とは思えないデータでも文字データとして扱う」なんて状況を何故書く ?
ここはオマエモナー厨の巣ですか?
以降 ruby禁止
>>340 だったら、お前が正しいことを書いてくれ。
納得して、眠りたい。
お前ら お ど れ お ど れ
そうか・・・ charで表せない値を渡した場合はstrchrを呼んだ奴が悪いとして、 charで表せる(CHAR_BIT == 8として)8ビット目が1となる値を渡した時はcharにキャストしないと環境によってはうまく動かないのか。
>>347 今夜は眠れない。
いや、
眠 ら せ な い
以降 char 禁止
>>344 0x111 のような文字とは思えないデータでも文字データとして扱うなら必要
文字とは思えないデータははじいてしまうなら不要
これは漏れの意思とは関わりのない厳然たる事実。
> それ余計にまずくない ?
漏れはマズイと思う。
これは漏れの単なる意見。
あんたはその区別がつかないほどの日本語 DQN なのか?
>>352 どこが?
実際に試してみてそういう結論に至ったんですが。
>>354 試さなくてもstrchr()の仕様が分かれば自明じゃん。
つーか、試して確認するってのはむしろ危険だよ。
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」
>>350 もう、えっちなんだからぁ。
あと2回はがんばってよ
そう書いてあるんだから納得しろって、なんか日本の教育みたいだな。 その理由まで考えさせない。
>>359 の改行の下には
ぐぐる:「ISO/IEC 9899:1999(E) pdf」
と書いてあります。
夜 は ま だ ま だ こ れ か ら み た い で す 。
>>364 なんでここで、
日 本 の 教 育 が
出てくるんだ。
void hoge( char c ) ... とか宣言してても char ch; ... hoge( ch ); のとき char -> int 変換される これ C の仕様......?
>>364 いままで、strchr()の挙動(仕様)に関する議論だったんでしょ?
どういう経緯でそういう仕様になったかって話しも興味深いけど、
それは別の話だしね。
Cの仕様は し よ う が な い な ぁ
新聞配達がキターヨ
>>368 > これ C の仕様......?
違います。
(このスレに約一名そう主張してる方がいますが)
お前らもうそろそろ結論をまとめようぜ。
言葉尻を捕らえて揚げ足取るのは 夜 だ か ら で す か ?
>>375 は
「仲間ハズレ一人!」
とか言った本人が仲間ハズレだったという罠ですか?
383 :
デフォルトの名無しさん :02/10/27 04:23
言葉尻を捕らえて揚げ足取るのは C だ か ら で す
ちなみにCの仕様です。
以降 独 り 言 解 禁
>>368 の状況で、char -> int の型変換が起きる余地があるのか?
>>382 う。
もしかして仲間はずれかな?
仲間はずれでもいいけど、
>>368 が仕様だっていってるなら、
根拠を示して欲しいね。
以降 「 以 降 」 禁 止
どうでもいいけど誰か結論書いてよ。
395 :
デフォルトの名無しさん :02/10/27 04:26
宣言しなかったらcharがintになっちゃうんだってさ。
処理系異存です。
うぉ! やべ・・・接続時間が2時間すぎた。電話代が・・・
>>387 変換が起きるといってる人は、winでcharがスタックに積まれるときに
4バイト使われるのを「変換される」「Cの仕様」と言ってました。
アホです。
つーか何の話してんの?
異存はありません
__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
>>398 だから Linux 上の gcc でもなったんだってば
>>398 つーか「4バイト」なんてキミ以外一言も出てきてませんが。
>>402 正しい?
コンパイルエラーになりますが。
結論:キャストは仕様。
結論: s t r c h r ( ) は ク ソ という事でよろしいか?
結論:キャストは仕様で使用
>>408 strchrの第二引数はcharにキャストする必要があるかないか。
そろそろ 厨 房 が 暴 れ そ う で す
void hoge(char); で、引数がintにキャストなんてされません。
結論:キャッスルランドは閉鎖。
>>417 話題は何かと聞かれたからそう答えただけだけど・・・
>>415 >void hoge(char);
型はcharだけど、intの大きさで渡されるよ。
>>419 だから根拠しめしてよ。
規格のどこに書いてあるの?
とにかく仕様でそう決まっているからキャストする必要があるんだよな。 書いていなければしてもしなくてもかまわないと。
早口言葉:キカクキキカイカイ
どれ?
>>423 なら型変換してないじゃん。単にsize(int)バイト分スタックを消費するというだけで。
>>413 strchrの第二引数ってintだろ。char渡したらintにキャストされるだろ。それだけの話か?
話がずれてずれてずれまくり
>>435 違う違う。
strchrを実装するさいに、intで渡されたものをcharにキャストする必要があるかないか。
徹マンみたいだな
今日のこのスレは楽しいな。 漏れは寝てたんだが、何かに突き動かされるようにして 2 時頃目を覚まし、 PC の電源を入れて 2 ちゃんを覗いてしまったんだが、思えばこのスレが 呼んでたんだろうな。 ・・・オェー
1日で300以上もレスがつくのか。 こえーなあ。
void hoge(char); ↑で、引数がintにキャストされるなんて言ってるのはアホです。
>>441 話題について聞かれたからそう答えただけと何回言えば分かるんだよ(;_;)
strchrだけで、400レス以上も消費したのか・・・
>>437 キャストすると決まっていればして
キャストしないと決まっていればしないで
なんも決まってなければてきとーにすればいいだけじゃないのか?
あとは規格を見るだけだろ?
>>445 スタックに渡されるのはint(レジスタの大きさ)だけど、
値はcharとして扱ってるはず。
アセンブラに直すと、上位ビットを切り捨てる処理がどっかに入ってるよ。
キャストと暗黙の型変換を混同してるヤシがいるな
>>452 もしかして、話題について聞いた人?
ならごめん。
スタックに char が int の大きさで積まれるのは キャストとも暗黙の型変換とも言わん
>>454 ずっとその話をしてるんだけど、なかなか納得してくれない。
>>451 int にキャストする時と同じアセンブリコードが生成されるんだけどなぁ......
>>461 それは最適化で省かれたんじゃないの?
どういうコードでテストした?
結局動くけど、仕様でそうなってるからキャストは必要って理解でいい?
>>463 だからキャストは必要だって言ってるだろ
>>457 うん。そうそう。話題について聞いた人。
なんの話してんのよーわからんなぁー。
>>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 ルリって誰だ?
ル リ っ て 誰 だ !
お前か?
アニオタウザイ ア ニ オ タ ウ ザ イ
こんな遅くに一体何人参加しているのだろうか? 番号! 1
strchr程度なら仕様書にこう書けとサンプルコードを示してくれればいいのに。 変数名も同じにしないと仕様書違反と。
文字リテラルってCではintですよね。 8ビットコードは-128〜127なんですか?
s/文字列/配列/
文字リテラルか。 文字列リテラルと読み間違えた。スマソ
アニオタッテダレダ? ア ニ オ タ ッ テ オ レ ダ !
>>488 printf("%d\n", 'ア'); を実行してから言え。
こうまで話がこじれる原因は、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の補数表現をとるかも規定されていない。
503 :
デフォルトの名無しさん :02/10/27 04:59
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で決まってるんで。
>>509 キャストとはどうゆうことか口に出していってみろ
ANSI非準拠だったってことですかね
>>509 だから、何で実際に吐き出されるコードの話をするんだ?
"文字コード"はマイナスにはならないでしょ(笑)
>>522 いや......変換されるなんて言ってるやつはアホとか言ってた人がいたから実例を出したまでなんですが......
527 :
デフォルトの名無しさん :02/10/27 05:06
ガーン
(^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;; (^^;;
if('ア' < 0) puts("minus"); else puts("0 or plus");
>>530 その比較は処理系依存(リテラルcharの符号依存)
>>530 甘い。
puts('ア'<0?"minus":"0 or plus");
532 は何を争ってる (笑)
>>530 minusでした、always trueだそうです。
書いてなかったけど、環境はbcc32.exeです。
文字リテラルがマイナスになることはあっても、(少なくとも現存する)文字コードがマイナスになることはない。 違う?
>>530 うちでも minus (gcc on Linux) でした。
>>536 デフォルトの char が unsigned char か singed char か、
っつー話じゃなくて?
きっと問題はcharのビット数だろう
charは無関係では?
unsignedの実装によるかもしれない
文字リテラルは文字コードをcharに型変換したうえ更にintに型変換したものと考えていい?
謎はすべて解けた! 犯人は
きっと問題はcharの読み方だろう。
キャー
'ア'<0 ってintに格上げされるんだっけ?
>>547 私がチャーと読んでいた犯人です。
おさわがせしてしまって申し訳ありませんでした。
でもアリバイがあるから犯行は不可能なはず・・・
>>549 文字リテラルはint型。
sizeof('ア')ってやってみればわかる。
チャー:天才ギタリスト キャー:叫び声 シャー:char
まぁcでchar c = 'ア';なんて書く奴は普通いない訳だが。
ちゃる
それはこのトリックで説明が出来る
じっcharの名にかけて!
guest guest
>>532 甘い
puts(&"0 or plus\0minus" [('ア'< 0)*10]);
でも長くなった・・・
おまえら、もうネタないんだろ?
すごいですね
すごいですね(^^;;
結局、void hoge(char ... で char -> int 変換されるってのは仕様ではないんですか?
ちょっと縮んだ puts("0 or plus\0minus"+('ア'< 0)*10);
ここはすごいインターネットですね
568 :
デフォルトの名無しさん :02/10/27 05:26
寝るね。 お(^о^〃)や(^О^〃)しゅ(^。^〃)みぃ(^-^〃)♪
バイナラ ラナイバ
>>565 もうそんなことはどうでもいいんだよ!!
573 :
デフォルトの名無しさん :02/10/27 05:28
おはよう!
謎はすべて迷宮入りになった
おっはー
>>570 仕様なのか。じゃあ仕様じゃないって言ってた人はみんなアホだったのね。分かった。寝る
さて、仕事するか
ちなみに「変換」って、キャストのことではないよ
>>577 いまから仕事かよ!
つーか、
今 日 は 休 日 じ ゃ な い の か ?
intというか、intと同じサイズのメモリに。じゃないの。 そのメモリから関数側はcharで受けるだけでしょ。
>>579 ヒッキーが働いているふりをするとそうなります。
これから寝るという、 大 仕 事 が 控 え て ま す が何か。
で、charはintなの?
飯食おう
>>552 gcc だと
#include <stdio.h>
int main( int argc, char** argv ){
printf( "%d\n", sizeof( 'a' ) );
printf( "%d\n", sizeof( int ) );
}
で出力は
1
4
だったわけですが… これは?
ちっ、静まったか。
>>590 ちょっと待て。mainの型省略してコンパイル通るか?
#include <stdio.h>
main(){
printf( "%d\n", sizeof( 'a' ) );
printf( "%d\n", sizeof( int ) );
}
>>594 通る場合もある。
その場合は void とみなされ、ANSI 非準拠。
>>594 全角スペースのせいでコンパイルが通らない罠
あ、通るや。スマソ
>>590 でも、それはC++だから。
590 が、C なんか使う気は全くないと白状しました。
602 :
デフォルトの名無しさん :02/10/27 06:04
int mainなのに戻り値も無しか…。(プ
なんでそんなに細かい違いが有るんですか?
#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 じゃないよな?
煽られたりしてないよな?
明日できることは今日しないし明日もしない
>>1 > みんな大好きなんです。このシリーズの速さがそれを物語っています。
ワラタ
おう大好きだよ
かぶった (;´Д`)
>>616 ん?それだけ?
それよりコードの肝心な誤りの方を指摘してやればいいのに。
>>617 スペルミスならアホでも気付くというか、
いちいち指摘するようなことじゃないわな。
それとも、ここには入力ミスを指摘して喜ぶ
ようなカスでもいるんかいな?
> ついでに訊くと、615 は 609 じゃないよな?
> 煽られたりしてないよな?
よくわからんが、レスを付ける=煽られる
というのなら、煽られてるわけだが。
>>623 ごちゃごちゃ言わずにコンパイルしてみな。
typedef struct objective_c { long private_state; // 関数のアドレス char *public; long other; }
さぁ面白くなってまいりました。
628 :
デフォルトの名無しさん :02/10/27 13:23
>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 の脳内
-------------
Segmentation error (core dumped)
-------------
しかしまあ、あれだな。 脳内バグか本当にバグがあるかは関係無く、問題があるなら普通それを素直に 指摘するよな。 という事は、つもりがあるかは別として 628 は煽りだったわけだ。 漏れらも煽られたわけだな、くそう。
ファイルの同期を取るプログラムを作りたいんですが ファイルのサイズや更新日時の情報を得るにはどうすれば良いのでしょう? すみませんが、教えてもらえないでしょうか?
648 :
デフォルトの名無しさん :02/10/27 14:06
fstat
とりあえずunix(solalis)でやっています。 それができたらwindowsのdosでやってみようかなと。
うーん、stat 系は環境依存なんだが・・・この際仕方ないか。 模範回答は 647 だな。
>>651 ありがとうございます。
あとはがんばってネットで調べてみます。
いや、すまん、651 は 646 を解決する情報ではないのだが・・・。
はあ、なんか煽られてるよ俺。
>>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
for(i=0;i<n;i++){a=b+c;b=a;c=b}
しまったボケなきゃいけなかったのか 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 みたいなヤシがいるから祭りになったんだよな
てか、同一人物?
おなにーしてきていいですか?
おながいします。
>>665 済まないが、654 が回答するまで待っててくれ。
もっとお母さんみたいに言ってくれ。
>>654 の脳内でメモリアクセス違反が発生しました
ただいま再起動中です......しばらくお待ち下さい
おなにー終わったんですが、ここは進展ないですね
c言語でオブジェクト指向。
やー何か盛り上がってるね、チミたち。
俺は昨日の祭りの時はいなかったんだよね。
んで、正解は...
180のコードでは第2引数に '\0' が渡された時に
NULLを返してしまう。
strchrでは '\0' も文字列の一部として
その文字位置(ポインタ)を返しましょう。
>>663 お前の予想は外れちゃったね。この馬鹿。
ん?ピタリとレスが止んだなw
グゥ。。。
>>674 ああなるほど、そういう事か。
ありがとう、全然気付かなかった。
・・・とは素直に言えないな。
気付いたなら 615 の時点でも言えたはずだ。
なぜ煽るような事をした?
>>674 漏れのカキコのおかげで未来が変わったんだよ(w
>>673 構造体と対応関数を書けばいくらでもできるだろう。
>>677 上で書いたように、元々は煽ってきた
>>612 に対する
ネタ振りのつもりだったんだが、それが
なぜか
>>617 の書き込みを筆頭に煽られまくっちゃったんだわ。
本当に気分を害した人がいれば謝るよ。ごめんね。
>>663 ワロタ。実はそうだったりしてな。
>>683 そうだな、確かに 612 は煽りだ。
だが、客観的に見返してみろ、
>>615 も立派な煽りだぞ。
それに、煽るつもりが全く無かったのなら
>>645 の時点で反省があったはずだが
「こういうのを「たくさん釣れた」っていうのかな?」 ってちょっと調子に乗ってたな。
そこは気に食わなかった。
でも、ちゃんと詫びも入ったし、ケンカ両成敗と言う事で。
・・・C では負けたがナー。
そう、負け惜しみだが、普通 '\0' を探す場合は strlen() を使うから、
全然気がつかなかった。
そうか、ちゃんと初期化されている文字列なら strchr('\0') が NULL を返す事が 無いから、sprintf(strchr(str, '\0'), "%d", hoge); とかできるわけだ。 今までずっと sprintf(&str[strlen(str)], "%d", hoge); ってやってたよ。
テストの重要性を思い知らされるな。 まだバグがあるかもしれんな。
687 :
デフォルトの名無しさん :02/10/27 15:56
各種ヘッダファイルに対応する関数の説明一覧とかがあるサイトあったら教えて下さい
ぐぐれば見つかるんじゃない?
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
702 :
デフォルトの名無しさん :02/10/27 17:53
ANSIとISOの規格って同じもの?
>>697 じゃあMAX_PATH+1としておけば間違いないということ?
706 :
デフォルトの名無しさん :02/10/27 18:00
>>359 C99の仕様書の原文なんて持ってこられても困るんですが。
1989年のANSIの企画書の原文を引用してください。
情報を小出しにするからCスレはすぐ延びるんだろうな
自信がないから一気に出せないんだよ。 基本的に他人に意見を聞いてからだもん。
>>706 何を今さらって感じだけど、人にものを頼むのにずいぶん偉そうな態度の奴だな。
お前が金出して買えよと言いたくなる。
711 :
デフォルトの名無しさん :02/10/27 18:11
”終端塗る文字は文字列の一部と考えられる”
charが式中でintに変換されるのは本当だったんだね…
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 ん?動かしてみたけどちゃんと動いたぞ?
>>722 改行コードで始まると思ってる行が、'\t\n' とか ' \n' とかなってないか ?
>>710 別に頼んでいるわけじゃないんだが・・・
C99を標準だなんて言わないでほしいってこと。
>>722 きっと改行だけしたつもりが、スペースやタブがはいってしまったんでしょ。
>>722 漏れのところも動いた。
テストデータのテキストの方に問題ありそう。
>>726 何を言っているんだ?
C99 も 1 つの標準だろう?
>>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;
}
>>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上です 関係ないか
>>736 別にいいんじゃない?
fputs(line, stdout) と書けとでも?
大差ないし。
>>734 isspace()を使う場合は、最後に'\n'でなく'\0'と比較するように書き換える
必要がある。
ここはバカばっかですか? printf(line); でいいだろーが
742 :
デフォルトの名無しさん :02/10/27 20:05
>>736 たとえばどんな風に書いたほうがすきですか?
参考のために教えてください
未来から来てしまった・・・
>>738 何を訴えたいのか読み取れないような。
>>741 lineに%が含まれていたらどうするんだよ・・・・
フォーマット文字列には定数を与えるのが鉄則。
空行のあるなしのことでは?
>>741 ヴォケ。
テキストデータに % が入ってたらどーするんだ。
>>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だったはず。
信じられないからきいているんですよ。
>>752 (゚Д゚)ハァ?
749 の何をどう解釈したらそんな言葉が出るんだ?
749 は全てのコンパイラがサポートしているわけではないと言っているが、
規格のすべてをサポートしていないとはこれっぽっちも言っとらん。
>>750 >>754 >755
printf() のソース見れ。
ソース無くて読めなくても、実際使って問題が出てないなら深く考えるな。
>>756 それならANSIの規格だってすべてのコンパイラがサポートしているとは限らないということになるけど?いい?
760 :
デフォルトの名無しさん :02/10/27 20:19
>>757 じゃあ深く考えないことにします。
(100KBなんて相当再帰処理を繰り返したりしなければ消費しないよな・・・)
つーかまあ、printf() の処理内容考えると、やっぱり 100 KB じゃなくて 100 Bytes だろう。 100 KB もあったら相当なコードとデータを詰めこめる。
>>758 その上でこのスレは標準規格に則って動いてるんだろ。
何が問題?
VC6 の printf() のソース、_output() ってソースの無いルーチン呼んでる だけだから読んでも得るものねーYO・・・
次スレからは
>>1 にC99の話題は禁止とかいてほしい・・・
つか、DOSのCではprintfが呼び出せなくなるような。
>>763 さあ、人それぞれだろ。
でも、ANSI と ISO がこのスレでぶつかっているところを見たことが無い。
何が問題?
>>764 _output()のソースがどこかにあったと思うよ。
>>767 コンパイル時に大きさの決まらない配列とか・・・・
>764 ハァ? じゃあoutput.cは何なんだよ?
ネタ帳に 標準とは何を指すか を追加
>769 スタック100KByte取るような関数はDOSアプリでは 使えない、というだけの話。
774 :
デフォルトの名無しさん :02/10/27 20:29
>>735 fgets()のバッファのサイズにBUFSIZを使ってるのって変だよな。
>>773 >>716 一体どう言うロジックを組めばスタック 100 KB も取ると思うわけ?
それと、実際にDOSアプリで呼べなかった事あるの?
ああ、773 は、「だから printf() が 100 KB 食うわけない」 と言いたいのか。
>>775 もしも100KBもとるようならって話でしょ?
でも動くから100KBも消費していないと。
>>774 それほど変でもない。
困る事がありそうで、実際にはなかなか困らないよ。
780 :
デフォルトの名無しさん :02/10/27 20:33
標準関数で100KBも消費するとしたら、再帰使ってかいたqsortくらいか? 多分実用的なライブラリは再帰なんか使っていないと思うけど。
>>780 前半には同意するが、後半には同意できないぞ。
qsort() は実用的ではないとでも言うのか?
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なんかを、つかってたら変でしょ。
(別に間違いじゃないけどさ)
788 :
デフォルトの名無しさん :02/10/27 20:40
>>788 ぼやくだけにしないで、きちんと問題をはっきりとさせること。
そうそう、だから無駄にこのスレは長くなる。
>>741 みたくはっきり言うと墓穴を掘るからなるべくあいまいにレスをつけるのがこのスレの常識
>>791 「このくらい自分で分かれよ」と思って教えないのですです。
>>789 BUFSIZはsetvbufで使うための定数だから。
fgets(s,CLOCKS_PER_SEC,fp);
みたいに、標準ヘッダーに定義されてる定数を適当に使うのと同じ。
という話なんでしょ?
人が飯食ってるあいだにバカ供がやけに祭り上げてくれちゃってますね(w オレが間違ってた。ゴメソ
>>796 どあほう。
ぐぐったりリファレンス見たりして分かる情報ならそれでもいいが、
そういう問題じゃないんだろう?
そういうのを指摘してやらないのは嫌がらせか偽善のどちらかだ。
>>793 >>744
>>794 そうだったのか。
setvbufもBUFSIZなんてありきたりな名前を使うなよな。。
ごめんよ 796。 漏れは 792 に言いたかった。 逝ってきます・・・。
おいおいもう800越えかよ・・・
俺が今までひっかからなかったのはBUFSIZじゃなくてBUFSIZEにしていたからか(笑)
ん〜、やはり相手に「バカ」「アホ」と息巻いてレスをつけると墓穴を掘る方向に・・・
つーか今朝の c=(char)c; ってうやむやのまま終わったよね。 正直に白状すると、俺はまだよくわかりません。
>>807 蒸し返すな。
C99の規格がそうなっているからキャストが必要なの。
1989年のANSIはしらん。
蒸し返せ (・∀・)
811 :
デフォルトの名無しさん :02/10/27 21:32
お、やるか
追いかけるのが大変だから、ゆっくりしゃべれ
ところで、strrchr はどうやって実装するのが普通なのかな〜?
test
void func_a(char a) { ・・・ } という関数があったとすると、引数aは関数の中でint型になっちゃうんですか?
tesst
どういう関数を書くときに c = (char)c; みたいなことをすればいいのかがわからない。
>>815 ならない。
呼び出し元からスタックへ char が渡されると一旦 int に変換される実装もある
ようだが、関数に突入した時に結局 char として扱われる。
char 変数の値はあくまで char 型として扱われる。
文字リテラルが int と評価される事とは全く関係無い。
引数の受け渡しがどうなっているかは普通は気にする必要は無い。
可変個引数を受け付ける場合は気にする必要がある場合もある。
>>818 int に入った文字コードと char を比較するとき
>>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 ログはある程度あんたを待っててくれるから、最新レスについて逝けなくても大丈夫だ。
発言したいなら別だがナー。
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() で余計なコストがかかる罠
かぶった (;´Д`)
>>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
842 :
21世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:07
それにしてもこのスレ早いね 何よりこの速さが世間でのCの需要を物語っている 役に立つとかそんなんより 知らなきゃ話にならんレベルなのか・・・ オレもやろ
VC++でもやっぱり後ろから見ているよ? それとも関数を呼ばないでwhile(*s++) ;とやれということ?
>>842 のようにして C 厨房が増えていくわけか
>>840 後ろを見つけるのに文字列全体を1回走査しないといけないからちょっと無駄かもしれない。
>>838 がやろうとしているように、走査している間に指定の文字が見つかったらその位置を覚えておくようにすれば、自然と最後の位置が残る。
while(*++s);じゃないとだめか。
でも実際どっちがいいかは分からんよね
849 :
デフォルトの名無しさん :02/10/27 22:12
strrchr()すら実装できないカスがいるスレはここですか?
>>845 strrchr("aabbccabaaabcbcabbbcca", 'a');
こんな感じだと後ろからやったほうが速い
C超初心者ですが、質問は許されますか?
>>853 ここは本来そのためのスレだ (笑)
ただし、内容による。
チューボーdeathYO!
そういえばスレタイ、「聞きなさい」 じゃなくて 「訊きなさい」 だよな。 重箱の隅だけど。
>>856 >重箱の隅だけど。
これ付け足せば許されると思ってんのかゴルァ
>>857 あなたに許してもらおうと思ってないから大丈夫です。
「1月〜12月」の中で「3月」が一番大きく認識させるにはどうしたらいいですか?
>>859 もっと詳しく質問しないとわからないよー
何に認識させるの?
回答があいまいじゃなくて質問があいまいという斬新な切り口
おっと、空文字列だとだめじゃん。 やっぱりstrlenでいいね。
おまいら一体何歳なんだよ!くそっ!!
>>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 の質問じゃないし。
ずれた Σ(゚д゚lll)ガーン
>>866 スゲー。あの質問でこの答えが出るか?フツー
この方がいいか。 月の値は普通に 1 〜 12 で持つ。 月の比較の時に (m <= 3? m + 12; m) を取る。
ああ、これイヤかも。 最初に厨解を出しておいて、質問者が去ったら正解を出す、と。
すごい読解力だなあ。 俺いまだにわからんよ。
>>868 何か直感でわかってしまった。
電波ゆんゆんなのかも。
ああ!! 一番大きくって配列に入れたときの添え字が一番大きいという意味か!!
きっと enum month{4月, 5月・・・・・12月, 1月, 2月, 3月}; すいません。英語で月を書く自信がありませんですた。
文法エラーだたーよ・・・ (m <= 3? m + 12: m)
みなさんは、どれくらいでC言語はマスターなされたのですか?
ヘイ、マスター!
>>878 お腹の中にいるとき。ママから教えてもらってたからさ。
前スレ 1000 取っちゃったもんね。 995 から連続だけどナー
>>881 いいママですね 僕のママは主婦なんで駄目です
でもここも 1000 取り合戦間近の気配・・・
>>882 お前、あのスレは良いとこだったのに何しやがんだ
886 :
21世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:41
>>878 一ヶ月でかなり調子にのれるYO!
実際どうかはわからんけど。
あとCと平行してアルゴリズムの勉強したほうが(・∀・)イイ!
漏れは独学。 ガッコも会社も教えてくれなかったし。
どうして、ム板のコテは神か糞虫かの2種類しかいませんか?
890 :
21世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:44
はやくだれかスレ立てて! 寿命約30時間か・・・ 日曜だからかな
うぉーCの話をスレー!Cをやってる人間の話なんかどーでもいいっつーのー!
>>886 今からアルゴリズム勉強します
>>887 僕も今1ヶ月目の独学です。でも詰まった時に聞ける人がいないので皆様のお力を
お借りしました。友達がいないわけじゃないですよ
俺はC未経験なんだよな・・・彼女もできたことないし・・・
>>891 すいませんもう去ります。有難うございました
896 :
デフォルトの名無しさん :02/10/27 22:48
漏れも周りに訊ける人いなかったが、ついでにネット環境も無かった。 詰まったときは放置。 でもある日突然ひらめいて続行。 そんな感じ。
898 :
21世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:48
>>894 AとBはしたんでつか?
Bで終わったんでつか?
>21世紀のあいんしゅたいん ◆rGsyzf.Kp2 新手の荒らしか?
903 :
21世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:50
>>897 でもその方がいいかもね。
困ったら聞くのも手だけど、
頼りすぎたら自分のものにならんし。
聞いた後に「はいそうですか」じゃなくて
なんでそうなるか死ぬほど考えなきゃ
と、もう既に去った895に語るテスト
もっとこう殺伐と質問、殺伐と解答ってないのかしら 馴れ合ってんじゃないわよ
905 :
21世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:52
907 :
21世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 22:53
>>904 この微妙な付き合いが2Chっぽくない?
みんな無言で文字打ち合ってる姿がうける
>>900 900ゲトとか言ってくれよ!欲しかったのに!
ははぁ〜ん。さてはおまえら900超えたからやる気なくなったな? 新スレへ体力を温存だな? 軟弱者!
>21世紀のあいんしゅたいん ◆rGsyzf.Kp2 雑談掲示板から最近2chに着たばかりだと思うに20M$。
新ソバきぼんぬ
じゃあ俺は2000K&R。
917 :
デフォルトの名無しさん :02/10/27 23:00
Socket プログラミングについて質問があるんですが。 最初、WSAStartup 関数やって、socket 関数でソケットを取得すると思いますが、 既存のソケット(他のプログラムが作ったソケット)を取得したいんですがやりかたがよくわかりません。 開発環境は WinXP Prp. VC++6.0 です。よろしくお願いします。 API でそういうようのがあればいうことないです。(API なら VB で使える)
911は絶対にセイラさん。
922 :
デフォルトの名無しさん :02/10/27 23:01
less()とexch()を使うにはどうしたらいいんですか?
[栗蟲]クリムシ 昆虫類栗蟲科栗蟲目 主に栗を主食とする昆虫。害虫。
>>917 この糞バカ野郎!いくら900越えでやる気を失った俺らだからと言って
Cスレのプライドまで捨てたわけじゃねぇぞ!
VCスレもWin32APIスレもネットワークプログラミングスレもあるだろうが!
925 :
デフォルトの名無しさん :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
名前変えますタ
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
>>933 >21世紀のあいんしゅたいん ◆rGsyzf.Kp2
に答えてもらうといいですよ。彼は神だ。
937 :
隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:14
>>932 「C」 にそんな関数は定義されてないです。
普通に 2 値を交換するステートメントを書いてください。
tmp = a; a = b; b = tmp;
a ^= b ^= a ^= b; は例の如く・・・
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 ホントだ。未定義キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
いや、失礼。
>>833 はそれを承知の上のコードみたいだな。
じゃあ寝る。おやすみ。
952 :
21世紀のあいんしゅたいん ◆rGsyzf.Kp2 :02/10/27 23:32
オレ=隊員キタ━(・∀・)━!
とりあえず 9 5 0 は 次 ス レ よ ろ し く ネ
955 :
隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:35
あいんしゅたいんキタ━━━━(゚∀゚)━━━━! ねね、神なんでつか?
957 :
隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:35
オレが次スレ立てる!!!!
30 時間足らずで次スレ移行か・・・ヽ(´ー`)ノ ヤレヤレ
新スレのスレタイが・・・
961 :
隊員NO.1919072 ◆rhAfp.iLoU :02/10/27 23:41
やべー 5 の前に 4 取っちった
隊員がスレ立てしてる間アインシュタインがレスをしないのには 強い政治的意図を感じざるを得ない
>>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(.....))))
>>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;
}
おいおい、前回と違って今度は次スレよりこっちの方が雰囲気悪いぞ。
何か争点が昨晩と全く違ってて面白いな。 ここは本当にム板か?
すいません まちがえました 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 これをホーナー法をつかって計算回数をへらして プログラムしたいのですがどのようにプログラムをかけばいいのか 全然わかりません。どなたか教えていただけませんか。?
>>988 さん そのスレへの書きこみは僕ではありませんよ
>>987 さん ありがとうございます。
つまり
for (i = n; i > 0; i--) {
y = y * x + x / i * ((i % 2) ? 1 : -1);
}
この部分がホーナー法で計算回数を減らして計算しているプログラムということで
いいんですか?
ここから計算回数をカウントすることもできますか?
そんな人に聞いてばっかだと何も身につかないよ。そもそも計算回数って既にここで聞く事では無い気がするが。
よっしゃ! 1000Get
記念パピコV(^o^)V
ふふふ
C
1000 :
デフォルトの名無しさん :02/10/28 14:39
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。