トップページ⇒tech
1001コメント217KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
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 あたり
0002デフォルトの名無しさんNGNG
【コンパイラ】
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
0003デフォルトの名無しさんNGNG
【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

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

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

それとも、こうですか?

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

「水平軸回転」は b) ですよね。
0009デフォルトの名無しさんNGNG
第2問. 「右回り」とはこうですか?

 a)  /⌒
    (   ↑
    ヽ、__ノ

それとも、こうですか?

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

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

>>14
仕様。fseekでも調べろ。
001615NGNG
>>14
ヘッダーでも調べろ。FILEは構造体だ。
0017デフォルトの名無しさんNGNG
>>13
昔は void がなかったので(汎用ポインタには) void * の代わりに char *
を使ったらしいです。その名残ではないでしょうか?
0018193→一休さんNGNG
 線形リストが、まだわからない。
0019デフォルトの名無しさんNGNG
>>16
実体はライブラリによって異なるから、
調べる意味がないようなきもする。

が、ライブラリのソースまで追って行くのであれば
それはそれで勉強になるか。
0020デフォルトの名無しさんNGNG
風俗にいってからちんちんが妙に痒いんだがどうしたらいい。
0021デフォルトの名無しさんNGNG
てーか何でFILEを表に出しているのか。
0022デフォルトの名無しさんNGNG
VirtualAlloc(NULL, Param.Image.BufferLength, MEM_COMMIT, PAGE READWRITE);
では、コミットするページ領域のサイズはいくつになるんでつか?
0023デフォルトの名無しさんNGNG
>>22
なぜCスレできくのでつか?
0024デフォルトの名無しさんNGNG
ほうれん草を炒める関数の名前はどうしたら良いですか?
0025デフォルトの名無しさんNGNG
そうでつね
0026デフォルトの名無しさんNGNG
frySpinach()
0027デフォルトの名無しさんNGNG
>>5
あっ、レスありがとうございます!
倉本安奈ちゃんかあ、今度見てみます!どうもですー
0028デフォルトの名無しさんNGNG
ある文字列から、スペースをデリミタとして、左辺と右辺に分ける関数を教えてください。結果は char 型のポインタで返ってくると嬉しいのですが。
0029デフォルトの名無しさんNGNG
>5 よ。 27 に返事してやれ。
0030デフォルトの名無しさんNGNG
>>27はスカ
0031デフォルトの名無しさんNGNG
>28
 左側はその文字列の先頭アドレスでいいよね。
 右側は、デリミタを検索(連続はチェックしてね)してその次のアドレスでいいよね。
0032デフォルトの名無しさんNGNG
いいよねじゃなくて、、、ソース書いてくれると嬉しいのですが。
0033デフォルトの名無しさんNGNG
ソース
0034デフォルトの名無しさんNGNG
>>32
strchrあたり使ってなんとかすれ。
0035デフォルトの名無しさんNGNG
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]));
とやったほうが速いように思うんですけど
このコードは移植性がありますか?
003631NGNG
>32 31で言った事だけで、もうソース書いたも同然だからあとは出来るはず。
   ていうか、Cを学びたいのであれば、ぜひやってみて下さい。
0037デフォルトの名無しさんNGNG
>>32
それくらい自分でやってくれると嬉しいのですが。
0038デフォルトの名無しさんNGNG
つまり、あなた方はできないわけだ。
0039デフォルトの名無しさんNGNG
出来ません。
0040デフォルトの名無しさんNGNG
strchr()の中身みたいんですけど、どこに書いてありますか?なんでもおk
0041デフォルトの名無しさんNGNG
CRT
0042デフォルトの名無しさんNGNG
CRTってディスプレイのことじゃないですよね?
いや、そうなんだろうけど、ここでの意味は?
0043デフォルトの名無しさんNGNG
China Raguby Team.
004431NGNG
>38
 そうじゃないです。僭越ですが、私はこのように書きました。
 デリミタが見つからない場合と、文字列の最後に見つかった場合は
NULLを返します。

#define delimit 0x20

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

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

  return myPtr;
}
0045デフォルトの名無しさんNGNG
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;
}
0046デフォルトの名無しさんNGNG
>>45
それってどこのフォルダにありますか?
0047デフォルトの名無しさんNGNG
>>40
http://sources.redhat.com/cgi-bin/cvsweb.cgi/~checkout~/libc/sysdeps/i386/strchr.S?rev=1.12&content-type=text/plain&cvsroot=glibc

これが最高に参考になります(藁
0048デフォルトの名無しさんNGNG
>46
VCインスコしたディレクトリの中にCRTっていうとこ。
CRTのインスコはオプションだよ。
0049デフォルトの名無しさんNGNG
>>48
ありがとうございました
0050デフォルトの名無しさんNGNG
>>22
ほかのスレに書いたんですがレスないでつ。
0051デフォルトの名無しさんNGNG
>>50
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_virtualalloc.htm
0052デフォルトの名無しさんNGNG
>>45
> c = (char)c;

なんだコリャ ?
0053デフォルトの名無しさんNGNG
VC++なんて持っていません。昔手に入れたワレズのエンタープライズエディションくらいならありますが、使うとやばいので使えません。
0054デフォルトの名無しさんNGNG
>>53
47のでいいじゃねえか。
0055デフォルトの名無しさんNGNG
ついでに、>>44も仕様を満たしてないと思われ
0056デフォルトの名無しさんNGNG
>>53
通報しますた
0057デフォルトの名無しさんNGNG
>>53
通報しました
0058デフォルトの名無しさんNGNG
>>53
もう一回通報しますた
0059デフォルトの名無しさんNGNG
>>53
MSKKにも通報しますた
0060デフォルトの名無しさんNGNG
YKKにも通報しますた
0061デフォルトの名無しさんNGNG
>>52
1ビット比較するのと4ビット比較するのはどっちが早いと思う?
006261NGNG
ビット -> バイト
0063デフォルトの名無しさんNGNG
マスクしてるのか?
0064デフォルトの名無しさんNGNG
>>61-62
どういう意味?
0065デフォルトの名無しさんNGNG
charは1バイトでしょ。
4ビットって?
0066デフォルトの名無しさんNGNG
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
0067デフォルトの名無しさんNGNG
なぜC++と比べてCの質問スレはこんなに盛況なのですか?








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

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

さっきはゴメン、頭眠ってるかも・・・オヤスミ...
0082デフォルトの名無しさんNGNG
>>81
それじゃだめじゃん。
つーか普通に c = (char)c; でいいじゃん。
0083デフォルトの名無しさんNGNG
*strとcの比較に影響出る?サイズ変わらないよね
0084デフォルトの名無しさんNGNG
>>83
だから、int cの下位8ビットだけ使うってことでしょ?
0085デフォルトの名無しさんNGNG
>>84
c=(char)c
↑これやるとなにか違いがあるの?
今Cコンパイラないから確認できないけど、意味内と思うよ。
0086デフォルトの名無しさんNGNG
#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;で良いんじゃ?
0087デフォルトの名無しさんNGNG
>>85
たとえば、cの内容が0x1111だったら明らかに違うじゃん。
0088デフォルトの名無しさんNGNG
>>81
アフォか。
char *str と int c を比較すれば int 型に暗黙変換される。
その時の *str が取りうる値は (int が 32-bit として)
0xFFFFFF80 (-128) 〜 0x0000007F (127) だ。
単にビットを切り取っただけだと、0x00000080 (128) を超える
数値ができて比較になんねーだろ。
char が unsigned char の処理系なら問題ないだろうけど。
0089デフォルトの名無しさんNGNG
char c = (char)i
これならなんとなくわかるけど、
実際吐き出すコードはどうなるんだろう
0090デフォルトの名無しさんNGNG
吐き出すコードがどうとかってより、挙動がちがうじゃん。
0091デフォルトの名無しさんNGNG
>>89
c = (char)c;

で、VC++ 6.0 は...

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

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

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

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

・・・アセンブラコードって何だよ、アセンブルした時のエラーコードか?
0099デフォルトの名無しさんNGNG
>>94って相当はずかしいな・・・・
0100デフォルトの名無しさんNGNG
>>92
その行があるのと無いのでは挙動がちがうじゃん。
わからんの?
0101デフォルトの名無しさんNGNG
>>100
だから、何のために「その違う挙動」が必要なのか聞いてるんだけど。
日本語理解できてないのか ?
■ このスレッドは過去ログ倉庫に格納されています