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

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

C言語のことは漏れらに聞け!!<サンキュー>

1 :前スレ949:02/11/04 20:29
前スレのコピペだモルァ

・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/

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

コンパイラ、過去ログなどのリンクは>>2-5 あたり

2 :デフォルトの名無しさん:02/11/04 20:30
そし

3 :前スレ949:02/11/04 20:32
【コンパイラ】
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

さらにコピペ


4 :デフォルトの名無しさん:02/11/04 20:32
>>950の策略にはまりスレを立てる羽目になった>>949が立てたスレはここですか?

5 :前スレ949:02/11/04 20:33
そです

6 :前スレ955:02/11/04 20:40
1000行くぞゴルァ。

7 :デフォルトの名無しさん:02/11/04 20:41
ああ、タイトルとともにまたレベルが下がるのか。
ああ・・

8 :デフォルトの名無しさん:02/11/04 20:43
ここはObjective-Cの話題を持ってきてもいいんですか?

9 :デフォルトの名無しさん:02/11/04 20:43
>>8
いや、ダメすぎ。

10 :955:02/11/04 20:45
マ板の語尾にゴラァ!を付けるスレッドもよろしく
宣伝スマソ

11 :デフォルトの名無しさん:02/11/04 20:45
level=level--; /* levelが1下がる */


12 :デフォルトの名無しさん:02/11/04 20:47
>>11
無駄の多い処理ですな。

13 :デフォルトの名無しさん:02/11/04 20:52
CとC# の違いを教えてください。

14 :デフォルトの名無しさん:02/11/04 20:53
>>13
適当なソースコード探してきて比較して見な。全然違う。

15 :13:02/11/04 20:54
>>14
VC++.NETとVC#.NETのパッケージのソースコードの写真でわかりますた。
ご迷惑かけますた。

16 :デフォルトの名無しさん:02/11/04 20:55
最初<サンキュー> って見たとき何を感謝しているんだ?とマジで思った・・・
鬱だ・・・

17 :デフォルトの名無しさん:02/11/04 20:56
>>15
今どこにいるんだと小一時間・・・

18 :デフォルトの名無しさん:02/11/04 21:01
math.hでa^bという計算をしたいのですがどうすればいいでしょうか?

19 :デフォルトの名無しさん:02/11/04 21:02
>>18
a^bはビットごとのXORですが。

べき乗(だっけ?)ならpow()で。

20 :デフォルトの名無しさん:02/11/04 21:02
>>18
pow(a,b);
でいいんじゃなかったっけ?
違かったらスマソ。

21 :デフォルトの名無しさん:02/11/04 21:16
char s[512];
char *sp;
sp = s;
printf("s = %d\n", sizeof(s));
printf("sp = %d\n", sizeof(sp));
これが同じにならないのは何故ですか?

22 :デフォルトの名無しさん:02/11/04 21:18
>>21
何故って…型が違うだろ?

23 :デフォルトの名無しさん:02/11/04 21:18
ポインタと配列は違うからデス。

24 :デフォルトの名無しさん:02/11/04 21:20
>>21
下はポインタのサイズ(きっと4バイトだろ?)
上は配列のサイズ(512バイト)

25 :デフォルトの名無しさん:02/11/04 21:25
var_end(ap);で何かやってる処理系ってありますか?
何もしないのも多いと思いますし、必要ないともおもえるんですが...

26 :デフォルトの名無しさん:02/11/04 21:31
CとC++ の違いを教えてください。

27 :21:02/11/04 21:31
ありがとうございます。>>21の状況で
spからsのサイズを出すことはできないのでしょうか?

28 :デフォルトの名無しさん:02/11/04 21:32
>>27
できない。
だから一部の標準関数はサイズを引数として渡す。


29 :21:02/11/04 21:36
>>28
ありがとうございました。

30 :デフォルトの名無しさん:02/11/04 21:37
関数をポインタで使う方法について教えてください。出来れば例をのせていただけると助かるのですが。
お願いいたします。

31 :デフォルトの名無しさん:02/11/04 21:38
>>30
夕方あたりにちゃんと書いたのに無視なんですか?
悲しいです。

32 :デフォルトの名無しさん:02/11/04 21:40
>>30
本に載っていないのかな・・・

#include <stdio.h>

int main()
{
int (*myputs)(const char *);

myputs=puts;
myputs("putsと同じように使える。");

return 0;
}


33 :32:02/11/04 21:41
もちろんこのコードにはなんの意味もないから。
実際はqsortライブラリ関数なんかでうまく使われているよ

34 :デフォルトの名無しさん:02/11/04 21:42
そもそも関数へのポインタを使わなければならないのはどんな状況かお分かり?
それが分かってれば、前スレの終わりには関数へのポインタを使ったのがいくつかあったと思うが。

35 :デフォルトの名無しさん:02/11/04 21:53
>>24
疑問なんだが、なぜ4バイトだと思う??
2バイトじゃないのか?

#include<stdio.h>

main()
{
int* a;
long* b;
char* c;
double* d;

puts("int* a");
puts("long* b");
puts("char* c");
puts("double* d");

printf("\n");

printf("sizeof a...%d\n",sizeof a);
printf("sizeof b...%d\n",sizeof b);
printf("sizeof c...%d\n",sizeof c);
printf("sizeof d...%d",sizeof d);
}ちなみに漏れのポインタ変数の確保するサイズは2バイト。


36 :デフォルトの名無しさん:02/11/04 21:56
>>35
MS-DOSとか使ってる?

37 :デフォルトの名無しさん:02/11/04 21:56
きっとCPUが286なのれす。

38 :デフォルトの名無しさん:02/11/04 21:57
ドス窓のことか?
OSはWindowzeだけど。

39 :デフォルトの名無しさん:02/11/04 21:58
>>37
どういうことですか?
詳しく聞きたいです。

40 :デフォルトの名無しさん:02/11/04 21:59
>>35
「きっと」4バイト、と書いてある。
無論ポインタのサイズなどは処理系によって違う。
今ポピュラーな環境だとポインタサイズは大抵4バイトといっても
強ち間違いじゃないと思う。

ポインタサイズが2バイトの処理系というと、MS-DOSのsmall modelやら、
com (tiny) modelなんだろう。処理系で言うとLSI-C 86あたりか。
LSI-C 86の試食版でもfarポインタは扱えたと思うんで、
ポインタをfar修飾すればサイズは4バイトになる。
重ねて言うが、処理系によってこの辺は違う。

41 :デフォルトの名無しさん:02/11/04 21:59
>>39
CPUがどんな感じにメモリを管理しているかの問題。


42 :デフォルトの名無しさん:02/11/04 22:05
>>40
>>41
ありがとうございました。
>>40
かなりの知識の持ち主ですね。
前橋のポインタ完全制覇とか余裕そうです。

ちなみに、LSI-C(試食版)を使っております。


43 :デフォルトの名無しさん:02/11/04 22:06
>>42
ここにいる奴の半分以上は余裕だと思われ。
複雑なようでわかれば簡単と。

44 :デフォルトの名無しさん:02/11/04 22:10
>42

仕事にするなら完全制覇した上で就くのが当然。
それもやらんとゴミプログラマ雇ってる奴らが(以下略)
勉強がんばり〜。

45 :デフォルトの名無しさん:02/11/04 22:12
>>43
もっと勉強します。

あと多少マルチスレッドになるんですが、
#include<stdio.h>

main()
{
char* color_name[]=
{
"hoge",
"piyo",
"hoge_p"
};

printf("%d\n",color_name); /*?*/
printf("%d\n",color_name+1); /*?+2*/
printf("%d\n",color_name+2); /*?+4*/
/*これは何故2バイトずつ進むのでしょうか?
char配列を指しているので、1バイトずつ進むと思うんですが*/

puts("");

printf("%s","aiueo");
}/*お願いします。*/

46 :デフォルトの名無しさん:02/11/04 22:12
>>33
他にもatexitとかな。標準関数じゃないけどsignalとか。
signalのプロトタイプを初めて見たときは頭が真っ白になったよ(w

47 :デフォルトの名無しさん:02/11/04 22:14
C FAQによるとsprintfって安全じゃないとのことですが
snprintfが使えない人たちってどうやって回避してるのですか?
やっぱC FAQの例みたいにファイルに書いたりしてるのでしょうか?


48 :デフォルトの名無しさん:02/11/04 22:14
>>45
color_nameはcharの配列ではない。charのポインタの配列だ。
配列に入っているのは(char *)だ。

49 :デフォルトの名無しさん:02/11/04 22:14
>>44
Arigatou
がんばります。

50 :デフォルトの名無しさん:02/11/04 22:15
すみませんが教えてください。
C言語をはじめた3ヶ月、ほぼマスターしました。
ただまだGUIを使ったPGが作れません。何からはじめたらいいでしょうか?

51 :デフォルトの名無しさん:02/11/04 22:16
>>50
環境は?

52 :デフォルトの名無しさん:02/11/04 22:17
>>46
signalは標準

53 :デフォルトの名無しさん:02/11/04 22:17
>>47
堅牢性が最重要のプログラムで、
printfに渡すパラメータが信用できないときは
ファイルに一度書くだろうな。

そうでないときは、えいやってやっちゃうこともある(w
ま、大抵snprintfが使えるのでそっちを使っちゃうけど。

54 :デフォルトの名無しさん:02/11/04 22:19
>>48
メモリの中では
color[0]つまり*(color_name) には hogeの先頭アドレスが、
colo [1]つまり*(color_name+2)には piyoの先頭のアドレスが、
color[2]つまり*(color_name+3)には hoge_pの先頭のアドレスが、
入っているんじゃないんでしょうか?

具体的に教えていただけると助かります。

55 :デフォルトの名無しさん:02/11/04 22:22
訂正
>>48
メモリの中では
color_name[0]つまりcolor_nameにはhogeの先頭アドレスが、
colo_name[1]つまりcolor_name+2にはpiyoの先頭のアドレスが、
color_name[2]つまりcolor_name+3にはhoge_pの先頭のアドレスが、
入っているんじゃないんでしょうか?

具体的に教えていただけると助かります。


56 :デフォルトの名無しさん:02/11/04 22:24
>>55
その通り。で、その先頭アドレスが君のLSI-C試食版だと2バイトなのよ。

57 :デフォルトの名無しさん:02/11/04 22:25
マルチスレッドじゃなくてマルチポストだった

58 :デフォルトの名無しさん:02/11/04 22:25
>>53
レスありがとうございます。
幸いsnprintfが使えるようですので、これを使います。


59 :デフォルトの名無しさん:02/11/04 22:27
>colo_name[1]つまりcolor_name+2
ここ、激しく間違いネ。まだ54の方が間違いが少ないネ

60 :デフォルトの名無しさん:02/11/04 22:27
>>57
マルチポストってなんでしょうか?
マルチスレッドとは違うスレッドでも同じことを書き込むことですよね?

61 :50:02/11/04 22:28
環境はWindows2000です。使用しているコンパイラはBorlandC++です。
何からはじめたらいいでせうか?

62 :デフォルトの名無しさん:02/11/04 22:29
>>61
PC窓から投げ捨てる。

63 :デフォルトの名無しさん:02/11/04 22:30
>>60
キミセンスアルヨ

64 :デフォルトの名無しさん:02/11/04 22:30
>>54
その通り。君の処理系だとポインタサイズは2バイトだったな。
だとすると、こんな感じ。

前橋のポインタ本を持ってるようだから、
(実はおれも持ってる。知り合いなので、ご祝儀に買った(w)
205ページのFig.3-19ポインタの配列を見てくれ。
このようなイメージで格納されている。
配列color_nameの要素はあくまでポインタだ。
配列にはポインタがずらずらと格納されてる。

だから、ポインタのサイズが2のとき、
要素が一つ増えると、アドレスは2増えることになる。



65 :デフォルトの名無しさん:02/11/04 22:30
>>61
他の開発環境使った方が楽では?

66 :デフォルトの名無しさん:02/11/04 22:35
>>61
こんなところからはじめてみては?

猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/ 
C言語で始めるWindowsプログラミング
http://web.kyoto-inet.or.jp/people/ysskondo/


67 :デフォルトの名無しさん:02/11/04 22:37
>>64
知り合いなんですか???
やっぱり前橋さんは凄腕PGなのでしょうか?



68 :デフォルトの名無しさん:02/11/04 22:42
いや、知ってるけどたいしたこと無いよ。

69 :64:02/11/04 22:44
>>67
んなこたあスレ違いだ(w
残念ながら一緒に仕事したことはないが、
おれよりははるかに優秀なプログラマだと思うよ。

70 :35,39,42,45,49,54,55,60,67==Zetton:02/11/04 22:44
>>68
むしろ自分の方が凄腕だと。(w

71 :50:02/11/04 22:45
>>66
ありがとうございます。試してみます。
極めたらまたきます。

72 :HP電卓、■に何が入るのかが分かんない:02/11/04 23:03
#include<stdio.h>
#include<stdlib.h>
struct list{ int data;
struct list *next;};

void push(int y);
int pop();
void print_stack()
struct list *head=NULL;

void push(int y){ struct list *p; p=head; head=new list; if(head==NULL){ printf("Stack overflow.\n"); exit(1);} head->data=■; head->data=■;}

int pop(){ int y; if(head==NULL){printf("Stack underflow.\n");exit(1);} y=■;head=head->next;return y;}

void print_stack(){ struct list *p; p=head; while(p !=NULL){ printf("%d",■); p=p->■;} printf("\n");}

int main(){ int x,y,z; char s[10],c; while(1){ scanf("%s",s); c=s[0]; switch(c){
case'+':x=pop()+pop(); printf("%d\n",x); push(x); print_stack(); break;
case'-':x=pop(); y=pop(); z=y-x; printf("%d\n",z); push(z); print_stack(); break;
case'*':x=pop()*pop(); printf("%d\n",x); push(x); print_stack(); break;
case'/':x=pop(); y=pop(); z=y/x; printf("%d\n",z); push(z); print_stack(); break;
case'q':case'Q':exit(1);
default:push(atoi(s));
print_stack();}} return 0;}



73 :デフォルトの名無しさん:02/11/04 23:11
うう、出掛けててネット触れなかった間に次スレ立ってた・・・。

しかし、1 は何故 「課題丸投げ禁止」 を書いてくれなかったの?
関連リンクは 2 以降にして、1 は諸注意でかためて欲しかった。

74 :デフォルトの名無しさん:02/11/04 23:14
前橋の本にあるさ、P104のソースで
va_end();
ってなってて引数ないじゃん?
これいいの?


75 :Zetton:02/11/04 23:16
>>74
間違ってると思います。
正誤表はこちら
http://member.nifty.ne.jp/maebashi/seiha/seigo.html

76 :デフォルトの名無しさん:02/11/04 23:17
>>74
いいよ

77 :デフォルトの名無しさん:02/11/04 23:19
>>74君氏んで良いよ…。

78 :デフォルトの名無しさん:02/11/04 23:21
>>72
つかCじゃ無いじゃん…。


79 :デフォルトの名無しさん:02/11/04 23:22
>>46

初めて見たとき、シグナルを送るだけなのになんで関数ポインタが必要なんだ?と思ったよ。
シグナルを送るのはraiseだよな(w

80 :デフォルトの名無しさん:02/11/04 23:24
>>78
パッと見Cに見えるけど何なの?

81 :デフォルトの名無しさん:02/11/04 23:25
>>78
うーん?
Cの範囲で書いていると思うけど?
なんか見落としているかな・・・

82 :デフォルトの名無しさん:02/11/04 23:25
C99とかJISでしょうか?

83 :もまずにパピコ:02/11/04 23:26
>>81
head=new list

84 :81:02/11/04 23:27
>>83
おお!まじだ!

85 :デフォルトの名無しさん:02/11/04 23:28
>>75
サンクス!
それにしてもとんでもなく多かった・・・。
果たしてこの本使えるのか?
っていうかなんか前橋ってむかつくな

86 :デフォルトの名無しさん:02/11/04 23:38
>>73
前スレでも似たような事があったな。

87 :デフォルトの名無しさん:02/11/04 23:39
>>77
なんで?

88 :デフォルトの名無しさん:02/11/04 23:43
>>87
前スレの>>905


89 :デフォルトの名無しさん:02/11/05 00:11
ポインターのサイズオフ
ターボシーは2だったよ


90 :デフォルトの名無しさん:02/11/05 00:14
>>89
サイズオブ・・・・・どうでもいいけど

91 :デフォルトの名無しさん:02/11/05 00:19
>>89
へぇ、俺にTurboC++5.0Jは4バイトだが。

92 :デフォルトの名無しさん:02/11/05 00:21
near,far

93 :デフォルトの名無しさん:02/11/05 00:23
>>73
遅レスだが、ここは宿題すれじゃないから、
そもそも課題をここに投げちゃいかんと思う。

94 :デフォルトの名無しさん:02/11/05 00:23
以降


   あまりに環境依存・コンパイラ依存の話題禁止

 

95 :コンパイラ:02/11/05 00:23
今度の中間テストはポインタと構造体なんです。
全然わかりません(泣)

96 :デフォルトの名無しさん:02/11/05 00:24
>>74
俺その本の第五刷持ってるよ!
23:va_end(ap);に直ってるよ。

>>91
ふ〜ん・・・買って来よ(以下略

97 :デフォルトの名無しさん:02/11/05 00:26
つーかプログラミングって学校で学ぶようなものなのか?

98 :デフォルトの名無しさん:02/11/05 00:27
>>97
俺は中学生なのですべて独学だ

99 :デフォルトの名無しさん:02/11/05 00:30
俺は医学を専攻していたがなぜかプログラマだ。
スーパープログラマーKを目指している。
いつかあの鍛え上げられた肉体を手に入れ、
「なぜプログラマがそんな筋肉を……」の問いに
「必要だからだ!!」と答えるのが夢だ。
……問題は、なぜ必要なのかが分からないことだ……

100 :デフォルトの名無しさん:02/11/05 00:32
エネルギーを必要な時に必要なだけ供給できるように
体を鍛えておく必要がある。
とでも言っておけば?

101 :デフォルトの名無しさん:02/11/05 00:33
四則演算もわざわざ学校で習うようなことじゃないよな。

102 :デフォルトの名無しさん:02/11/05 00:43
学校で学ぶべきものなんて何一つないだろ。


103 :デフォルトの名無しさん:02/11/05 00:46
>>97-102
ここはC言語のすれなのだが・・・

104 :デフォルトの名無しさん:02/11/05 00:49
以降


    レ  ス  禁  止


105 :デフォルトの名無しさん:02/11/05 01:07
>>102そんな奴らがロクに人間関係も作れないようなプログ(略

106 :デフォルトの名無しさん:02/11/05 01:09
人とのつきあい方くらい独学で身につけられるだろ

107 :デフォルトの名無しさん:02/11/05 01:24
Cスレだっつの

108 :デフォルトの名無しさん:02/11/05 01:41
C で例外を実装する方法ってありますか?
特に 0 除算とかセグメンテーションフォールトとか・・・。

109 :デフォルトの名無しさん:02/11/05 01:42
>>108
処理系によってはシグナルが飛んでくるかもしれない。

110 :108:02/11/05 01:46
やっぱり処理系依存なんですね。
ありがとうございました。

# C++ の例外の実装ってどうなってるんだろう・・・。

111 :デフォルトの名無しさん:02/11/05 01:46
>>108
signal()

112 :デフォルトの名無しさん:02/11/05 01:47
>>110
C++の例外はハードエラーは補足できないよ。
setjmpとlongjmpに近いと思われ。

113 :デフォルトの名無しさん:02/11/05 01:48
>>108
0除算はSIGFPE、セグメンテーションフォールトはSIGSEGV
を処理すればできそう

114 :デフォルトの名無しさん:02/11/05 02:02
__try{}__except{}__finally{}__leave

115 :デフォルトの名無しさん:02/11/05 02:07
スタックの基本的な問題で入力した文字を覚えていく問題に
PushDown関数に戻り値(スタックオーバーフローに検出を行い、
エラーの場合エラーコードを戻り値にして返すようになっているか)
という条件がついているのですが意味がよくわかりません。
解説してもらえませんか?

116 :デフォルトの名無しさん:02/11/05 02:09
>>115
質問の意味がわかりません

117 :デフォルトの名無しさん:02/11/05 02:09
>>115
用意されたスタック(まあこの場合は配列か何かだろ)以上にデータを積もうとしたらエラーコードを返すってことでしょ。

118 :117:02/11/05 02:13
s/スタック/スタックのサイズ/

まあ分かると思うが

119 :デフォルトの名無しさん:02/11/05 02:15
最近は助詞もまともに使えない奴がいるのか…。
プログラム言語の前に日本語勉強してくれよと言いたくなる。


120 :デフォルトの名無しさん:02/11/05 02:41
>>119
2ちゃんねるでわざわざ誤植を指摘すんなよ。

121 :ねみー:02/11/05 04:19
コマンドライン引数ってよくわかりませーん。
何がわからないのかって?
独習Cで「main()関数の引数を指定する」という項目で、コマンド(略)の事が書いてるんですけど
まったく同じコーティングしてビルドしても何もなりません。
VC++を使っております。atoi関数などももう少し詳しく教えて欲しいです

122 :デフォルトの名無しさん:02/11/05 07:58
コーディングガオカシインダロ

123 :デフォルトの名無しさん:02/11/05 08:29
>>121
おう、基礎だから勝手に学べ。

124 :俺、超初心者:02/11/05 14:34
分割コンパイルについて質問です。
AというファイルとBというファイルがあります。
Aというファイルで作成した構造体やクラスのオブジェクトと
ファイルBで扱いたいのですが、ヨクワカリマセン!!
HELP!

125 :訂正:02/11/05 14:41
分割コンパイルについて質問です。
AとBの2つのファイルをコンパイスしようと思います。
そこでAというファイルで作成した構造体やクラスのオブジェクトを
ファイルBで扱いたいのですが、ヨクワカリマセン!!
HELP!

126 :デフォルトの名無しさん:02/11/05 14:50
>>124
「Aというファイルで作成した構造体」をヘッダファイルで定義しろ
AとBの2つのファイルにそのヘッダファイルをincludeしろ
「コンパイス」のやり方は俺は知らん。googleに聞いても分からなかった。

127 :デフォルトの名無しさん:02/11/05 14:50
>>125
とりあえずincludeしなさい。

128 :デフォルトの名無しさん:02/11/05 15:20
staticを付けたら、ソース内で同一アドレスにあるってことはさ
例えばforで繰り返し処理してインクリメントしまくったあと
その複文を抜けても、値を維持してるって事?
あとstaticを付けたら、0で初期化されるってマジ?

129 :デフォルトの名無しさん:02/11/05 15:46
>>128
> 例えばforで繰り返し処理してインクリメントしまくったあと
> その複文を抜けても、値を維持してるって事?
試 し て み ろ 。 す ぐ 分 か る

> staticを付けたら、0で初期化されるってマジ?
マジです。浮動小数点なら0.0、ポインタならNULLで初期化される
ことがANSI-Cでは保証されてます

130 :デフォルトの名無しさん:02/11/05 16:11
>>129
試しますた。分かりますた。
でもメモリ管理とかまだよく分かってないんで、
いろいろ勉強するYO!
待ってろビルゲイツ。

131 :デフォルトの名無しさん:02/11/05 16:32
130 は何を企んでいるのか (((( ;゚Д゚))) ガクガクブルブル

132 :デフォルトの名無しさん:02/11/05 16:41
Cファイルが拡張し付いてない状態の時のアイコンなんですけど、
どうしたらCファイル専用のアイコン(Cとだけ書かれたシンプルなアイコン)
になるんでしょうか?

133 :デフォルトの名無しさん:02/11/05 16:57
>>132
初心者板にでも行ってファイルの関連付けについてでも教えてもらってください。
スレ違い。

134 :デフォルトの名無しさん:02/11/05 17:03
#include <stdio.h>

int main()
{
int n, i, j;
char gazo[1000][1000];
n = 5;
for (i = 0; i <= (n-1); i++) {
for (j = 0; j <= (n-1); j++){
if (i == 0 || i == (n-1) || j == 0 || j == (n-1))
gazo[i][j] = '*';
else
gazo[i][j] = ' ';
}
}
for (i = 0; i <= (n-1); i++) {
for (j = 0; j <= (n-1); j++){
printf("%s", gazo[i][j]);
}
printf("\n");
}
return 0;
}


なんで動かないんだーーー

135 :デフォルトの名無しさん:02/11/05 17:05
>>134
デバッガでトレースしてください。
わからなければ printf() デバッグしてください。

その苦労をサボりたいならすれ違いなので添削スレに逝ってください。

136 :デフォルトの名無しさん:02/11/05 17:12
>>134
gccだったら-Wallを付けると見つかるけど何か?

137 :134:02/11/05 17:13
if (i == 0 || i == (n-1) || j == 0 || j == (n-1))

このへんがおかしいッポイです。
でもこれの何処がおかしいのかわかりません。



138 :デフォルトの名無しさん:02/11/05 17:14
>>134
%sを%cにするといいかも


139 :134:02/11/05 17:15
>>136
すみません、gccじゃないのでよく分からないです。
ごめんなさい。


140 :デフォルトの名無しさん:02/11/05 17:17
>>137
そこはおそらく君の思ったとおりの動作です。
core dumpする原因はgcc -Wallだと
  warning: format argument is not a pointer (arg 2)
とかいうメッセージが出てきます。

141 :ななしさん:02/11/05 17:21
>char gazo[1000][1000];
>n = 5;

なぜ#defineしないですか。

for (i = 0; i <= (n-1); i++) {
for (j = 0; j <= (n-1); j++){

なぜ素直に i < n で判断しないですか。

>if (i == 0 || i == (n-1) || j == 0 || j == (n-1))
>gazo[i][j] = '*';
>else
>gazo[i][j] = ' ';

なぜわざわざ複雑な条件で'*'や' 'を代入するですか。
もっと簡単に方法があると思うです。

>printf("%s", gazo[i][j]);

>>135さんの言うとおり、printf()を調べるです。
"文字"と(C言語で言うところの)”文字列”の違いって分かるですか?



142 :Zetton:02/11/05 17:39
>>141
スタック取りすぎじゃないか?

143 :134:02/11/05 17:43

>>138
ちゃんと動作しました。

>>140
そうでした。

>>char gazo[1000][1000];
>>n = 5;
>↑
>なぜ#defineしないですか。
デバッグまがいのことしてるうちにこうなってしまいました。
原因がわかったので直します。

144 :134:02/11/05 17:43
>for (i = 0; i <= (n-1); i++) {
>for (j = 0; j <= (n-1); j++){
>↑
>なぜ素直に i < n で判断しないですか。
まったくもって自分はバカでした。

>>if (i == 0 || i == (n-1) || j == 0 || j == (n-1))
>>gazo[i][j] = '*';
>>else
>>gazo[i][j] = ' ';
>↑
>なぜわざわざ複雑な条件で'*'や' 'を代入するですか。
>もっと簡単に方法があると思うです。
ちょっと思いつきませんでした。

>>printf("%s", gazo[i][j]);
>↑
>>135さんの言うとおり、printf()を調べるです。
>"文字"と(C言語で言うところの)”文字列”の違いって分かるですか?
理解はしてましたが実際使ってみたら忘れてました。

145 :デフォルトの名無しさん:02/11/05 17:46
%sは\0で終わる文字列を指すポインタを期待しているんだぜ。
char型、つまり整数なんて与えたら変なところにアクセスしてしまって・・・

146 :134:02/11/05 17:48
>>145
不正な処理になってしまったわけですね。
プログラミングは実際に打たないと成長しませんね。

147 :デフォルトの名無しさん:02/11/05 17:49
>>146
一文字表示させるだけならputchar(gazo[i][j]);でいいんじゃない?

148 :未亡人 ◆gLo7a3IgfY :02/11/05 18:06
自称、脱初心者のオレに
適当な問題きぼんぬ

149 :デフォルトの名無しさん:02/11/05 18:07
>>148
ここはそういうスレではありません。
Web で検索してください。

1 よ、何故諸注意を書かなかった・・・?

150 :デフォルトの名無しさん:02/11/05 18:07
テトリス作れ。
ルールを拡張しろ。
ハイスコア機能をつけろ。
ネットランキング機能をつけろ。
ネット対戦機能をつけろ。

151 :デフォルトの名無しさん:02/11/05 18:08
>>148
問題

   自由研究

152 :未亡人 ◆gLo7a3IgfY :02/11/05 18:13
>>149
じゃあどういうスレなんでつか?

■▲▼
【1:151】C言語のことは漏れらに聞け!!
C言語の事ですが何か?

153 :デフォルトの名無しさん:02/11/05 18:16
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *variable_array=NULL;
int size=0;
char buf[256];
int i;

while(fgets(buf,256,stdin)!=NULL)
{
size++;
variable_array=realloc(variable_array,sizeof(int)*size);
sscanf(buf,"%d",&variable_array[size-1]);
}

for(i=0;i<size;i++)
printf("V_A[%d]...%d\n",i,variable_array[i]);

return(0);
}
このプログラムはどうやったら終わるの?

154 :デフォルトの名無しさん:02/11/05 18:18
>>153
Ctrl+DかCtrl+Zを押せば終わるかも。

155 :154:02/11/05 18:21
>>153
そのプログラムまずいんじゃないか?
reallocで得た新しい領域の先頭が以前と同じだとは限らないはず。

156 :154:02/11/05 18:24
あ・・・ちゃんと戻り値を受けていた。ごめん。見間違った
戻り値チェックはしようね。

157 :153:02/11/05 18:27
>>154
なぜか終わらない・・・。DOS窓からやらんとあかんのかな。
NULLって定数の0にみたいなもんでしょ?それとも^cなん?
>>155
マジ!?これ本に載ってるソースなんだけど。
てかmallocとreallocの違いが良くわからん。
mallocは領域を与えたいとこに対して一回だけ使うんだよね?
reallocはその後ろに伸ばしていくんでないの?

158 :153:02/11/05 18:28
>>156
すまそ。戻り値チェックってwhileの条件式内のやつでないの?

159 :Zetton:02/11/05 18:29
>>ALL
確認:返り値と戻り値って同じ意だよね?

160 :154:02/11/05 18:29
>>157
見間違ったんだってば。本ということは戻り値チェックは省略か。

fgetsはEOFを検出するとNULLを返すから、DOS窓・・・windowsならCtrl+Zで終わると思うよ。
本当に終わらない?

161 :153:02/11/05 18:30
やべ。>>157
終わらないんでなくて、printf文が実行されん。

162 :154:02/11/05 18:30
>>158
reallocの戻り値チェックのこと。
malloc同様、必ずしも成功するとは限らないから。
本のサンプルなら問題に焦点を当てるために省略していると思うけど。

163 :154:02/11/05 18:32
>>161
なんだあれか。
Windows9XのDOSプロンプトだとなぜかそうなる。
stdinからじゃなくてファイルから読みとってみれば?

164 :153:02/11/05 18:32
>>160
わり。レス書いてるうちに更新されたみたい。

で、^Cやってみたけど、終了はするんだけどさ
その後printf文で、格納した要素を出力してんじゃん?
そこが何も起きないんだ。
あと>>158マジでわからん。

165 :デフォルトの名無しさん:02/11/05 18:33
^Cは強制終了。
^ZはEOF入力。
だったはず。

166 :デフォルトの名無しさん:02/11/05 18:34
>>164
^Cは強制終了。もっともWin9Xなら^Zでも思い通りに動かないけど

167 :153:02/11/05 18:34
>>163
XPでも一緒か。NTカーネル?だっけ?あれ系?
OSの問題なら、コンパイラがどうこうとかでないのね。
結局malloc使えとな。でもrealloc使った方が見栄えいいよね。
mallocだったらサイズいるもん。

>>162
ごめんだけど、例えばどんな感じ?

168 :153:02/11/05 18:36
>>165>>166
あり。でけました。
でもオレは確か^C=EOFって習った気が・・・
あぁ復習しないと。

169 :153:02/11/05 18:39
>>168
はい、オレの勘違いだったぁぁ!!!
鬱だ・・・。母さん、死んでいいですか?

170 :デフォルトの名無しさん:02/11/05 18:47
全角とハンカクを区別する関数ってある?

171 :デフォルトの名無しさん:02/11/05 18:47

 |  さいたまさいたまさいたま!をやっていいですか?
 \____  ________________/
    /||ミ  V
   / ::::||
 /:::::::::::||____
 |:::::::::::::::||       ||
 |:::::::::::::::||│ /  ||
 |:::::::::::::::|| ̄\   ガチャッ
 |:::::::::::::::||゚ ∀゚)   ||
 |:::::::::::::::||_/    ||
 |:::::::::::::::||│ \   ||
 |:::::::::::::::||∧ ∧∩ ..||
 |:::::::::::::::|| ゚∀゚)/  .||
 |:::::::::::::::||∧ ∧∩ ..||
 |:::::::::::::::|| ゚∀゚)/ ..||


172 :デフォルトの名無しさん:02/11/05 18:49
(・∀・)カエレ!!

173 :デフォルトの名無しさん:02/11/05 18:49
ファイルの入出力で高水準と低水準って
どんな時に使い分けるんですか?

174 :デフォルトの名無しさん:02/11/05 18:51
>>173
楽したい時と格好つけたいとき。

175 :( ○ ´ ー ` ○ ):02/11/05 18:54
 線形リストの先頭ノードと末尾ノードにわける理由を教えてください。
   本の内容を、目で追っていたのですが・・・。
  難しく考えるばかりで、進展がない。

176 :デフォルトの名無しさん:02/11/05 18:56
>>175
日本語がおかしい。
推測で答えると、末尾に追加したいときには
最後のノードへのポインタを保持しておくと便利だ。

177 :Zetton:02/11/05 18:58
モジュールとサブルーチンの違いを教えて下さい。

178 :デフォルトの名無しさん:02/11/05 19:07

             ∩
                 | |
                 | |
        ∧_∧   | |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ( ;´Д`)//  < 先生!素人以下の知識しかないプロが居まつ!
      /       /     \___________________
     / /|    /
  __| | .|    |
  \   ̄ ̄ ̄ ̄ ̄ ̄ ̄\
  ||\             \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||


179 :デフォルトの名無しさん:02/11/05 19:29
モジュールはフランス語。
サブルーチンは英語。

180 :デフォルトの名無しさん:02/11/05 19:34
以下


    禁  止



181 :デフォルトの名無しさん:02/11/05 20:26
>>179
そうかい?英語にもモジュールという単語あるぞ。

182 :デフォルトの名無しさん:02/11/05 20:30
>>181
ネタにマジレス…

183 :デフォルトの名無しさん:02/11/05 21:13
ボンジュールと掛けたんじゃないの?

184 :デフォルトの名無しさん:02/11/05 22:01
誰か前橋の「C言語ポインタ完全制覇」持ってる人いない?
いたらさ、P218のソースにmain関数ないんだけども、どういうこと?

185 :前橋 ◆81oseo2HKE :02/11/05 22:05
前橋ですが、何か?

186 :デフォルトの名無しさん:02/11/05 22:05
質問があります。
今、C言語で画像処理プログラムを組んでいるのですが、
既製のUSBカメラから画像データを引っ張るにはどのようにすれば
よいのでしょうか?

187 :デフォルトの名無しさん:02/11/05 22:06
( ;´Д`)そんなこと言われても・・

188 :デフォルトの名無しさん:02/11/05 22:08
>>186
C は USB をはじめとするデバイスを定義していません。
従って環境依存です。
このスレは純粋に C を扱っているスレなのでスレ違いです。

実際の方法は、カメラのメーカーに問い合わせてください。

189 :184:02/11/05 22:16
>>185
あ、前橋だ。
何か?じゃなくてよ、>>184見ろよw

190 :デフォルトの名無しさん:02/11/05 22:18
>>188
いや、普通にありですが。
>>188からスレ違いになったのですか?
なかなか、タイムリーですね。

191 :デフォルトの名無しさん:02/11/05 22:18
>>188
じゃあCで出来ることはコンソールに文字出して遊ぶくらいですね。

192 :前橋 ◆81oseo2HKE :02/11/05 22:19
実はあの本友達に書いてもらったんだ・・・。

193 :デフォルトの名無しさん:02/11/05 22:23
>>192
騙りは犯罪です。通報しました。

194 :デフォルトの名無しさん:02/11/05 22:25
#include<stdio.h>

int main(void)
{
int hoge[]={1,2,3};

printf("%d ",&hoge[0]); /**/
printf("%d ",&hoge[0]+1); /**/
printf("%d",*(&hoge[0]+2)); /**/

この時、&hoge[0]はメモリ上に確保されるの?
return 0;
}


195 :デフォルトの名無しさん:02/11/05 22:25
>>186
1. 使用しているチップを特定する。
2. チップのマニュアルを調べる。
3. ドライバを書く。

196 :デフォルトの名無しさん:02/11/05 22:28
>>193
さすがにトリップ付けたのはやりすぎた。
ゴメソ本物の前橋

197 :デフォルトの名無しさん:02/11/05 22:30
>>194
コンパイルできない!!なんでだああ!!!

198 :デフォルトの名無しさん:02/11/05 22:31
printf("%d ",&hoge[0]+1); /**/
この実引数あり?

199 :デフォルトの名無しさん:02/11/05 22:33
>194
printfは可変引数で、これをレジスタに割り付けるような
処理系はちょっと考えられないから、まあ、メモリ上にも
存在するといってもいいかもしれない。
実体としては即値で終わり。

 し か し 腐 っ た コ ー ド だ な

200 :デフォルトの名無しさん:02/11/05 22:34
>>198
あり

201 :デフォルトの名無しさん:02/11/05 22:39
今日
#define SWAP(X,Y) do{int W; W=X; X=Y; Y=W;}while(0)
とやったらループは無駄だといわれたんだけど、そう?

202 :デフォルトの名無しさん:02/11/05 22:41
SWAP(X, Y);


203 :デフォルトの名無しさん:02/11/05 22:46
間接参照演算子は変数を指していなくても、使えますよね?

204 :ななしさん:02/11/05 22:49
>>186
OSはWindows? Linux? MS-DOS?
それで扱いは変わってくるんだが。

まあ、Windowsだとすると、TWAINドライバを経由して
データを取り込むはずだから、その辺調べてみたらどうよ。


205 :デフォルトの名無しさん:02/11/05 22:51
>>199
> 実体としては即値で終わり。
この意味がわからん。なんで即値?

206 :デフォルトの名無しさん:02/11/05 22:52
>>201
普通に{}でかこっただけじゃ駄目なの?

207 :デフォルトの名無しさん:02/11/05 22:56
>>201
その人に、「最適化って知ってますか?」 と突っ込んでください。
第一 while(0) の何がループなのかと。

do 〜 while(0) は、マクロを関数っぽく記述するのに絶対必要。
if(cond1)
  SWAP(a, b);
else if(cond2)
  SWAP(b, c);
else
  SWAP(c, a);
とか書かれたら、do 〜 while(0) 以外で書いたマクロは対応できない。
で、マクロを関数っぽく扱えるようにするのは、その実装がマクロなのか関数
なのかを使用者に意識させないために必要。

208 :デフォルトの名無しさん:02/11/05 22:57
>>204
Video for Windowsご存じない?

209 :デフォルトの名無しさん:02/11/05 22:58
>>207
>do 〜 while(0) は、マクロを関数っぽく記述するのに絶対必要。
そんなトリッキーなコード書く人間はイランがね。

210 :デフォルトの名無しさん:02/11/05 22:58
>>205
コンパイルの段階で数値が特定できる場合は、最適化によって即値に変換される。
最適化 OFF だったらどうだか知らない。

211 :デフォルトの名無しさん:02/11/05 22:58
>>201
どうしてdoを使ってるか説明もできないのに使ってるのかよ…

212 :デフォルトの名無しさん:02/11/05 22:59
>>209
getchar() マクロは不要だとでも?

213 :デフォルトの名無しさん:02/11/05 22:59
             ,ィミ,        ,ィミ,               フ
              彡 ミ        彡 ミ,            ヤ |
           ,,彡   ミ、、、、、、、、彡  ミ,     (⌒)    レ  |    それでも人は生きるんだよ
          彡;:;:             ミ,    (  ヽ   ヤ
       〜三;:;:::::              彡〜  ノ  ノ   レ
       ~~三:;:;:;:::::  -=・=-   -=・=- 三~~ ヽ (    :     ;;
       ~~彡::;:;:;:;:::..     ___     ,三~~ ( ノ ,,,,,  :      ;;
        ~~彡;:;:;:;:;:;:;:.    |┴┴|    ,ミ~~ ノノ ;'" ,,ノ―、     ,;'
        ~~彡:;:;:;:;:;:;:;:;.  ノ――| ---==ニノ ,;'′ >=ニ(二二二()
   ,...-''''""~~,::;:;::;::;::;::;'            ミ,,  ,;'′  ゝ--〈
__,;";;:;;;;;;;;;;;;;;;;;;;;;:;:;:;:;:;:;:;            i! ミ,,,,;'′   `ー‐'
         ::::ミミミ:;:;:;:           ミ::      ,;' ̄ ̄ ̄ ̄|  \___/
          :::::ミミミ:;:;:           ミ:::,   ,;::''′        |.    \/
          ::::ミミミ:;:;::       ,;+''"~~゙+、~'''''~          |     |
           ::::ミミミ:;:;:;:     ,+'"     ミ:::::           |   ━┷━━━┳━━━━━
             :::::ミミミ:;:;:;:;:  >':;:       ミ::              |             ┃
           ::::::ミミミ:;:;:;:;:;../;:;:;:       ;:"             |             ┃
            ::::::::ミミミミ:;:/;:;:;:;:    ,.+'"''-、________|__         ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄;':;:;:;:   ,.+'"    ミ、             l          ┃

214 :ななしさん:02/11/05 23:01
>>199は、おそらく「最適化の結果」即値になると言っていると思われ。

ついでに、
printf("%d ",&hoge[0]);
printf("%d ",&hoge[0]+1);
printf("%d",*(&hoge[0]+2));

と書くよりは、

printf("%d ",hoge);
printf("%d ",hoge + 1);
printf("%d",*(hoge + 2));

と書いたほうが判り易いから糞コードと言っていると思われ。
(慣れだけかもしれんが)  


215 :デフォルトの名無しさん:02/11/05 23:02
>>213
愛が足りないのですか?

216 :209:02/11/05 23:03
>>207
そうする理由はちゃんと書いたんだが、その上で不要と言ってるのか?

> で、マクロを関数っぽく扱えるようにするのは、その実装がマクロなのか関数
> なのかを使用者に意識させないために必要。

217 :216:02/11/05 23:04
レス番号が逆ダターヨ・・・

218 :デフォルトの名無しさん:02/11/05 23:06
>>214
&hoge[0]がhogeのシンタックスシュガーだと分からない人がいると
思って展開して書いたんだけど、絶対いないですよねそんな人。

219 :デフォルトの名無しさん:02/11/05 23:06
>>216
そういきりたつなよ。のんびりいこうぜ。

220 :デフォルトの名無しさん:02/11/05 23:08
swapをマクロにするとforの初期化や条件式、後処理で使えないよ。

221 :デフォルトの名無しさん:02/11/05 23:09
2chのCGIってCで組んであるって本当ですか?

222 :デフォルトの名無しさん:02/11/05 23:09
>>221
嘘です。

223 :デフォルトの名無しさん:02/11/05 23:10
>>221
Rubyだよ

224 :デフォルトの名無しさん:02/11/05 23:11
>>221
BrainFuck!!!!!!!

225 :デフォルトの名無しさん:02/11/05 23:11
>> おそらく「最適化の結果」即値になると言っていると思われ。

ごめん。まだ意味がわからん。
hogeがスタック上にあれば即値は無理だと思うのだが。
それともhoge[]のインデックス部分のことを言ってるのかな。

226 :デフォルトの名無しさん:02/11/05 23:11
マクロは痴漢のみでいいよ

227 :デフォルトの名無しさん:02/11/05 23:11
read.cgi は C だろ。
どっかにスレなかったか?

228 :デフォルトの名無しさん:02/11/05 23:13
犯人はパールのようなものでこじつけたと見られています。

229 :デフォルトの名無しさん:02/11/05 23:14
>>212
> getchar() マクロは不要だとでも?

俺のコンパイラは getcharで do{}while なんか使ってないな。

230 :デフォルトの名無しさん:02/11/05 23:15
>>229
コンパイラじゃなくてライブラリって言えよ。

231 :デフォルトの名無しさん:02/11/05 23:16
>>229
どっちにしてもdo{}while;は定石
役に立つ
立たないのはお前のアルゴリズムが最適でないから
勉強しろよ

232 :デフォルトの名無しさん:02/11/05 23:16
>>218なぜ&hoge[0]がhogeのシンタックスシュガーになるんだ?

233 :デフォルトの名無しさん:02/11/05 23:16
マクロを関数のように使うなら、せめて関数が使えるところではどこでもそのマクロを使えないとねぇ・・・

234 :デフォルトの名無しさん:02/11/05 23:17
>224
問題にしているのは、「&hoge[0]」(ポインタ)に付いてではないのか?
いつから、hoge(配列)の話になったんだ?

235 :デフォルトの名無しさん:02/11/05 23:17
Cで構文糖といったら、char s[]="abc"とかアロー演算子くらいな気がする。。。
他にもあるかな?

236 :デフォルトの名無しさん:02/11/05 23:18
プリプロセッサは排除の方向で世の中進んでるのに・・・もう定年する覚悟ですか?

237 :デフォルトの名無しさん:02/11/05 23:19
>>229
単文だからでは?
このスレの半分以上は前スレの話題を引き継ぐな。
c faq読めよ…。


238 :デフォルトの名無しさん:02/11/05 23:21
forだけでなく、コンマ演算子もつかえねーじゃん。
話にならねー。

239 :デフォルトの名無しさん:02/11/05 23:23
>>231
たかがelseの前で構文エラーになるかならんかの違いだろ。
個々のコーディングスタイルに依存する話を、
誰でも役に立つと決め付けんな。
むしろ邪魔になることもある。

そういう俺は個人的には使ってるけどな。

240 :デフォルトの名無しさん:02/11/05 23:24
>>235
int main(int argc, char **argv);
int main(int argc, char *argv[]);

241 :デフォルトの名無しさん:02/11/05 23:25
>>240
ああそうか。仮引数のポインタを[]と書くのも構文糖だね。
ポインタを受ける時は配列を受ける時が多いから。

242 :デフォルトの名無しさん:02/11/05 23:26
>>241
K&R厨が出てくるぞ。

243 :225:02/11/05 23:27
>>234
> 問題にしているのは、「&hoge[0]」(ポインタ)に付いてではないのか?
> いつから、hoge(配列)の話になったんだ?

多分お前は話を理解できてないな。
その &hoge[0] が即値とどう関係してくるのかという疑問なんだが。

244 :デフォルトの名無しさん:02/11/05 23:29
>>231
結局好みでしょ?
オレもこの手の問題は通りぬけたけど
マクロなんか全然使わない。
関数書くのが楽しいからw


245 :デフォルトの名無しさん:02/11/05 23:30
考えてみたら、&hoge[0] は即値になりようが無いな。
実行するまで、hoge が決まらない。
実際、コンパイラは lea を吐くと思う。

246 :デフォルトの名無しさん:02/11/05 23:32
つーか漏れはマクロで複文なら do { ... } while(0) だが、実際マクロ関数を
最近全然書いてない。
SWAP() 程度の処理なら直書きしてる。型もまちまちだし。

247 :231:02/11/05 23:37
>>246
>型もまちまちだし
マクロは型に依存しないんだよ?

248 :デフォルトの名無しさん:02/11/05 23:37
俺も滅多に書かないけど、↓最近書いた奴

#define isnullstr(str) (!*(str))
/* 空文字列かどうかを判断 */

strlen(str)==0の代わりに*str==0と書いていたけど、分かりにくいんでマクロにした。

249 :デフォルトの名無しさん:02/11/05 23:38
>>247
おかげでしょうもないバグが起こる可能性がある。

250 :デフォルトの名無しさん:02/11/05 23:39
>>247
あのマクロの中で定義している変数はなんだ?(^_^;)
#define SWAP(x,y,type) do{type W;・・・と書けば型によらないで使えるけど

251 :247:02/11/05 23:40
型もまちまちってことはさ、なんらかの統一処理って事ジャン?
いちいち関数つくるよりは、直書きの法がいいけどん、
そんな時くらいしかマクロは使えましぇん!

252 :最後に質問:02/11/05 23:41
#include<stdio.h>

int main(void)
{
int a[]={0,1,2,3,4};

printf("%d",*a); /*出力結果 0*/

return 0;
}/*なぜアドレスをポインタ変数に代入してないのに、
間接参照演算子、以下(*)が使えるのでしょうか?

*が使えるのはポインタ変数(ポインタ配列)にアドレスが
代入されていて、その変数を指している時にしか
使えないと思うんですが・・・*/


253 :デフォルトの名無しさん:02/11/05 23:43
>>252
そもそも、a[n]って*(a+n)だぜ。

254 :デフォルトの名無しさん:02/11/05 23:43
>>252

>>1のリンク先にあるC FAQを読んだ方がいい。

255 :デフォルトの名無しさん:02/11/05 23:45
int a[]={1,2,3,4,5};
にして置いたら?
紛れが少なくなる。

256 :デフォルトの名無しさん:02/11/05 23:46
ソース中では配列はポインタに読み替えられる。
宣言の時以外に使われる[]、つまり添字演算子は*と書いてもほとんど同じだ。
この辺の話は、もうちょい後でじっくり学べ!
今はとりあえず、配列の名前(この場合だとa)を単独で使うと
それは配列の先頭要素へのポインタ(つまりaは*a[0]ってこと)になる。
ただし、これは嘘だ。でも今はこう覚えといて問題なし。
実際オレもそうだったから。安心しろ

257 :デフォルトの名無しさん:02/11/05 23:47
>>256
aは*a[0]じゃなくて&a[0]

258 :256:02/11/05 23:49
オレ、死んでいいですか?

259 :デフォルトの名無しさん:02/11/05 23:50
>>258
もちろん

260 :デフォルトの名無しさん:02/11/05 23:50
>>258
死ぬべき立場なら潔く割腹。

261 :デフォルトの名無しさん:02/11/05 23:54
sizeof(a),sizeof(&a[0])を見てみると分かり易いね。


262 :デフォルトの名無しさん:02/11/05 23:55
>>248
それだけを見るとナイスアイディアに見えるが、その調子で作ったマクロが
ずら〜っと並んでいると読む気がしなくなる罠。
漏れは素直に !*str の方が好き。
この程度、読むのに詰まる事も無いだろうし。

263 :デフォルトの名無しさん:02/11/05 23:56
256 よりも、255 の方が何を言っているのかわからないぞ。

264 :256:02/11/05 23:56
遺書

僕は調子に乗りました。初心者の僕でもわかりそうな質問だったので
がんばってレスを打ちました。そしたら257にやられました。
向こうは3人がかりで僕を攻めました。お父さん、お母さん、
今までありがとう・・・・



これは自殺じゃない!他殺だ!(某あほな自殺者の迷言)

265 :デフォルトの名無しさん:02/11/05 23:58
>>262
同感。逆のケースだと特にね。
if(*str) {}
if(!isnullstr(str)) {}
前者の方が断然読みやすく書きやすいと思う。

266 :256:02/11/05 23:58
ほとんとだ。新たないじめられっこハケーン

でもマギレって?
マグレか?
だとしたらなんの?

267 :デフォルトの名無しさん:02/11/05 23:58
                ,.-ー''"~"'i,
              /~   ..:::::::!.,___        ,,..、-、,
            /    .::::::::::::::`::::::~~""''''ー-,/~:::::::::.`i,
           /     .:::::::::::::::::::::;;;;;;;;;;;;;;;;;;;::::::::::::::::::::::: i
           /      .:::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::.. |
         ,/      :::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::::. i
         ,l'       ::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::::. |
         l       ::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::::::: i   生きるって辛いよな・・・
         i,       ..:::::●:::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::::: !
        _,,.i      ..::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::●::  i'
      /~  'l,    ..:::::::::::::::::::::::::::|、;;;;;;;;;;;;;;;;;/::::::::::::::::: ,i'            /~\
    /,.、-ー 、;i,   .::::::::::::::::::::::::::::::|  ~"''''"/::::::::::::::::::: /~\         /    i.,_
   /'/ ..::::::::|::' .,  :::::::::::::::::::::::::::::::|'⌒`ヽ,/;:::::::::::::::::: /:::::::.. \       ,i    .::.. \
   / i'  .::::::::::/:::::::`・、., :::::::::::::::::::::::,人,__,/;;;;;::::::::::::::::/;;;;;;:;:::::.. ヘ     /  .::::....::::::::. `.,
  ,i/( .::::::::::::i,::::::::::::;;;;;;~;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::-''";;;;;;;;;;;;;;;:::::..  \  /  .:::::::::::):::::::::.. ヘ

268 :デフォルトの名無しさん:02/11/06 00:00
。・°°・(>_<)・°°・。 ウエーン

何やっているのかわかりやすくするためにマクロにしたんだが、駄目か・・・

>>265
空文字列でない(文字列の終わりでない)という条件式は俺も上の方法でやっています。for(;*str;str++);って感じで。

269 :デフォルトの名無しさん:02/11/06 00:00
>>253>>260
全て知ってます。
聞きたいことが伝わらないですかね?

たとえば、
int a=10;
int *p;

p=&a; /*アドレスを代入し、pがaを指す*/
ココ!
>>256のソースは変数を指していない。

printf("%d",*p);
ココ!指しているから*が使える。

>>256のソースではどこも指していないのに
*が使えるのはなぜですか?と聞いています。

270 :デフォルトの名無しさん:02/11/06 00:01
>>264
い`・・・
 ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧ ∧
  (  ,,)
  ./  |
 (___/


271 :デフォルトの名無しさん:02/11/06 00:02
>>269
配列を確保した時点でアドレスは決まると思うが・・・

272 :デフォルトの名無しさん:02/11/06 00:04
>>269
> 全て知ってます。
> 聞きたいことが伝わらないですかね?

はあ?
配列がポインタに成り下がることを知っていたら
そんなアホな疑問は出てこないはずだが?

273 :デフォルトの名無しさん:02/11/06 00:04
>>268
それでいいじゃん。
マクロは、定数以外には基本的に使わないのが鉄則。
デバッガで追うのも面倒になるし。

274 :デフォルトの名無しさん:02/11/06 00:05
どこを指しているのか分からないってのは、初期化していない(自動変数の)ポインタだろ?

275 :256:02/11/06 00:05
>>269
だから、配列はポインタに変わっちゃうんだってば。
知ってるのにわからないんだったら才能ないんでない?
やめた方がいいと思うよ。
オレは0.2秒で理解した

276 :デフォルトの名無しさん:02/11/06 00:06
>>273
わかりました・・・
今まで書いたソースを修正するのは面倒だからそれはそのままにして、今後は禁じ手にするか。。

277 :265:02/11/06 00:07
>>268
あくまで俺個人の見解だからあまり気にしないで。

ただ、Cを使ってる人間であれば !*str という式が
どういう意味かはパッと見てわかるんじゃないかな?

278 :デフォルトの名無しさん:02/11/06 00:08
>>276
マジレスシル!!正しこれが最後。

まずADSLでネット始めた方が安全だよ。それで電気店に行って対策ソフト
購入シル!店員に説明聞くか説明書読めば大概分かる。次ぎにセキュリティを
「高」にする。さらに心配なら「串」を刺すって方法もある。
サイトはトレンドマイクロを参考にした方がいいな。
メールはフリーで行い自分の活動的な事はネットカフェから作業するベシ!
他の奴の言う事は聞かなくてヨロシイ。

この書き込みに「自演」とか「お前は回線切って死ね」とか色々あると
思うけど素人はその程度なんで。
あっ、お前も分からなければ市ね!さっきは 書き込む所間違えてスマソ(W

279 :デフォルトの名無しさん:02/11/06 00:10
>>277

> Cを使ってる人間であれば !*str という式が

そうだね。それくらい分かるよね(^_^;)

>>278
Σ( ̄□ ̄;)!!

280 :デフォルトの名無しさん:02/11/06 00:10
>>278
明後日の方向にレスなさってますか?

281 :デフォルトの名無しさん:02/11/06 00:11
>>278
ワラタ

282 :デフォルトの名無しさん:02/11/06 00:11
>>278
> 書き込む所間違えてスマソ
今も間違えてるし。

283 :256:02/11/06 00:12
>>278
村上ショージ氏でつか?
このシュールさは彼としか思えない・・・

284 :デフォルトの名無しさん:02/11/06 00:12
>>278
ちょっとワロタ。けど
お前は回線切って氏ね!

285 :デフォルトの名無しさん:02/11/06 00:15
つーかc言語なんかヤッテルヤシは

パソオタ(デブ・メガネ)ということで

ファイナル・アンサー

286 :デフォルトの名無しさん:02/11/06 00:17
ハンカクチュウ ハ ホウチ。

287 :256:02/11/06 00:18
>>285
オレは武田真治似で、彼女はhiro似で
大学で仕方なく学んで、楽しいなとか思ってる香具師ですが何か?

288 :デフォルトの名無しさん:02/11/06 00:19
>>285
まあ、キミはデブでもなければヲタでもないけど、
プログラムもできない椰子だけどね。

289 :デフォルトの名無しさん:02/11/06 00:20
C が主に PC で使われていると思い込んでいるらしい DQN な 285 がいるスレは
ここですか?

290 :デフォルトの名無しさん:02/11/06 00:20
c言語は神の為の言語。
選ばれし者しか使えない。
容姿等を問題にする愚者には一笑分からない。


291 :デフォルトの名無しさん:02/11/06 00:21
>>285
パソヲタ&デブ&メガネですが何か?

292 :256:02/11/06 00:21
PS

293 :デフォルトの名無しさん:02/11/06 00:22
>>290
> 愚者には一笑
ワラタ

294 :デフォルトの名無しさん:02/11/06 00:22
C言語出来ないキムタク>>>>>>>>>>>>>>>>>>>>>>>プログラム完璧なココの住人

↓死ね

295 :デフォルトの名無しさん:02/11/06 00:22
>>286-291
それはさておき。

296 :デフォルトの名無しさん:02/11/06 00:22
しかしファイナルアンサーってのも古いな

297 :デフォルトの名無しさん:02/11/06 00:22
デブだがパソヲタと呼べるほど知識はない。

298 :デフォルトの名無しさん:02/11/06 00:23

日 本 人 同 士 醜 い 争 い を し て い る の は コ コ で す か


299 :デフォルトの名無しさん:02/11/06 00:23
            ☆ クールダウン中・・・ ☆
┌──────────────────────―─┐
│                                    |
│                                    |
│                /■\                    |
│               (´∀`∩)                   |
│               (つ  丿                |
│                ( ヽノ                    |
│                し(_)                |
│                                    |
│             Now Onigiring. ...               |
│                                    |
│                                    |
│         しばらくおにぎりでお待ちください。        |
│                                    |
└───────────────────────―┘
     クールダウンの途中でエラーが発生した場合は、
      「無視(I)」 を選択して続行してください。

300 :デフォルトの名無しさん:02/11/06 00:23
放置しとけよお前ら。レベル低いぞ。

301 :デフォルトの名無しさん:02/11/06 00:25
プログラム完璧なココの住人はキモイです




302 :デフォルトの名無しさん:02/11/06 00:26
>>300
299 コピペで使ってね。

303 :デフォルトの名無しさん:02/11/06 00:28
            >>285
             ↓                _人
      ∩    ∧_∧            ノ⌒ 丿
       \ヽ_(    )         _/   ::(
         \_   ノ        /     :::::::\
 ∩_   _/    /         (     :::::::;;;;;;;)
 L_ `ー / /   /           \_―― ̄ ̄::::::::::\
     ヽ  | |__/ |           ノ ̄     ::::::::::::::::::::::)
  | ̄ ̄ ̄\     ノ お前は     (     ::::::::::::::;;;;;;;;;;;;ノ
  | | ̄「~| ̄( 、 A , )クソでも   / ̄――――― ̄ ̄::::::::\
  | |  | |  ∨ ̄∨        (        :::::::::::::::::::::::::::::::::)
  し'  し'                \__::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;ノ



                               __
                       >>285  l ̄/.  ___        
                         ↓ / /.  / ___ノ  
                        __/ /_/ /   
      喰っとけウラー!       Y人, ' ',人⌒ヽ、, '
                      Y⌒ヽ)⌒ヽ、 人,ヽ)人'、, '
        へ, --- 、         ノ ̄     ::::::::::::::::::::::)
     / ̄ ̄ ̄  、____\       (     ::::::::::::::;;;;;;;;;;;;ノ
    / _/ ̄「~|\ __ \     / ̄――――― ̄ ̄::::::::\
   | |  | | ( 、 A , \ミソ   (        :::::::::::::::::::::::::::::::::)
   し'   し' と∨ ̄∨       \__::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;ノ


304 :デフォルトの名無しさん:02/11/06 00:29
というより・・・・

2chラーが キ モ イ

↓お前、女いねーだろ・・・そして死ね



305 :デフォルトの名無しさん:02/11/06 00:30
それはさておき。

306 :デフォルトの名無しさん:02/11/06 00:30



はっきりいって一般的にいうパソヲタ(デブメガネアニオタ)にはC言語できないと思われ。
(漏れの周りは死にそうにやせたヤシばっかりだ。。)


 

307 :デフォルトの名無しさん:02/11/06 00:32


イッパイ ツレタ プッ



308 :デフォルトの名無しさん:02/11/06 00:33
充分楽しんだので放置すっか。

309 :デフォルトの名無しさん:02/11/06 00:33
こういうのは950超えてからやれよ

310 :デフォルトの名無しさん:02/11/06 00:34
スマ

311 :デフォルトの名無しさん:02/11/06 00:35
しかし俺の周りではデブでCができる奴は本当にいない。
人のコードにゴチャゴチャ言ってくる奴は腐るほどいるが。
意外と真理かもしれん。

312 :256:02/11/06 00:36
おいお前ら、Cを始めたきっかけ何ですか?

313 :デフォルトの名無しさん:02/11/06 00:36
c言語極めてるここの住人ってオレから見れば
プロジェクトxに出てる技術者の爺さん達並みに
かっこいいと思うけど。

314 :デフォルトの名無しさん:02/11/06 00:37
会社で使ってるからだ。

315 :デフォルトの名無しさん:02/11/06 00:38
きっかけは学校の授業

316 :デフォルトの名無しさん:02/11/06 00:43
上司は言った。
「キミ、JavaできるならCもできるよね?」
……それはない。

「キミ、CできるならJavaもできるよね?」
……それもない。


317 :デフォルトの名無しさん:02/11/06 00:43
>>313
中学生が英語の勉強をしてるのを見た小学生が「英語できるんだ、すごい!」
と言ってるようなもの。




318 :デフォルトの名無しさん:02/11/06 00:45
>>317

間違いなく理解してくれる対象(マシン&コンパイラ、クソなのは除く)があって、
業務ロジックを規格に沿って記述(コーディング)するだけだからねぇ。
キーボード打つのと同じで、慣れでしょ。

319 :デフォルトの名無しさん:02/11/06 00:48
まるでそうするのが当然のように C を覚えました。

320 :デフォルトの名無しさん:02/11/06 00:54
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <process.h>
#include <conio.h>

void saikoro(int*,int*);
void hangei(void);

int kakekin, motikin=1000,me1,me2;

void main(void)
{
int tyouhan,yosou;

printf("持ち金%d円です。\n",motikin);
while(1)
{
printf("丁か半か予想して、丁なら0、半なら1を入力してください.やめるときは2を入力してください.\n");
scanf("%d ",&yosou);

if(yosou==2)
{
exit(0);
}
printf("掛け金を決めてください.\n");
scanf("%d",&kakekin);
printf("掛け金は、%dです。",kakekin);

getch();


321 :デフォルトの名無しさん:02/11/06 00:54

saikoro(&me1,&me2);
int kekka=(me1+me2) %2;

if(kekka =0)
{
printf("丁です.");
tyouhan=0;
}
else
{
printf("半です.");
tyouhan=1;
}

if(yosou==tyouhan)
{
printf("予想的中です.掛け金分お金が増えます!");
motikin=kakekin+motikin;
}
else
{
printf("はずれです.掛け金没収!");
motikin=motikin-kakekin;
}

322 :デフォルトの名無しさん:02/11/06 00:54


break;
}

return;


}

void saikoro(int *c,int *d)
{
srand((unsigned)time(NULL));//rand()だけではいつも同じになる

*c=rand()%6+1;
*d=rand()%6+1;
printf("%dと%dです。",*c,*d);
return;
}


で、掛け金を決めてくださいと言う前に、scanf("%d",&kakekin);が動作してしまうのですが、なぜですか?

323 :デフォルトの名無しさん:02/11/06 00:56
>>322
勘違いじゃないのか?

324 :もまずにパピコ:02/11/06 00:57
>>322
バッファにたまってるのかな。知らんけど。fflush(stdout)するか。

325 :デフォルトの名無しさん:02/11/06 00:58
いきなり複数レスに渡ってソースを書くのは荒らしに近い

326 :323:02/11/06 00:58
>>324
もしたまっていたとしても、printfは実行されない?

327 :326:02/11/06 00:58
バッファってstdoutのバッファか・・・スマソ

328 :デフォルトの名無しさん:02/11/06 01:03
>>325
ごめんなさい。でも、長かったんで。こういうときは、前もって複数レスしますっていったほうがいいんですか?
>>326
printf実行されます。

329 :デフォルトの名無しさん:02/11/06 01:05
すみません、当方、今までプログラムを組んだことが一度もなく、
これからプログラムを学ぼうかと思っているのですが、
初めて学ぶ言語としてC言語はどうでしょうか?
一応、WindowsマシンとボーランドCの無料版はすでに入手してあります。

330 :デフォルトの名無しさん:02/11/06 01:06
>>320
scanf() はもっと丁寧に扱え。

×: scanf("%d ",&yosou);
○: scanf("%d",&yosou);

331 :326:02/11/06 01:08
>>330
よくみつけたなー。なるほど。全然わからんかった。

あと、kekkaってブロックの先頭でないところで宣言しているね。

332 :デフォルトの名無しさん:02/11/06 01:09
>>329
C はそれなりに汎用性があり、大抵の処理が書けるので悪くは無い。
ただ、プログラムミスをした時に助けてれる機構がほとんど無いから
つまづく事があるかも知れない。
時間をかける覚悟があるなら習得は可能。

333 :デフォルトの名無しさん:02/11/06 01:10
>>329
javaの方が良いよ。


334 :デフォルトの名無しさん:02/11/06 01:10
>>330
おお。直りました。ありがとうございます。一時間ぐらいここでずーッと悩んでました。

デモ、どうして、スペースがあっただけで、始めに実行されちゃうんですか?

335 :デフォルトの名無しさん:02/11/06 01:11
>>334
数字列とスペース一個にひっかかるからだろ。


336 :330:02/11/06 01:12
>>325
この場合は素直に全部書いてくれてて良かったが。
これがコマ切れ情報だったら、解決に 50 レスはかかっていたと思うぞ。

337 :デフォルトの名無しさん:02/11/06 01:12
C→C++→Java
で。

338 :330:02/11/06 01:13
>>334
"%d " というようにスペースを書くと、入力のホワイトスペースを要求する
ようになる。
つまり、最初の scanf() が終わってないだけで、次の scanf() が実行され
てる訳ではない。

339 :デフォルトの名無しさん:02/11/06 01:15
>>331
>あと、kekkaってブロックの先頭でないところで宣言しているね。

なんかまずいですか?

340 :デフォルトの名無しさん:02/11/06 01:16
>>339

Cならまずい。最新の規格ではどうだかしらんが。

341 :デフォルトの名無しさん:02/11/06 01:17
もうちょっとだけ続くんじゃ。

342 :デフォルトの名無しさん:02/11/06 01:18
>>332 >>333 >>337

レスありがとうございます。
初めてというのもあり、とりあえず無料で始められる奴……となると、
JavaかCかC++(これはCの後かな?)ですよねぇ。
友達はC#だ〜とか言ってるのですが、これは無料じゃない……ですよね?
JDKというのもダウンロードしておいたのですが、
とりあえずCで行ってみようと思います。


343 :デフォルトの名無しさん:02/11/06 01:19
>>340
ま、とりあえずC++なんで、大丈夫だった見たいですね。

ところで、将棋プログラム作ろうと思ってるんですが、一番強いのが作れるプログラミング言語は何ですか?

344 :デフォルトの名無しさん:02/11/06 01:20
>>343
> とりあえずC++なんで、
> 一番強いのが作れるプログラミング言語は何ですか?

ここで聞くな。

345 :デフォルトの名無しさん:02/11/06 01:21
>343

一番強いのが作れる言語は何かと問う時点でカス。
プログラミングの本質が分かっておらん。貴様は一生COBOLやってろ。

346 :デフォルトの名無しさん:02/11/06 01:22
>>342
C#も無料よ。.NetFrameworkSDKをダウンすればいい。でかいけど。


347 :デフォルトの名無しさん:02/11/06 01:23
>>339
ファイルの拡張子が c じゃなくて cpp になってるだろ。

348 :329:02/11/06 01:26
>>346

おお、そうなのですか。さっそく明日学校でダウンロードしてきます。
しかしボーランドC、入れたはいいけど全然動かし方分からないですね。
JDKはSDKという奴を落とすべきがEEという奴を落としたらしい?のでこれもダメっぽいし。
知り合いに詳しい友人がいるのですが、早くそいつみたいになりたいものです。

349 :デフォルトの名無しさん:02/11/06 01:28
>>345
多分、一番低級なレベルで作れるのが一番早いから、アセンブラなんだろうけど、それだとむずかしいからといって、もう少し高級言語に
すると、遅くなって、弱くなる。だから、早いのを作るのと、簡単に作るのは、矛盾することなのだと理解しているのですが。

350 :デフォルトの名無しさん:02/11/06 01:29
>>348
.NETのSDKってコマンドラインツールなんじゃないかなぁ?
Borlandのフリーコンパイラが使えないならそれも使えないかと・・・

351 :デフォルトの名無しさん:02/11/06 01:29
とりあえず、>>348にWelcome, Hell World!と表示させてやれ。
お前ら。

352 :デフォルトの名無しさん:02/11/06 01:30
>>349
将棋 AI の強さに、速さは関係無いだろ。
・・・と一瞬思ったが、指し時間まで考慮するなら確かに速い方がいいな。

353 :デフォルトの名無しさん:02/11/06 01:31
>>352
早ければ、深く読めるのです。すなわち、強くなるのです。

354 :デフォルトの名無しさん:02/11/06 01:33
将棋のひとはとりあえずこっちイってね。そして読んでね。
http://pc3.2ch.net/test/read.cgi/tech/1004395614/l50


355 :デフォルトの名無しさん:02/11/06 01:34
必死にアセンブラで組んだってどうせ2〜3ヶ月とか半年とかでPC性能あ〜っぷ。
バグ取とかでひ〜ひ〜行って強いプログラムが作れないなら高級言語でもい〜のでは?

356 :デフォルトの名無しさん:02/11/06 01:35
>>349
いくらアセンブラで枝葉部分をチューニングしてもアルゴリズムがダメダメ
だったら全く意味なし。それに、コンパイラの方がヘタなアセンブラより速い
コード吐くしな。

357 :デフォルトの名無しさん:02/11/06 01:37
>>353
高級言語+ライブラリのサポートのもと、複数のCPUで分散処理させた
ほうがいいと思われ。

358 :デフォルトの名無しさん:02/11/06 01:38
bccはちゃんとヘルプファイルも付いてるのに使い方がわからないってのは何故なんだ?
以前はヘルプが付いてないかったらしいけど

359 :デフォルトの名無しさん:02/11/06 01:41
>>354
ありがとう。こんなスレがまさかあるとは思っていませんでした。
将棋板で探したんですが、なかったんで、あきらめてしまいました。
>>355
>>356
ですね。PC性能UPで、アセンブリングも変わるんですか。じゃ、厳しそうですね。


360 :329:02/11/06 01:45
>>358

お恥ずかしい限りです。
コマンドラインやエディタは大学でUnix使ってるので大丈夫なのですが、
どうもライブラリの場所?やインクルードの場所?をうまく指定できてないみたいです(?)。
明日知り合いに教えてもらって、がんばります。

361 :デフォルトの名無しさん:02/11/06 01:47
>>360
それは設定ファイルを作成していないからでしょう。
readmeをみた?

362 :デフォルトの名無しさん:02/11/06 01:50
>>360
これ使っとけ。
http://www.cmagazine.jp/setbcc.html

363 :デフォルトの名無しさん:02/11/06 01:54
今思いっきり酔っていますが、答えられる範囲で答えます。

(*^o^*)


364 :329:02/11/06 02:04
>>361 >>362 >>363

皆さんレスありがとうございます。
とりあえず原因は使っているエディタがEUCで保存していたため、
文字の出力がぐちゃぐちゃになっていたと判明しました。
(「これはテストです」などと表示しようとしていました)
"Hello World”なら正しく表示されました。しばし感動……。
これからも精進します。

365 :デフォルトの名無しさん:02/11/06 02:10
EUC でも ASCII コードセット部分は SJIS と互換だからインクルードや
リンクが失敗する原因とは考えられないのだが・・・いいのか?

366 :デフォルトの名無しさん:02/11/06 02:16
>>365
多分インクルードやリンクが失敗したと思いこんだんだと思う。

(*^o^*)

367 :329:02/11/06 02:25
>>365

えっと、まずEUCのまま動かしたところ、ぐちゃぐちゃなものが出力されました。
それをメールで知り合いに内容ごと送りましたら、この内容なら動くはず、
(学校からフロッピー7枚で必死に持ってきたので)ライブラリが壊れている(?)か
違うのを指してる(?)かも、みたいなことを言われまして、
必死にあがいていたのです……


368 :デフォルトの名無しさん:02/11/06 02:45
>>367
動いた時点でライブラリやヘッダーのパスは間違っていない。

(*^o^*)


369 :デフォルトの名無しさん:02/11/06 02:50
古いのを混ぜ込んでしまって、動くけど
なんかおかしい、てな場合もあるはず

370 ::02/11/06 03:36
#include <stdlib.h>
#include <stdio.h>
#include "RPN.h"
binode tree_reduction(binode tree);
int main()
{
int b;
binode node;
binode tree = tree_example3();
b = tree_reduction(tree);
printf("Built a tree\n");
tree_reduction(tree);
printf("%d\n",b);
return 0;
}
binode tree_reduction(binode tree)
{
int a;
if(binode_is_operator(binode_lchild(tree)) == 0 && binode_is_operator(binode_rchild(tree)) == 0)
{
switch(binode_value(pos_pop()))
{
case OP_PLUS:
a=binode_get_int(binode_lchild(tree)) + binode_get_int(binode_rchild(tree));
case OP_MINUS:
a=binode_get_int(binode_lchild(tree)) - binode_get_int(binode_rchild(tree));
case OP_MULTI:
a=binode_get_int(binode_lchild(tree)) * binode_get_int(binode_rchild(tree));
}
value_push(a);
return 0;
}

371 ::02/11/06 03:37
else if(binode_is_operator(binode_lchild(tree)) == 1 && binode_is_operator(binode_rchild(tree)) == 0)
{
value_push(binode_rchild(tree));
tree_reduction(a,binode_lchild(tree));
}
else if(binode_is_operator(binode_lchild(tree)) == 0 && binode_is_operator(binode_rchild(tree)) == 1)
{
value_push(binode_rchild(tree));
tree_reduction(a,binode_rchild(tree));
}
else
{
tree_reduction(a,binode_lchild(tree));
tree_reduction(a,binode_rchild(tree));
}
}
このプログラムの文法的におかしいところおしえてください


372 :デフォルトの名無しさん:02/11/06 03:42
>>371
rpn.hがないと指摘しようがないよ。

373 ::02/11/06 03:46
すんません



374 :デフォルトの名無しさん:02/11/06 03:48
MFC関係でもいいですか?

MFCのCHttpを使用してサーバにファイルをアップロードしたいんですけど
データ自体は転送されるのですが
サーバ側のcgiでformをうまく解析できず
ファイルの転送が完了しません
ちなみにindex.htmlでformを書いてcgiを動かせば正常に作動します

以下のデータは全て直接(CString strData, CHttpFile *pFile)
pFile->WriteString( strData )で書き込んでいます

msize= 230653
-----------------------------
Content-Disposition: form-data; name="author"

who
-----------------------------
Content-Disposition: form-data; name="fname"; filename="C:\0.ppm"
Content-Type: text/plain

P6 320 240 255
:JF:JF8LG9MH<LH<LH@LE?KDBJGBJGFKEHMGKKJKKJHMGIN
HSFDQGCPFGPIGPIEQJFRKCUJEWLGSLGSLJSLLUNOULMSJL
...続く

375 :デフォルトの名無しさん:02/11/06 07:41
int a[]={0,1,2,3,4};
ポインターじゃなくて配列って言った方が良いじゃん!

376 :デフォルトの名無しさん:02/11/06 09:01
英数字10文字からなる文字列を、バイナリをダンプされても容易には
見えないような形でCのソースコードに埋め込みたいのですが、どのよう
にするのが一般的な手法でしょうか?

377 :デフォルトの名無しさん:02/11/06 09:04
>>376
char *s = {'A'^0xAA, 'B'^0xAA, ...};
みたいにするとか。

378 :376:02/11/06 09:23
>>377
なんで0xAAなのれすか?



379 :名無しさん@XEmacs:02/11/06 09:26
意味がないから意味があるんだろーが

380 :デフォルトの名無しさん:02/11/06 09:42
ほぅ


381 :デフォルトの名無しさん:02/11/06 09:55
前レスも全部読めばC言語の何割、極めたことになるんだ。

382 :名無しさん@XEmacs:02/11/06 10:05
自分でプログラム書かなきゃ1割も極めたことにはならない

383 :デフォルトの名無しさん:02/11/06 10:25
>>381
> 前レスも全部読めばC言語の何割、極めたことになるんだ。
日本語の本を何冊読めば日本語の何割、極めたことになるんだ?

プログラムを「極めた」と思い込んだ瞬間にお前の成長は終わる。
プログラミングには頂点など存在しない、だがそれがいい。

384 :デフォルトの名無しさん:02/11/06 10:30
>>383
Cで満足しないことだな(稿


385 :デフォルトの名無しさん:02/11/06 11:01
>>376
> 英数字10文字からなる文字列を、バイナリをダンプされても容易には
> 見えないような形でCのソースコードに埋め込みたいのですが、どのよう
> にするのが一般的な手法でしょうか?
cryptでgoogleしろ。2chのトリップはその方法で暗号化してる

386 :l:02/11/06 11:06
今、ポインタについて学習しています。そこで質問。
LPDIRECT3D8ってのはIDirect3D8インターフェースへのポインタを指す
構造体なんだけど、たとえば

LPDIRECT3D8 a,b;
a=Direct3DCreate8(D3D_SDK_VERSION);

とした後、

b=a;

とするとbにはaの内容がコピーされるんじゃなく、aのアドレスが渡される
んですよね?

387 :376:02/11/06 11:07
>>385
阿呆? cryptは可逆じゃねーよ。


388 :デフォルトの名無しさん:02/11/06 11:12
>>386
LPDIRECT3D8が構造体ならば、aの内容「だけ」がコピーされます。
LPDIRECT3D8のメンバにポインタが存在した場合には注意が必要です。

LPDIRECT3D8がポインタならばaのアドレスが代入されます。


389 :386:02/11/06 11:17
説明不足でした。
LPDIRECT3D8はこのような構造体です。
typedef struct IDirect3D8 *LPDIRECT3D8, *PDIRECT3D8;

>LPDIRECT3D8がポインタならばaのアドレスが代入されます。
ということは386の内容であっているというわけですね。
ありがとうございました。



390 :385:02/11/06 11:17
>>387
おそらくレジストキーか何かを暗号化して容易に推測させないことを
目的としてると思ったんだが。

プログラム中にcryptした結果を埋め込んでおき
レジストキーの入力結果をcryptして一致すればレジスト解除すれば
いいんじゃないかと思ったんだが、どういう目的で暗号化したいんだい?

391 :デフォルトの名無しさん:02/11/06 11:29
ちなみに crypt() は不可逆だけど crypt() が使っている
des アルゴリズム自体は可逆です。


392 :376:02/11/06 11:33
>>390
可逆でないと困る、としか言えない。
>>391
DESなり3DESなりで暗号化したものを埋めると、>>377 ほどメンテナンス性が
よくない他、復号するための鍵をどう埋めるかという問題で循環して
しまうような。

厨房対策ってだけなので、>>377でいいですわ。ありがとう。
377がもっと可読性の高いマクロかなんかにできるなら嬉しい
んだけどむりっぽ。



393 :デフォルトの名無しさん:02/11/06 11:51
お前らいい加減にしろよ・・・。
純粋な C に関するもので無い限り、質問は受け付けるな。
MFC も DirectX も別スレがある。
それとも、問題の切り分けができない輩をはびこらせて、教えたがりクン気取って
楽しいのか?
それとも、「ここは 2 ちゃんねるだから」 スレの内容が整然としていなくても
どうでもいいか?

394 :デフォルトの名無しさん:02/11/06 11:52
>>393 はい、さっさと氏んでね。

395 :デフォルトの名無しさん:02/11/06 11:59
>>393
はて、>>374はさくっと無視されてるし、>>386はポインタの質問であって
そのポインタがたまたまDirectXで使われてるだけで、
回答も一般的なポインタの回答しかしていない。

君もそういうスレ違いの内容を誘導もせずに風紀委員を気取って楽しいのか?

396 :デフォルトの名無しさん:02/11/06 11:59
>>393
じゃあ、話降ってくれよ。

397 :デフォルトの名無しさん:02/11/06 12:19
>>393
Cに関係ない。別スレへどうぞ。

398 :デフォルトの名無しさん:02/11/06 12:59
前スレがマジレスで終わってる・・・

399 :デフォルトの名無しさん:02/11/06 13:01
>>398
俺は綺麗にこのスレへのリンクを貼って終わらせたかったのだが...
 今 一 歩 及 ば な か っ た

400 :デフォルトの名無しさん:02/11/06 13:33
>>399
          ,. -───-: 、
          /::::::::::::::::::::::::::::::::\
          / '':::::::::::::::::::::::::::::::''''' ヽ
         !::::::::::ィ::ハ:::;::::::::::::::::::::::::::!
       i::|:::i::/l/  i;::ト、:、:::i:::::::::::::::i
       |::i/レ'-i''  'ヽi-ヾ,ヽ!:::::::::::::l
       |::ハ -‐-   -─- i::::::::::::::l
       |::::::l|  |     |  | |::::::::::::::!
       |::::::ヽ | r---、! l,.!::::::::::::::l
       l::::::::::::`;'-'=,‐,='r''i~!:::::::::::::::|
         !:::::::l、::r'"´'. ' l ' i::::::::iヽ:::l
       i:l、:::|./、_____,l::::;l:/‐'ヽ!
        '!ヽ;i'>l____,.//-‐'''"ヽ
            !/ |.VVVVVVVV.lV\!. i
         |  |        |    l

401 :デフォルトの名無しさん:02/11/06 13:41
前スレの質問者は、
wkが上書きされて0バイトになって、死んでいるんだろうな。

402 :デフォルトの名無しさん:02/11/06 13:46
>>401 (・∀・)イイ!!

403 :デフォルトの名無しさん:02/11/06 13:51
nkfが改行コードの変換もやってくれるじゃん


404 :デフォルトの名無しさん:02/11/06 13:57
struct 童貞 {
25歳無職;
アニオタ;
デブ;
体臭;
};

童貞 >>393;

405 :デフォルトの名無しさん:02/11/06 14:05
>>404 Not Found

406 :デフォルトの名無しさん:02/11/06 14:56
>>404
393 が痛いのは分かったからスレ汚すのはやめてくれ。

407 :374:02/11/06 15:21
Visual C+(MFC限定)スレで質問しなおしました
ご迷惑をおかけしました

408 :コンパイラ:02/11/06 15:26
C言語では本当の意味で参照渡しはできないって
どういう意味ですか?C++ではできるらしいのですが・・

409 :デフォルトの名無しさん:02/11/06 15:29
>>408
例えば

void hoge(int *a)

aを変更すると引数で与えた変数にその変更が反映される点では参照渡しに非常に似ているが、
それはアドレスという参照用の情報を値渡ししているにすぎない。


410 :デフォルトの名無しさん:02/11/06 15:33
func(&value); // Cにおける偽参照渡し==ポインタ渡し。

C++だと、参照渡し(値で関数を呼ぶと、値のポインタが渡される)
を明示して関数プロトタイプを関数を宣言できる。↓

void func(int &value);

411 :コンパイラ:02/11/06 15:33
ではなぜこれを参照渡しと言ってしまうのですか?

412 :デフォルトの名無しさん:02/11/06 15:35
>>411
機能的にはほぼ同一だからです。
まぁ、間違って覚えてるアフォも少なからずいるようですが。

413 :コンパイラ:02/11/06 15:37
そうですか。ありがとうございました。

414 :デフォルトの名無しさん:02/11/06 15:42
バイトオーダを変える htonl() を調べると、
ホストバイトオーダをネットワークバイトオーダに変えると
よく書いてあるのを見かけますが、
実際動かしてみると、
リトルエンディアンをビッグエンディアンに、
ビッグエンディアンをリトルエンディアンに変えてるような気がするのですが、
この認識は間違いですか??

415 :デフォルトの名無しさん:02/11/06 15:46
>>414
ネットワークバイトオーダとホストバイトオーダが同じならば
変えない。はず。

416 :デフォルトの名無しさん:02/11/06 16:08
>>414
レスありがとうございます。

ネットワーク側とホスト側のバイトオーダが同じかどうかというのは
誰がいつどうやって調べてるのでしょうか?

417 :414:02/11/06 16:11

× >>414
>>415

418 :デフォルトの名無しさん:02/11/06 16:11
>>416
まぁ、OS依存でしょう。

419 :デフォルトの名無しさん:02/11/06 16:15
>>416
ライブラリをビルドするときにでも調べるのでは。htonl呼び出し時に
チェックコード実行して判断してるのかも知れないけど。
いずれにせよ知る必要は無いし、それに依存したコードを書くべきで
もない。

420 :デフォルトの名無しさん:02/11/06 16:15
>>416
> 誰が
コンパイラないしライブラリの製作者
> いつ
コンパイラないしライブラリを制作する時
> どうやって
2 バイト以上のデータがメモリにどう格納されるかを調べて

421 :デフォルトの名無しさん:02/11/06 16:17
>414
間違ってはいないが、よく考えろ。
ネットワークバイトオーダ<->ホストバイトオーダは
どちら向きにも同じ処理だろ?

ということではないのか?

422 :デフォルトの名無しさん:02/11/06 16:18
>>416
例えばC FAQに載ってるのはこう
int x = 1;
if(*(char *)&x == 1)
    printf("little-endian\n");
else  printf("big-endian\n");

大抵はプログラムをコンパイルする前に調べておいて条件コンパイルする。


423 :デフォルトの名無しさん:02/11/06 16:20
>>416
調べる必要などありません
ネットワークバイトオーダはリトルエンディアンであることがRFCで決まっています。
# どのRFCに書かれてるか忘れた

自分のアーキテクチャがリトルエンディアンの場合→何もしない
自分のアーキテクチャがビッグエンディアンの場合→変換
これだけです。

424 :デフォルトの名無しさん:02/11/06 16:21
typedef をわかりやすく言うとどういう事なんですか?

425 :デフォルトの名無しさん:02/11/06 16:21
うまうま


426 :デフォルトの名無しさん:02/11/06 16:22
>>424
型def


427 :デフォルトの名無しさん:02/11/06 16:23
>>426
defも訳してやれやw

型てい

428 :426:02/11/06 16:26
>>427
スマソ&&フォローサンクスコ


429 :416:02/11/06 16:35
>>423
>ネットワークバイトオーダはリトルエンディアンであることがRFCで決まっています。

どこかのサイトでも見たよう気がします。
でもよく意味がよくわかりませんでした・・・。

バイトオーダってのはCPUで決まるんですよね?
通信先は無条件でリトルエンディアンだ!! って決められても、
その通信先のマシンのCPUがビッグエンディアンを採用してたら
ホストがリトルエンディアンだからといって
何も変換しないで通信しようとするとおかしくなりませんか??

430 :デフォルトの名無しさん:02/11/06 16:38
>>429
ネットワーク上では、必ずリトルエンディアンで送受信するって決まってるの。
通信先がビッグエンディアンだとしても、そっちの方でちゃんと受理してるから
おかしくならないの。
わかれ。

431 :デフォルトの名無しさん:02/11/06 16:39
>>429
なぜに?向こうが変換すればいい話。
飛んでくるデータのエンディアンはあらかじめわかっているわけで。

432 :デフォルトの名無しさん:02/11/06 16:41
>>429
その場合は通信先のマシンがntohl等を利用してビッグエンディアンに
変換する。

433 :416:02/11/06 16:43
あ、ようやく分かりました。
受け取り側も変換すれば解決するんですね。

なぜに気づかなかったのか・・・。

お騒がせ致しました。

434 :デフォルトの名無しさん:02/11/06 16:43
>>429
ネットワークに流す時はビッグエンディアンってことに決めとけば、
読む時はビッグエンディアンから自分のバイトオーダに変換すればいいだろ。
ちなみにネットワークバイトオーダーがリトルエンディアンっていうのはネタかDQN。


435 :デフォルトの名無しさん:02/11/06 16:44
>>434
回答も煽りもスピードが命。

436 :デフォルトの名無しさん:02/11/06 16:45
>>429
> ホストがリトルエンディアンだからといって
> 何も変換しないで通信しようとするとおかしくなりませんか??
おかしくなります。だからRFCで規定しています。
よって、ネットワーク上にビッグエンディアンの
データを流さないようにしなければなりません。

437 :デフォルトの名無しさん:02/11/06 17:09
>>439
ネットワークバイトオーダーに変換する関数が用意されているんだっけ?

438 :437:02/11/06 17:15
ああ、上の方にかいてあったか・・・
しかもレス先間違えているし。。

439 :デフォルトの名無しさん:02/11/06 20:42
#define UCHAR unsigned char



typedef unsigned char UCHAR;

も同じ意味だよね? 使い分ける必要ってあるのかいな。
コンパイル時に意味がかわるのはわかるけど、、、使い分けなんて必要ないよね?
趣味のレベルだよね? これって。

440 :デフォルトの名無しさん:02/11/06 20:46
>>439
> 使い分けなんて必要ないよね?
ある
UCHAR a, b, c;
と書いたときのことを考えろ。

441 :デフォルトの名無しさん:02/11/06 20:53
>>440?

442 :デフォルトの名無しさん:02/11/06 20:54
>>440
何ら違いは見いだせないが。
言いたい事はわかるけど。

>>439
#define LPSTR char *

typedef char * LPSTR
で、
LPSTR a, b;
がどう解釈されるか考えてみよう。

443 :439:02/11/06 20:58
ほえ?

どっちも同じじゃないの?

#defineの場合
 char *a, b;
と置換されて

typedefの場合
 char *a, b;
と判断される。

うー Webで調べても具体例みつからねぇ〜

444 :デフォルトの名無しさん:02/11/06 21:01
>>443
おいおい
typedefの場合、
char *a,*b;
だろ・・・。

445 :デフォルトの名無しさん:02/11/06 21:01
というか、実際にコンパイルして、sizeofででも表示してみろよ、、、

446 :デフォルトの名無しさん:02/11/06 21:01
ほえ〜?

447 :デフォルトの名無しさん:02/11/06 21:03
これはエキスパートCプログラミングの100ページの話ですか。

448 :デフォルトの名無しさん:02/11/06 21:05
とういかよ、#defineとtypedefの違いなんて延々と説明して、
スレを消費すんなよ。
質問してる奴って、本買う金がもったいないからHP教えてくださいとか
質問してるような奴なんじゃねーの?

449 :デフォルトの名無しさん:02/11/06 21:06
ほえぇぇぇ〜。

450 :デフォルトの名無しさん:02/11/06 21:09
>>448
初心者には、ちょい、分かりにくいんでないの?
#defineとtypdefの違い。

451 :デフォルトの名無しさん:02/11/06 21:09
>>447
俺も今まさに確認したところだ。
この本からと思われる話題多いね。

452 :デフォルトの名無しさん:02/11/06 21:09
関数へのポインタ使ったら怒られた。
関数へのポインタの配列作ったら誰も理解できなかった。
・・・・・・こんな会社、もう辞めたい・・・・・・

453 :デフォルトの名無しさん:02/11/06 21:13
>>452
どこもそんなレベルです。

454 :デフォルトの名無しさん:02/11/06 21:13
>>452
スレ違い。つーか板違い。マ板逝って。

455 :デフォルトの名無しさん:02/11/06 21:16
C++なら極めて分かりやすいんだがな

namespace foo{
#define T1 char
typedef char T2;
}

namespace bar{
class T1; // NG
class T2; // OK
}

456 :デフォルトの名無しさん:02/11/06 21:27
おまえら、defineの代わりにenum,typedef使えと。


457 :デフォルトの名無しさん:02/11/06 21:29
>>459
enumの使い方を知ってる人はごく少数です。

458 :22歳女:02/11/06 21:30
できる限りtypdefは使わないでほすぃ

459 :458:02/11/06 21:31
s/typedef/typedef/

460 :458:02/11/06 21:31
・・・・・。

461 :デフォルトの名無しさん:02/11/06 21:32
あのー文字列定数ってどうしてますか。

#define TEXT_SAGE "sage"
const char *TEXT_SAGE = "sage";
const char TEXT_SAGE[] = "sage";


462 :デフォルトの名無しさん:02/11/06 21:32
>>455
わかりやすいか??

463 :458:02/11/06 21:33
>>461

"文字列定数"

464 :デフォルトの名無しさん:02/11/06 21:33
>>460
おっちょこちょいなところに惹かれました。あなたのことが好きです。

465 :デフォルトの名無しさん:02/11/06 21:35
>>463
でも、そんなふうにプログラム中にいきなり定数を書くところは嫌いです。

466 :デフォルトの名無しさん:02/11/06 21:41
>>465
この人はなんでもかんでも文字列定数をマクロにするのかな・・・

467 :デフォルトの名無しさん:02/11/06 21:43
関数へのポインタはtypedefするのが定番だと思うのですがどうですか。

468 :デフォルトの名無しさん:02/11/06 21:43
>>463
それは定数じゃなくてリテラル。
定数と呼ぶなら const を付けるのが正しい。
461 の 2 つめと 3 つめのどちらでもいいんじゃないか?

469 :デフォルトの名無しさん:02/11/06 21:44
>>467
賛同。

470 :デフォルトの名無しさん:02/11/06 21:46
>>468をさらしあげ

471 :デフォルトの名無しさん:02/11/06 21:47
例えばWindowsアプリでGet/WritePrivateProfile系APIを対で使うとき、
セクション名やキー名をグローバルに#defineしてるんだけど・・・変? 俺、変態?

472 :デフォルトの名無しさん:02/11/06 21:47
1; /* constついていないけど定数だよね?(ワラ */


473 :デフォルトの名無しさん:02/11/06 21:49
C言語のソースを見てみたらマクロばっかで超読みにくいんです
簡単だからって何でもかんでもdefineしてんじゃねーよ、ボケが。
よーし、パパuchar定義しちゃうぞとか言ってるの。もう見てらんない。
お前らな、glibcやるからdefine除けと。

でやっと除けたかと思ったら他のプログラマーがswapマクロとか書いてるんです。
そこでまたぶち切れですよ。
略)おまえdo{}while(0)しただけちゃうんかと。
エキスパートcプログラマの俺から言わせてもらえば今、プログラマの間での最新
流行はやっぱりinline修飾、これだね。
更にインラインアセンブラ。これ最強。
処理系依存と言う危険も伴う、両刃の剣。
まぁお前らド素人は、javaでも使ってなさいってこった。


474 :デフォルトの名無しさん:02/11/06 21:52


       ま  た  C  99  か 



475 :デフォルトの名無しさん:02/11/06 21:52
>>468のような人の事を「杓子定規な人」と言います。


476 :デフォルトの名無しさん:02/11/06 21:53
>>472
即値と定数の区別もつかないのか?

477 :デフォルトの名無しさん:02/11/06 21:53
>>473
素人の匂いがぷんぷんするぞ

478 :デフォルトの名無しさん:02/11/06 21:54
>>471
最適化オプションによっては、同じ内容のリテラルでも別々の文字列として格納
されてしまう場合があるから気をつけろ!

479 :デフォルトの名無しさん:02/11/06 21:55
C言語の範囲で即値なんて言葉はあったか?

480 :デフォルトの名無しさん:02/11/06 21:57
>>479
定数=コンスタント
即値=リテラル

481 :デフォルトの名無しさん:02/11/06 21:57
K&R第二版 p236 A2.6 文字列リテラル より
> 文字列定数とも呼ばれる文字列リテラルは、"..."のように2重引用符で囲まれた文字列である。

482 :デフォルトの名無しさん:02/11/06 21:59
>>478
がーん、どう気をつければ・・・

483 :デフォルトの名無しさん:02/11/06 21:59
googleで「C言語 文字列定数」をキーワードに検索したところ、どこも"〜〜"を文字列定数と呼んでいるんだが・・・

484 :483:02/11/06 22:00
ちょっと語弊があるな。
文字列定数はどこも"〜〜"のことを指している

485 :デフォルトの名無しさん:02/11/06 22:00
リテラル=定数

486 :デフォルトの名無しさん:02/11/06 22:01
>>468



487 :デフォルトの名無しさん:02/11/06 22:02
訳語の話をしてるんであってCの話とは関係ないってオチじゃ

488 :デフォルトの名無しさん:02/11/06 22:02
literalよりimmediateじゃない?<即値


489 :デフォルトの名無しさん:02/11/06 22:03
でもconstつけても定数にはならないんだよね?ReadOnlyなだけであって。

490 :デフォルトの名無しさん:02/11/06 22:05
>>489
ReadOnlyだから定数と見ていいんじゃない?
constは定数のことだし

491 :デフォルトの名無しさん:02/11/06 22:05
>>482
普通はそれでも困るほど膨れることはないから無視していい。
気になるなら、素直に const char * 使えばいい。

492 :デフォルトの名無しさん:02/11/06 22:06
それよりみんなどうしてるの。#define TEXT "sage" はやらないものなんか。
使う場所でいきなり書いちゃう?

493 :デフォルトの名無しさん:02/11/06 22:07
>>492
一度しか使わないものをいちいちマクロにしたりはしない。
何度も使うならマクロにする。

494 :デフォルトの名無しさん:02/11/06 22:08
プログラム名とかバージョン名に使ったりする<define VERSION "1.2.3"


495 :デフォルトの名無しさん:02/11/06 22:09
>>490
それだと定番の
 const int MAX =10;
 char ss[MAX];
トークに。

496 :デフォルトの名無しさん:02/11/06 22:09
>>494
そうそう。
あとログファイルとか設定ファイルの場所とかも。

497 :デフォルトの名無しさん:02/11/06 22:10
>>495
あー・・・
じゃあ準定数(←勝手に作った言葉)

498 :デフォルトの名無しさん:02/11/06 22:14
即値の人、どっか行っちゃったね

499 :デフォルトの名無しさん:02/11/06 22:17
お前らはあるある話で盛り上がる中学生ですか?

500 :即値の人:02/11/06 22:26
なんだ、思ったより釣れなかった。つまらん。

501 :デフォルトの名無しさん:02/11/06 22:32
間違ったらネタにしたがるモノホンの中学生発見

502 :デフォルトの名無しさん:02/11/06 22:33
私はついこの前Cを始めたばかりでここの方達に質問するのも
悪い気がするのですが、聞いてください。
えっと、if〜elseの使い方を覚えたので、少年マガジンにあった
GetBackersの「君が戦う相手は誰だ!」
というYES、NOでどんどん選んでいって
最終的になんらかの結果が出るというものを作ろうとしてるのですが
どうもうまくいきません。
ソースコードを出すんで、どこがおかしいかみていただけないでしょうか?

503 :デフォルトの名無しさん:02/11/06 22:35
>>500
こういうやつってアホとしか思えん。
どうせ匿名なんだから、へたなごまかしなんかしないで、
そのまま逃げればいいのに。

504 :デフォルトの名無しさん:02/11/06 22:35
#include <stdio.h>
int main(void)
{
char num,num2;
printf("START!\n");
printf("「YES」か「NO」で答えてください。\n「YES」の場合はY、NOの場合はNを押してください。\n");
printf("「GetBackers」は毎週欠かさず読んでる?\n");
num=getchar();
if(num=='N'||num=='n')
{
printf("GAMEOVER");
}
else if(num=='Y'||num=='y')
{
printf("今、付き合ってる人がいる?\n");

num2=getchar();



505 :デフォルトの名無しさん:02/11/06 22:36
num2=getchar();
if(num2=='Y'||num2=='y')
{
printf("実験なので終了\n");
}

else if(num2=='N'||num2=='n')
{
printf("実験なので終了\n");
}
}
return 0;
}

のprintf("今、付き合ってる人がいる?\n");で処理が終わってしまい、
num2=getchar();が処理されないのですがどうしてでしょうか?
分かる方いたら教えてください。お願いします。

506 :デフォルトの名無しさん:02/11/06 22:37
#include <stdio.h>
int main(void)
{
char num,num2;
printf("START!\n");
printf("「YES」か「NO」で答えてください。\n「YES」の場合はY、NOの場合はNを押してください。\n");
printf("「GetBackers」は毎週欠かさず読んでる?\n");
num=getchar();
if(num=='N'||num=='n')
{
printf("GAMEOVER");
}
else if(num=='Y'||num=='y')
{
printf("今、付き合ってる人がいる?\n");

num2=getchar();
}
return 0;
}

507 :デフォルトの名無しさん:02/11/06 22:38
>>504
二回目のgetcharで改行を読んでいるとか?

508 :デフォルトの名無しさん:02/11/06 22:38
新手の荒らしですか?

509 :506:02/11/06 22:40
>>508
俺もそう思たが・・・

510 :デフォルトの名無しさん:02/11/06 22:42
すみません。ただのハローワールドなのですがコンパイルエラーとなります。どこが悪いのでしょうか?

#include <stdio.h>

int main(int argv , char **argc)
{
char *hello_world = "hello world!";

printf(%s\n , hello_world);

return 0;
}

511 :デフォルトの名無しさん:02/11/06 22:44
>>510
とりあえず、なんか本買え。

512 :デフォルトの名無しさん:02/11/06 22:44
すいません、>>506はミス入力です。
>>507二回目?>>504>>505のnum2=getchar();
は同じものです。

>>508荒らしではないですが、
板を見にくくしてしまって申し訳ありません。
もしかして私のことを他人からみたら厨ですか?
厨は大っ嫌いなのに・・・

513 :デフォルトの名無しさん:02/11/06 22:44
>>506
なぜコピペするのかわからん。

>>510
"%s\n"

514 :デフォルトの名無しさん:02/11/06 22:47
>>512

たとえばnを入力し、つづいてEnterキーを押す。
そうするとnはgetchar()で読まれるが、Enterキーを押すことで入力された改行文字はバッファに残る。
次にgetchar()が呼ばれるとその改行文字を読むから入力待ちにならない。

515 :506:02/11/06 22:48
>>510
限りなく危険だが、これで動くことは動く。
>>511に同意でなんか本を買え

#include <stdio.h>

int main(int argv , char **argc)
{
char *hello_world = "hello world!";

printf("%s\n" , hello_world);

return 0;
}

516 :デフォルトの名無しさん:02/11/06 22:49
おとなしくscanfでもつかっとけ。

517 :デフォルトの名無しさん:02/11/06 22:49
>>515
なぜ危険なんだ?

518 :デフォルトの名無しさん:02/11/06 22:50
>>515
何が危険なの?

519 :518:02/11/06 22:51
かぶった (;´Д`)

520 :512:02/11/06 22:51
>>514氏、じゃあどうすればよいのですか?
scanfで数字入力にするようですか?

521 :デフォルトの名無しさん:02/11/06 22:52
>>515
まさか仮引数名が一般とは逆になっているとかそういうことじゃないよね?


522 :506:02/11/06 22:52
>>517
俺は確保されていないメモリに文字列を突っ込むのは怖いので。

523 :デフォルトの名無しさん:02/11/06 22:53
>>522

文字列定数は自動的にどこかに領域が取られるんじゃなかったのか?(^_^;)

524 :デフォルトの名無しさん:02/11/06 22:55
>>522
良かったなここで恥かいといて。


525 :デフォルトの名無しさん:02/11/06 22:56
>>506
君の知識のほうが危険な気がする

526 :506:02/11/06 22:57
>>522
それもコンパイラの設定次第だったりする・・・だったと思う(汗)



527 :デフォルトの名無しさん:02/11/06 22:57
>>522
          ,. -───-: 、
          /::::::::::::::::::::::::::::::::\
          / '':::::::::::::::::::::::::::::::''''' ヽ
         !::::::::::ィ::ハ:::;::::::::::::::::::::::::::!
       i::|:::i::/l/  i;::ト、:、:::i:::::::::::::::i
       |::i/レ'-i''  'ヽi-ヾ,ヽ!:::::::::::::l
       |::ハ -‐-   -─- i::::::::::::::l
       |::::::l|  |     |  | |::::::::::::::!
       |::::::ヽ | r---、! l,.!::::::::::::::l
       l::::::::::::`;'-'=,‐,='r''i~!:::::::::::::::|
         !:::::::l、::r'"´'. ' l ' i::::::::iヽ:::l
       i:l、:::|./、_____,l::::;l:/‐'ヽ!
        '!ヽ;i'>l____,.//-‐'''"ヽ
            !/ |.VVVVVVVV.lV\!. i
         |  |        |    l

528 :506:02/11/06 22:58
>>522
>>523

529 :523:02/11/06 22:59
>>526
じゃあなんだ、printf("Hello,world!\n");これも危険だってか?


530 :510:02/11/06 22:59
>>506
勉強しなおしてください。引っかかる人がいるとは思いませんでした。

531 :デフォルトの名無しさん:02/11/06 23:00
>>522
もしかして、
char *hello_world = "hello world!";
でメモリを明示的に確保する必要があると思ってる?

532 :デフォルトの名無しさん:02/11/06 23:01
                ,.-ー''"~"'i,
              /~   ..:::::::!.,___        ,,..、-、,
            /    .::::::::::::::`::::::~~""''''ー-,/~:::::::::.`i,
           /     .:::::::::::::::::::::;;;;;;;;;;;;;;;;;;;::::::::::::::::::::::: i
           /      .:::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::.. |
         ,/      :::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::::. i
         ,l'       ::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::::. |
         l       ::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::::::: i  おいおい、お前ら落ち着けよ・・・
         i,       ..:::::●:::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::::::::::: !
        _,,.i      ..::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;:::::::::●::  i'
      /~  'l,    ..:::::::::::::::::::::::::::|、;;;;;;;;;;;;;;;;;/::::::::::::::::: ,i'            /~\
    /,.、-ー 、;i,   .::::::::::::::::::::::::::::::|  ~"''''"/::::::::::::::::::: /~\         /    i.,_
   /'/ ..::::::::|::' .,  :::::::::::::::::::::::::::::::|'⌒`ヽ,/;:::::::::::::::::: /:::::::.. \       ,i    .::.. \
   / i'  .::::::::::/:::::::`・、., :::::::::::::::::::::::,人,__,/;;;;;::::::::::::::::/;;;;;;:;:::::.. ヘ     /  .::::....::::::::. `.,
  ,i/( .::::::::::::i,::::::::::::;;;;;;~;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::-''";;;;;;;;;;;;;;;:::::..  \  /  .:::::::::::):::::::::.. ヘ



533 :デフォルトの名無しさん:02/11/06 23:01
http://www.catnet.ne.jp/kouno/c_faq/c1.html#32

534 :デフォルトの名無しさん:02/11/06 23:01
>>526
もう一度C-FAQを読み直してきなさい。

535 :デフォルトの名無しさん:02/11/06 23:01
>>506はc faqの文字列の所を読んだ方が良いな。
文字列リテラルは名無しのstaticに確保されるが変更可能かどうかは不明。


536 :506:02/11/06 23:03
>>529
printfは知らんが、sprintfは危険なのは知っている。

>>531
バグが潜む可能性があると提示したまでです。

537 :506 :02/11/06 23:03
>>535うう、よく分かりません・・・。
やっぱりif else文を覚えたてでは無理ですか?
今はやさしいCっていう麻奈本で学んでるんですけど・・・。

538 :523:02/11/06 23:05
>>536
char *str="abcdef";

この文は、char型へのポインタstrを宣言して、それを文字列定数"abcdef"の先頭アドレスで初期化しているということは理解しているよね?

539 :デフォルトの名無しさん:02/11/06 23:05
             ,ィミ,        ,ィミ,               フ
              彡 ミ        彡 ミ,            ヤ |
           ,,彡   ミ、、、、、、、、彡  ミ,     (⌒)    レ  |  まあ落ち着けや
          彡;:;:             ミ,    (  ヽ   ヤ
       〜三;:;:::::              彡〜  ノ  ノ   レ
       ~~三:;:;:;:::::  -=・=-   -=・=- 三~~ ヽ (    :     ;;
       ~~彡::;:;:;:;:::..     ___     ,三~~ ( ノ ,,,,,  :      ;;
        ~~彡;:;:;:;:;:;:;:.    |┴┴|    ,ミ~~ ノノ ;'" ,,ノ―、     ,;'
        ~~彡:;:;:;:;:;:;:;:;.  ノ――| ---==ニノ ,;'′ >=ニ(二二二()
   ,...-''''""~~,::;:;::;::;::;::;'            ミ,,  ,;'′  ゝ--〈
__,;";;:;;;;;;;;;;;;;;;;;;;;;:;:;:;:;:;:;:;            i! ミ,,,,;'′   `ー‐'
         ::::ミミミ:;:;:;:           ミ::      ,;' ̄ ̄ ̄ ̄|  \___/
          :::::ミミミ:;:;:           ミ:::,   ,;::''′        |.    \/
          ::::ミミミ:;:;::       ,;+''"~~゙+、~'''''~          |     |
           ::::ミミミ:;:;:;:     ,+'"     ミ:::::           |   ━┷━━━┳━━━━━
             :::::ミミミ:;:;:;:;:  >':;:       ミ::              |             ┃
           ::::::ミミミ:;:;:;:;:;../;:;:;:       ;:"             |             ┃
            ::::::::ミミミミ:;:/;:;:;:;:    ,.+'"''-、________|__         ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄;':;:;:;:   ,.+'"    ミ、             l          ┃


540 :デフォルトの名無しさん:02/11/06 23:06
>>536
発生しうるバグは
> 俺は確保されていないメモリに文字列を突っ込むのは怖いので。
で言い表されるのとは違うと思うのだが。

541 :デフォルトの名無しさん:02/11/06 23:07
>>537
scanfでいいんじゃないの?

542 :デフォルトの名無しさん:02/11/06 23:08
>>536
じゃあどう危険なのか教えて欲しい。


543 :506 :02/11/06 23:10
>>541じゃあ
scanfでYESは1、NOは2ということでやってみます。

544 :そくちのひと:02/11/06 23:12
最初ここに来たときは傲慢な口調の奴ばかりで
「こいつら相当プログラムできるんだろうな」と思っていたが、
見てる内に大半はハターリで無能な奴ほど増長すると言う事が分かりました。


545 :536:02/11/06 23:12
>>538
一応本職なので。
>>540
その回答には誤りがあった。認める。

俺が言いたかったのは明示的に変更を加えるような
ソースでない限り、変更が加えられるような恐れの
あるコーディングは危険だ、と言うことだ。

546 :デフォルトの名無しさん:02/11/06 23:15
>>545
> 一応本職なので。
          ,. -───-: 、
          /::::::::::::::::::::::::::::::::\
          / '':::::::::::::::::::::::::::::::''''' ヽ
         !::::::::::ィ::ハ:::;::::::::::::::::::::::::::!
       i::|:::i::/l/  i;::ト、:、:::i:::::::::::::::i
       |::i/レ'-i''  'ヽi-ヾ,ヽ!:::::::::::::l
       |::ハ -‐-   -─- i::::::::::::::l
       |::::::l|  |     |  | |::::::::::::::!
       |::::::ヽ | r---、! l,.!::::::::::::::l
       l::::::::::::`;'-'=,‐,='r''i~!:::::::::::::::|
         !:::::::l、::r'"´'. ' l ' i::::::::iヽ:::l
       i:l、:::|./、_____,l::::;l:/‐'ヽ!
        '!ヽ;i'>l____,.//-‐'''"ヽ
            !/ |.VVVVVVVV.lV\!. i
         |  |        |    l

547 :デフォルトの名無しさん:02/11/06 23:15
>>536
本職とは思えないほどの知識の無さ。お願いだからC言語入門からやり直してください。

548 :デフォルトの名無しさん:02/11/06 23:16
>>546
何言いたいか分からないよ。

> 明示的に変更を加えるような
何が何にどう変更を加えるの?

549 :デフォルトの名無しさん:02/11/06 23:19
>>548
要するに
const char *hello_world = "hello world!!!!";
にしとけってことでは?

550 :デフォルトの名無しさん:02/11/06 23:20
const char const * p = "hello japan";

551 :デフォルトの名無しさん:02/11/06 23:21
>>550
ネタですか?

552 :デフォルトの名無しさん:02/11/06 23:21
わかったから
"Welcome Hell World"
にしときなさい。おまへら。

553 :デフォルトの名無しさん:02/11/06 23:24
552=550?
551 は文字列の内容を指摘してるんじゃないと思うけど。

554 :デフォルトの名無しさん:02/11/06 23:24
helloworldも書けない奴がしたり顔でc言語を教えているスレはここですか?


555 :デフォルトの名無しさん:02/11/06 23:24
506が二人いるように見えるんだが、、、


556 :デフォルトの名無しさん:02/11/06 23:24
"Naruhodo the World"希望

557 :536:02/11/06 23:25
>>548
これはC++になるが、文字操作クラスのメソッドを作るときに
最終的には文字をポインタで操作するような事だ。

話がそれるが、俺はバグをなるだけ抑えるようなコードを書くために
慎重さを優先させてきたつもりだ。
>>547の言うようにそんなに知識は無いがなるだけエラーを起こさない様に
努力しているつもりだが何が悪い?

558 :デフォルトの名無しさん:02/11/06 23:26
>>549
なら、始めっからそう書くと思うんだよなぁ。
const付けるだけで「限りなく危険」なことが回避できるのなら。

559 :デフォルトの名無しさん:02/11/06 23:28
"Hello World"が嫌な椰子は
http://pc.2ch.net/test/read.cgi/prog/1035134087/l50
へ逝ってください。

560 :デフォルトの名無しさん:02/11/06 23:29
プログラムを作る上で知識が無いのは致命的な欠点だと思うよ。
知らなかった、じゃあ済まされないからね。

561 :デフォルトの名無しさん:02/11/06 23:29
>>543 は 536 とは別の人?

562 :デフォルトの名無しさん:02/11/06 23:32
>>557
なぜここで(必要も無い)C++を持ち出す?

563 :デフォルトの名無しさん:02/11/06 23:33
>>522
こう言っておいて>>545はねーだろ

564 :548:02/11/06 23:33
>>557
あなたは超能力者ですか?
悪いとは一言も言っていない、何を言っているのかわからないって言ったんだ
けど・・・。
しかも、相変わらず理解できないよ。

> これはC++になるが、文字操作クラスのメソッドを作るときに
> 最終的には文字をポインタで操作するような事だ。
いきなり C++ かい、というツッコミは置いといて、主語が無いよ。
何を述べているのか全然わからない。
こんなに日本語ダメダメで、本当に本職さんなの?

565 :デフォルトの名無しさん:02/11/06 23:34
>>536=506
ちょっと痛すぎだよ。
素直に謝りを認めればいいものを...

566 :デフォルトの名無しさん:02/11/06 23:34
>>506はif-elseの人なの?文字列の人なの?
どっちなんだYO!

567 :565:02/11/06 23:35
誤字訂正。 ×謝り→ ○誤り
素直に誤りを認めとこう。

568 :デフォルトの名無しさん:02/11/06 23:36
>>567
ワラタ

569 :デフォルトの名無しさん:02/11/06 23:36
>>566
唐突に関係の無い話を持ち出さない事。

570 :536:02/11/06 23:36
>>564
どうしてそんなに頭がわるい?
文字列操作のクラスを自作してポインタを直接扱わなくてもいいようにしたんだ。
画期的だろ?

571 :デフォルトの名無しさん:02/11/06 23:37
>>570
ネタはもうちょっとひねって書き込みましょう。

572 :デフォルトの名無しさん:02/11/06 23:37
>>570
画期的だが、さっきからの話題とどう関係あるんだ?

573 :564:02/11/06 23:38
Nooooooooo!!!

>>570
> どうしてそんなに頭がわるい?

> 文字列操作のクラスを自作してポインタを直接扱わなくてもいいようにしたんだ。
> 画期的だろ?
が全然繋がってないYO!!!

574 :デフォルトの名無しさん:02/11/06 23:38
getch()でも、どうぞ

575 :デフォルトの名無しさん:02/11/06 23:38
>>564
お前が理解しろ。

576 :デフォルトの名無しさん:02/11/06 23:38
570 は騙りじゃないのか?

577 :デフォルトの名無しさん:02/11/06 23:39
プログラマーって536みたいな人多いの?なんか開き直ってるし…。
しかしネタが無いからちょっと変な事言う奴を見つけると総出で叩かれるな。


578 :デフォルトの名無しさん:02/11/06 23:40
つまり、
「文字列をポインタで持つのは、バグの元だからステ。
 やっぱりC++でstringクラスでしょう」と570は、
このCスレで主張した、と、こいうことか?

579 :564:02/11/06 23:41
>>575
あんたにわかると言うなら、もったいぶらずに解釈を書きなさい。

580 :デフォルトの名無しさん:02/11/06 23:42
>>578
なるほど。
でもさっきからの話題とのつながりがよくわからないYO・・・

581 :580:02/11/06 23:43
話題をそらそうとしただけかしら。。。

582 :557:02/11/06 23:43
C++は例えばの話なのだが。
>>563
そうだったな、悪い。あれは俺の間違いだ。
>>564
例えは悪いが、良くあるサンプルで
int型nとiがメモリ上で並んでいたとしてiが何かの拍子でオーバーフローした結果、
nにも(不本意にも)影響が出てしまう。
つまり、いちいちポインタ云々で文字列操作をするとバグが出る可能性がある
と言いたかった。(扱う場合にはエラーが出ないよう慎重にコーディングする)

583 :386:02/11/06 23:44
どいつもこいつも頭の悪いヤツばかりだな。

584 :550:02/11/06 23:44
>>553
何言ってんだか…、やれやれアホにはついていけませんな。


585 :386:02/11/06 23:46
int型のnをオーバーフローすると別のメモリに書き込みが行われるのか。
勉強になるな、うん。

586 :デフォルトの名無しさん:02/11/06 23:47
>>580
>>548が本物だとしたら、「C++出せば納得してもらえるだろう。どうせC++
わかんねーだろうし」ってとこじゃないか?

587 :デフォルトの名無しさん:02/11/06 23:47
>>582
オーバーフロウってバッファオーバーフロウを指しているの?
じゃないとnに影響を与えることなんてないんじゃないか?


588 :デフォルトの名無しさん:02/11/06 23:48
>>584
アフォですか?
const char const * p = "hello japan";
これ
const char * p = "hello japan";
とどう違うの?

589 :582:02/11/06 23:48
ちなみに>>570は俺じゃない。
画期的かかは別問題として、ポインタを直接操作するのは
極力しないように勤めるのが、バグ減らしに有効だと思う。

590 :デフォルトの名無しさん:02/11/06 23:49
桁あふれってCPU上で起こるんだからメモリーには影響を与えないような気が・・・

591 :デフォルトの名無しさん:02/11/06 23:49
>>589
とりあえず、名前は固定しといてくれ。
バグの元だ。

592 :デフォルトの名無しさん:02/11/06 23:50
番号だらけだな

593 :デフォルトの名無しさん:02/11/06 23:50
亀レスですが私>>543>>536とは別人です。

594 :デフォルトの名無しさん:02/11/06 23:50
>>590
386 は全部ネタだから無視して (・∀・)イイ!! よ。

595 :デフォルトの名無しさん:02/11/06 23:51
>>593
だよな(笑)
>>504>>506ならただのミスだけど、そうでないのなら、>>504をコピペする意図がさっぱりわからん。

596 :デフォルトの名無しさん:02/11/06 23:51
>>594
言ったのは386じゃねーだろ(ワラ

597 :デフォルトの名無しさん:02/11/06 23:52
もうグダグダだな。

598 :386:02/11/06 23:52
>>589
unsinged int n = 0xffffffff;
n++;

うあっ、強制終了させられた!!(window2000)

599 :594:02/11/06 23:53
>>596
う、今読み直して気付いた。逝ってくる・・・。

600 :デフォルトの名無しさん:02/11/06 23:53
>>589
つまり、Hello, WorldでもC++のstringのようなものを実装してそれ使えと。
余計バグ増やしそうな気がするのは俺だけか?

601 :582:02/11/06 23:53
>>590
そんな事初めて聞きましたが。俺の知識不足か!?
>>591
ああ、バグの元だ。済まない。

602 :デフォルトの名無しさん:02/11/06 23:53
結局のところ、>>506
> 限りなく危険だが、
は、Cの仕様を理解していなかったので 危険だという妄想を抱いた

ということでよろしいいか。

603 :デフォルトの名無しさん:02/11/06 23:53
>>598
せめて(藁くらいつけろ。でないとお前がマジで言っているみたいだぞ。

604 :デフォルトの名無しさん:02/11/06 23:54
unsinged ??

605 :デフォルトの名無しさん:02/11/06 23:56
506 は C も会話もボロボロという事でよろしいか?

606 :デフォルトの名無しさん:02/11/06 23:56
>>601
え?だって演算はCPU上で行うものだとばかり・・・
違うの?(ToT)

607 :デフォルトの名無しさん:02/11/06 23:57
test.c:6: unsinged undeclaredまぁ確かに強制終了と言えなくも無いがww

608 :デフォルトの名無しさん:02/11/06 23:57
>>606
自信持て。508 が電波キタ─wwヘ√レvv~(゚∀゚)─wwヘ√レvv~─ !! なだけだ。

609 :デフォルトの名無しさん:02/11/06 23:59
508って誰だよ(藁

610 :デフォルトの名無しさん:02/11/07 00:00

                \ │ /            \ │ /
                 / ̄\              / ̄\ 
               ─( ゚ ∀ ゚ )─          ─( ゚ ∀ ゚ )─
                 \_/              \_/ 
                / │ \            / │ \
                    ∩ ∧ ∧∩             .∩ ∧ ∧∩  
             ∩ ∧ ∧ \( ゚∀゚) /      ∩ ∧ ∧  \( ゚∀゚) /
              ( ゚∀゚ )/  |    /  .      ( ゚∀゚ )/   |    / 
              |    〈 |   |       |    〈  |   |
              / /\_」 / /\」         / /\_」  / /\」
               ̄     / /            ̄      / /



611 :デフォルトの名無しさん:02/11/07 00:00
オーバーフローが他のメモリを汚すなら、シフト演算なんて怖くてできないぜ。

612 :デフォルトの名無しさん:02/11/07 00:01
>>606
メモリは計算器を持っていない。
だから一見メモリに対する演算でも、一旦 CPU にデータをフェッチして、演算後、
値を書き戻している。
この際、データ転送は変数の大きさ単位に行われる。
例えば符号無し 32bit 整数なら 32bit で。
計算結果が 33bit 目以降に起こっても 32bit で転送されるので、元のメモリの
別の変数領域が破壊される事は無い。

613 :582:02/11/07 00:03
>>611
それを応用するとウイルスが出来る。
実際扱うのは関数ポインタなんだが。

614 :デフォルトの名無しさん:02/11/07 00:03
>>608>>612
ですよね。。。
常識のつもりでいたことが間違っているのかとおもって焦りました。。

615 :デフォルトの名無しさん:02/11/07 00:03
>>609
名前の番号をころころ変えて周りを惑わしてる香具師。

616 :デフォルトの名無しさん:02/11/07 00:03
>>613
あのさー、桁あふれとバッファオーバーフローを取り違えていない?


617 :デフォルトの名無しさん:02/11/07 00:04
整数のオーバーフロー時に、隣のメモリを汚すのは
ANSIの規定の許容範囲なのだろうか。

618 :デフォルトの名無しさん:02/11/07 00:04
>>613
> それを応用するとウイルスが出来る。
本気で大丈夫ですか?

619 :デフォルトの名無しさん:02/11/07 00:05
今度はオーバーフローですか?

620 :デフォルトの名無しさん:02/11/07 00:07
  |         |  |      ________________________________________________
  |         |  |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
  |         |  | ̄ ̄ ̄ /|                    ||
  |         |  |   / /|TTTTTT   TTTTTTTTTT||TTTTT
  |        /\ |  /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|
  |  /  /  |文|/ // /
  |/  /.  _.| ̄|/|/|/         ∧_∧
/|\/  / /  |/ /           (___)
/|    / /  /ヽ            /〔 祭 〕〕つ
  |   | ̄|  | |ヽ/l            `/二二ヽ
  |   |  |/| |__|/   ∧_∧     / /(_)
  |   |/|  |/      ( ´∀`)   (_)    ∧_∧
  |   |  |/      // /  ^ ̄]゚        (`   )
  |   |/        ゚/ ̄ ̄_ヽ         ⊂〔〔 祭 〕
  |  /         /_ノ(_)          ┌|___|
  |/          (__)             (_ノ ヽ ヽ
/                                (_)



621 :デフォルトの名無しさん:02/11/07 00:08
>>612
データ転送の単位は変数ではなくてアーキテクチャに依存すると思うんだが。


622 :デフォルトの名無しさん:02/11/07 00:08

適当に法螺吹いて悦に浸っている DQN 本職がいるスレはここですか?


623 :デフォルトの名無しさん:02/11/07 00:10
>>621
そんな気がしないでもない。
>>617
「未定義」 だったような気がしないでもない。

624 :デフォルトの名無しさん:02/11/07 00:10
>>623
というか、定義するまでもない。

625 :デフォルトの名無しさん:02/11/07 00:13
             ∧         ∧              ###
            / ヽ        ./ .∧           /#####ヽ
           /   `、     /   .∧         /  ##### \
          /       ̄ ̄ ̄    ヽ        /   #####  ヽ
          l:::::::::              .l      /    #####   ヽ
         |::::::::::  -==・-    -==・-  |      |          ::::::::: :::::::|
         .|:::::::::::::::::   \___/    |      |  -・==-   -・==- :::::::::|
          ヽ:::::::::::::::::::  \/     丿      |    \___/  :: :::::::|
          ヽ:::::::::::::::::        /       ヽ      \/    ::::::::::|
     ____>:::::::::::::::::       <_        ヽ        ::::;;;::::::::丿
    /:::::::::::::::::::::::: :::::::::          /⌒ヽ⌒、⌒、⌒、      ::::::::: :<___
    |::::::::::::;;;;;;;;;;;;;:::::::::::::::        / /ヽノヽノヽノヽノ       :::::::::::::  :::::::: :::ヽ
   |::::::::::::::::::::::::            /  /:::::::: :::::::::::::::::::::           ::::::::
          「未定義」論争いこうか?             いいねぇ〜


626 :デフォルトの名無しさん:02/11/07 00:15
なんで>>510のしょうもない質問からこんなに発展するんだ?
>>510もネタくさいし・・・・

627 :デフォルトの名無しさん:02/11/07 00:17
> 510もネタくさいし・・・・
同意・・・

628 :デフォルトの名無しさん:02/11/07 00:22
>>510はネタでは無いと思うが。
多少なりともcをかじってる奴はprintfのformat部をあんな風にすると言う発想が
そもそも無いと思う。作為的なものは感じられない。


629 :デフォルトの名無しさん:02/11/07 00:22
  |         |  |
  |         |  |_____
  |         |  | ̄ ̄ ̄ /|
  |         |  |   / /|
  |        /\ |  /|/|/|
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|
  |  /  /  |文|/ // /     ∧∧
  |/  /.  _.| ̄|/|/|/      /⌒ヽ)
/|\/  / /  |/ /       [ 祭 _]    ∧∧
/|    / /  /ヽ         三____|∪   /⌒ヽ)
  |   | ̄|  | |ヽ/l         (/~ ∪    [ 祭 _]
  |   |  |/| |__|/       三三      三___|∪
  |   |/|  |/         三三       (/~∪
  |   |  |/         三三      三三
  |   |/                    三三
  |  /                    三三
  |/                    三三



630 :デフォルトの名無しさん:02/11/07 00:24
>>628
フォーマット文字列をあんなにする奴がmainの引数を書くとはおもえん・・・しかも通常とは逆だし。
あと>>530

631 :デフォルトの名無しさん:02/11/07 00:40
兎も角だおまいら
未定義で不定なんだよ

632 :デフォルトの名無しさん:02/11/07 00:44
>>613
> 実際扱うのは関数ポインタなんだが。

新たなネタですか?

633 :age:02/11/07 00:45
age

634 :デフォルトの名無しさん:02/11/07 01:52
ここはグダグダなインターネトですne

635 :デフォルトの名無しさん:02/11/07 02:09
635 には脱帽。

636 :デフォルトの名無しさん:02/11/07 02:23
>>635


637 :デフォルトの名無しさん:02/11/07 03:00
ポインタがおかしくなゆので危険というのはこのスレのことだったのか。

638 :デフォルトの名無しさん:02/11/07 03:50
Cスレにしては信じられない静けさ

639 :デフォルトの名無しさん:02/11/07 03:58
この問題教えてください。
明日までの課題なんです。

「文字列配列を2つ渡すと、その2つの文字列を連結する関数を作成せよ。
ただし、関数は次の機能を持つ。

・2つの文字列配列はポインタで受け取る
・文字列配列の操作はポインタの増加で行う。str[i]という操作は使わない。
・結果は関数内で動的メモリ確保を行いそのポインタを返す。 」

神降臨キボンヌ。

640 :デフォルトの名無しさん:02/11/07 04:07
>>639
宿題はスレ違いだバカ野郎。

641 :デフォルトの名無しさん:02/11/07 04:07
そうっすね、スマソ


642 :デフォルトの名無しさん:02/11/07 04:33
>>639
プログラムに疲れたのでその問題を激しく解いてマターリしたいんだが、
宿題スレでは聞いてくれないのか?

643 :デフォルトの名無しさん:02/11/07 05:05
お(^о^〃)や(^О^〃)しゅ(^。^〃)みぃ(^-^〃)♪

644 :デフォルトの名無しさん:02/11/07 05:19
char *futatsunomojiretsuworenketsusuru(char *mojiretsu1,char *mojiretsu2)
{
char *renketsushitamojiretsu,*p;

renketsushitamojiretsu=p=(char *)malloc(strlen(mojiretsu1)+strlen(mojiretsu2)+1);
if(renketsushitamojiretsu){
for(;*mojiretsu1;mojiretsu1++,renketsushitamojiretsu++)
*renketsushitamojiretsu=*mojiretsu1;
for(;*mojiretsu2;mojiretsu2++,renketsushitamojiretsu++)
*renketsushitamojiretsu=*mojiretsu2;
*renketsushitamojiretsu='\0';
}

return p;
}


645 :644:02/11/07 05:21
仮引数はconst char *にすべきか・・・

646 :デフォルトの名無しさん:02/11/07 05:52
char *strcat(char *s, char *t) {
char *p, *q;
q = malloc(strlen(s)+strlen(t)+1);
for (p=q;*p++ = *s++;);
for (p--; *p++ = *t++;);
return q;
}

647 :639:02/11/07 06:02
>644 ありがたいです。
なんとかできそうですけど、pの意味って何ですか?

648 :デフォルトの名無しさん:02/11/07 06:04
初心者です。C言語をVine Linuxのemacsでやっていきたいと思っています。
お勧めの本を教えてください。入門者から脱初心者へ行ける本がいいです。
住所が田舎でコンピューター関連の本が売っていません。ネットショッピングで買おうと思っていますが、内容がわかりません。
僕にぴったりの本を教えてください。

649 :デフォルトの名無しさん:02/11/07 06:05
ライブラリ関数使っとけ。
char *func(const char *str1, const char *str2)
{
  size_t size1 = strlen(str1);
  size_t size2 = strlen(str2) + 1;
  char *p = malloc(size1 + size2);
  if(p) {
    if(size1) memcpy(p, str1, size1);
    memcpy(p + size1, str2, size2);
  }
  return p;
}

650 :デフォルトの名無しさん:02/11/07 06:05
>>647
適当な言葉がみつからなかったから単にpとした

>>648
高橋麻奈タンのやさしいC

651 :デフォルトの名無しさん:02/11/07 06:05
K&R 読むのは大変だがこれ一冊で十分。


652 :649:02/11/07 06:05
こっちがマジレス。
#include <stdlib.h>
char *func(const char *str1, const char *str2)
{
  const char *pp;
  char *p;
  size_t len;
  for(pp = str1; *pp; ) pp++;
  len = pp - str1;
  for(pp = str2; *pp; ) pp++;
  len += pp - str2;

  pp = p = malloc(len + 1);
  if(pp) {
    while(*str1) *p++ = *str1++;
    while(*str2) *p++ = *str2++;
    *p = '\0';
  }
  return (char *)pp;
}

653 :デフォルトの名無しさん:02/11/07 06:09
chr *func(const char *str1, const char *str2)
{
char *p = malloc(strlen(str1)+strlen(str2)+1);
*p = '\0';
strcat(p, str1);
strcat(p, str2);
return p;
}

654 :デフォルトの名無しさん:02/11/07 06:10
>>653
mallocがNULLを返したらどうする?

655 :デフォルトの名無しさん:02/11/07 06:11
chr *func(const char *str1, const char *str2)
{
char *p = malloc(strlen(str1)+strlen(str2)+1);
if (p){
*p = '\0';
strcat(p, str1);
strcat(p, str2);
}
return p;
}

656 :649:02/11/07 06:13
>>653
速度を考慮してあえてmemcpyを使ったんだが。

657 :639:02/11/07 06:16
やったー、みなさんのおかげでできました。

ぼくにとっては一大事だったのでたすかりました。

MY HEROたちに感謝します。

658 :デフォルトの名無しさん:02/11/07 06:16
char *func(const char *str1, const char *str2)
{
int i = strlen(str1);
char *p = malloc(i+strlen(str2)+1);
if (p){
strcpy(p, str1);
strcpy(p+i, str2);
}
return p;
}

659 :649:02/11/07 06:16
char *func(const char *str1, const char *str2)
{
char *p=malloc(strlen(str1)+strlen(str2)+1);
if(p)strcat(strcpy(p,str1),str2);
return p;
}

660 :デフォルトの名無しさん:02/11/07 06:20
char *func(const char *str1, const char *str2)
{
char *p=malloc(strlen(str1)+strlen(str2)+1);
if(p) sprintf(p, "%s%s", str1,str2);
return p;
}

661 :デフォルトの名無しさん:02/11/07 06:27
char *func(const char *str1, const char *str2)
{
char *p=malloc(strlen(str1)+strlen(str2)+1);
if(p) strcpy(p+sprintf(p,"%s",str1),str2);
return p;
}

662 :デフォルトの名無しさん:02/11/07 06:29
で、どの方法が一番すまぁとなの?

663 :デフォルトの名無しさん:02/11/07 06:31
660

664 :649:02/11/07 06:31
すまぁとの基準による。
俺的には俺の649。

665 :デフォルトの名無しさん:02/11/07 06:32
一番だめだめ〜なのは?

666 :649:02/11/07 06:33
660もいいね。

667 :デフォルトの名無しさん:02/11/07 06:33
649よりは658

668 :649:02/11/07 06:34
だめだめ〜の基準による。
俺的には俺の652と661。

669 :649:02/11/07 06:34
>>658
速度を考えないならそれでいい。

670 :デフォルトの名無しさん:02/11/07 06:38
memcpy と strcpy ってそんなに差がある?

671 :649:02/11/07 06:45
処理系(ライブラリ)依存の話になるけど、一般的には
あらかじめ長さがわかっている文字列をコピーするなら
strcpyよりmemcpyの方が有利。実装を考えてみるといい。
ただ、可読性ではstrcpyの方がすっきりするね。

672 :デフォルトの名無しさん:02/11/07 06:47
strcpyは0の検出処理をし、memcpyは指定されたバイト数に達したかどうかを検出する。
大差ないだろ。

673 :デフォルトの名無しさん:02/11/07 06:49
長さがわかってるんならcharごとじゃなくて
ある程度の大きさづつコピーできるな。

674 :デフォルトの名無しさん:02/11/07 06:52
>>673
それがmemcpyじゃないか?

675 :649:02/11/07 06:55
>>672
ライブラリ関数のソースでも読んでみればいい。
まあコンパイラによってはインライン展開するものもあるから
アセンブルリストを出力させる必要があるかもしれんが。

676 :デフォルトの名無しさん:02/11/07 07:01
RtlMoveMemory( dst, src, count );

VC++6.0

なんだこの関数は?

677 :649:02/11/07 07:02
>>676
memmoveで#defineされてない?

678 :デフォルトの名無しさん:02/11/07 07:03
>>672
大違い

679 :677:02/11/07 07:04
あ、MoveMemoryの話と間違えた。

680 :デフォルトの名無しさん:02/11/07 07:07
void *memcpy(void *dest,const void *src,size_t n)
{
unsigned char *destp=(unsigned char *)dest;
const unsigned char *srcp=(const unsigned char *)src;

for(;n--;destp++,srcp++)
*destp=*srcp;

return dest;
}

昔書いた奴。
環境に依存する形でかけばもっと効率がよくなるのかな・・・

681 :デフォルトの名無しさん:02/11/07 07:08
長さ100の配列で試してみたら memcpy の方が圧倒的に速かった

682 :デフォルトの名無しさん:02/11/07 07:09
たった100でよくわかったな・・・

683 :デフォルトの名無しさん:02/11/07 07:12
短かい方が strcpy に有利だと思ったけど?
長さ10000でもやったよ。結果は変わらないけど

684 :デフォルトの名無しさん:02/11/07 07:21
>>683
どうやって速度をはかった?


685 :684:02/11/07 07:23
VC++6.0のclock程度じゃそこまで精密にはかれない。

686 :デフォルトの名無しさん:02/11/07 07:30
>>684
(゚Д゚)ファア?
ループで繰り返したに決まってんじゃん
くだんねぇこと聞くなや。ハグェが

687 :デフォルトの名無しさん:02/11/07 07:31
>>686
ならなぜ素直にもっと巨大な配列を使わないんだ?

688 :デフォルトの名無しさん:02/11/07 07:32
http://shopping.yahoo.co.jp/shop?d=jb&id=30884785
確認ですが、これはVineLinuxでemacsでC言語を勉強する人向けのもので入門から脱初心者までの本ですか?
Windows向けのものではありませんよね。

689 :687:02/11/07 07:34
で、巨大な配列をつくってやってた。
一桁ずつ増やし、1千万文字にしてやっと差が出たよ・・・・
確かにmemcpyの方が速かった。でも問題になるようなものじゃないと思う。

690 :689:02/11/07 07:34
「つくってやってた」じゃなくて「つくってやってみた」

691 :デフォルトの名無しさん:02/11/07 07:36
>>687
大きい配列だと確実に strcpy 不利だと思ったんだけど違うかな?
ちなみに 1,000,000でもやってみたけど strcpy の方が2倍近くかかる

692 :デフォルトの名無しさん:02/11/07 07:40
>>691
(CPUの計算速度によるが)そこまで大きな配列を使うか、よほどループさせなければ問題になるほどじゃないだろ?

693 :692:02/11/07 07:40
元々時間のかかる処理じゃないから例え二倍でも大差ないと言いたいだけ。

694 :649:02/11/07 07:47
俺もVC++5.0でループを使って計測してみた。平均して
100文字で約5倍、1000文字で約11倍程度の速度差だった。

まあそれでもstrcpyを使うのは勝手だが、俺ならmemcpyだな。

695 :デフォルトの名無しさん:02/11/07 07:49
>>692
strcpy や memcpy みたいな関数はプログラム内で何万回も呼ばれたり
することだってあるわけだから十分問題だと思うんだけどなぁ...

696 :デフォルトの名無しさん:02/11/07 07:53
memcpyを自分で書けと言われたらどう書く?


697 :649:02/11/07 07:59
用途次第だな。
毎回書くようなソースならともかく、
一度作っておけばOKな使い回しのきく関数であれば
memcpyで書いておいて損はないと思うが。

というか、strcpyにこだわってる奴は1人だけか?

698 :デフォルトの名無しさん:02/11/07 08:02
長さの分かっている文字列のコピーといえばstrdupがあるけど、これもmemcpyで書くのが一般的?

699 :デフォルトの名無しさん:02/11/07 08:06
>>696
こんなことしたら速くなったり......しないよね
そのまえにまともに動作しないかも
できるだけ long 型でコピーできる分は long でやるようにしてみたつもりなんだけど

void *memcpy( void *dest, const void *src, size_t n ) {
size_t x = n / sizeof(long), y = n % sizeof(long);
size_t i;
long *dl = dest; const long *sl = src;
char *dc; const char *sc;

for ( i = 0; i < x; i++ ) *dl++ = *sl++;
dc = (char *)dl; sc = (const char *)sl;
for ( i = 0; i < y; i++ ) *dc++ = *dl++;
return dc;
}

700 :デフォルトの名無しさん:02/11/07 08:06
上、意味不明ナリ
strdupはstrcpyとおなじくらい長さは分かってないけど。

701 :デフォルトの名無しさん:02/11/07 08:07
>>698
マテ。
strdup()の仕様をもいっぺん読み直した方がいい。


702 :デフォルトの名無しさん:02/11/07 08:07
>699
bus error.

703 :デフォルトの名無しさん:02/11/07 08:09
>>700-701

mallocでコピーする領域を得る時に長さをはかるでしょ・・・・

704 :699:02/11/07 08:09
(;´Д`)いきなり間違ってたスマソ
for ( i = 0; i < y; i++ ) *dc++ = *dl++; → for ( i = 0; i < y; i++ ) *dc++ = *sc++;
やっぱダメだ忘れてください......

705 :703:02/11/07 08:10
第一、さっきの文字列連結関数もそういう理由でmemcpyをつかったんでしょ!?

706 :699:02/11/07 08:10
>>702
え......なんスか?バスエラーって?
なんかマズいことしてます?(;´Д`)

707 :デフォルトの名無しさん:02/11/07 08:17
strcpyとmemcpyの速度の差ってstrcpyが関数内でコピーサイズを調べるからでしょ。
memcpyは関数外でコピーサイズを調べなきゃいけないから、結局変わらない。

708 :デフォルトの名無しさん:02/11/07 08:18
>>699
そのままでは、ワードデータのアライメントを要求するCPU(680x0とか)では
ちょっとまずい。与えるアドレスが奇数だとaddress errorになる。
x86でも、エラーにはならないが遅くなったりする。

でも、基本的な考え方(できるだけ大きな単位でデータを移動)はいいのでは?
ライブラリのmemcpy()のソースも、アセンブラで書いてあったり、キャッシュ
を考慮して命令の配列に気を配ったりしているけど、基本的にはそんな感じ。


709 :デフォルトの名無しさん:02/11/07 08:22
>>707
strcpy()は'\0'が来るまでコピーという仕様だから、1バイトずつコピーする
以外に実装のしようがない。
memcpy()はあらかじめデータサイズが分かっているので、>>699のように
サイズが4の倍数だったらlong単位でコピーする、などの高速化が図れる。


710 :699:02/11/07 08:23
>>708
なるほど.....正直CPUの動作のこと全然知らなかったです。サンクス

711 :独り言モード:02/11/07 08:24
昔、アセンブラで組んだときに、少しでも速くコピーするために
push、popを使ってメモリの転送したなー。


712 :デフォルトの名無しさん:02/11/07 08:27
そこまで速度を気にするなら、もちろんprintf("Hello,world");なんてやっていないよな?

713 :デフォルトの名無しさん:02/11/07 08:27
>>709
strcpyでも'\0'が来るまでのサイズを調べてから4の倍数だったら
long単位でコピーすれば良い。

714 :デフォルトの名無しさん:02/11/07 08:29
今は MMX の 64bit 転送しか使ってないな

715 :デフォルトの名無しさん:02/11/07 08:29
>>713
わざわざstrcpy内部であらかじめstrlenを取得するのか?

716 :デフォルトの名無しさん:02/11/07 08:30
>>713もあほらしいが、速度に過敏なmemcpy厨もあほらしいな。

717 :デフォルトの名無しさん:02/11/07 08:30
>>713
そこまでするなら素直にstrcpy内からmemcpy呼べ、と

718 :デフォルトの名無しさん:02/11/07 08:34
>>715
そっちの方が速いならそう書けば良い。
strcpyってstrlen+memcpyという実装でもいいわけだろ。

719 :デフォルトの名無しさん:02/11/07 08:36
>>718
strlen による速度低下のほうが烈しくないか?

720 :デフォルトの名無しさん:02/11/07 08:37
てかstrcpy厨に質問ですが、なんでmemcpyで済むところに
わざわざstrcpyを使おうとするの?

721 :デフォルトの名無しさん:02/11/07 08:37
>>719
memcpyでやる場合も関数外でやるだけであってstrlenが必要。

722 :デフォルトの名無しさん:02/11/07 08:38
>>718
アフォですか?

723 :715:02/11/07 08:38
>>718
> そっちの方が速いならそう書けば良い。
あほですか?
4の倍数じゃなかったら数倍遅くなるわけだが。

724 :デフォルトの名無しさん:02/11/07 08:38
memsetも複数バイトごとに書き込んでいたりする?

725 :デフォルトの名無しさん:02/11/07 08:39
>>720
strcpyの方がわかりやすいから。

726 :デフォルトの名無しさん:02/11/07 08:39
>>720
文字列のコピーはサイズがあらかじめわからないのでmemcpyだけじゃできませんよ。

727 :デフォルトの名無しさん:02/11/07 08:40
>>721
必要だけど、それはmallocで使ったりするんじゃない?

728 :デフォルトの名無しさん:02/11/07 08:40
>>725
どこらへんが?
>>726
日本語読めませんか?

729 :デフォルトの名無しさん:02/11/07 08:40
>>728
strcpyなら文字列を丸ごとコピーしているとすぐに分かるだろ。

730 :デフォルトの名無しさん:02/11/07 08:40
>>723
そうだね。memcpyも4の倍数じゃなかったら数倍遅くなるね。

731 :729:02/11/07 08:41
memcpyだとコメントでもないかぎり、なぜmemcpyなんだ!?と思う。

732 :デフォルトの名無しさん:02/11/07 08:41
>>729
コメントつけるなりしてください。そんなところで可読性気にするより

733 :649:02/11/07 08:41
なんか勘違いしてる奴がいるようだが、俺がstrcpyよりmemcpy
の方が有利と書いたのは、長さがわかってる場合という前提だからな。
671で書いてるが。

734 :デフォルトの名無しさん:02/11/07 08:43
>>733
VC++6.0のstrdupのソース見てみた。文字列の長さがコピー時には分かっているのにstrcpyを使っているね。
このソース糞だね。

735 :デフォルトの名無しさん:02/11/07 08:43
>>734
糞です。いますぐ窓から投げ捨ててください(w

736 :デフォルトの名無しさん:02/11/07 08:44
>>730
お前ほんとに短絡思考だな。ここまで来るとネタとしか思えん。

737 :デフォルトの名無しさん:02/11/07 08:45
memcpyって文字列以外の配列のコピーのためにあるんだと思っていた・・・
確かに文字列のコピーに使えないことはないけど。

738 :649:02/11/07 08:45
>>734
そりゃ確かに糞だな。
CStringなんかは全部memcpyなのにな。

739 :デフォルトの名無しさん:02/11/07 08:46
↓これ。

char * __cdecl _strdup (
const char * string
)
{
char *memory;

if (!string)
return(NULL);

if (memory = malloc(strlen(string) + 1))
return(strcpy(memory,string));

return(NULL);
}


740 :デフォルトの名無しさん:02/11/07 08:48
>>739
本当に糞だな。

741 :デフォルトの名無しさん:02/11/07 08:50
>>739
それ書いたやつはきっと過労で疲れてたんだよ、きっと

742 :649:02/11/07 08:55
んで、結局彼は何が言いたいんだろう。
strdupがstrcpyを使ってるからstrcpyを使いましょうってか?
まさかこのケースでもstrcpyの方が速いとか思ってないよな。

743 :デフォルトの名無しさん:02/11/07 08:57
std::stringが最強です。


744 :デフォルトの名無しさん:02/11/07 08:57
char *
glibcはmemcpyか。結構メジャーな方法なのか?
ところで、C++のソースとしてコンパイルするとエラーになるな(ワラ

char *
__strdup (const char *s)
{
size_t len = strlen (s) + 1;
void *new = malloc (len);

if (new == NULL)
return NULL;

return (char *) memcpy (new, s, len);
}


745 :744:02/11/07 08:58
おっと、一行目は無視してくれ

746 :デフォルトの名無しさん:02/11/07 10:25
>>709
俺の記憶が正しければ、VC++のstrcpy()はワード境界からずれた
先頭と末尾以外はワード単位で転送してたように思う。
NUL文字の検出はなかなか思いつかなそうな方法使ってたよ。

747 :デフォルトの名無しさん:02/11/07 10:50
半角って1バイト?漢字が2バイト?


748 :デフォルトの名無しさん:02/11/07 11:02
>>747
昔はな。とか言ってみる。

749 :デフォルトの名無しさん:02/11/07 11:03
2バイト半角文字を知らんのか?

750 :デフォルトの名無しさん:02/11/07 11:03
マンコプログラム

751 :デフォルトの名無しさん:02/11/07 11:04
>>750
関係ないけど、あなたの言葉はあまり良くないよ。
もう少し何とかならないのかね。
いくら匿名掲示板だからといって軽率すぎますよ。


752 :デフォルトの名無しさん:02/11/07 11:09
2バイトのかなや数字も知らないようです。

753 :デフォルトの名無しさん:02/11/07 11:10
ircのようなチャットサーバを作りたいのですが、
なにか参考になるソフトウェアとかはないでしょうか?


754 :デフォルトの名無しさん:02/11/07 11:16
>>753
IRCチャットサーバー参考にすればいい。

755 :デフォルトの名無しさん:02/11/07 11:16
>>753
socketについて調べて見な。
IRCはチャットの一言では片づけられないシステムだよ。

756 :デフォルトの名無しさん:02/11/07 12:05
>>688

答えてください。

757 :デフォルトの名無しさん:02/11/07 12:17
>>756
>確認ですが、これはVineLinuxでemacsでC言語を勉強する人向けのもので入門から脱初心者までの本ですか?
>Windows向けのものではありませんよね。

プラットホームは特定してません。
内容は基礎を一通り。





758 :デフォルトの名無しさん:02/11/07 12:43
>>688
それがわからないようなレベルであれば買っといて損は無い。

759 :709:02/11/07 12:49
>>746
glibcのソースを見てみたら、同様に可能な限りワード単位で転送していた。
というわけで、>>709は撤回。
NUL文字の検出はすごいねえ。元のソースはアセンブラで書いてあったが、
Cに直してみるとこんな感じ。

/* unsigned longの4バイトのうち1バイトでも0x00があったらTRUE */
int isnul(unsigned long a)
{
unsigned long b = a + 0xfefefeff;
return (a <= b) || (((~a ^ b) & 0x01010100) != 0);
}

ぱっと見では何やってるのかさっぱり分からん。


760 :デフォルトの名無しさん:02/11/07 13:55
>>757 >>758

いや、C言語の入門書は一冊もっているのです。しかし、Windows用なのでLinux emacs用のがほしいのです。

761 :デフォルトの名無しさん:02/11/07 14:01
キャンセルは今日中なので教えてください。もう注文してしまったのです。emacsでやってる本がほしいです。

762 :デフォルトの名無しさん:02/11/07 14:03
>>760
その本はWinとかUnixとか、環境に関係なくCを解説してるよ。
エディタとかデバッガとかLinuxでの開発環境の勉強をしたかったら
別に本を買う必要があるよ。

763 :デフォルトの名無しさん:02/11/07 14:11
>>756
Vine-usersに帰れよひかる

764 :デフォルトの名無しさん:02/11/07 14:16
つまりそれはC言語に特定しないLinuxの勉強本が他にいるということですか。
Windows用のを買ってしまって大変後悔しているのです。emacsでC言語をやりたいと言えば、やはりお勧めは前述の本が妥当なのですね?

765 :デフォルトの名無しさん:02/11/07 14:18
>>761
emacsのマニュアルならそこらに転がってるぞ
英語 :http://www.delorie.com/gnu/docs/emacs/emacs_toc.html
日本語:http://flex.ee.uec.ac.jp/texi/emacs-jp/emacs-jp_toc.html

766 :デフォルトの名無しさん:02/11/07 14:21
V-U MLから遂に駆逐されたの?>>763


767 :デフォルトの名無しさん:02/11/07 14:22
>>764
太い回線と検索能力と何時間でもモニタを見ていられる視力があれば
大概の情報はweb上に存在するので本など買わなくてもいい。
# 嘘情報、古い情報も大量にあるけど

768 :デフォルトの名無しさん:02/11/07 14:26
>>767
どうやって嘘情報を見破ればいいですか?

769 :デフォルトの名無しさん:02/11/07 14:27
>>768
ん?学校で習わなかったか?
三つ以上の情報を見て、正しそうなのを信じるのさ。

770 :デフォルトの名無しさん:02/11/07 14:27
>>768
プログラムの経験がある程度あるなら、もっと
Linuxよりの解説書を薦めるけど、経験無しなら
その本とEmacsの解説書を買えばいいよ。



771 :デフォルトの名無しさん:02/11/07 14:28
void *v;
int a=5;(別になんでもいいけど)
*(int*)v=a;

っていうのは可能ですか?
wgetのソース見てたらこういうのがあったんですが
手元でやってみたら
segmentaionfaultです。
なんでかな

772 :デフォルトの名無しさん:02/11/07 14:29
vに何も入っていない。

773 :デフォルトの名無しさん:02/11/07 14:34
あ すまんです


774 :デフォルトの名無しさん:02/11/07 14:54
int main(void)
{
void a;
}
というのを書いてみたら
コンパイラに「voidで宣言されてます」
といわれてエラーになるんですが
コンパイラが壊れてるんですか?

775 :デフォルトの名無しさん:02/11/07 14:56
>>774
ネタはケッコウです。
sage

776 :デフォルトの名無しさん:02/11/07 14:57
>>775
あの真剣に分からないのですが
軽めに説明してくれませんか?


777 :デフォルトの名無しさん:02/11/07 14:59
777

778 :デフォルトの名無しさん:02/11/07 14:59
>>776
void の意味をわかれ。調べれ。以上。

779 :デフォルトの名無しさん:02/11/07 14:59
>>774
>void a;

この行にコメントを付けるとすればアナタはどんなことを書きますか?

780 :デフォルトの名無しさん:02/11/07 15:01
/* 型がきまってません */
とか?
ですか?

781 :デフォルトの名無しさん:02/11/07 15:03
void a; /*voidにする*/


だろ

782 :デフォルトの名無しさん:02/11/07 15:05
こういう明らかに入門書の一冊でも読んでないようなヤツは、無視して欲しいというのが正直なところ。

783 :デフォルトの名無しさん:02/11/07 15:06
>>779
780 と 781 はものすごく正しいから、もうちょっと考えてから書いてくれ。

784 :783:02/11/07 15:07
いや、違う。
780 は間違ってるぞ。

785 :デフォルトの名無しさん:02/11/07 15:08
>>774
何をするつもりで void a; と書いたわけ?

786 :774:02/11/07 15:15
voidの大きさなどが仮にでも決められてるとしたら
どんなもんだろうと思いまして
>>782ここまで怒られるとは思いませんでした
ショボン。。

787 :デフォルトの名無しさん:02/11/07 15:21
>>786
気持ちもわからんでもないが、妄想から書いたコードをコンパイルできなくて
「コンパイラが壊れてるんですか?」 とかほざいてたら放置したくもなるだろう。

788 :デフォルトの名無しさん:02/11/07 15:22
>>786
だったら「コンパイラが壊れてる」なんてふざけたことを書かないで、
こういう動機でこのコードを書いて、こういう結果がでたので、こう考
察しましたとか、まじめに書けや、

789 :デフォルトの名無しさん:02/11/07 15:22
>>774
void の意味を英和時点で牽いておけ。

790 :789:02/11/07 15:23
> 時点

          アヒャーー
      ∧∧
     (゚∀゚ )⌒ヽ ≡≡ = = -
    ,.、,,U‐U^(,,⊃_       /i ≡≡≡ = = -
   ;'゚∀゚ 、、:、.:、:, :,.: ::`゙:.:゙:`''':,'.´ -‐i = ≡≡≡ = = -
    '、;: ...: ,:. :.、.:',.: .:: _;.;;..; :..‐'゙  ̄  ̄
     `" ◎ ''`゙ ◎ ´´   - = ≡ = = -

791 :デフォルトの名無しさん:02/11/07 15:35
void *aの間違いでしょ。

>>759
じゃあstrcpyで問題ないじゃん。

792 :デフォルトの名無しさん:02/11/07 15:41
>>791
786 で言っている事の何が void* なんだ?

793 :デフォルトの名無しさん:02/11/07 15:41
http://shopping.yahoo.co.jp/shop?d=jb&id=30552298

emacsについてはこの本でいいでしょうか?やすいので。。。。。。。

794 :デフォルトの名無しさん:02/11/07 15:42
デクリメントですむmemcpyと違って
strcpyの\0判定はもっと手間がかかっているでしょ。

795 :デフォルトの名無しさん:02/11/07 15:43
関数が載っているだけの薄い本じゃない?

796 :デフォルトの名無しさん:02/11/07 15:45
>>792
きちんと見ないでレスしてしまった(^_^;)
スマソ

797 :デフォルトの名無しさん:02/11/07 15:45
>>791
問題をきちんと理解しとかなきゃ。

・前もって文字列の長さがわかってるとき
・そうじゃないとき

の二通りがあって、memcpy使ったほうがいいといってるのは
前者の場合だ。発端となった>>639の問題の場合、
mallocするために文字列の長さを得る必要があった。
その後コピーするわけだが、その場合文字列の長さがわかってる以上、
strcpyよりもmemcpyするほうが速いという議論だったのだ。

んで、おれの意見を書くと、速度についてはそうなることが期待できるから同意はする。
ただ速度が重要な部分以外ではそんなことやらない。strcpyを使う。

798 :デフォルトの名無しさん:02/11/07 15:46
>>793
スレ違い。とりあえずC-h Tやっとけや。入門はこれで十分。

799 :デフォルトの名無しさん:02/11/07 15:47
>>797
strcpyは一文字ずつ、memcpyは通常ワード単位でコピーするから速いってことじゃなかったのか?
strcpyもワード単位ならstrcpyでいいじゃん。

800 :デフォルトの名無しさん:02/11/07 15:50
ところで、VC++6.0にSTRCPY.Cがないんだが、strcpyのソースはどこにあるんだろう・・・
まさか削除してしまったのか。。

801 :デフォルトの名無しさん:02/11/07 15:50
int n=100;
int *p;

p=&n;

この場合,*ptは100(n)を指しますよね(100というかnのアドレスの中身ですよね?)。
&*ptの場合は,nのアドレスを指している事になるのでしょうか?

802 :デフォルトの名無しさん:02/11/07 15:53
>>799
本当にそうか?

memcpyの整数をデクリメントしていって、0かどうかを比べるのと、
strcpyの>>759のような複雑な判定するのとどっちが速い?

もっとも、>>759についてはおれ、よーわからんわ。
本当にこれで判定できるのか。あとでじっくり考えてみよう。

803 :799:02/11/07 15:56
>>802
まあ遅い・・・だろうな。
判定のために関数を呼ぶみたいだし。

でもそれほど遅くなるのかなあ?

804 :799:02/11/07 15:59
ふと思ったんだけど、ワード単位でコピーしていってその中に0があるかどうか判断する方法って
場合によってはアクセスしてはならないところにアクセスすることにならない?

memcpyならコピーする大きさが決まっているからできるかぎりワード単位でコピーして、
残りは1バイトずつコピーするので問題ないけど。

805 :デフォルトの名無しさん:02/11/07 15:59
VC6で計ったら、strcpy()のほうがだいぶ早かった。

806 :802=797:02/11/07 15:59
>>803
うん。速度の差があったとしても問題になることはまずないだろう。
だから何やってるか一目わかるしパラメータが一つ少なくて済む
strcpyを普通は使うと思う。少なくともおれはそう。

807 :804:02/11/07 16:00
あ、そんなことないか。
調べる時は1バイトずつやるんだもんな(^_^;)

808 :デフォルトの名無しさん:02/11/07 16:10
>>802
printf("%p\n", &n);
printf("%p\n", &*pt);
とでもしてみたら。

809 :808:02/11/07 16:11
× >>802
>>801

810 :デフォルトの名無しさん:02/11/07 16:12
; strcpy(d, s);
  push  esi
  push  edi
  mov   edi, DWORD PTR _s$[esp+4]
  or   ecx, -1
  xor   eax, eax
  repne scasb
  not   ecx
  sub   edi, ecx
  mov   eax, ecx
  mov   esi, edi
  mov   edi, DWORD PTR _d$[esp+4]
  shr   ecx, 2
  rep movsd
  mov   ecx, eax
  and   ecx, 3
  rep movsb
  pop   edi
  pop   esi

811 :デフォルトの名無しさん:02/11/07 16:12
; memcpy(d, s, n);
  mov   ecx, DWORD PTR _n$[esp-4]
  push  esi
  mov   esi, DWORD PTR _s$[esp]
  mov   eax, ecx
  push  edi
  mov   edi, DWORD PTR _d$[esp+4]
  shr   ecx, 2
  rep movsd
  mov   ecx, eax
  and   ecx, 3
  rep movsb
  pop   edi
  pop   esi

812 :デフォルトの名無しさん:02/11/07 16:12
strcpyを使うときには文字列の大きさがわかってないと
ちゃんと使えんでしょう。
で、大きさが分かってるとmemcpy使えるんですよ。

813 :デフォルトの名無しさん:02/11/07 16:14
VC6SP5。
ストリング命令が 3 つの strcpy() より 2 つの memcpy() の方が絶対速い。
805 は一体どんなテストをしたんだ?

814 :デフォルトの名無しさん:02/11/07 16:17
810 のコードは、どうも strlen() + memcpy() に見えるな。
だったら、長さがあらかじめ分かっている場合に限って、memcpy() 単体
の方がいいような。

815 :デフォルトの名無しさん:02/11/07 16:19
>>808
してアドレスが同じだったので,自分の考え方が正しかったか聞きたいのです

816 :デフォルトの名無しさん:02/11/07 16:21
strcpyとたいして変わらんかった。
void mystrcpy(char *s, const char *t) {
memcpy(s, t, strlen(t)+1);
}

817 :805:02/11/07 16:21
>>805はミスだった。
やっぱりmemcpyのほうが速い。

818 :デフォルトの名無しさん:02/11/07 16:22
そういえば 810 のコード、759 がかけらも見当たらないね。
1 ワードずつ判定していくより、先に長さを測ってストリング命令
かました方が速いのか。

819 :デフォルトの名無しさん:02/11/07 16:29
void *やconst voidがヘルプ見るとやたら出てくるんだが
わかりやすく説明してもらえないでしょうか

820 :デフォルトの名無しさん:02/11/07 16:31
>>819
何がわからないのか分からないんだが

821 :デフォルトの名無しさん:02/11/07 16:39
>>820

スマソ
関数の説明で
void func(void *a)
とあった場合何を引数で渡していいかわからんのです。

822 :デフォルトの名無しさん:02/11/07 16:40
>>821
ポインタなら何でもいい。
全てのポインタはキャスト無しに void* へ暗黙変換できる。以上。

823 :デフォルトの名無しさん:02/11/07 16:41
hoge i, p[], *q;
func(&i);
func(p);
func(q);

824 :746:02/11/07 16:42
>>799
判定の条件が増えるわけだから当然多少は遅くなる。

実際のソースじゃ判定を関数なんかに分けてないよ。
そんなことしたら1バイトずつ調べた方が速くなる。

strdup()でstrcpy()を使うメリットはない。malloc()する前に文字列長を
調べてあるわけだから、終了判定が単純なmemcpy()の方が速いはず。

とはいっても、短めの文字列だったら数クロックの差くらいしかない。
malloc()にかかる時間の方がけた違いに大きいから、差はないも同然。

>>804
文字列の終端を調べる時にワード単位で読み込んでも問題ない。

数バイト多めに読み込んでも、その内容を書き換えるわけじゃない。
ワード境界に沿ったワード読み込みの場合はページ境界をまたがないから、
ワードの先頭バイトを読み込める状況ではAccess Violationも起こりえない。

825 :デフォルトの名無しさん:02/11/07 16:44
>>822
産休。わかりやした

826 :746:02/11/07 16:49
>>818
あれは関数としてリンクする場合のstrcpy()のコードだよ。
>>810のは最適化で組み込み関数を展開した場合のコード。

毎回展開するからサイズを大きくするわけにいかないのと、
関数呼び出しのコストがかからないから、それでも十分に速い。

827 :デフォルトの名無しさん:02/11/07 16:54
>>826
そうなのか。
ところで VC6 の CRT の strcpr() のソースが見当たらないのだが

828 :827:02/11/07 16:54
> strcpr()
   ∧∧
   /⌒ヽ)
  i三 ∪
 ○三 |
  (/~∪
  三三
 三三
三三

829 :デフォルトの名無しさん:02/11/07 16:55
strcpyはmemcpyに勝てないのか!?

830 :デフォルトの名無しさん:02/11/07 16:57
strcpy = strlen + memcpy と思って間違いないと。

831 :デフォルトの名無しさん:02/11/07 17:01
どうでもいいことで熱くなれるC老子



832 :800:02/11/07 17:09
>>827
あ、あなたもないの?
じゃあやっぱり誤って削除したんじゃなくて元々なかったのか・・・

833 :デフォルトの名無しさん:02/11/07 17:22
/*
可変長配列
*/

#include <stdio.h>

int main(void)
{
char buf[256];
int size;
int *vc;
int i;

puts("■可変長配列■");
printf("作成する配列のサイズを入力してください:");
fgets(buf,256,stdin);
sscanf(buf,"%d",&size);

vc=malloc(sizeof(int)*size);

for(i=0;i<size;i++)
{
vc[i]=i;
printf("vc[%d] = %d\n",i,vc[i]);
}

return(0);
}

834 :833:02/11/07 17:23
このソースのmalloc部分で警告が出るんですが、何でですか?
警告文は以下のようです。

test1.c: In function `main':
test1.c:19: warning: assignment makes pointer from integer without a cast

こんぱいらはGCCです。

835 :デフォルトの名無しさん:02/11/07 17:25
#include <stdlib.h>

836 :デフォルトの名無しさん:02/11/07 17:25
>>833
stdlib.hをインクルードしろ

837 :デフォルトの名無しさん:02/11/07 17:29
宣言してないと
int malloc();
と解釈される。

838 :デフォルトの名無しさん:02/11/07 17:33
>800,827
crt\src\intel\strcat.asm
をよくみろ。

839 :( ○ ´ ー ` ○ ):02/11/07 17:40
 だれか、このグチャグチャな自作関数を修正してやってください。
  内容は、char *s1,char *s2後方検索して
  後方検索したものを、語尾にくっつけあうというものです。
   どんな修正方法でもかまいません。
    char *str_cat_chr(char *s1,char *s2,int c)
{
char *p1=NULL;
char *p2=NULL;
char *r1=s1;
char *r2=s2;
char *temp1=s1;
c=(char)c;
while(1){
if(*r1=='\0')
break;
if(*r1==c)
p1=r1;
r1++;
}
while(1){
if(*r2=='\0')
break;
if(*r2==toupper(c))
p2=r2;
r2++;
}
*p1='\0';
*p2='\0';


840 :( ○ ´ ー ` ○ ):02/11/07 17:41
while(*s1)
s1++;
while(p1&&p2){
if(!(*s1++=*s2++))
break;
}
*s1='\0';
return temp1;
}

841 :デフォルトの名無しさん:02/11/07 17:41
>>838
サンクス。
しかし、strcat() とコピールーチンが共通だとは思わなかった。
strcpy() を使うと、strcat() も問答無用でリンクされるのか。

842 :デフォルトの名無しさん:02/11/07 17:41
肝の部分。glibcのとほぼおなじだな。

main_loop: ; edx contains first dword of sorc string
 mov [edi],edx ; store one more dword
 add edi,4 ; kick dest pointer
main_loop_entrance:
 mov edx,7efefeffh
 mov eax,dword ptr [ecx] ; read 4 bytes

 add edx,eax
 xor eax,-1

 xor eax,edx
 mov edx,[ecx] ; it's in cache now

 add ecx,4 ; kick dest pointer
 test eax,81010100h

 je short main_loop

843 :デフォルトの名無しさん:02/11/07 17:42
>>839
丸投げは添削スレに逝ってくれ。
http://pc3.2ch.net/test/read.cgi/tech/1021881540/l50

844 :デフォルトの名無しさん:02/11/07 17:43
>語尾にくっつけあうというものです。
語尾にくっつけあるというのはいったいどういうことを指すの?

845 :( ○ ´ ー ` ○ ):02/11/07 17:43
 これは、string.hの後方検索とstrcat()のようです。
  宿題○投げとはいいません。

846 :デフォルトの名無しさん:02/11/07 17:45
>>845
宿題であろうがなかろうが添削は添削だ。とっとと逝け。

847 :デフォルトの名無しさん:02/11/07 17:46
>>845
843 は 「宿題」 とは一言も言っていない。丸投げは丸投げ。

848 :( ○ ´ ー ` ○ ):02/11/07 17:49
ちょっと、日本語がおかしかったね。 ある文字nを、大文字小文字
の区別なしにs1、s2を後方検索により二つの文字のNULLの位置をわりだす。
 お互いのNULLの位置を、認知してs1の語尾にくっつける。
  なんでも、結構です。 これに、対する指摘をお願いします。

849 :デフォルトの名無しさん:02/11/07 17:51
>二つの文字のNULLの位置をわりだす。
なんのこっちゃ。

850 :( ○ ´ ー ` ○ ):02/11/07 17:52
NULL文字のことです。(¥0)

851 :デフォルトの名無しさん:02/11/07 17:54
strcat使え。あと添削スレへ行け。

852 :( ○ ´ ー ` ○ ):02/11/07 17:56
 俺は、荒らしか・・・・age

853 :デフォルトの名無しさん:02/11/07 17:59
>>848
s1、s2 が長さ 0だった場合に、*p1='\0'; *p2='\0'; がコケる。

つーか、スピードが問題で無いなら素直にライブラリ関数使い倒せ。

char *str_cat_chr(char *s1,char *s2,int c)
{
char *p1 = strchr(s1, c);
char *p2 = strchr(s2, c);
if(p1) *p1 = '\0';
if(p2) *p2 = '\0';
return strcat(s1, s2);
}

854 :デフォルトの名無しさん:02/11/07 17:59
>>852
もしかして自覚無いの?
スレ違いの事書いたら普通は、つもりがあろうが無かろうが荒らしなんだけど。

855 :デフォルトの名無しさん:02/11/07 18:00
文字のNULLをわりだすってんだからさ、
N,U,L,L の連続4文字を探すんじゃないの?

856 :デフォルトの名無しさん:02/11/07 18:00
後方検索で大文字小文字区別しないんだからstrchrは・・・。

857 :853:02/11/07 18:01
>>856

   い い ん だ よ

858 :デフォルトの名無しさん:02/11/07 18:02
>>853
そのソースを見た方が( ○ ´ ー ` ○ )の説明を見るよりもよくわかる・・・・(w
要はcの部分まで切りつめてくっつけるってことか。

859 :858:02/11/07 18:03
あ、後方でしかも大文字小文字区別なしか。
じゃあ>>853はだめじゃん。

860 :デフォルトの名無しさん:02/11/07 18:04
>>857


861 :858:02/11/07 18:06
↓大文字小文字区別なしに後方探索する関数をかいてみた。テストしていないけど(^_^;)

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

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

return NULL;
}


862 :デフォルトの名無しさん:02/11/07 18:07
    char *str_cat_chr(char *s1,char *s2,int c)
{
char *p1=NULL;
char *p2=NULL;
char *r1=s1;
char *r2=s2;
c=(char)c;
for (;*r1; r1++)
if(*r1==tolower(c) || *r1==toupper(c))
p1=r1;
for (;*r2; r2++)
if(*r2==tolower(c) || *r2==toupper(c))
p2=r2;
if (p1) *p1='\0';
if (p2) *p2='\0';
return strcat(s1, s2);
}

863 :デフォルトの名無しさん:02/11/07 18:08
c=toupper((char)c);
if(toupper(*r1)==c)

864 :デフォルトの名無しさん:02/11/07 18:09
char *strcaserchr(char *s, int c)
{
char *p = NULL;
for(c = toupper(c); *s; s++)
if(toupper(*s) == c)
p = s;
retrun p;
}

strlen() が余計。
toupper() への引数を (char) にキャストする必要は無い。

865 :デフォルトの名無しさん:02/11/07 18:11
予期せぬ燃料だった

866 :デフォルトの名無しさん:02/11/07 18:14
/* 何でこの程度の問題があんなに長くなるんだろう? */
char *str_cat_chr(char *s1,const char *s2)
{
  char *p1;
  for (p1 = s1 + strlen(s1) - 1; *s2 != '\0'; p1++, s2++)
    *p1 = toupper(*s2);
  return s1;
}

867 :デフォルトの名無しさん:02/11/07 18:14
    char *str_cat_chr(char *s1,char *s2,int c)
{
char *p;
if (p=strcaserchr(s1,c)) *p='\0';
if (p=strcaserchr(s2,c)) *p='\0';
return strcat(s1, s2);
}

868 :デフォルトの名無しさん:02/11/07 18:23
864 + 867 が最適解かな。
866 は仕様が読めないアフォ

869 :デフォルトの名無しさん:02/11/07 18:25
>>864
あれ?strchr系ってcharにキャストしなければならないんじゃなかった?

870 :デフォルトの名無しさん:02/11/07 18:29
>>869
toupper() を通過しているから問題無い。
と思ったが、違かったようだ。すまん。

871 :デフォルトの名無しさん:02/11/07 18:31
861 + 863 のが速いかもな

872 :861:02/11/07 18:33
>>871
何人かが書いてきづいたいけど、
for(s+=strlen(s),c=toupper((char)c);s>=endp;s--)
if(toupper(*s)==c)
とやらないと無駄な処理をするね。

以前かいたstrrchrをほとんどそのまま流用したのが悪かった(^_^;)

873 :デフォルトの名無しさん:02/11/07 18:43
グローバル変数とローカルな静的変数はスコープが違うだけで領域はおなじところを使うことが多いですか?


874 :デフォルトの名無しさん:02/11/07 18:45
こんなんどうだろ。
char *strcaserchr(char *s, int c)
{
char *p=strrchr(s, toupper(c));
char *q=strrchr(s, tolower(c));
retrun (p-q > 0) ? p : q;
}

875 :デフォルトの名無しさん:02/11/07 18:51
>>873
何を言っているか分からない。
格納されている領域が同じなら、どうしようと言うわけ?
格納されている領域が違ければ、どうしようと言うわけ?

876 :デフォルトの名無しさん:02/11/07 18:53
これもありだな。
char *strcaserchr(char *s, int c)
{
char *p = NULL, low=tolower(c);
for(c = toupper(c); *s; s++)
if(*s == c || *s == low)
p = s;
retrun p;
}

877 :デフォルトの名無しさん:02/11/07 18:55
どうしようと言うわけ?

878 :デフォルトの名無しさん:02/11/07 18:56
>>874
2 回も走査するのは遅くないか?
あと今気付いたが、名前、struncaserchr() のが良くないか?

879 :デフォルトの名無しさん:02/11/07 18:57
strrchr_uncase

880 :デフォルトの名無しさん:02/11/07 19:21
>>875
(感覚的だが)近くに配置される、って事じゃあないかな。

881 :デフォルトの名無しさん:02/11/07 19:29
>>880
いや、そんな事はわかってる。
事実、VC6 では同一 DATA セグメントに詰め込まれるし。

漏れの言いたいのは、スコープが違うというだけで充分区別つけられるのに、
どうして処理系依存の、格納される領域の事なんか訊ねるんだという事。

882 :デフォルトの名無しさん:02/11/07 19:29
>>873
コンパイラに聞け
#include <stdio.h>
int gi;
static int mi;
static void hoge(int pi);
int main(void)
{
  int li;
  static int lmi;
  hoge(li);
  printf("%p %p %p %p\n", &gi, &mi, &li, &lmi);
  return 0;
}
static void hoge(int pi)
{
  static int lmi;
  int li;
  printf("%p %p %p\n", &pi, &li, &lmi);
}

883 :882:02/11/07 19:32
あり?Mozilla 1.0では&piがπに見える...
Mozillaのバグか?

884 :デフォルトの名無しさん:02/11/07 19:32
あーあ、せっかくレジスタに割り当てようと思ったのに。

885 :初心者&rlo;者心始:02/11/07 20:45
確認しておきたんですが、
コンパイルを実行した時の流れを大まかに書くと

プリプロセッサ #を展開

コンパイラ objファイルを作る

リンカ objファイル、標準ライブラリを利用してexeファイルを作る。
ですよね?

ということは、
モジュール化してないCファイルがobjファイルを
作らないのはかなり矛盾していませんか?

どういうことなんでしょうか?教えて下さい。

objファイルがないとリンカがexeファイルを作れないと思うんですが。

886 :デフォルトの名無しさん:02/11/07 20:57
>モジュール化してないCファイルがobjファイルを作らない
どういう意味?

887 :デフォルトの名無しさん:02/11/07 20:58
>>885
なんか勘違いしてない?

888 :デフォルトの名無しさん:02/11/07 21:00
javaみたいなもんを想像してるんでは?

クラス -> .obj -> .exe

みたいな。

Cはクラスノ概念がないからモジュール化なんて出来ないじゃないか!みたいな。
(まぁ、この時点で間違ってるんだが)

889 :デフォルトの名無しさん:02/11/07 21:03
注意:objファイルは、オブジェクト指向とは何ら関係ありません

890 :885&rlo;588:02/11/07 21:05

>モジュール化してないCファイルがobjファイルを作らない
つまり、リンクしていない単独のCファイルのことを言っていたのです。


891 :デフォルトの名無しさん:02/11/07 21:06
コンパイラがリンカも呼び出してる。

892 :デフォルトの名無しさん:02/11/07 21:06
objをオブジェクト指向と関連付けて考えてるのかー。
すげー。

893 :デフォルトの名無しさん:02/11/07 21:09
まあ、無名のobjファイルを作ってリンクしたあとに消してると思えば。

894 :デフォルトの名無しさん:02/11/07 21:16
お前ら、C言語でGUIやるにはどうしたらいいんですか?

895 :デフォルトの名無しさん:02/11/07 21:18
885 は何か勘違いしてないか?
.c をコンパイルすれば必ず .o なり .obj なりができる。

単に、.obj ファイルを残さないオプションでコンパイルしてるんじゃないか?
(「.obj ファイルを残さない」 → 891 + 893)

896 :デフォルトの名無しさん:02/11/07 21:19
>>894
C で GUI はできません。
プラットフォームに頼る事になるので、それにふさわしいスレで訊いてください。

897 :デフォルトの名無しさん:02/11/07 21:20
gccは-oしないと作んないよね。

898 :デフォルトの名無しさん:02/11/07 21:20
VBとJavaをやっていたものです。
これからCに移ろうと考えております。
一応CやC++の文法や概念は一通り理解しているつもりですが、
Cのコンパイラがどこにあるのかわかりません。
DOSとコンパイラのみで練習したいのですが、フリーのものどこかにないでしょうか?
あとできれば教養程度にどんな企業が出しているかとか種類とかいろいろ詳しく教えてくれるとありがたいです。

899 :デフォルトの名無しさん:02/11/07 21:21
今サンプルソースを見てたんだけど、
mallocを使うときは
int *vc;
って宣言してるのに
reallocを使うソースだと
int *vc=NULLって宣言してるんだよね。
なんでヌルポインタで初期化する必要があるん?

900 :デフォルトの名無しさん:02/11/07 21:21
>>897
-oは実行ファイルにつける名前を指定するだけだよね?

901 :デフォルトの名無しさん:02/11/07 21:22
>>896
サンクス

902 :デフォルトの名無しさん:02/11/07 21:22
ボーランドがフリーのだしてる。

903 :デフォルトの名無しさん:02/11/07 21:22
>>895

やはり、LSI(試食版)ってデフォではリンクしていないCファイルは
objファイルを残さないんでしょうか?

↑例外として、リンクするとobjファイルができます。

904 :デフォルトの名無しさん:02/11/07 21:22
>>899
reallocの仕様を調べてくださいです。

905 :デフォルトの名無しさん:02/11/07 21:22
>>899
reallocの第一引数にNULLを与えるとmallocと同じ動作をするから。
ちなみに第二引数に0を与えるとfreeと同じ働きをする。

906 :デフォルトの名無しさん:02/11/07 21:22
それにしてもこのスレは早いね。
そろそろ次スレの準備をだれかああ

907 :デフォルトの名無しさん:02/11/07 21:23
gcc -c hoge.c -o hoge.o
ってやるんじゃなかった?

908 :デフォルトの名無しさん:02/11/07 21:23
>>903
gccも残さないよ。
gcc test.cってやるとtest.cをコンパイル&リンクしてa.outが出来るだけ。

909 :デフォルトの名無しさん:02/11/07 21:23
gcc -c hoge.c
で十分です

910 :デフォルトの名無しさん:02/11/07 21:25
>>908
サンクス。
あと拡張子のoutって何ですか?あとext

911 :デフォルトの名無しさん:02/11/07 21:25
>>905
なるほど!最初だけmallocと同じで、
その後いったん領域あげたらreallocのはたらきするってか

912 :908:02/11/07 21:25
多分、/tmpにつくっているんじゃないかなぁ?
最後に消すと思うけど

913 :デフォルトの名無しさん:02/11/07 21:25
-cで作るのか。

914 :デフォルトの名無しさん:02/11/07 21:26
>>898 はスレの 1 をちっとも確認しない人間である事がわかりました。

915 :デフォルトの名無しさん:02/11/07 21:27
>>910
UNIXは拡張子なんて概念はないからね。a.outはgccがデフォルトでつける実行ファイルの名前。
-oで名前を指定しないとtestとか名前をつけてくれない。。。

916 :デフォルトの名無しさん:02/11/07 21:27
fgetsとかでさ、入力した文字列から\n削除するしょ?
で、printfするときに\nつけてたら意味なくない?

917 :デフォルトの名無しさん:02/11/07 21:27
>>916
\nがついていても問題がないなら消さなければいい。

918 :デフォルトの名無しさん:02/11/07 21:28
puts使え。

919 :デフォルトの名無しさん:02/11/07 21:28
ヘッダファイルを作るときってさ、
a.cとかとa.hがいるしょ?
どこに保存しといたらいいの?

920 :デフォルトの名無しさん:02/11/07 21:29
fgetsは消さない。getsは消す。

921 :デフォルトの名無しさん:02/11/07 21:30
>>920
多分、入力したあとに自分で消すという意味だと思う。
Perlのchompみたいな関数を使って。

922 :デフォルトの名無しさん:02/11/07 21:30
おなじディレクトリまたはおまえのincludeディレクトリ。

923 :デフォルトの名無しさん:02/11/07 21:30
>>919
さっきからネタばっか。やめれ

924 :デフォルトの名無しさん:02/11/07 21:30
gcc 使ってる人は、

int dummy();
int main() { return dummy(); }

を通してみなさい。

925 :デフォルトの名無しさん:02/11/07 21:32
リンクしてくれるのか?

926 :デフォルトの名無しさん:02/11/07 21:33
dummyという関数がライブラリにあるとか?

927 :デフォルトの名無しさん:02/11/07 21:35
#define ; {return 0;}

928 :デフォルトの名無しさん:02/11/07 21:35
/tmp/ccqpnZ6n.o: In function `main':
/tmp/ccqpnZ6n.o(.text+0x7): undefined reference to `dummy'
collect2: ld returned 1 exit status

929 :デフォルトの名無しさん:02/11/07 21:36
>>923
ネタじゃないよ!マジだよ!
マジで何処に入れればいいかわかんないんだよ!
ほんとに教えて!


930 :デフォルトの名無しさん:02/11/07 21:37
同じディレクトリに置いて
#include "a.h"

931 :デフォルトの名無しさん:02/11/07 21:37
>>927
invalid macro name

932 :デフォルトの名無しさん:02/11/07 21:38
>>929 は途中の有用なレス (例えば 922) を全く見ず、煽りだけに反応して
しまう可哀想な人間である事がわかりました。

933 :デフォルトの名無しさん:02/11/07 21:40
ネタニマジレス(・∀・)カコイイ!!

934 :デフォルトの名無しさん:02/11/07 21:43
>>924
#define dummy() dummy=0

935 :デフォルトの名無しさん:02/11/07 21:43
わかった。
#define main() dummy(){return 0;}int main()

936 :デフォルトの名無しさん:02/11/07 21:44
>>932
ああ、見落とした・・・
お前の言うとおりだよ!
でも言い訳させて!
最初に見たとこだったらさ、レスが10個くらいしか表示されないじゃん?
たぶんそこみて見逃したと思うよ
>>922
>>930
マジサンクス!!

937 :デフォルトの名無しさん:02/11/07 21:45
どうでもいいけどさ、
mallocとかreallocとかの
allocってどういう意味?
辞書にものってない・・・

938 :デフォルトの名無しさん:02/11/07 21:45
>>937
allocate

939 :デフォルトの名無しさん:02/11/07 21:45
allocate

940 :デフォルトの名無しさん:02/11/07 21:46
all oK(OKのKはCorrectの綴り間違いから来た)

941 :936:02/11/07 21:46
ごめん!
a.hはインクルードファイルにいれたけど
a.cもインクルードに入れるの?

942 :デフォルトの名無しさん:02/11/07 21:47
かまって君と教え魔、ウザイよ。

943 :デフォルトの名無しさん:02/11/07 21:47
>>941
ネタマジウザイ
おもんない
氏ね

944 :デフォルトの名無しさん:02/11/07 21:48
漏れにはスレ立てられなかった。誰かよろしく。
次スレテンプレート
====================================
C 言語ならオレに訊け。

C 言語じゃないなら訊くな。
問題をちゃんと切り分けて、C の話かそうでないか洗ってから質問してくれ。

つーか訊く前に Web で検索しろ。

コンパイラ探してるなら >>2 を見れ。

GUI とか、C 標準でできない事の質問は使ってる開発環境のスレに逝ってくれ。
ソース丸投は別スレがあるから他に逝ってくれ。
宿題は別スレがあるから他に逝ってくれ。
書籍については別スレがあるから他に逝ってくれ。

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

・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/

945 :デフォルトの名無しさん:02/11/07 21:48
【コンパイラ】
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

946 :デフォルトの名無しさん:02/11/07 21:48
>>941
君の肛門からインクルードできるよ。

947 :デフォルトの名無しさん:02/11/07 21:49
>>944
やってみる

948 :936:02/11/07 21:49
マジで教えてくれー
わかんねーんだよー
たのむよー

949 :デフォルトの名無しさん:02/11/07 21:51
hoge/a.h
hoge/a.c
a.cに
#include "a.h"

950 :デフォルトの名無しさん:02/11/07 21:51
>>948
コンパイラが使える場所なら、.c ファイルはどこでもいい。以上。

951 :デフォルトの名無しさん:02/11/07 21:51
>>932
ああ、見落とした・・・
お前の言うとおりだよ!
でも言い訳させて!
最初に見たとこだったらさ、レスが10個くらいしか表示されないじゃん?
たぶんそこみて見逃したと思うよ
>>922
>>930
マジサンクス!!



に対して何を答えろと?

>最初に見たとこだったらさ、レスが10個くらいしか表示されないじゃん?

2chビューア使え。

が精一杯だが。

952 :936:02/11/07 21:53
>>950
コンパイラが使える場所ってよくわからんけど
一応includeに入れておくよ!
っていうかヘッダの数半端じゃないね!!
いったいいつ使うんだろう・・・

953 :デフォルトの名無しさん:02/11/07 21:53
そのincludeにいれるんだったら
#include <a.h>
いれんほうがいいと思うが。

954 :947:02/11/07 21:54
無理だった。他の人頼むぅ

955 :936:02/11/07 21:55
>>953
なんで?呼び出すときは#include <a.h>でしょ?
ヘッダファイルはIncludeに入れるよね?
で、ソースファイルはどこに・・・?

956 :デフォルトの名無しさん:02/11/07 21:55
>>952
自分でつくったものをincludeディレクトリに入れるのはまずいんじゃないか?
特につくったものをソースごと配布するときなんかは。

957 :デフォルトの名無しさん:02/11/07 21:56
C言語のことは漏れらに聞け!!<40>
http://pc3.2ch.net/test/read.cgi/tech/1036673739/l50

958 :デフォルトの名無しさん:02/11/07 21:57
つーかよう、ネタに決まってんだから他のやつらも反応すんなや

959 :デフォルトの名無しさん:02/11/07 21:57
                              γ      γ
       ∧_∧                           γ
       (::::::::::: )  次スレが立てられないなんて・・・  ......................................
      .(○::::::: )                      .::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::........
     ~"''"""゛"゛""''・、                   ...:::::;;;''        ';;;:::::.......
 "”゛""''""“”゛゛""''' "j'                 ...::::;;;''            '';;;::::::.........
 :::::ヘ :::::....ヽ :::;;;ノ  ::(                ....::::::;;              '';;;::::::::::.......
 ::  ゝ  :::::......ノ:;;../  ~~^^ ~~~~~^^^~ ~~^^ ~~^^ ~~~~~^^^~  ~~^^~~~^

960 :936:02/11/07 21:57
>>956
じゃあどこに入れればいいんですか?
例えばa.hを読み出すソースを保存してるふぉるだと
同じとこ?

961 :デフォルトの名無しさん:02/11/07 21:58
>>960
だから、呼び出すソースファイルと同じところだってば(笑)
a.cから呼び出すならa.cと同じディレクトリ(フォルダ)

962 :デフォルトの名無しさん:02/11/07 21:59
936 は、同じ話題なら次スレに移すな。

963 :936:02/11/07 22:00
>>961
わかりました!ありです!
ソースファイルもヘッダファイルも一緒でつよね?

964 :デフォルトの名無しさん:02/11/07 22:01
>>960
今までの煽りをリセットして聞いてくれ。

自分の、作業用のディレクトリを作って、そこに a.c と a.h を置け。
a.c からの a.h の呼び出しは、#include <a.h> ではなく
#include "a.h" にしろ。
あとは a.c をコンパイラにかければ OK だ。

965 :936:02/11/07 22:02
>>964
#include <>だと、Icludeフォルダからって事で
#include " "だと、同じフォルダって事すか?

966 :デフォルトの名無しさん:02/11/07 22:03
>>965
やっと理解したか。
そういうこと。
stdio.hなんかはincludeディレクトリに入っているから<>でやるの。

967 :デフォルトの名無しさん:02/11/07 22:03
そうだ。わかったらこのスレあげずに寝ろ。

968 :デフォルトの名無しさん:02/11/07 22:04
これだ。
ヘッダー(#include)ファイルを探すのに、どこを探しにいくのか。
http://www.catnet.ne.jp/kouno/c_faq/c10.html#8

969 :936:02/11/07 22:05
ほんとありがとう!!
この知識を明日ひけらかすYO!
「なあなあ、お前ら知ってる?
#includeの<>はさあ、(以下略

970 :デフォルトの名無しさん:02/11/07 22:06
はい、ネタ終了〜。乙!! >>969

971 :デフォルトの名無しさん:02/11/07 22:07
936、森へおかえり。
ここはおまえの住むところじゃないの。

972 :デフォルトの名無しさん:02/11/07 22:07
        まもなくここは 乂1000取り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )

http://big.freett.com/scheme_a/num1000.swf

973 :デフォルトの名無しさん:02/11/07 22:07
ナウシカキタ━━━━(゚∀゚)━━━━ !!!

974 :デフォルトの名無しさん:02/11/07 22:08
まだ1000には気が早いかな


975 :デフォルトの名無しさん:02/11/07 22:09
strcat の cat てなに?
strdup の dup てなに?
strchr の chr てなに?
strpbrk の pbrk てなに?

976 :デフォルトの名無しさん:02/11/07 22:10
マニュアル読め。

977 :デフォルトの名無しさん:02/11/07 22:11
ユパ様!1000をいただいてもよろしいですか!?

978 :デフォルトの名無しさん:02/11/07 22:11
>>976
書いてねーよ。バーカバーカ。
分かんねぇんならすっこんでろ!

979 :デフォルトの名無しさん:02/11/07 22:12
concatenation
duplication(スペリングが違うかも)
character
???

980 :936:02/11/07 22:13
>>975
catはUnixのコードと思われ(勘

981 :デフォルトの名無しさん:02/11/07 22:13
>>978
自作自演カコワルイ

982 :小人:02/11/07 22:13
ダレモイナイ1000getスルナラ…

983 :小人:02/11/07 22:14
イマノウチ…

984 :小人:02/11/07 22:14
ランタンタン♪

985 :デフォルトの名無しさん:02/11/07 22:15
>>982 ミタヨー (゚∀┃

986 :デフォルトの名無しさん:02/11/07 22:15
今日からお前の名前は1000だ!

987 :小人:02/11/07 22:15
ランタンタンタン♪

988 :936:02/11/07 22:16
キタ━(・∀・)━!

989 :小人:02/11/07 22:16
>>985
Σ(゚Д゚)ガーン…

でも(゚ε゚)キニシナイ!!

990 :デフォルトの名無しさん:02/11/07 22:17
ではここらでジョークを一つ。

先日、友人二人と僕の三人でドライブへ行ったのさ。
その日はとてもいい天気でね。
それで

991 :デフォルトの名無しさん:02/11/07 22:17
みんな何故Cを始めた?
漏れはなんとなくプログラムという言葉に憧れて
何も知らずにこの世界に入った。

992 :小人:02/11/07 22:17
今だ!901番ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
                  ∧∧       (´⌒(´
            ⊂(゚Д゚ )≡≡≡(´⌒;;;≡≡≡
        ⊆⊂´ ̄ ⊂ソ  (´⌒(´⌒;;
           ̄ ̄ ̄   ズザーーーーーッ


993 :デフォルトの名無しさん:02/11/07 22:17
1000間近

994 :デフォルトの名無しさん:02/11/07 22:18
今だ!993番ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
                  ∧∧       (´⌒(´
            ⊂(゚Д゚ )≡≡≡(´⌒;;;≡≡≡
        ⊆⊂´ ̄ ⊂ソ  (´⌒(´⌒;;
           ̄ ̄ ̄   ズザーーーーーッ

995 :デフォルトの名無しさん:02/11/07 22:18
 ∧||∧
(  ⌒ ヽ トゥトゥトゥマシェーリー
 ∪ 。ノ    トゥトゥトゥマシェーリー
  ∪∪

996 :デフォルトの名無しさん:02/11/07 22:18
それで
海にでも行こうかってことになって友人の一人が運転して僕は助手席、もう一人の友人は
後ろの席に乗っていくことになったんだ。
すると途中で

997 :デフォルトの名無しさん:02/11/07 22:18
もうちょい

998 :デフォルトの名無しさん:02/11/07 22:18
   ∧∧
   /⌒ヽ)
  i三 ∪
 ○三 |
  (/~∪
  三三
 三三
三三

999 :デフォルトの名無しさん:02/11/07 22:18
1000

1000 :デフォルトの名無しさん:02/11/07 22:18
1000ゲット

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

223 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)