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

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

C言語なら俺に聞け! Part 59

1 :デフォルトの名無しさん:03/06/20 20:51
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

コンパイラを探しているなら >>2-13 を。
C machineはCに非ず

上記を逸した場合の結果は激しく未定義だYO!

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

前スレ C言語なら俺に聞け! Part 〈58〉
http://pc2.2ch.net/test/read.cgi/tech/1054906871/

2 :デフォルトの名無しさん:03/06/20 20:51
【コンパイラ】
gcc
http://gcc.gnu.org/

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

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

3 :デフォルトの名無しさん:03/06/20 23:19
>>2
【ライセンスや機能などに問題あり】
って、それぞれ、何処に、どんな問題があるの?

4 :デフォルトの名無しさん:03/06/20 23:25
スレ立てお疲れぇぃ

5 :デフォルトの名無しさん:03/06/20 23:26
>>1


6 :デフォルトの名無しさん:03/06/21 00:09
>>1
乙99

7 :デフォルトの名無しさん:03/06/21 00:18
gcc -O2 >>1.c

8 :デフォルトの名無しさん:03/06/21 00:22
>>7
今考えたの?
それとも前からあるネタ?

9 :デフォルトの名無しさん:03/06/21 00:22
>>3
それぞれ調べてくれ
そしたら、次のスレからテンプレに書き込める

10 :デフォルトの名無しさん:03/06/21 00:24
>>7
入力ファイルがないね。
これでどや?

gcc -O2 kare.c >>1.log

11 :デフォルトの名無しさん:03/06/21 00:25
上げたはずなのに>>9のsageに負けてしまった…(T_T)

12 :デフォルトの名無しさん:03/06/21 00:27
上がってた…(?o?)

13 :デフォルトの名無しさん:03/06/21 00:34
sage と書いても上がらないだけで、
下がるわけではない。

14 :デフォルトの名無しさん:03/06/21 00:49
>>13
漏れが>>8を書いた直後にスレが上がって無かったし
(すでに>>9までは書き込まれていたのも確認済み)
後から書いたスレの方がタイムスタンプが若かった事もあったので
タイミングによっては、上がらない事もあるのかと思って>>11を書いたの
でも、上がって無かったのは、その時だけだったようで>>12…(略

15 :おしえてください:03/06/21 01:16
前スレ、最後の方、えらい事になっていますが、

実際の話、Cってそんなに難しいんですか?実を言うと、別会社でJavaをやっていました。
でも、どしょっぱつから、3人のプログラマーの一番偉いところをまかされて、いやになり、やめました。

他のスレには、市販で売っている(私が呼んだような入門書)を理解できていれば、Cで組めるものは、何でも組めると書いてありました。
それは、極端な例だと思いますが、実際のところ、C言語って、そんなに難しいのですか?

16 :デフォルトの名無しさん:03/06/21 01:25
>>15
難しくはない、と思う。確かにクセはあるけど。
絶えず今扱ってるこのブツはメモリ上でどう表現されるかを
意識しながらプログラムすればそんなに難しくない。

ただし、Javaと違って危険な操作からプログラマを守ってくれないので(OSが守ってくれる場合もある)、
間違ってそういう操作をしてしまったらとたんにデバッグが泥沼になることがある。
この辺が厄介といえば厄介かな。

17 :16:03/06/21 01:29
追加。

あと細かいことができる代わりにプログラマがかなりの部分の
面倒を見てやらなきゃいけない。たとえばヒープに取ったメモリ(malloc等)は
プログラマがケアしてやらなきゃいけない。
Javaみたいにガベージコレクションをしてくれないので、すぐにメモリがリークする。
ま、標準ではないもののGCのライブラリはあるんでそっちを使えば楽できるけど。

18 :デフォルトの名無しさん:03/06/21 01:37
Java からなら C++ やった方が楽かも。

19 :デフォルトの名無しさん:03/06/21 01:37
コンピュータの動作原理を知らないと
どんな言語使ってもバグった時に困る

20 :おしえてください:03/06/21 01:39
>>16 >>17さん、どうもありがとうございます。
前スレで、scanfについて質問したのですが、scanfだけで、
もっとCは深いみたいな、レスがたくさんついていたので、
不安になってしまいました。

中には、標準入力からの関数は自作するなんてレスまでありましたが、
標準入力関数を自作するなんてことはできるんですか?それとも、既存の関数を拡張して
作ると言う事なんでしょうか?

21 :デフォルトの名無しさん:03/06/21 01:40
コンピュータの動作原理を知ってても
使用言語がブラックボックスの塊だったらバグった時に困る

22 :_:03/06/21 01:40
http://homepage.mac.com/hiroyuki44/

23 :デフォルトの名無しさん:03/06/21 01:42
scanfは自分しか使わないプログラムを書くときに使っている。

24 :デフォルトの名無しさん:03/06/21 01:46
>>21
そうなんだよ。VBとかさ。
煽るわけじゃないけどたまにどうしようもない時がある
さんざん調べたらIEのバグだったりしてションボリ

25 :デフォルトの名無しさん:03/06/21 01:50
>>20
scanf()系は基本的にフォーマットされたデータを処理する為にあるので
文字列の解釈や代入に使うべきではないです
と言うか、それを無闇に使ってバグを起こすから
使ってはいけないと言われている訳であって…
後は、周囲の人と適当に合わせて使うか使わないか判断すればOKです
まぁ、他人と合わせると殆どの場合は使わない方にいくと思いますが…

26 :おしえてください:03/06/21 01:51
>>23さん、

では、仕事で標準入力関数を使うときは、どうしているのですか?
まさか、アセンブラみたいな感じで、自分で作るんですか?そんなに難しいなら、
とても無理だと思います。既存の関数を拡張して、標準入力関数を作るんですか?

27 :デフォルトの名無しさん:03/06/21 01:51
>>24
結局IEのバグじゃん。

28 :デフォルトの名無しさん:03/06/21 01:53
>たとえばヒープに取ったメモリ(malloc等)は
>プログラマがケアしてやらなきゃいけない。
>Javaみたいにガベージコレクションをしてくれないので、すぐにメモリがリークする。

突っ込みどころ満載だな。
本当にCで仕事してるのかね。

29 :デフォルトの名無しさん:03/06/21 01:53
>>26
入力関数はscanfだけじゃないよ。

30 :デフォルトの名無しさん:03/06/21 01:53
>>26
例えばscanf("%d",&n)はおきまりのfgets+sscanfで

31 :デフォルトの名無しさん:03/06/21 01:56
>>28
突っ込みどころがあるなら突っ込めよ。

32 :おしえてください:03/06/21 01:56
>>26さん、どうもありがとうございます!
やはり、元からある関数を使うんですね。それを聞いて、とても安心しました。

自分で、ゼロからつくるのか!?と思ってしまい、こりゃとてもじゃないぞ、と思っていたのです。

それと、回答をくれた皆さん、どうもありがとうございました。おかげさまで、何とかやっていけそうです。

33 :デフォルトの名無しさん:03/06/21 01:56
最近C言語を勉強した者なんですが何か問題だしてもらえませんか?
あんまり難しいのは分かりませんが・・

34 :28:03/06/21 01:57
>>31
そんなに親切じゃない

35 :デフォルトの名無しさん:03/06/21 01:58
C/C++の宿題やらせてください。9代目
http://pc2.2ch.net/test/read.cgi/tech/1055944101/l50

36 :デフォルトの名無しさん:03/06/21 01:58
>>33
宿題スレにあるのを片っ端からやってみれば?

37 :デフォルトの名無しさん:03/06/21 01:58
>>34
素直に謝るのが一番です。

38 :デフォルトの名無しさん:03/06/21 01:59
>>28
よう分からんけど
void *p1,*p2,*p3;
p1=malloc(…);
p2=malloc(…);
p3=malloc(…);

free(p2); //解放しても使えない
って意味だと思う
つーか、俺も別におかしくないと思うけど?

39 :デフォルトの名無しさん:03/06/21 01:59
>>27
その結論に行くまでがとてもとても苦労するのよ

40 :デフォルトの名無しさん:03/06/21 02:00
>>28
は何につっこみたいんだ?
普通のこと言ってるだけだろ

41 :デフォルトの名無しさん:03/06/21 02:01
>>38
void *p;

p=malloc(...);
.....
p=malloc(...);

free(p);

これの方がいいと思う。先に確保した領域を見失ってメモリリーク

42 :デフォルトの名無しさん:03/06/21 02:02
☆頑張ってまーす!!☆美人だけ集めました☆
http://yahooo.s2.x-beat.com/linkvp/linkvp.html
-----------------------------------------------

43 :16:03/06/21 02:02
>>20
scanfは変な動作をすることで有名な関数でプロは使わないというのは前スレの通り。
存在理由は昔書かれたプログラムとの互換性を取るためでしかない。
確かに便利な関数なので入門書ではよく使われるけどね。

他にもプロが使わないとされてる標準関数はgets(これは異論があるかも)、strtokがある。
前者はバッファオーバーフローの危険があるし、後者はバッファを破壊するから。
ま、どちらも使い捨てのプログラムでは使うこともあるけど、製品レベルでは使わない。
ちなみにこれらも存在理由は互換性のため。

標準入力関数を一から自作することは、いわゆる標準Cの範疇ではまず無理。
OSとのインタフェイスはCの規格の範囲外だから。
ただし、getcharやfgetsをベースにしてよいのであれば作れるよ。
だから既存の関数を拡張して作るという意味では作れる。

Cは深いといえば深いのかもしれないけど、言語仕様そのものは小さいので、
文法自体はさほど難しくはない。Javaを使ってたのならその辺はまず問題ない。

# つーてもポインタ・配列・関数ポインタの宣言周囲りの変な構文はあるなあ。あれは癌だ。
# パズルとしては面白かったけど。

44 :16:03/06/21 02:04
>>28
ぜひ突っ込んでくれ。いや煽ってるのではなくどこが間違ってるのか知りたい。

45 :デフォルトの名無しさん:03/06/21 02:07
どうせくだらない揚げ足とりだろ、>>28よ。

>たとえばヒープに取ったメモリ(malloc等)は
>プログラマが開放してやらなきゃいけない。
>Javaみたいにガベージコレクションが不要メモリの開放をしてくれないので、
>すぐにメモリリークが起こる。

とか言いたいんだろうけど、そんなもんわざわざ突っ込んでたら
円滑なコミュニケーションがとれんぞ。
言いたい事は伝わってるだろう。



46 :デフォルトの名無しさん:03/06/21 02:08
>>43
できないできないと言っているが、
じゃあ何を使って作るのだ?
たとえばintを入力する場合どのように書くのだ?
手抜き無しの安全なコードで頼む。

47 :デフォルトの名無しさん:03/06/21 02:09
>>28
ほんとだよ。バカ!

48 :28:03/06/21 02:10
揚げ足とりじゃない。
大幅に間違ったことはいってないが、正しいことも言ってない。
初心者が聞いたら誤解をまねくし、問題の本質をついてない。


49 :デフォルトの名無しさん:03/06/21 02:12
>>44
28ではないが、17の文章は
メモリがプログラマは悪くないのに勝手にリークするような感じを受ける。

50 :16:03/06/21 02:12
>>45
そういう意味なのかな…。わざと解放しない場合もあるよ。
だから解放するとかfreeするとか書かないで「ケアする」と書いたんだけど。

# つか、これに触れると変な箱の議論になりそうなんであとは静観しよう

51 :デフォルトの名無しさん:03/06/21 02:12
scanfでここまで話が盛り上がるとは・・・

52 :デフォルトの名無しさん:03/06/21 02:13
>>47&&28
何か懐かしいな…
その議論(標準入出力ネタ)、漏れ、何年か前に、この板でやった事あるよ
つーわけで、生暖かく見守ってあげるので、心おきなく争って下さい

53 :デフォルトの名無しさん:03/06/21 02:14
>>52
その時は、どう解決したの?

54 :デフォルトの名無しさん:03/06/21 02:14
>>48
>大幅に間違ったことはいってないが、正しいことも言ってない。
そういうのは「突っ込みどころ満載」とは言わんよ。

だったら正しい問題の認識を提示してやればいいのに

55 :28:03/06/21 02:15
>45みたいな意味じゃないよ。てか
>変な箱の議論になりそうなんで
それを知ってるのくらいなのに>17みたいな表現を初心者にしなさんな。

>>52
いや、漏れももう勘弁。

56 :デフォルトの名無しさん:03/06/21 02:16
挑発しないで最初から指摘してやればよかったのに。

57 :28:03/06/21 02:16
自分が突っ込まれるのが怖いのでしません。

58 :45:03/06/21 02:16
なんかスマソ

59 :おしえてください:03/06/21 02:16
>>43さん

どうも、大変分かりやすくて助かりました。Javaとそのへんは、あまり変わりないと聞いて、
あんしんしました。

60 :デフォルトの名無しさん:03/06/21 02:17
GCがあるからメモリ管理が「無用」というミスリードをする
馬鹿教本は纏めていってよし。「無用」じゃなくて「負担が
少ない」だけなのにね。

61 :16:03/06/21 02:19
>>55
なるほど了解。確かに誤解を与えかねない表現でした。
ただ言い訳をさせてもらうならば、あの文脈はJavaの
ガベージコレクタとの対比として出したので云々。

ヒッコミマス

62 :デフォルトの名無しさん:03/06/21 02:24
まあスーパーハカーの俺ならscanfを使っても安全なプログラムに仕上げられるけどな。

63 :デフォルトの名無しさん:03/06/21 02:26
>>46に答えろや

64 :デフォルトの名無しさん:03/06/21 02:26
>>53
相手方が標準入出力を特定のメモリの位置にすれば出来ると抜かして
(つまり、stdout or stdin を特定の位置に決めてしまう)
漏れは馬鹿馬鹿しくなったので、その時点で降りました
言うまでも、ありませんが、相手方が言ってる事は
Cコンパイラを作る事であって標準入出力を作る事では無い

65 :デフォルトの名無しさん:03/06/21 02:27
>>62
ハに゙をお忘れのようで。

66 :デフォルトの名無しさん:03/06/21 02:28
>>63
アセンブラ

67 :デフォルトの名無しさん:03/06/21 02:29
>>63
質問の意味がわかりません

68 :デフォルトの名無しさん:03/06/21 02:31
>>63
int i;
fread(&i,sizeof(int),1,stdin);

69 :デフォルトの名無しさん:03/06/21 02:33
標準入出力なんて所詮はputchar(), getchar()に皮を被せただけの物さ。


70 :デフォルトの名無しさん:03/06/21 02:36
>>69
はいはい、分かったから、がんがって作ってみ

71 :デフォルトの名無しさん:03/06/21 02:39
みんなプログラムを載せて、論より証拠みたいなことを
する香具師はいないのか?

72 :デフォルトの名無しさん:03/06/21 02:41
>>71
世の中出来る事と出来ない事がある
で、出来ない事を出来ると言う香具師に限って証拠は見せない
ちなみに、何作らせたいの?

73 :デフォルトの名無しさん:03/06/21 02:42
>>72
文字列を連結する関数をお願いします・・・
月曜日までの課題なんです(>_<)

74 :デフォルトの名無しさん:03/06/21 02:44
>>73
そりゃスレ違いだ。

75 :デフォルトの名無しさん:03/06/21 02:45
>>73
#include <string.h>
#define renketsu(dst,src) strcat(dst,src)

76 :デフォルトの名無しさん:03/06/21 02:45
>>73
http://pc2.2ch.net/test/read.cgi/tech/1055944101/75-76

77 :デフォルトの名無しさん:03/06/21 02:46
>>73
renketu( char *str_a, char *str_b ){
  strcat(str_a,str_b);
}

78 :73:03/06/21 02:50
みなさんスレ違いにも関わらずありがとうございました(>_<)


79 :デフォルトの名無しさん:03/06/21 02:51
ヷ〳〵〳〵〳〵〳〵〳〵〳〵

80 :デフォルトの名無しさん:03/06/21 02:51
>>76
文字列の連結くらい、幾らでもあると思うけど
何で、そんなに早く見つけられるんだろう…
さては、おまいさん、タイ○(以下スレ違いの為、割愛)

81 :デフォルトの名無しさん:03/06/21 02:51
さて73の宿題はどう評価されるのかな。

82 :デフォルトの名無しさん:03/06/21 02:53
あえて冗長にかくのが自然に見せるテク
まちがっても
*p++とか書いてはいけない

83 :デフォルトの名無しさん:03/06/21 02:55
char *strneko(char *dest,const char *src)
{
strcpy(strchr(dest,'\0'),src);
return dest;
}

84 :デフォルトの名無しさん:03/06/21 02:57
まぁ課題だからstrcatは使っちゃいけないんだろうな

renketu( char *str_a, char *str_b ){
  strcpy( str_a+strlen(str_a), str_b);
}


85 :デフォルトの名無しさん:03/06/21 02:59
>>83
俺ならstrchr()の変わりにstrlen()を使う
まぁ、特に、と言うか、全く意味無いけど

86 :デフォルトの名無しさん:03/06/21 03:01
かぶった…(T_T)

87 :デフォルトの名無しさん:03/06/21 03:04
もしも標準ライブラリを書くことになったら、一部だけきちんと書いて、あとは>>83-84としちゃうけどまずいかなぁ?

88 :デフォルトの名無しさん:03/06/21 03:06
出欠大サービス

size_t strlen( char *src )
{
  size_t ret=0;
  while(src[ret]!='\0')ret++;
  return ret;
}

char *strcpy( char *dst, const char *src )
{
  size_t cnt=0;
  while((dst[cnt]=src[cnt])!='\0')cnt++;
  return dst;
}

89 :デフォルトの名無しさん:03/06/21 03:07
みんな優しいな。
スレ違いの質問なのに。

90 :デフォルトの名無しさん:03/06/21 03:08
ワロタ

91 :88:03/06/21 03:08
出血が…
strlen( const char *src )が…
パッと見た目だけで、こんなにもミスが…

92 :デフォルトの名無しさん:03/06/21 03:14
質問があります。
変数の寿命はわかるんですが(例えばローカル関数なら
returnされるまで)、定数の寿命も同じなんですか?

void func(*char)
{
 char = "2ch";
}
これはNG?

93 :デフォルトの名無しさん:03/06/21 03:16
constつければ書き換えられる心配がないことが分かるけど、
それよりもつけないとconstを指すポインタを(そのままでは)渡せなくなるんだよね。

これを指摘された時は目から鱗が落ちた。

94 :デフォルトの名無しさん:03/06/21 03:16
>>92
NG
変数名は?charにポインタは入れられないよ

95 :デフォルトの名無しさん:03/06/21 03:17
何から説明するべきなのだろうか…

96 :デフォルトの名無しさん:03/06/21 03:17
>>92
寿命以前の問題なんだが

97 :92:03/06/21 03:18
>>94すみません思いっきりまちがえてますた
こうですた。
void func(*char str)
{
 str = "2ch";
}


98 :92:03/06/21 03:19
また間違えた・・・
void func(char* str)
{
 str = "2ch";
}


99 :デフォルトの名無しさん:03/06/21 03:19
「定数の寿命」というのもよくわからん

100 :デフォルトの名無しさん:03/06/21 03:19
>>97
*の場所がおかしい

strには"2ch"の先頭アドレスが入るけど、それではなんの意味もない。

void func(char **str)
{
*str="2ch";
}


101 :92:03/06/21 03:21
>>99
"2ch"がメモリのどこかに確保されて、
strにそのポインタが渡されるんですよね?
そのポインタはいつまで使えるんだろう?ということです。

102 :デフォルトの名無しさん:03/06/21 03:21
>>101
プログラム開始から終了まで

103 :デフォルトの名無しさん:03/06/21 03:26
文字列リテラルは永久に不滅です

104 :デフォルトの名無しさん:03/06/21 03:26
リテラル文字列の寿命はプログラムが始まってから終わるまで。
というか、ずっと。

あと、リテラル文字列を変更されて欲しくないので

void func(const char **str)
{
*str="2ch";
}

として欲すぃ。

105 :デフォルトの名無しさん:03/06/21 03:26
なにを作りたいのか知らないけど、戻り値にすればいいのに。標準ライブラリのstrerrorみたいに。

106 :デフォルトの名無しさん:03/06/21 03:28
>>101
どっかに"2ch"と書かれた領域があって、
funcに突入したときにstrがその領域を指すように初期化される。

で、funcを抜けたとき
・"2ch"と書かれた領域はそのまま存在する。
・strそのものは寿命がなくなる

君の言ってる「ポインタ」が"2ch"が書かれた領域のアドレスのことなのか
strそのもののことなのか判然としない。前者ならプログラム開始から終了まで、
後者ならfuncに突入した直後からreturnするまで。

107 :デフォルトの名無しさん:03/06/21 03:29
最近は文字列定数とは言わないのか

108 :92:03/06/21 03:29
>>100
むーそうなるんですか。
*が2つ出てくるとちょっと難しいっす。じゃfuncを呼び出す側は
char *str[100];
func(str);
printf(str);
なんでしょうか。

>>102
そうなんですか。定数はどこに登場させても
プログラム開始時には領域を持っているのですか?
それとも領域が確保されるのはその関数が呼ばれた時だけど、
スタック領域に積まれるわけではないということですか?


109 :デフォルトの名無しさん:03/06/21 03:29
func(&str);
でも
str=func();
でも良いけど
str=DEFINED_2CH;
が良いと思う

110 :デフォルトの名無しさん:03/06/21 03:30
>>108
それじゃポインタの配列でしょ。

char *str;
func(&str);

ポインタのアドレスを渡すの。

111 :デフォルトの名無しさん:03/06/21 03:31
>>108
> スタック領域に積ま
自動変数じゃないもん

#自動変数がスタックに積まれると決まっているわけじゃないというつっこみは勘弁

112 :デフォルトの名無しさん:03/06/21 03:32
>>108
char str[100];
func(&str);
printf("%s\n",str);

113 :デフォルトの名無しさん:03/06/21 03:32
>>112
配列?

114 :デフォルトの名無しさん:03/06/21 03:32
まず、
「そのポインタは今どこを指してるのか」を意識しながら考えたほうがいいぞ

115 :デフォルトの名無しさん:03/06/21 03:33
>>109
その例ではそうだけどね...。

116 :112:03/06/21 03:34
何をやってるのだろうか…つー訳で首吊ってきます

117 :92:03/06/21 03:36
うあー皆さんありがとう。
もう少し考えて出直してきます。

118 :デフォルトの名無しさん:03/06/21 03:37
>>117
一体何をつくっているの?
多分もっとよい方法があると思うんだけど・・・・


119 :デフォルトの名無しさん:03/06/21 03:39
まぁ、おそらく、こうしたいのだろう…

void(char *str)
{
  strcpy(str,"2CH");//文字列は直接代入出来ない
}

char str[100];
func(str);
printf("%s",str);

120 :デフォルトの名無しさん:03/06/21 03:40
>>118
作ってるものが分からないのに、
よい方法があるとか言うな!

121 :92:03/06/21 03:41
>>118 いや、何をというわけではなくて単に、
どこかで使われた文字列定数が、いつどこに確保されて
いつまで保ってるんだろうと思いまして。

122 :デフォルトの名無しさん:03/06/21 03:42
>>120
少なくとも戻り値 void な状況で
こういうことをする必然性はないのぅ。
戻り値が別にあるのであれば、
こういうことをすることもあるかもしれんが。

123 :デフォルトの名無しさん:03/06/21 03:43
>>120

本当だ(T_T)
>>121

124 :デフォルトの名無しさん:03/06/21 03:43
各社コンパイラのC99への準拠っぷりが気になる

125 :92:03/06/21 03:46
そういや >>108に書いた、
>そうなんですか。定数はどこに登場させても
>プログラム開始時には領域を持っているのですか?
これに関してはどうなんでしょうか?
ものすごい見当はずれな疑問だったらすみません。


126 :デフォルトの名無しさん:03/06/21 03:46
>>124
あるの? C99準拠コンパイラ

127 :デフォルトの名無しさん:03/06/21 03:47
一般的にデータ領域とかいうところに置かれるんじゃなかったか?
で、読みとり専用だったりすると書き換えようとしてあぼーん


しったかで書いているんだけど・・・

128 :デフォルトの名無しさん:03/06/21 03:48
メモリマップをみれば

129 :92:03/06/21 03:56
それもそうですね。
ということで、見ました。
funcが呼ばれる前に "2ch"が既にあるようです。


130 :デフォルトの名無しさん:03/06/21 03:58
>>125
コンパイラ依存だったと思う
例えば"2CH"なら'\0'まで含めて4バイトなので
ものによっては、そのまま即値データと置かれてる可能性もあるし
>>127さんの言われるとおり、
読取り専用(なければ読み書き)のデータ領域の可能性もあるし
奇想天外な方法で確保している可能性も否定できない
(間違ってたらスマソ)

131 :デフォルトの名無しさん:03/06/21 04:04
文字列リテラルならアドレスを得ないことはないと思うので、必ずメモリー上に置かれるんじゃないかなぁ。

132 :デフォルトの名無しさん:03/06/21 04:13
>>131
そう言われれば、そんな気がしなくもない…

133 :デフォルトの名無しさん:03/06/21 04:16
文字列リテラルはデータセグメント(メモリ)内に置かれる。

134 :デフォルトの名無しさん:03/06/21 04:17
ていうか実装依存です。だからって書き換えちゃダメだけどね

135 :デフォルトの名無しさん:03/06/21 04:17
いや、データセグメントって言うのは、処理系依存の話しだし…

136 :92:03/06/21 04:19
ああ、やっと>>104 >>110 の意味がわかりました。
char* str;
ってのは、charへのポインタを格納する変数だから
そのアドレスを渡すのだね。
だから当然、funcでは引数は **strだし、代入するには
その引数の中身(アドレス値)である *strなんだ!
ひとりレベルの低いレスですまんこ。

137 :デフォルトの名無しさん:03/06/21 04:22
>>135
実装依存と処理系依存は意味違くない?自信ないけど

138 :デフォルトの名無しさん:03/06/21 04:28
>>137
データセグメントはCPUが扱っているものだから処理系依存
(x86系だとCS,DS,ES,SS等々ありますが、DSが存在するかは処理系依存)
で、実際に<どうやってリテラルを保存するのか決めるのは
コンパイラだから実装依存

139 :デフォルトの名無しさん:03/06/21 04:31
ISO 9899-1999
6.2.4.3 ... 静的オブジェクトはプログラム実行中つねに存在し
スタートアップに先立って初期化される。

6.4.5.5 ... (文字列定数は)静的な配列として
文字列を格納するのに適切なサイズで初期化される。 ...

140 :デフォルトの名無しさん:03/06/21 04:32
何か、書き方が悪かったので訂正
データセグメントはCPUが扱っているものだから処理系依存
(x86系だとCS,DS,ES,SS等々ありますが、
 DSが存在するかは、そのCPUに依るので処理系依存)
で、実際に、リテラルを保存するのはコンパイラだから実装依存

141 :デフォルトの名無しさん:03/06/21 04:37
>>136
ちょうどstrtolの第二引数がそんな感じ。

142 :デフォルトの名無しさん:03/06/21 07:02
C++の話になるけど、継承をしたときに
クラスの種類を文字列定数のアドレスで判断してたら
STLのVECTORでクラス作ったら文字列定数のアドレス変わってたんだけどそういうもんですか?
ちなみに判断するときは
return "C2ch";
ってやって返ってきたアドレスで
if(GetName() == "C2ch")
とかやってます。

143 :デフォルトの名無しさん:03/06/21 07:08
>>142
http://pc2.2ch.net/test/read.cgi/tech/1055162298/

144 :デフォルトの名無しさん:03/06/21 08:09
>>142
同じ文字列リテラルが区別されるかどうかは処理系依存だから、
vector云々関係なくそのコードはまずい。

145 :デフォルトの名無しさん:03/06/21 09:01
なんでCスレはC++スレと比べてこんなに伸びが良いのだろう
未だC++に移行できないウニクス野郎ばかりだからだろうか・・・

146 :デフォルトの名無しさん:03/06/21 09:51
0からC++を勉強するヤツは少なくて、
0 → C → C++
  ↓  ↓
  脱落 脱落
的なことになるからじゃねーの?

147 :デフォルトの名無しさん:03/06/21 10:02
人生の敗北者でも使えるC
人生の敗北者では使えないC++

148 :デフォルトの名無しさん:03/06/21 10:32
>>142
"C2ch" ってリテラルは 1 つだけとは限らない。
んな事いう香具師もいるのか。
頼むから業務系で頑張ってくれ。

149 :デフォルトの名無しさん:03/06/21 10:43
平気でアドレス比較していることも信じがたいが
C++の話になるけどとか言いながら話し始める142の神経が信じられない。

150 :デフォルトの名無しさん:03/06/21 11:17
>>149
アドレス比較はscanfと同類か?

151 :デフォルトの名無しさん:03/06/21 11:21
>>150
アンタの頭の中では同類なのか?

152 :デフォルトの名無しさん:03/06/21 11:47
痛い目にあったのを道具のせいにして自分の散漫さを反省しないやつが
嫌いになりそうなものってとこに共通点があるような気がしたんだ

153 :デフォルトの名無しさん:03/06/21 11:55
まぁ、>>142は単なるアフォとしても

>>140がとにかくイタい。
知ったかはいかんのだよ、知ったかは…

154 :デフォルトの名無しさん:03/06/21 11:56
一日たった110円であなたのお店やホームページの宣伝をします!

貴方のお店&サイトを効果的に宣伝できます!
お店の足取りが悪い・・・。私のサイトにはあまり人が来ない・・・。などお悩みの方は、
ぜひおすすめです。手軽&簡単しかも日本中に宣伝できますので、
大幅なアクセスアップが期待できます。

[料金について]
1日110円で宣伝&クーポン券の発行が出来ます。
年間契約で申込された場合、40,000円になります。
6ヶ月契約で申込された場合、25,200円になります。
3ヶ月契約で申込された場合、12,600円になります。

http://www.c-gmf.com/h17103.htm(ビジネスパートナーも募集中。稼げます!)

ぜひ一度お試しになってみてはいかがでしょうか?

155 :ひよこ名無しさん:03/06/21 11:57
 
キタ━━━━━━━━━━━━━━(゚∀゚)━━━━━━━━━━━━━━━!!!!
 
http://diary4.cgiboy.com/0/izuminoa/
 

156 :デフォルトの名無しさん:03/06/21 12:01
cgiboy.com ウザ

157 :デフォルトの名無しさん:03/06/21 12:48
ASCII文字列があって、その文字列が数字のみで構成されていたら数値に変換、
1文字でもアルファベットや記号などを含んでいたらとりあえず0を返すような
関数を作りたいのですが、どのやり方が一番効率がいいのでしょうか?
atoiだと"12a"と入れても12と返って来てしまうので困っています。
やはり1文字1文字解析しながら条件分岐などさせて変換するしかないでしょうか?

158 :デフォルトの名無しさん:03/06/21 12:53
>>131
void foo()
{
 char str[] = "2ch";
}
とした場合、str は foo に入る度に初期化される。
このとき、文字列リテラルを4バイトの即値として扱って
str を初期化するように最適化される場合がある。
確か VC++ 6.0 でそうなってるのを見た気がする。

もちろん、アドレスをとらないといけないような場合は
そういうことはしないと思うけど。

159 :デフォルトの名無しさん:03/06/21 12:55
for (s = t; *s; s++)
if (!isdigit(*s)) return 0;
return atoi(t);

160 :デフォルトの名無しさん:03/06/21 12:57
>>157
isdigit で確認しつつ一文字ずつ解析しながら
自分で変換するのが一番いいかと。
面倒なら、isdigit で全体が数値のみで構成されてる事を確認して、
あとは atoi 使って変換したのでもいい。
実行速度効率的には二度手間だけど、
コーディングの手間としてはこっちの方が楽かも。

161 :デフォルトの名無しさん:03/06/21 13:10
int f(char*s){return strspn(s,"0123456789")==strlen(s)?atoi(s):0;}

162 :デフォルトの名無しさん:03/06/21 13:17
s + strspn(s,"0123456789") == '\0' ? atoi(s) : 0;
こんなかんじでできないかな?

163 :デフォルトの名無しさん:03/06/21 13:18
s[strspn(s,"0123456789")]?atoi(s):0;
こうか?

164 :デフォルトの名無しさん:03/06/21 13:23
少しずつトリッキーになりつつあるな・・・

165 :デフォルトの名無しさん:03/06/21 13:23
s[strspn(s,"0123456789")?0:atoi(s);

166 :165:03/06/21 13:25
しまった、]で閉じてない(w

167 :デフォルトの名無しさん:03/06/21 13:27
空の文字列わたすとどうなるんだ?

168 :デフォルトの名無しさん:03/06/21 13:28
>>157
先頭の符号や空白はOKならばstrtolを使え。

long func(char *s)
{
long n;
char *endp;

n=strtol(s,&endp,10);

return *endp?0L:n;
}


169 :168:03/06/21 13:31
引数はconst char *sの方がいいか

170 :デフォルトの名無しさん:03/06/21 13:35
皆さんありがとうございます。そのまま使ってしまいましたが
こんな感じになりましたがどうでしょうか?一応動きます。
標準関数知らなすぎました(汗)。
int main()
{
char buf[15];
int ch = '\n';
fgets(buf, sizeof(buf), stdin);
if(strchr(buf, ch) == NULL){
fprintf(stderr, "バッファを越えました\n");
exit(1);
}
buf[strlen(buf)-1] = '\0';
printf("%d\n", convertInt(buf));
return 0;
}

int convertInt(char *string)
{
char *s;
for (s = string; *s; s++){
if (!isdigit(*s))
return 0;
}
return atoi(string);
}


171 :デフォルトの名無しさん:03/06/21 13:37
>>170
負の数は扱えないでつね

172 :デフォルトの名無しさん:03/06/21 13:39
☆可愛い彼女が貴方のために・・・☆
http://endou.kir.jp/yuminet/link.html

173 :デフォルトの名無しさん:03/06/21 13:40
☆可愛いCヲタが貴方のために・・・☆
http://pc2.2ch.net/test/read.cgi/tech/1056109884/

174 :デフォルトの名無しさん:03/06/21 13:42
>171
ラインエディタで行数指定して行の追加、削除などを考えているので
負の数は一応使わないということで0を返すように統一してあります。

175 :デフォルトの名無しさん:03/06/21 13:42
どうすれば、ULONGLONG 型や、__int64 の数字を文字で表示できますか?

ULONGLONG ull;
char s1[50];
ull = ( ULONGLONG ) ~0;
wsprint( s1, "%u", ull );

で変換すると、s1 は「4294967295」で、UINT 型の最大値が表示されてしまいます。
デバッグで見ると、ull はちゃんと ULONGLONG 値の最大値が入っている…
どなたか知っている方、お願いいたします。

もちろん sizeof( ULONGLONG ) の値は 8 です。
OS:Windows98 SE

176 :デフォルトの名無しさん:03/06/21 13:43
>>174
ならエラー値は負数にすればいいのに・・・

177 :デフォルトの名無しさん:03/06/21 13:44
>>175
スレ違い・・・・
long longならスレ違いでもないんだけど。

178 :デフォルトの名無しさん:03/06/21 13:47
>>175
最後の1行がワラタ

179 :175:03/06/21 13:48
>>177
もしかして、C++相談室の方ですか?

180 :デフォルトの名無しさん:03/06/21 13:50
>>179
違いますが
ULONGLONGや__int64なんて型は標準にはないんだからここで聞くのはスレ違い。

そんなものコンパイラのマニュアルのprintfのページに載っていると思うけど。

181 :デフォルトの名無しさん:03/06/21 13:52
一番肝心なコンパイラの名前を書かないでOSの名前だけ書くとは

182 :デフォルトの名無しさん:03/06/21 13:53
buf[strlen(buf)-1] = '\0';
なにこれ?

183 :デフォルトの名無しさん:03/06/21 13:58
>>182
意味ないけど文字列の終わりの'\0'の'\0'を載っけたいんだろ?

それにこうじゃねーの?
buf[strlen(&buf)-1] = '\0';

184 :デフォルトの名無しさん:03/06/21 14:00
>>182
多分fgetsで書き込まれた改行文字を取り除きたいんだと思う。

>>183
(-_-;)

185 :デフォルトの名無しさん:03/06/21 14:01
改行消しだと思うよ。

186 :デフォルトの名無しさん:03/06/21 14:01
>>183
意味あるだろ。
strlenが何を返すか考えろ。
たとえばbufが空の文字列だったときとか。

187 :デフォルトの名無しさん:03/06/21 14:02
>186
bufが空文字列ということはありえない。ちょっと上のifを見れば分かる。

188 :186:03/06/21 14:04
>>187
悪い。
別にbufが空の文字列のとき誤作動とか言いたいわけじゃなくて、
183が理解出来てないようだから一番簡単な例を示しただけ。

189 :デフォルトの名無しさん:03/06/21 14:06
>>170
strchr(buf, '\n')と直接\nを書いた方がいいと思う。

190 :デフォルトの名無しさん:03/06/21 14:08
p = strchr(buf, '\n');
if (!p) ...
*p = '\0';

191 :デフォルトの名無しさん:03/06/21 14:11
>176
確かに。プログラム全体に関わるかもしれないので考え直します。
>189
一回しか使ってないのでそのほうがよさそうですね。

やっぱり何も入力しないでEnter押したときはconvertIntに渡さないで
事前にチェックしてexitとかしたほうがいいでしょうか?

192 :175:03/06/21 14:21
違うところで聞いてみます。
レスサンクス

193 :デフォルトの名無しさん:03/06/21 14:23
"%u"ってint型を表示するんじゃないの?

194 :デフォルトの名無しさん:03/06/21 14:26
>>193
%u = unsigned int
%lu = unsigned long int
%llu = unsigned long long int (C99)


195 :デフォルトの名無しさん:03/06/21 14:27
static const unsigned long long int a = 0;

196 :デフォルトの名無しさん:03/06/21 14:28
extern const unsigned long long int a;

197 :デフォルトの名無しさん:03/06/21 14:33
>>192
VC++なら__int64は%I64d

198 :デフォルトの名無しさん:03/06/21 14:51
Boomerangをインストールしたんですが、解析のしかたが分かりません。
特にexeファイルを解析したいです、どうすればよいでしょうか?

199 :デフォルトの名無しさん:03/06/21 14:53
通報しますた

200 :デフォルトの名無しさん:03/06/21 14:57
受理しますた

201 :デフォルトの名無しさん:03/06/21 17:00
Cpad for LSI C-86を使ってるんですが、
以下のようなエラーメッセージが出てコンパイルできません。
原因も全然分かりません。誰か教えてください。助けてー!!!
"lcc: can't exec: cpp: No such file or directory"


202 :デフォルトの名無しさん:03/06/21 17:03
>>201
まずgccをダウンロードしてきてください。

203 :デフォルトの名無しさん:03/06/21 17:06
>>202
どこでダウンロードできるんですか?

204 :デフォルトの名無しさん:03/06/21 17:07
☆可愛い娘たちが貴方のために・・・☆
http://endou.kir.jp/yuminet/link.html

205 :デフォルトの名無しさん:03/06/21 17:08
>>203
>>204のところです

206 :デフォルトの名無しさん:03/06/21 17:13
>>205
・・・・エロリンクしかないんですけど・・・・・

207 :デフォルトの名無しさん:03/06/21 17:14
>>206
冗談はさておき
http://pc2.2ch.net/test/read.cgi/tech/1042611308/
ここの最初のリンク

208 :デフォルトの名無しさん:03/06/21 17:22
>>207
できましたー!!!次はどうしたらいいんですか???

209 :デフォルトの名無しさん:03/06/21 17:23
次にCpadとLSI C-86を捨てます。

210 :デフォルトの名無しさん:03/06/21 17:26
それで・・・、なんか.exeを実行するんですか???

211 :デフォルトの名無しさん:03/06/21 17:28
最後にgccでコンパイルして出来上がりです。

212 :デフォルトの名無しさん:03/06/21 17:32
んんんん・・・できない・・・もう一度cpadを解凍して、コンパイラをgccに
するってこどですか???

213 :デフォルトの名無しさん:03/06/21 17:47
だれかー・・・・おしえてくださーい!!!!!

214 :デフォルトの名無しさん:03/06/21 17:48
>>212
207のリンク先のDownloadからMinGWを落として解凍すれば使い方も一緒に全部入ってるはず。

215 :デフォルトの名無しさん:03/06/21 17:55
全部英語でほとんど意味不明なんですけど、
その辺は自助努力ってことですか???
ギャビーン・・・・

216 :デフォルトの名無しさん:03/06/21 17:59
>ギャビーン・・・・

ってなんですか?なんとなくガーンって感じはするんですけど。。。

217 :デフォルトの名無しさん:03/06/21 18:04
英語は読めない・・・・助けてくれます!?・・・
ガーン

218 :デフォルトの名無しさん:03/06/21 18:11
>217
パス通して
gcc hogehoge.c

219 :デフォルトの名無しさん:03/06/21 18:17
>>218
パスてなんですか?
だれにパスするの?
はぁ〜

220 :デフォルトの名無しさん:03/06/21 18:20
>>219
どこまで知れば、目的に達成できるのか、もうちょっと調べてから
質問してくれないのカナー。

221 :デフォルトの名無しさん:03/06/21 18:20
釣りにしては長いな

222 :デフォルトの名無しさん:03/06/21 18:22
釣りじゃなくて漁です。大漁の予感がします。
今網を巻き戻してるところなのでもう少し待ってください。

223 :デフォルトの名無しさん:03/06/21 18:33
hogehoge.cなんて解凍してもできないっす・・・


224 :おしえてください:03/06/21 18:38
borlandC++コンパイラをおとして、BCPadをおとして、設定すれば良いだけの話しです。

225 :おしえてください:03/06/21 18:39
なんで、みなさんは、難しいコンパイラを、教えるのですか?

226 :デフォルトの名無しさん:03/06/21 18:41
勉強のため。
効率を重視するときはIDEを使います。

227 :デフォルトの名無しさん:03/06/21 18:48
俺は勉強がすんでいるからわざわざ難しいコンパイラなんて使わないけどね。

228 :デフォルトの名無しさん:03/06/21 19:40
C実践プログラミングという本に符号付き整数を右シフトした場合、シフトしてあいた部分には符号ビットと同じものが入ると書かれていたんですが、
符号付きでかつ負数を右シフトした結果は処理系依存ですよね?あいた部分が1で埋められると決まっているわけではないですよね?

229 :デフォルトの名無しさん:03/06/21 19:56
処理系依存です

230 :デフォルトの名無しさん:03/06/21 19:59
sdkってなんの略?


231 :デフォルトの名無しさん:03/06/21 20:01
>>230
そこ。
どこ?
ここ。

232 :デフォルトの名無しさん:03/06/21 20:02
>>229
ですよね。ありがとうございました。

ごく一般的な例を示しただけなのかな。表形式で決めつけた書き方をしていたんだけど・・・

233 :デフォルトの名無しさん:03/06/21 20:06
コンパイラに難しいとか簡単だとかあるのか?
VisualStudioが使いにくいとかgdbがとっつき難いってのは判るが。

234 :デフォルトの名無しさん:03/06/21 20:08
漏れの本にも、
doubleの精度は約13桁です
って書いてある。

235 :デフォルトの名無しさん:03/06/21 20:55
#include<stdio.h>
char search(char*,char*);
main()
{
char moji1[81];
char moji2[81];
printf("店の姫の名前をカキコんでみてネ。(ただし、80字以内にしないとお仕置きよん♪)");
scanf("%s",moji1);
printf("やりたい姫の名前をここに挿れてっ。お・ね・が・い♪");
scanf("%s",moji2);
if(search(moji1,moji2)==0)
{
printf("殿!お探しになってた姫は在籍しております。\nお急ぎくださいませ!");
}
else
{
printf("殿!今日お探しになってた姫は休みをとっております。\nまた別の機会にご来店ください。よろしくおながいします。")
}
}


236 :235の続き:03/06/21 20:58
char search(char*x,char*y)
{
char* a,b;
int s;
b=y;
while(*x!='\0')
{
while(*y!='\0' && *x!='\0')
{
if(*x==*y)
{
s=0,x++,y++;
}
else
{
s=1,x++;
}
if(s==0 && *y=='\0')
{
retrun 0,break;
}
if(s==0 && *x!=*y)
{
y=b;
}
}
}
return 1;
}

237 :ひよこ名無しさん:03/06/21 20:59
 
キタ━━━(,    )(,,    )(,    )(`×´ ;)━━━ッ!!
 
http://diary4.cgiboy.com/0/izuminoa/
 

238 :236:03/06/21 21:01
>char* a,b;

char* a;
char* b;
という解釈でおながいします。

239 :デフォルトの名無しさん:03/06/21 21:06
>>238
それよりもなんの目的でソースを貼ったんですか?

240 :デフォルトの名無しさん:03/06/21 21:16
char*a, b論外
strcmp

241 :デフォルトの名無しさん:03/06/21 22:20
なんかウゼえコーディングだな

242 :デフォルトの名無しさん:03/06/21 22:23
C言語覚えたてでウキウキなんだろう。そっとしておけ。

243 :_:03/06/21 22:24
http://homepage.mac.com/hiroyuki44/

244 :236:03/06/21 22:29
おまえら滅ぶよ

245 :デフォルトの名無しさん:03/06/21 22:45
>>236 は釣りかなんかですか?

246 :デフォルトの名無しさん:03/06/21 23:03
struct a{
 struct b{
  int com;
 }mac;
}homepage;

int hiroyuki44;

homepage.mac.com/hiroyuki44

いや、べつに意味は無いんだけど…。

247 :デフォルトの名無しさん:03/06/21 23:15
>246
あぼ〜んだよ(w

248 :デフォルトの名無しさん:03/06/21 23:24
C言語覚えたてといえば、覚えてから一度も共用体なるものを使ったことないけど
誰かいる。
unionって今はじめて打ったよ。
あと。#if #elseとかも一度もない・・・

249 :デフォルトの名無しさん:03/06/21 23:25
>>246&&247
良く見るけど、そのアドって何なの?

250 :デフォルトの名無しさん:03/06/21 23:32
>>249
名前欄にfusianasanと入力するんだよ。

251 :fushianasan:03/06/21 23:34
こう?

252 :nthkid031062.hkid.nt.adsl.ppp.infoweb.ne.jp:03/06/21 23:37
ヷ〳〵〳〵〳〵〳〵〳〵〳〵

253 :デフォルトの名無しさん:03/06/21 23:41
>>248
union は使わんなぁ。
でも、#if #else は結構使うぞ。

254 :デフォルトの名無しさん:03/06/21 23:41
>>252
なんか字がスゴいことに…

255 :デフォルトの名無しさん:03/06/21 23:52
>>253
VC++に#if #elseと似たような機能があるよ。
指定した行や関数を無効にするようなものが。

256 :デフォルトの名無しさん:03/06/21 23:54
でも、式で操作できないよ。

257 :デフォルトの名無しさん:03/06/21 23:54
>>255
標準より処理系の拡張がいいと申すか?

258 :デフォルトの名無しさん:03/06/21 23:59
union便利だよ。

259 :デフォルトの名無しさん:03/06/22 00:08
前の現場で変なunionの使い方してて、
たった1個のDBの項目長が変わっただけで大量の修正orリコンパイルを
余儀なくされたよ。

相当メモリを節約したいか、同じ領域を無理やり違う型ですぐに見たいときでもなきゃ
使うもんじゃないな。

260 :デフォルトの名無しさん:03/06/22 00:18
制御系やるとたまに使うな>union

261 :デフォルトの名無しさん:03/06/22 00:21
>>260
初めて使った union は union REGS regs; ダターヨ。

262 :デフォルトの名無しさん:03/06/22 00:23
>>261
俺もだ。
VRAM 操作するときに使っターヨ。

263 :デフォルトの名無しさん:03/06/22 00:29
>>248
エンディアン変換する時には激しく便利だな。
>union

264 :デフォルトの名無しさん:03/06/22 00:37
>>263
どういう風に便利?

265 :デフォルトの名無しさん:03/06/22 00:44
別に union いらん気もするが。

void change_int_endian(int *value) {
 char tmp;
 char *c = (char*)value;
 tmp = c[0];
 c[0] = c[3];
 c[3] = tmp;
 tmp = c[1];
 c[1] = c[2];
 c[2] = tmp;
}

266 :デフォルトの名無しさん:03/06/22 01:02
>>265
それだとintのデータしか扱えなくて汎用性がない。

既存のソースの改修や、同じ関数内で変換したい場合は以下のようにする。

union {
unsigned long Dword;
unsigned short Word[2];
unsigned char Byte[4];
} data;

data.Dword = hoge;

/* Big Endian */
BigEndiadn = (unsigned short)((data.Byte[0] << 24) | (data.Byte[1] << 16) | (data.Byte[2] << 8 | data.Byte[3]) );

267 :デフォルトの名無しさん:03/06/22 01:08
ふと思ったんだが

union hoge{
 short s[2];
 int i;
} uni;

uni.s[0] = 1;
uni.s[1] = 0;

printf("%d", uni.i );

ってやったらさ、65536って出るよね。

268 :デフォルトの名無しさん:03/06/22 01:12
>>266
CHAR_BITSが8じゃなかったら?

269 :デフォルトの名無しさん:03/06/22 01:16
そこまでやるんだったらフツーに char* つかえばいいような気がするが。

270 :デフォルトの名無しさん:03/06/22 01:18
>>266
それってBig EndianでもLittle Endianでも同じ値になる?

271 :デフォルトの名無しさん:03/06/22 01:22
BigEndiadn = (unsigned short)((data.Byte[0] << 24) | (data.Byte[1] << 16) | (data.Byte[2] << 8 | data.Byte[3]) );


…アフォだ、真性の。

272 :デフォルトの名無しさん:03/06/22 01:23
>>271
short と long のキャスト間違えただけだろ。

273 :デフォルトの名無しさん:03/06/22 01:27
>>272
shortが32ビットなんだろ?

274 :デフォルトの名無しさん:03/06/22 01:27
あのシフト演算してる内容はムチャクチャに見えるんだが。

アフォだ、真性の。

275 :デフォルトの名無しさん:03/06/22 01:34
>>271&&274
アフォで短小で包茎で早漏って言いまちたね
アフォで(略)って言った方がア(略)なんでちよ
そう、ママに教わりまちぇんでちたか?

276 :デフォルトの名無しさん:03/06/22 01:38
ビッグエンディアンとリトルエンディアンの定義を
逆に覚えてしまっているのか。

277 :デフォルトの名無しさん:03/06/22 01:40
>>275
それはママンには習わなかったが、>>265みたいになるんじゃないのか?

278 :265:03/06/22 01:43
>>277
俺かよっ!!

279 :デフォルトの名無しさん:03/06/22 01:45
>>278
ああ、最後の1行だけに対する煽りだったんだね。スマソ。

280 :デフォルトの名無しさん:03/06/22 01:50
ところで今 pc.2ch.net 見えますか?

281 :デフォルトの名無しさん:03/06/22 02:07
>>268
CHAR_BITだろ

282 :デフォルトの名無しさん:03/06/22 02:10
>>281
細かいツッコミありがとう。

283 :268:03/06/22 02:12
>>281
スマソ

284 :デフォルトの名無しさん:03/06/22 02:21
char c[3];
とかにscanfなどで絶対2文字以上入れさせない為にはどうしたらいいですか?

285 :デフォルトの名無しさん:03/06/22 02:22
>284
別な入れ物用意する。

286 :デフォルトの名無しさん:03/06/22 02:22
>>284
ループを使って1文字ずつ入れていけばいいんじゃない?

287 :デフォルトの名無しさん:03/06/22 02:24
scanf("%1s", c);

288 :デフォルトの名無しさん:03/06/22 02:25
scanfを、もとい、C言語を使わなければ良い

289 :デフォルトの名無しさん:03/06/22 02:25
>>284
scanf に%cを1つ書いて入力汁

290 :デフォルトの名無しさん:03/06/22 02:28
printf("絶対2文字以上いれないでください\n");

これを加えるだけでオッケー

291 :デフォルトの名無しさん:03/06/22 02:29
fgetsとsscanfを使う

292 :デフォルトの名無しさん:03/06/22 02:33
>>290
「そうは言っても体は正直なもので3文字以上
 入れられたがってるようじゃがのぅ。フォッフォッフォッ。
 どれどれ、ひとーつ、ふたーつ、みぃ〜〜〜っつ」

293 :284:03/06/22 02:33
scanf("%1s", c); などを使った時、

scanf("%1s", c); //一回目の入力
scanf("%1s", c); //2回目の入力

とした時1回目に余った文字が2回目のほうで入ってしまうのですがこれは回避できないんでしょうか?

294 :デフォルトの名無しさん:03/06/22 02:34
>>284
まずは法律の整備から。
まあ法律を破る人はいるから絶対に防ぐのは無理だけど。

295 :デフォルトの名無しさん:03/06/22 02:36
>>293
rewind(stdin) と汁

296 :デフォルトの名無しさん:03/06/22 02:36
>>295
それって大丈夫なの?

297 :デフォルトの名無しさん:03/06/22 02:39
fseek(stdin,0,SEEK_END);

298 :デフォルトの名無しさん:03/06/22 02:39
>>296
ハァ? それくらい自分で試せば?

299 :デフォルトの名無しさん:03/06/22 02:40
>>298
俺の持っている環境だけで動いても意味ないし・・・

300 :デフォルトの名無しさん:03/06/22 02:42
>>298
ハァ? それくらい自分で調べれば?

301 :デフォルトの名無しさん:03/06/22 02:43
釣りでしたか。

302 :デフォルトの名無しさん:03/06/22 02:54
>>295
だめだったけど・・・・
環境はLinux+gcc

303 :デフォルトの名無しさん:03/06/22 02:58
>>302
man rewind してみたら?

多分使うタイミングを間違えているよ。

304 :デフォルトの名無しさん:03/06/22 03:02
>>303
デバイスに対してfseekやrewindを使った場合についての記述はない。
呼ぶタイミングは二度のscanfの間

305 :デフォルトの名無しさん:03/06/22 03:04
漏れ BSD だが。特に問題なし

#include <stdio.h>

int main(int argc, char**argv)
{
char c;

scanf("%c", &c);
rewind(stdin);
scanf("%c", &c);

printf("%c\n", c);

return 0;
}


306 :デフォルトの名無しさん:03/06/22 03:04
fflash(stdin)

307 :304:03/06/22 03:05
いくら長い文字列を入力しても、二度目のscanfの時に入力待ちになれば成功なんでしょ?

308 :デフォルトの名無しさん:03/06/22 03:05
>>304
そうだが。何がいいたいの?

309 :284:03/06/22 03:09
私も試してみたのですがWINXPとVC++でrewind(stdin);は使えました
今は使えないのですが本当はUNIXで実行させたいのですが・・・
やっぱり関数使わないと無理なんでしょうか・・・?

310 :デフォルトの名無しさん:03/06/22 03:11
>>309
rewind は UNIX な環境であればおそらく存在するんではないか?

なんかマズいの?

311 :デフォルトの名無しさん:03/06/22 03:12
fgetsとsscanfを使えとあれほど





すごい釣りだなぁ

312 :デフォルトの名無しさん:03/06/22 03:13
scanf()はネタが尽きないね。

313 :デフォルトの名無しさん:03/06/22 03:14
>>310
存在するか否かの問題ではないだろ・・・
rewind(stdin)で入力バッファをクリアできるかどうかが問題なんだろ。

314 :デフォルトの名無しさん:03/06/22 03:15
fscanf, scanf() の "%c" つかえば医院じゃないかな?この場合は。

315 :デフォルトの名無しさん:03/06/22 03:15
こんなんどうですか?

scanf("%c",&a);
b = a;
while(a != '\n'){
scanf("%c",&a);
}
scanf("%c",&c);

316 :デフォルトの名無しさん:03/06/22 03:17
getchar()仕え

317 :デフォルトの名無しさん:03/06/22 03:18
EOFの判定めんどい

318 :デフォルトの名無しさん:03/06/22 03:18
>>313
んーと a.out < /dev/random
ってことですか?

319 :デフォルトの名無しさん:03/06/22 03:20
>>317
そんな訳ない

320 :デフォルトの名無しさん:03/06/22 03:21
>>310>>309の「使えました...本当はUNIXで...」に対する皮肉か。

321 :デフォルトの名無しさん:03/06/22 03:27
>>320
コワー。ちょっと荒んでますね。

322 :デフォルトの名無しさん:03/06/22 03:31
>>320
アレが皮肉に見えるのか?

323 :デフォルトの名無しさん:03/06/22 03:34
むしろ>>309が皮肉のような

324 :デフォルトの名無しさん:03/06/22 03:34
>>322
>>309は期待通りに動いたという意味で「使えました」と言ったんだろ。
それを存在するかしないかという意味で解釈して>>310と言ったんだろ。

325 :デフォルトの名無しさん:03/06/22 03:35
つか >>320はヤヴァイ感じがする。もう寝たほうがいいぞ。

326 :デフォルトの名無しさん:03/06/22 03:37
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt_rewind.asp

これが根拠なんでしょうね。

327 :デフォルトの名無しさん:03/06/22 03:37
みんな名無しでよく流れが分からないのだが。

328 :326:03/06/22 03:38
> キーボード バッファをクリアするには、既定でキーボードに関連付けられている標準入力ストリーム (stdin) を引数に指定して rewind 関数を使用します。

これ

329 :デフォルトの名無しさん:03/06/22 03:43
次の質問は、標準入力がキーボードであるか、
違うものであるかを見極める関数の使用方法だな

330 :デフォルトの名無しさん:03/06/22 03:44
>>324は暴れないのか?
待ってるんだが。

331 :デフォルトの名無しさん:03/06/22 03:47
釣りは魚の役をやる香具師がいないと成り立たないからなw

332 :デフォルトの名無しさん:03/06/22 04:16
あー、乗り遅れた!
調べもしないで凄む>>320はどこに行ったんでしょうか?

333 :デフォルトの名無しさん:03/06/22 06:59
>>293
http://www.catnet.ne.jp/kouno/c_faq/c12.html#26

334 :名無しさん@Emacs:03/06/22 12:26
我流でやってる初心者ですが
下のプログラムを実行すると処理が全部終ったあとにSegmentation Faultになります。
どこがまずいんでしょうか

#include <stdio.h>

void get_output_fd( char *argv ,FILE *out_file ){
out_file = fopen("outputfile","w");
}

int main ( int argc, char **argv ){
FILE *out_file;
(void) get_output_fd( argv[1], out_file );
fclose( out_file );
return (0);
}


335 :デフォルトの名無しさん:03/06/22 12:31
>>334
fopenの戻り値がget_output_fdを抜けたところで行方不明になるから。

書くならFILE *get_output_fd(void); outfile=getoutput_fd();とする。

336 :デフォルトの名無しさん:03/06/22 12:49
>>334
自作関数get_output_fdの引数の意味がわからん!
自作関数get_output_fdの戻り値でout_fileをメインに返すかout_fileを
グローバル変数で宣言しないとfclose( out_file );が機能しない!
さらに戻り値型の括弧は(void)特に必要がないかと思うけど・・・

337 :デフォルトの名無しさん:03/06/22 13:02
STLのstringを使ってみました。
int i=123;
string ss=i;
としたとき、ssに数字の123の文字が入ってくれません。
単に数字を文字列にしたいだけなんですが、どうすればいいのでしょうか。



338 :デフォルトの名無しさん:03/06/22 13:02
>>334
void get_output_fd(char *argv, FILE **out_file)
{
*out_file = fopen("console.txt", "w+");
}

int main(int argc, char **argv)
{
FILE *out_file;
get_output_fd(argv[1], &out_file);
fclose(out_file);
return(0);
}


339 :jj:03/06/22 13:06
初心者ですが 、これでエラーがでます。
なぜでしょうか。
#include <stdio.h>
main()
{
printf("t");
}

340 :デフォルトの名無しさん:03/06/22 13:09
メイン関数の戻り値方がない。
さらにはコンパイラによったらメイン関数でもプロトタイプを
宣言しろといってくる「ポンコツ」が存在する。

341 :デフォルトの名無しさん:03/06/22 13:25
というわけで340じゃないが

#include <stdio.h>
void main()
{
printf("t");
}

#include <stdio.h>
int main()
{
printf("t");
return 0;
}

どっちかにすんだな

342 :デフォルトの名無しさん:03/06/22 13:34
>>337 もどうぞよろしくお願いします。

343 :デフォルトの名無しさん:03/06/22 13:34
大漁〜♪大漁〜♪

344 :デフォルトの名無しさん:03/06/22 13:43
>>342
いとあ

345 :337:03/06/22 13:51
int

char
にするだけでもいいのでおながいします。


346 :デフォルトの名無しさん:03/06/22 13:52
(char)

347 :337:03/06/22 13:55
それだとわけわかんない文字になってしまうのですが・・・。

348 :デフォルトの名無しさん:03/06/22 13:56
このスレで聞いていることの方が分からない。

349 :デフォルトの名無しさん:03/06/22 13:58
>>337
#include <sstream>

std::ostringstream ost;
int i=123;
ost << i;
std::string s=ost.str();

C++相談室 part20
http://pc2.2ch.net/test/read.cgi/tech/1055162298/l50

350 :337:03/06/22 13:58
C系の質問スレってここじゃないの?

351 :337:03/06/22 13:59
>>349
あーごめんなさい。
あとまじでありがとうございます。困ってたので助かりました。

352 :デフォルトの名無しさん:03/06/22 14:27
>>337
C板的に回答するなら

int i = 123;
char buf[256];

sprintf( buf, "%d", i);

と言った所か?

353 :デフォルトの名無しさん:03/06/22 14:29
板じゃなくてスレ

354 :kk:03/06/22 14:30
>>339

#include <stdio.h>;

の「;」がぬけてますよ。

355 :デフォルトの名無しさん:03/06/22 14:31
鼻毛登場

356 :デフォルトの名無しさん:03/06/22 14:31
びっくりするほどユートピアだな

357 :デフォルトの名無しさん:03/06/22 14:31
ふーん。

358 :デフォルトの名無しさん:03/06/22 14:33
エラーと警告の区別がつかない初心者

359 :jj:03/06/22 14:33
>>354
ありがとうございました!!!
それで逝けました


360 :デフォルトの名無しさん:03/06/22 14:34
>>359
空しいな。友達作れよw

361 :jj:03/06/22 14:42
役立たずの負け惜しみですか?w
354さんありがとうございました!!
残りは氏ね


362 :デフォルトの名無しさん:03/06/22 14:44
#include <stdio.h>;
何度も見たなぁ。これが通るコンパイラって多いのかな。

363 :デフォルトの名無しさん:03/06/22 14:44
C FAQすら読まずに知ったか回答する人は氏んでもいいと思う。

364 :デフォルトの名無しさん:03/06/22 14:46
>>361
340, 341も答えているのに、酷い香具師だな。

365 :デフォルトの名無しさん:03/06/22 14:54
>>361
さっきから一人で何やってるんですか?

366 :デフォルトの名無しさん:03/06/22 14:58
>>363 違うだろw
C FAQすら読まずに質問する人
の間違いだな。

367 :その1:03/06/22 14:59
>>3 誰彼のアレも強制オナニーのようなものなのだろうか?
>>5 真・脳力者の芽美たんのオナニーがよかった
>>6 佐伯由美子(虜)の自慰調教のシーンが良かった。
>>9 とらハ2でみなみがオナるところ萌え〜。
>>10 とらハ2でみなみがオナるところ萌え〜。
>>15 >>16
自慰・自慰〜覗きの報酬〜・自慰2・自慰☆すぽっと(キャンディソフト)
みせたがり(ZERO)
「fu・shi・da・ra」「mi・da・ra」(ミンク)
P.S.@1・2・3(ウラン)
自慰倒錯(ティンカーベル期待の新作) >>417-418
>>20 >>22 「女のこの仕組み」(りびどー)のおまけCD
>>29 夜勤病棟の恋
>>43 同人でもいいですか?虎の穴に「奴隷志願」
>>52 夜想文化祭で香澄、真由美、園子、智代の4人にオナニーシーン有るょ。
>>54 >>55 放課後マニアクラブは全員やってて良かったなぁ。
>>60 『風色のロマンス』で主人公の部屋でエロ本を見つけオナってる処を見つかちゃった
>>63 「緋色の姉妹」で二人いる。
>>74 ブライディアでダリアにオナニーさせるシーンは凄く良かった

368 :デフォルトの名無しさん:03/06/22 14:59
有り得ない誤爆スマソ
吊ってくる

369 :デフォルトの名無しさん:03/06/22 15:08
オナニー見てるだけなんてもの足りないだろ

370 :367:03/06/22 15:14
パターン1
客「こういうの作ってください」
技術者「はいできました」

パターン2
技術者「俺こういうの作りたい」
技術者「できたー」

どっちの技術者が本気で開発「やりたい」と思ってると思う?
どっちが本気で開発の楽しさを「感じてる」と思う?

だから漏れはオナーニ好きなんだYO!
本人が自ら求めてる様がいいんだYO!



371 :デフォルトの名無しさん:03/06/22 15:19
>>367
作ったエロゲ教えて。

372 :367:03/06/22 15:30
肝心なとこを忘れてた。
パターン1がセクースで
パターン2がオナーニな。

で、別に俺はエロゲメーカーでもないし個人的に作る力量もなし。
さて、印刷もしたし、中古屋にいってくるか…。

373 :デフォルトの名無しさん:03/06/22 15:36
>>372オナニーが好きなんじゃなくオナニーしか出来ない香具師

374 :デフォルトの名無しさん:03/06/22 16:08
while(1){

scanf("%d", &n);

switch(n){

       ・
       ・
       ・
}
}

というやつだと、入力を間違ったりすると(↑とかBS)無限ループにはいってしまいます。
その対処法などがありましたら、ぜひお教えください。

375 :デフォルトの名無しさん:03/06/22 16:16
scanfの返り値をチェックしとけ

376 :デフォルトの名無しさん:03/06/22 17:13
>>374
>>293 以降

377 :デフォルトの名無しさん:03/06/22 17:15
fgets()を使う

378 :デフォルトの名無しさん:03/06/22 17:22
i378

379 :デフォルトの名無しさん:03/06/22 18:44
難波「486よ486が安くなるのよ!」







時代だねぇ。

380 :デフォルトの名無しさん:03/06/22 18:56
#include <iostream.h>

void main()
{
double a,b,c;

cout << "わり算の余りを求めます。" << endl;

cout << "わられる数を指定してください。" << endl;
cin >> a;

cout << "わる数を指定してください。" << endl;
cin >> b;

c=a%b;

cout << a << "÷" << b << "の答えは" << c << "です" << endl;

}

このプログラムがどうしてもエラーになります。
どこが悪いのでしょうか?

381 :デフォルトの名無しさん:03/06/22 19:00
>>380
C++スレは他にあるよ。

382 :デフォルトの名無しさん:03/06/22 19:00
1. % は実数に使えない
2. a % b は a ÷ b じゃない
3. スレ違い

383 :デフォルトの名無しさん:03/06/22 19:00
>>380
C++のプログラムはここではありません。
しかも、#include <iostream.h>ってヘッダーファイルではないので
#include <iostream>です。CとC++を混同してませんか?

384 :デフォルトの名無しさん:03/06/22 19:02
C++スレで聞かれても困るけどな。

385 :デフォルトの名無しさん:03/06/22 19:09
>>380
答が出てるしスレ違いなんだが、一般的に「エラーが出る」というのは、
どういうことなのか詳しく述べないとダメよ。

・何をしたときに
・どんなエラーが出たか(メッセージをコピペする)

これくらいは最低限必要ね。

386 :デフォルトの名無しさん:03/06/22 19:27
Cを最近勉強し始めた者です。
scanfで半径を入力し、半径*半径*円周率(n)で面積を求めたいんですが、
入力された数値が2だったら4nみたいに表示できませんか?
文字と数字の掛け算ってできますか?

387 :デフォルトの名無しさん:03/06/22 19:29
>>386
数字も文字の内。
文字は整数だからかけ算できる。

388 :デフォルトの名無しさん:03/06/22 19:30
>>386
printf("%dn",hankei1*hankei2);じゃだめなの?

389 :デフォルトの名無しさん:03/06/22 19:33
あっ、それもそうですね。
でも、もし半径がrを入力されたら・・。ということを
考えたら掛け算したほうがいいかなと思ったんです。
↑>>入力された数値
  すみません。文が変でした。数値だけではなく、文字も考えます

390 :デフォルトの名無しさん:03/06/22 19:35
>>389
2 2なら4nで、r 5なら5rnとか表示させたいの?

391 :デフォルトの名無しさん:03/06/22 19:37
#defin n 3.14


392 :デフォルトの名無しさん:03/06/22 19:38
やっぱり円周率を#とします。
2と入力されたら4#、
rと入力されたら#r^2こんな感じです。

393 :デフォルトの名無しさん:03/06/22 19:39
>>392
それならscanfを使ってはいけないと思うよ・・・・


394 :388:03/06/22 19:40
あ、半径なんだからどちらも同じだ(恥

395 :デフォルトの名無しさん:03/06/22 19:41
確かにそうでした・・・。
どうもありがとうございます。

396 :初心者:03/06/22 19:51
はじめまして。
C言語を勉強しようと思うのですが、
どういう勉強方法がよろしいですか??
アセンブラも覚えた方がいいのですか?

397 :デフォルトの名無しさん:03/06/22 19:58
まいっちんげまちこ

398 :デフォルトの名無しさん:03/06/22 20:01
既にプログラミングが出来るのなら何からはじめても大丈夫だろうが、
そうでないなら内容が少なすぎるのではないかと思うくらい
簡単な本を買うのがいいと思う。
何でも覚えた方がいいが手広くすると挫折する可能性も高くなる

399 :初心者:03/06/22 20:05
>>398
ありがとうございます。


400 :デフォルトの名無しさん:03/06/22 20:41
400ゲットしていいでつか?

401 :デフォルトの名無しさん:03/06/22 20:43
ダメ

402 :デフォルトの名無しさん:03/06/22 20:46
あーあ。ダメって言ったのに…

403 :悩める獅子座:03/06/22 21:20
ポインタを使う意義ってなに?
今はPCの性能がインフレ気味だから全部グローバル関数にしちゃっても
なんら問題ないと思うんだけど。。。
俺ってアフォ?ポインタの存在意義教えて

404 :デフォルトの名無しさん:03/06/22 21:28
支離滅裂

405 :デフォルトの名無しさん:03/06/22 21:35
>>403
BASICの様なコードを書きたいならそれでもいいよ

406 :デフォルトの名無しさん:03/06/22 21:43
>>403
むしろ性能が低いほうがグローバル変数を使う意義があるのだが…
余計なパラメータの受け渡しのコードがなくなるんでその分速くなるのだが。

事実昔は、リエントラントに気を使わないでよい再帰関数は高速化のために
グローバル変数を積極的に使ったものだ。

グローバル変数を使う弊害ってのは、関数の独立性が損なわれることにある。
無論、リエントラントな関数だとグローバル変数を使ってパラメータの受け渡しをすると、
破綻するしな。

パラメータをいちいち書かずに済むので楽だと考えがちだが
(おれも新人の頃はそうだった)いざ、そのパラメータの値がおかしくてバグが露見した場合、
どこでおかしな値を設定しているのかわからなくなる。
それでなくても関数の独立性が低いので少しでもその関数を直すとその影響が
コード全体に波及して保守しづらいことこの上ないコードになるぞ。

だからPC、というか計算機の性能が上がった今では多少の性能は無駄にしても、
保守性を重視してグローバル変数は原則として使うな、ということになっているのだ。

以上のことはポインタを使うとか何とかということと関連のない話だ。
ポインタの本質は物を指せるということだ。物というのはメモリ上の実体な。
これを使わないとかけないコードは多々ある。一番いい例がリンクトリストだ。
もうひとつ、でかい物をパラメータとして渡すと性能が落ちるので、
その代わりにでかい物のありか(ポインタ)をパラメータとして渡すという使い方もある。

さらに物のありかを指しているので、関数はその物にいろいろいたずらをするという
使い方もある。君が言うグローバル変数で云々というのはこの最後の使い方しか見てない。


407 :デフォルトの名無しさん:03/06/22 21:46
>>403
PCの性能が良くなったからポインタの存在意義がなくなった
と言ってるのか?
つまり昔は意義があったってことか?
どんな意義があったのかは知らないが、それがポインタの存在意義じゃないのか。

408 :デフォルトの名無しさん:03/06/22 21:52
>>406
長文を書く前によく読みなさい。
>>403 の言っているのは「グローバル関数」です。

409 :406:03/06/22 21:54
>>408
うわ。恥ずかしい。ごめんなさいです。
文意がつながらないから勝手に脳内で読み替えてしまったらしい。

410 :デフォルトの名無しさん:03/06/22 21:59
Cにグローバルでない関数はあったか?

411 :デフォルトの名無しさん:03/06/22 22:02
>>410
あえて言うならstaticな関数、かなあ。
グローバルの定義にもよるけどな。

412 :410:03/06/22 22:13
内部関数か・・・

>>403
それとポインタ・・・いやコンピュータの性能とどう関係あるんだYO!

413 :412:03/06/22 22:15
内部関数なんて言い方はしないかも・・・なんとなく使ってきたけど。

414 :デフォルトの名無しさん:03/06/22 22:27
確かにポインターは使われなくなったけど、たまに、Cをマスター=ポインターが使える
と勘違いしてるやつは何でも間でもポインター使ってみんなに、嫌がられるんだよ。
アスタリスク2つまでなら許せるけどそれ以上はいや!



415 :デフォルトの名無しさん:03/06/22 22:30
>確かにポインターは使われなくなった

なったのか?

416 :デフォルトの名無しさん:03/06/22 22:35
>>415
使われにくくなった

417 :デフォルトの名無しさん:03/06/22 22:37
>>416
どこで?

418 :デフォルトの名無しさん:03/06/22 22:41
#include <stdlib.h>

↑これはstrcmpを使うときに必要なんか?それともatoiか??
違うサイトの解説見てたら乱数を発生させるときに必要とか・・・
でも乱数なんて入ってないし
どれなんだYO!

419 :デフォルトの名無しさん:03/06/22 22:43
>>417
言語自体が使わない流れ!
javaとか会社では新規にCでプログラムはしばらくしてないがcの仕事が新規で
くればハードの性能が上がってるので理解しやすくポインターを使わずに書く。


420 :デフォルトの名無しさん:03/06/22 22:44
>>418
atoiもrandもsrandもstdlib.hだが、strcmpはstring.h

421 :デフォルトの名無しさん:03/06/22 22:45
>>419
C++はどうするんだ?

422 :デフォルトの名無しさん:03/06/22 22:47
>>421
し・め・つ♪

423 :デフォルトの名無しさん:03/06/22 22:48
>>419
うちは未だに思い切り使ってますが…

424 :デフォルトの名無しさん:03/06/22 22:48
>>421
C++はクラス型もポインターは便利なので使う。それ以外はなるべく控える。

425 :デフォルトの名無しさん:03/06/22 22:49
>>424
もではなくのです。

426 :デフォルトの名無しさん:03/06/22 22:50
>>420
サンクス
めもっとく

427 :デフォルトの名無しさん:03/06/22 22:56
>>419
JavaでOSがかけるか。ドライバがかけるかボケ。
と思ったのだった。その昔にたようなことが言われてて、
PrologでOSを書いちゃったことがあってみんな仰天したがなw

アプリだけならCはいらんかもしらんな。
要は使うべきところを間違っちゃいかんという事だ。
Cを使うならポインタ使わないと書けない・書きづらいことがあるんで使うでしょ。

428 :デフォルトの名無しさん:03/06/22 23:02
つかCに限らず、いまどきの言語はみんなポインタあるだろ。
JavaだってVBだってあるだろ。

429 :デフォルトの名無しさん:03/06/22 23:07
アプリってなんだか楽しそうでうらやましい。

430 :デフォルトの名無しさん:03/06/22 23:07
>>428
Cと同等のポインタが使える言語ってそんなにないと思うけど。
Javaは基本的にオブジェクトの参照のみだし。VBはよくしらん。

Cには参照がないんだよな。他の処理系では処理系が縁の下でやってることを、
Cではプログラマがポインタを使って明示的にやるようになってる。

431 :デフォルトの名無しさん:03/06/22 23:08
ポインタが使えないと、標準関数使えないよ。

432 :デフォルトの名無しさん:03/06/22 23:17
参照もポインタも本質は同じようなもの。
文法がちょっと違うだけだよ。
その本質を見失うと厄介なバグに悩まされるよ。

433 :デフォルトの名無しさん:03/06/22 23:29
>>403以降のスレをみる限り
ポインタを理解してない香具師って、意外と多そうだね…

434 :デフォルトの名無しさん:03/06/22 23:46
「参照」という言葉が C++ で使われてるものと
その他の言語で使われてるものとで違う、
ということに関して触れる人が少ないのが残念だ。

Java などで使う「参照」というものは
実のところ C++ の「参照」と「ポインタ」を足して 2 で割ったようなものだ。

1. 初期化だけでなく、代入できる(C++ のポインタの特徴)
2. あるオブジェクトの実体そのものではなく、
  実体を参照するものである(C++ のポインタと参照の特徴)
3. アドレスのようなものを操作することができない(C++ の参照の特徴)

特徴 2 は重要で、うっかりすると
違うものだと思ってたものが実は同じ実体を参照していた、
なんてことにもなる。
C++ では値とポインタ、参照で型名が変わるのでその可能性を常に意識するけど、
Java だと参照しか使うことができないのでつい忘れてしまうことがある。

435 : :03/06/23 00:05
main()
char *p

func(&p);


void func(char **p){

*p = .....

}

これで大丈夫ですか?解説お願いします。

436 :デフォルトの名無しさん:03/06/23 00:08
>>434
何が違うのかわからん。
JavaとC++の言語仕様の些細な差をいってる?

どれも、参照という、別のところにある実体を指すものという
概念の範疇から越えていない。
同じ実体を指してることがあるのも、当たり前だと思うが。

>>435
グッドグッド

437 :デフォルトの名無しさん:03/06/23 00:10
>>435
何をやりたいのか知らないが、おそらくもっといい方法がほかにある。

438 :デフォルトの名無しさん:03/06/23 00:14
>>436
だから、参照という言葉をみんな使ってるけど、
それぞれでその言葉の指している意味が違ってては
議論になんないよ、ってこと。

439 :デフォルトの名無しさん:03/06/23 00:16
>>438
通じてるって

440 :デフォルトの名無しさん:03/06/23 00:18
>>439
分かってる人には通じる。
しかし、議論してる中にはよく分かってない人もいる。
こういう人たちには通じない。

441 :デフォルトの名無しさん:03/06/23 00:20
具体的にどの書き込みが分かってないの?

442 :デフォルトの名無しさん:03/06/23 00:21
>>435
明らかにコンパイルすら通らないね。

443 :デフォルトの名無しさん:03/06/23 00:23
明らかに 〜 すら 〜 ない。

ってなんかおかしくね?

444 :デフォルトの名無しさん:03/06/23 00:32
おかしくない。

445 :デフォルトの名無しさん:03/06/23 00:38
>444
いや、おかしい(反語)

446 :デフォルトの名無しさん:03/06/23 00:40
例えば >>430 は「Cには『参照』がない」と言ってるけど、
この「参照」ってのは何を指してんでしょね。
「他の言語での『参照』と同一の定義を持つ仕様が存在しない」
って、そんなもんは別に珍しくもない話だし、
「他の処理系では処理系が縁の下でやってる」とかも大げさで、
ポインタと「参照」にそんな大袈裟な差はない
(今は「実体の参照」に焦点を置いているので、
 ガベージコレクションの話は置いておく)。

ポインタで十分「参照」の機能を果たせるし、
それを実現するのも非常にたやすい。
これは「『参照』がない」と言えるのだろうか?
その答えは「『参照』の定義による」としか言いようがない。

447 :430:03/06/23 00:55
>>446
あーまあ、そうね。確かに書いてて「言葉の定義ちゃんとしないで議論にならねえな」と思ってた。
頭にあったのは字面としての参照でしかなかった。

>ポインタで十分「参照」の機能を果たせるし、
>それを実現するのも非常にたやすい。

もちろんその通り。でもあくまでポインタを値渡ししてるに過ぎない、
ともいえるわけで、言葉遊びにしかならんなこれじゃw

というか、それぞれの言語で「ポインタ」だとか「参照」だとかその他様々な概念が、
重なるところも大きいけど微妙にずれてるから、きちんと定義しないと議論にならないね。

Pascalにもポインタはあるけど、Cの意味でのポインタじゃないし、
さらにPascalには参照もあるけどC++の参照とは違うし、
Rubyには参照しかない、とかいってもC++のとは違うし。

この種の定義を厳密にしないと話が全然進まないのは、このスレではできないよなあw
スレ違いになってきたし、この辺で。

448 :デフォルトの名無しさん:03/06/23 01:13
ポインタなんて理解しちまえば所詮ただの変数(ポインタ変数)だからな。
ポインタを使わずに書かれた冗長なコードと、
ポインタを使ってすっきりしたコードと、
理解しやすいのがどっちかは明白だと思うが。

…といっても、こないだダブルポインタを使いたい場面があったが、
さすがに気が引けたのでほかの手段を使った。
どうしてもダブルポインタをつかうような場面でもなかったし。

449 :デフォルトの名無しさん:03/06/23 01:15
>>448
ポインタは変数とは限らないが?

450 :デフォルトの名無しさん:03/06/23 01:16
文字列をコピーするにはどうしたらいいですか?

451 :デフォルトの名無しさん:03/06/23 01:18
strcpy

452 :デフォルトの名無しさん:03/06/23 01:21
ポインタ=アドレス+型

453 :デフォルトの名無しさん:03/06/23 01:21
>>451
危うくケコーンする所ダターヨ

454 :デフォルトの名無しさん:03/06/23 01:21
>>449
うーん、じゃあ1行目を読み替えてくれ。
「アドレスなんて理解しちまえばただの値に過ぎないからな。」

…まぁ、言いたい事はわかってくれ。
わからなかったらそれでいい。自分の文才のなさを嘆くだけだから。

455 :デフォルトの名無しさん:03/06/23 01:24
ダブルポインタって一般的な用語?
double*のことじゃないよね?

456 :449:03/06/23 01:25
>>454
まあ、言いたい事は何となくわかってる。

457 :デフォルトの名無しさん:03/06/23 01:25
** のことだろうけど、一般的な用語じゃないと思われ。

458 :デフォルトの名無しさん:03/06/23 01:33
>>455
一般的な用語かどうかは知らないが、個人的に好きな表現ではないな。

459 :デフォルトの名無しさん:03/06/23 01:34
ポインタの中のポインタ

460 :デフォルトの名無しさん:03/06/23 01:36
箱の中のちっちゃい箱

461 :デフォルトの名無しさん:03/06/23 01:38
マトリョーシカ

462 :デフォルトの名無しさん:03/06/23 01:38
ポインタ型変数へのポインタ

  値:ポインタ
変数:ポインタ型変数

とを区別するとこんな感じか。

463 :デフォルトの名無しさん:03/06/23 01:41
略してポインポイン

464 :デフォルトの名無しさん:03/06/23 01:52
>>463
採用!!

465 :デフォルトの名無しさん:03/06/23 02:03
上司「おい!お前なんでここでポインポイン使うんだよ!」
部下「いやですね、それはここで受け取ったポインタの値を変えるので、
   ポインポインじゃないといけないんですよ」

466 :デフォルトの名無しさん:03/06/23 02:04
ポインタへのポインタは使いたく無いって香具師に限って
a[b[c[d]]]
のような使い方するんだよな…

467 :デフォルトの名無しさん:03/06/23 02:11
>>466
VBでよくやる。そこまで深くないが。

468 :デフォルトの名無しさん:03/06/23 02:45
>>466
へーそんなんはじめてみた。
会社で漏れ以外にCやる奴がいないせいか。

469 :  :03/06/23 04:36
#include<stdio.h>
int main(void){
char input[81];
FILE *FP1,*FP2;
if((FP1=fopen("kazu.txt","r")==NULL)
{
printf("読み込みファイルが開けません。");
return 1;
}
if((FP2=fopen("kazu2.txt","w")==NULL)
{
printf("書き出しファイルが開けません。");
return 1;
}
while(fgets(input,81,FP1)!=NULL)
{
fprintf(FP2,"%s",input);
}
return 0;
}

実行できないんですがどこか変ですかね・・

470 :デフォルトの名無しさん:03/06/23 04:39
>>469
「実行できない」とはコンパイルできないって意味か?
二番目のifの括弧がちゃんと閉じてないぞ。

471 :470:03/06/23 04:40
最初のifもだ。

472 : :03/06/23 04:50
>>470できましたーありがとうございます(´∀`)

473 :デフォルトの名無しさん:03/06/23 04:52
エラーメッセージを欲嫁。

474 :470:03/06/23 06:22
たまたま今回は出してきたソースをエディタに貼り付けて整形してみておかしいと思ったのでわかったけど。

「実行できない」だと漠然としてて何ができなかったかわからない。
おれの感覚だと「実行できない」は「実行させてみたけど例外が起きた/core dumpした」って感じだな。
少なくともコンパイルエラーが起きた、という感じがしない。

これは「感じ」の問題なんで議論しても始まらないんだが、質問を書くときは

・何をした(どこで詰まったか)
・期待していたことは何か、どう期待と違っていたか
・エラーメッセージが出ているのならばそれをコピペ(大量に出てるときは無理か…)

くらいは書いて欲しい。なんかついさっきも同じようなことを言った覚えがあるがw

これも以前書いた覚えがあるが、一般的にコンパイル時に文法エラーが出てきたときは、
コンパイラが指摘してきた行の一つ前にエラーがあることが多い(経験則)。

475 :デフォルトの名無しさん:03/06/23 12:05
>>474
次スレの >>1 にでも
ある程度書いておくといいかねぇ。

476 :デフォルトの名無しさん:03/06/23 15:07
初心者で入門書見ながらやってるんですが
携帯のプラン別料金対応表プログラムはどう作れば良いんでしょうか・・?

scanfでやってますが
scanf(%d", &timeA,&timeB);
これじゃだめ?
プラン一個だけはできても他がバグちゃうんだけど

477 :デフォルトの名無しさん:03/06/23 15:08
>>476
ここはお前のような低脳がくるとこじゃねえよ。

478 :デフォルトの名無しさん:03/06/23 15:15
お前みたいな無能もいらない。

479 :デフォルトの名無しさん:03/06/23 15:54
scanf("%d %d", &timeA,&timeB);

480 :デフォルトの名無しさん:03/06/23 16:02
>>457.458.459.460
業界標準はボインボインです。

481 :mathmania ◆uvIGneQQBs :03/06/23 16:32
#include<stdio.h>
int main(void){
char s[8];
scanf("%s",s);
return 0;}
のコードからできる実行ファイルの入力待ちで
123456789
とかを入力してはいけないといいますが、
scanfで、余分なデータを捨てる、ということはできるんですか?

482 :デフォルトの名無しさん:03/06/23 16:36
>>481
単に文字列として受けるのならstdinに対してfgetsを使えばいいんじゃないでしょうか。

483 :デフォルトの名無しさん:03/06/23 16:39
>>481
scanf("%7s",s);

484 :mathmania ◆uvIGneQQBs :03/06/23 16:41
やはり、安定した実行をするにはchar s[256];
ぐらいしかないですか?

485 :mathmania ◆uvIGneQQBs :03/06/23 16:42
うを、
新着レス取得しそこなった。
Thanks to [483]

486 :デフォルトの名無しさん:03/06/23 16:43
>>484
scanfを使わなければいいだろう?

487 :デフォルトの名無しさん:03/06/23 16:44
安定した実行を求めるのにscanf使用か・・・

488 :mathmania ◆uvIGneQQBs :03/06/23 16:44
Re:>486
それもそーだ。

489 :デフォルトの名無しさん:03/06/23 16:45
最近 scanf ネタ大杉。

490 :デフォルトの名無しさん:03/06/23 16:46
>>488
ところで、"%7s"だと"abc def"と入力した場合、abcしか読み込まれないけどいいの?

491 :mathmania ◆uvIGneQQBs :03/06/23 16:48
Re:>490
良くないかもしれない。
この場合はgetsかな?

492 :デフォルトの名無しさん:03/06/23 16:48
もともとscanf("%s",s)なんだからいいんだろ

493 :デフォルトの名無しさん:03/06/23 16:49
C FAQ を書いた人も可哀想だな

494 :デフォルトの名無しさん:03/06/23 16:50
scanf と gets は(ry

495 :490:03/06/23 16:51
>>492
scanfの%sを使うとそうなるけど。という意味でかいたの。

496 :490:03/06/23 16:51
482で書いたことが無視されているんだけど・・・

497 :デフォルトの名無しさん:03/06/23 16:53
scanf("%7[^\n]",s);

498 :mathmania ◆uvIGneQQBs :03/06/23 16:54
文字リテラル(文字定数に関する質問。
#include<stdio.h>
#include<string.h>
int main(void){
char *s={'a','b','c',0};
*s+=1;
puts(s);
return 0;}
のコードからできる実行ファイルは、正常に実行できますか?

499 :デフォルトの名無しさん:03/06/23 16:56
char *s={'a','b','c',0};

これってコンパイル通るの?sが配列でないんだけど・・・・

500 :デフォルトの名無しさん:03/06/23 16:57
>>498
その質問の意図はなんだ?

501 :デフォルトの名無しさん:03/06/23 16:57
>>498
char *s={'a','b','c',0};

char s[]={'a','b','c',0};

502 :デフォルトの名無しさん:03/06/23 16:58
>>501
そうすると今度は配列名に代入しようとしてエラーになるな(笑)

503 :502:03/06/23 16:59
おっと、間接参照していたか。

504 :mathmania ◆uvIGneQQBs :03/06/23 17:07
もうひとつ、
#include<stdio.h>
#include<string.h>
int main(void){
char *s="abc";
*s+=1;
puts(s);
return 0;}
からできるプログラムはbbcを出力できますか?

505 :デフォルトの名無しさん:03/06/23 17:09
文字列定数を(ry

506 :デフォルトの名無しさん:03/06/23 17:09
>>504
処理系によっては出来るかもしれないが、
文字列定数の変更はC言語の仕様で許されていない。

507 :デフォルトの名無しさん:03/06/23 17:10
次のネタ質は何かな? o(^-^)o

508 :mathmania ◆uvIGneQQBs :03/06/23 17:22
#include<stdio.h>
main(void){
char a[]={27,91,33,31,109,61,62,63,27,91,30,109,0};
puts(a);
return 0;}
を、DOS,UNIXで、それぞれコンパイルして、それぞれ実行すると、それぞれどうなりますか?

509 :デフォルトの名無しさん:03/06/23 17:25
「常にmemcpyではなくmemmoveを使え。」

基地外かと思った

510 :デフォルトの名無しさん:03/06/23 17:28
>>508
コントロールコードが入っているぞ

511 :mathmania ◆uvIGneQQBs :03/06/23 17:32
[508]の訂正
#include<stdio.h>
main(void){
char a[]={27,91,51,49,109,61,62,63,27,91,48,109,0};
puts(a);
return 0;}
//hexとdecがごっっちゃになってるもので。。。

512 :デフォルトの名無しさん:03/06/23 17:38
エスケープシーケンスか。MSDOSではよくやったが
コンソールしだいだろ

513 :デフォルトの名無しさん:03/06/23 17:45
ていうか、聞く前に自分でやるとかしないのかね

514 :mathmania ◆uvIGneQQBs :03/06/23 18:36
大きな整数(符合無し)を使ってプログラムを書いてみたいのですが、
C言語で、
フラグレジスタのキャリーフラグに相当するものってありますか?

515 :kk:03/06/23 18:41
ほにゃらら。

516 :デフォルトの名無しさん:03/06/23 18:49
あるわけがない

517 :mathmania ◆uvIGneQQBs :03/06/23 18:52
皆さん、どうもありがとう。
それでは、どっかの板で会いましょう。
栗上がりの処理は自分でしろと。

518 :デフォルトの名無しさん:03/06/23 19:18
符号なし整数を足し算したときにキャリーがたつかどうかの判定は
こんな感じでできたと思う。
carry = UINT_MAX - a > b;

519 :518:03/06/23 19:30
逆だ…
× carry = UINT_MAX - a > b;
○ carry = UINT_MAX - a < b;

520 :デフォルトの名無しさん:03/06/23 19:40
厨質問でスミマセソ

7bitコードをSJISコードに変換したいのですが
どうすればいいのかがまったくもってチソプソカソプソで
ございます。

ご教授のほど承りたく候。。。

521 :デフォルトの名無しさん:03/06/23 19:55
表をつかうなり好きにすれば。

522 :デフォルトの名無しさん:03/06/23 20:00
そもそも「7bitコード」ってなによ。

523 :デフォルトの名無しさん:03/06/23 20:01
>>522
JISかな。

524 :デフォルトの名無しさん:03/06/23 20:25
>>520
そこら辺にあるソフトで一発変換。

というか、そんくらい検索したら分かるのでは?

525 :デフォルトの名無しさん:03/06/23 20:56
>>520
テーブル作ってもたかだか256bytesだなw

526 :デフォルトの名無しさん:03/06/23 23:33
>>525
間違い

527 :デフォルトの名無しさん:03/06/23 23:57
>>526
ダウト! コード示せないくせにシッタカかよ

528 :デフォルトの名無しさん:03/06/24 00:10
バイナリが256バイトで済むわけがない

529 :デフォルトの名無しさん:03/06/24 00:11
そんなに大した質問じゃないんですけど、
皆さんは、hello,worldをコーディングするのに何秒かかりますか?
なんとなく測ってみたら15秒・・・。自身あったのに・・・


530 :デフォルトの名無しさん:03/06/24 00:12
188 バイトあれば十分なんじゃないの?

531 :デフォルトの名無しさん:03/06/24 00:27
cで
                         
g(x,y)=(√f(x,y)-√f(x+1,y+1))二乗 + (√f(x,y+1)-√f(x+1,y+1))二乗

の計算をするにはどうすればいいでしょうか?
さっぱりわかりません


532 :デフォルトの名無しさん:03/06/24 00:46
#include <math.h>
double g(double x, double y, double (*f)(double, double))
{
return pow(sqrt(f(x, y)) - sqrt(f(x + 1, y + 1)), 2) + pow(sqrt(f(x, y + 1)) - sqrt(f(x + 1, y + 1)), 2);
}

533 :デフォルトの名無しさん:03/06/24 00:49
mallocを使うべき場面がいまいち分かりません。
サイズが不確定な文字列を格納するときなんかに使うんですか?

534 :デフォルトの名無しさん:03/06/24 01:02
malloc を使わないで、領域を確保する場面の方が稀れ。
数バイトとか数個の配列ぐらいか

535 :デフォルトの名無しさん:03/06/24 01:08
文字列とか
線形リストとか
木とか
ハッシュとか、


536 :デフォルトの名無しさん:03/06/24 01:09
>>529
口で数えながらやってみたところ22秒

537 :533:03/06/24 01:09
>>534
ありがとうございます。
mallocを使って領域を確保するのが普通なんですか。
やはりメモリリークを避けるためなんでしょうか?
何にしろ習慣づけて損はない様なので、意識して使う様にします。


538 :531:03/06/24 01:10
>>532
error:「外部シンボル'_main'が未解決」
ってなっちゃうんですが・・・

539 :デフォルトの名無しさん:03/06/24 01:14
>>538
>>532はmainを省略して書いたのかと・・・

540 :デフォルトの名無しさん:03/06/24 01:14
>>538
オプション -c を付けてコンパイルする。

541 :デフォルトの名無しさん:03/06/24 01:18
-Gとか

542 :デフォルトの名無しさん:03/06/24 01:18
>>538
hello world とプロンプトに出力プログラムを書いてから、出直してきて下さい。

543 :531:03/06/24 01:19
mainをいれると
宣言の構文エラーってなっちゃうんですよ

544 :デフォルトの名無しさん:03/06/24 01:20
おまいらは入門以前の奴に冷たいのね。
俺もだが。


545 :デフォルトの名無しさん:03/06/24 01:26
>>543
どんな状況なのかさっぱりわからん。

546 :デフォルトの名無しさん:03/06/24 01:28
入門以前の人はとりあえず本か HP でも読めや。
ここはそういうの読んでも分からんものを聞くとこや。

547 :531:03/06/24 01:28

#include <math.h>
main()
double g(double x, double y, double (*f)(double,

double))
{
return pow(sqrt(f(x, y)) - sqrt(f(x + 1, y + 1)), 2) +

pow(sqrt(f(x, y + 1)) - sqrt(f(x + 1, y + 1)), 2);
}

こんなんです

548 :デフォルトの名無しさん:03/06/24 01:28
そんな初歩的なことも勉強する気がなく、
しかも丸投げスレがあるというのに探しもせずに、
ただただ自分の為だけにスレを汚す香具師に
親切にする必要はない。

549 :デフォルトの名無しさん:03/06/24 01:30
>>547
No!!!!!!!!!!!!


ネタなの?

550 :デフォルトの名無しさん:03/06/24 01:31
もしかしてg(x,y)の意味も分かってないんじゃね−の?

551 :531:03/06/24 01:32
はい なんのこっちゃわからんです

552 :デフォルトの名無しさん:03/06/24 01:36
>>531
君にはまだ早すぎるプログラムです。


553 :デフォルトの名無しさん:03/06/24 01:37
ネタでないとしたら、一度もCで動く(というかコンパイルできる)プログラムを書いたことないんだろうな。

554 :デフォルトの名無しさん:03/06/24 01:38
提示されている式だけじゃプログラム実行できないんだけど
それすら分かってないんだろうな。

555 :デフォルトの名無しさん:03/06/24 01:40
名無しさん5!5!!5!!!

556 :531:03/06/24 01:40
どうすりゃ実行できるんですかね…


557 :デフォルトの名無しさん:03/06/24 01:43
>>556
>>532の他にmain()とf(x,y)を用意してmainからg()を呼ぶ。

558 :デフォルトの名無しさん:03/06/24 01:44
祭だ祭りだ〜〜〜

559 :デフォルトの名無しさん:03/06/24 01:46
>>555
GO!GO!!GO!!!をモジッて5!5!!5!!!って言っているのかと思ったら、
レスの番号の事だったのね。
応援されてるのかと思った。


560 :デフォルトの名無しさん:03/06/24 01:48
>>559
両方。
俺自身寒いんだが。。。

561 :デフォルトの名無しさん:03/06/24 01:50
>>531
g()も、もちろん用意して。

562 :デフォルトの名無しさん:03/06/24 01:51
>>531
今すぐ24時間営業の本屋さんへ行って、
買えるだけのCの入門書を買って、
そこに書いてあることを完全に理解して、
それから大きな崖に突き当たること。

563 :デフォルトの名無しさん:03/06/24 01:55
Cの勉強以前の問題。
まずは解析学の初歩からじゃねーの?

564 :531:03/06/24 02:02
やっぱりよくわからないっす
画像処理のフィルタの式だったんですけど・・

565 :デフォルトの名無しさん:03/06/24 02:14
ゲーム系専門学校の方でつか?

566 :531:03/06/24 02:17
いえ ただの情報科の学生っす

567 :デフォルトの名無しさん:03/06/24 02:17
>>564
>画像処理のフィルタの式
それならビットマップを用意しないと

568 :デフォルトの名無しさん:03/06/24 02:19
俺は>>537が変なことを言っているのをながさない。


569 :531:03/06/24 02:22
なんか いつも教科書の出版社のホームページからおとしたプログラムを
先生が配った.pgm画像で実習してるんですけど
フィルタだけ変えろとレポートをだされて…さっぱりっていう状況で

570 :デフォルトの名無しさん:03/06/24 02:24
こんなとこで聞くより、友達か先生にでもキケ

571 :デフォルトの名無しさん:03/06/24 02:33
もう君にはアドバイスできないからageなくていいよ

572 :デフォルトの名無しさん:03/06/24 02:57
>>569
> ・・・・・・・・・教科書の出版社のホームページからおとしたプログラムを
> ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
> フィルタだけ変えろ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


573 :デフォルトの名無しさん:03/06/24 05:33
>>568
たしかに。

574 :デフォルトの名無しさん:03/06/24 06:01
main関数から呼び出したvoid hoge()の関数内で途中でmainに戻るにはどうしたらいいでしょうか?
returnとか使ってもいいんでしょうか?

575 :デフォルトの名無しさん:03/06/24 06:04
>>574
良い。

576 :574:03/06/24 06:05
朝っぱらからありがとうございました

577 :デフォルトの名無しさん:03/06/24 07:08
>>574
一般的にはlongjmp

578 :デフォルトの名無しさん:03/06/24 08:00
>>577
妙なこと教えるなw
まあlongjumpは覚えておいて損はないけど。

579 :デフォルトの名無しさん:03/06/24 08:17
>>577
longjmpって一般的かい?

580 :デフォルトの名無しさん:03/06/24 08:19
setjmp/longjmp はヘルプで見た事あるけど使った事無いな。
どういう時に使うんだ?

581 :デフォルトの名無しさん:03/06/24 08:31
例外処理もどき

582 :デフォルトの名無しさん:03/06/24 08:33
>>580
Cプログラマは、例外処理を行儀の良いsetjmp/longjmpのようなものだと考えることができるだろう。
プログラミング言語C++第三版より


・・・・だそうだ。行儀の悪い例外処理を記述するのに使えるらしい。

583 :デフォルトの名無しさん:03/06/24 08:48
ヌルほど。

584 :デフォルトの名無しさん:03/06/24 08:51
>>583
ガッ

585 :デフォルトの名無しさん:03/06/24 08:56
そんなつもりはなかったのに ガッ されてもた。

586 :デフォルトの名無しさん:03/06/24 11:42
>>580
関数内でBASICのGOSUB・RETURN相当の事をするときに、
配列を使ったスタック+setjump/longjump+マクロでやった事がある。


587 :デフォルトの名無しさん:03/06/24 12:35
Cでやる意味はあんまりないな

588 :デフォルトの名無しさん:03/06/24 12:57
>>584
それでガッはかわいそうだろw

589 :デフォルトの名無しさん:03/06/24 13:06
func(){...}

void func(void){...}
であると解釈しても良いのですか?


590 :デフォルトの名無しさん:03/06/24 13:08
オマエニハAAツキヲクレテヤル
  ( ・∀・)
 と    ) | | ガッ
   Y /ノ  | |
    / ) .人
  _/し' <  >_Λ∩
 (_フ彡 V`Д´)/
            / ←>>588

>>589
だめ
int func(void){...}

591 :589:03/06/24 13:13
>>590
あ、値を返すんですね、ありがとうございました。

592 :デフォルトの名無しさん:03/06/24 15:31
>>590
違う。
int func(...) {...}
だ。

593 :590:03/06/24 16:12
>>592
確かに呼び出すところより上で定義したらそうなるか・・・
いつもプロトタイプではvoidとし、定義では空にしているから・・・

>>591
というわけで>>592が正解だ。

594 :デフォルトの名無しさん:03/06/24 20:52
例えばコマンドライン引数からもらってきた文字列を
グローバル変数としてとっておくとき、その配列は
mallocにしますか?それとも適当に十分大きな
配列を用意しますか?

595 :デフォルトの名無しさん:03/06/24 20:56
>>594
グローバル変数を使わない。
使っても、アドレスをポインタ変数に代入するだけで
データのコピーは行わない。

596 :デフォルトの名無しさん:03/06/24 21:05
>595 そっかー。ありがとうございます。

それじゃ、ファイルから(.iniとか)文字列を読み込んで
それをいくつかのモジュールで使いたいときは?
グローバル変数にする?main関数のローカル変数にする?

そしてそれは適当に十分な大きさの配列にする?
mallocで確保する?



597 :デフォルトの名無しさん:03/06/24 21:22
メインルーティンからサブルーティンに引数として(ポインタを)渡す。

598 :デフォルトの名無しさん:03/06/24 21:22
>>594
argvを渡すだけで充分。argvの差すものをコピーする必要はない。

599 :597:03/06/24 21:23
領域確保は場合によってmalloc使ったり使わなかったり

600 :デフォルトの名無しさん:03/06/24 21:31
>>596
サイズが判っている場合はmain()のローカルな配列。
そうでなければmain()のローカルなポインタ。
サブルーチンにはそれを渡す。

601 :594,596:03/06/24 21:37
>598
ありがとう。言われてみればたしかにそうすね。

>600
サイズは不定です。
main()のローカルなポインタを宣言しておいて、
ファイルから読み出すサブルーチンにそのポインタを渡して、
サブルーチン側で mallocする、ということですか?

602 :デフォルトの名無しさん:03/06/24 21:51
アホか・・・

603 :594,596:03/06/24 22:50
アホですみません…

604 :デフォルトの名無しさん:03/06/24 23:10
きっとargvもmallocする必要が出てくるぞwwwwwwwwwww

605 :594,596:03/06/24 23:22
>604
は?氏ねよヴォケ

606 :デフォルトの名無しさん:03/06/24 23:23
>>605
まぁまぁ無能なんだからヘコヘコしとけ。
偽者だろうけど

607 :デフォルトの名無しさん:03/06/24 23:33
http://jbbs.shitaraba.com/computer/6765/
Cの掲示板


608 :デフォルトの名無しさん:03/06/24 23:37
scanfで
ユーザーが思わぬ数値、文字列を入れた場合エラーになるよね。
それってどうやったら解消できるんですか?

609 :デフォルトの名無しさん:03/06/24 23:38
エラーにはならん

610 :デフォルトの名無しさん:03/06/24 23:39
え、じゃぁあれはなんなんですか?

611 :ちよ:03/06/24 23:39
おねがいしま〜す♪
http://www1.free-city.net/home/kotarou/page005.html

612 :デフォルトの名無しさん:03/06/24 23:41
>>610
>ユーザーが思わぬ数値、文字列を入れた場合
scanf()は定型以外の場合は使うな

613 :デフォルトの名無しさん:03/06/24 23:42
>>610
前スレとこのスレを全部読め。
scanfはもううんざり。

614 :デフォルトの名無しさん:03/06/24 23:47
scanfの代わりにfgets
printfの代わりにfprint

615 :デフォルトの名無しさん:03/06/24 23:49
>>614
中途半端なネタはヤメレって

616 :デフォルトの名無しさん:03/06/24 23:51
ねたじゃないもん。
まじれすだよ

617 :デフォルトの名無しさん:03/06/24 23:51
ネタじゃないだろ。
stdoutとstderrを使い分けないのか?

618 :デフォルトの名無しさん:03/06/24 23:53
>>616&&617
fprint(fは?)

619 :デフォルトの名無しさん:03/06/25 00:01
#include <stdio.h>
int main(void){
int a,b,c;
printf("y=a*xの値を求めます。aの値を入力してください。\n");
scanf("%d",&a);
for(b=0;b<11;b++){
c=b*a;
printf("yが%2dの時xは%2dです。\n",b,c);
}
}


620 :デフォルトの名無しさん:03/06/25 00:05
>>619
printf("yが%2dの時xは%2dです。\n",b,c); //文意からcとbが逆

621 :デフォルトの名無しさん:03/06/25 00:59
double 型の2次元配列 u0[N0][M0], u1[N1][M1] (N0≠N1, M0≠M1) を宣言した上で、
u[0][n0][m0] = u0[n0][m0], u[1][n1][m1] = u1[n1][m1] となるような
3次元配列 u[][][] を作ることは可能でしょうか?

622 :デフォルトの名無しさん:03/06/25 01:21
無理じゃない?

623 :デフォルトの名無しさん:03/06/25 01:38
Visual studio.netのC、C++ で、画像を表示させるプログラムをオリジナルで作らなきゃいけないんですが。
作っていただけますか?

あと、参考プログラムの説明をするために、一行一行説明文を入れなきゃいけないんですよ。
で、それって、どこでお願いすればやっていただけるでしょうか?
昼までなんですけど。。。

どこでお願いしていいのかわからないのでここに書かせていただいたのですが。

624 :デフォルトの名無しさん:03/06/25 01:40
>>623
てめぇで作れ。

とりあえずくだ質スレにでもいけ。

***すれ立てるまでもない質問はここで 第39刷***
http://pc2.2ch.net/test/read.cgi/tech/1055864305/



625 :デフォルトの名無しさん:03/06/25 01:41
>>624
逝ってきます。

626 :デフォルトの名無しさん:03/06/25 01:41
>>621
どの様に使いたいかにもよるが、
こんな形で良いのなら、p[][][]として扱える
double p00[5], p01[5] ;
double p10[4], p11[4], p12[4] ;
double p20[4] ;
double *p0[] = { p00, p01 } ;
double *p1[] = { p10, p11, p12 } ;
double *p2[] = { p20 } ;
double **p[] = { p0, p1, p2 } ;

627 :そんな低レベルな話よりも:03/06/25 01:43
しかしすごいねここ
http://210.136.172.68/cgi-bin/bbs.cgi


628 :デフォルトの名無しさん:03/06/25 02:03
Name: strangeworld-honten.com
Address: 210.136.172.68

629 :デフォルトの名無しさん:03/06/25 02:06
最近、とある掲示板で、
「初心者はコンピュータの基本的な事項を勉強してから言語を学んで貰いたい」
と言う趣旨の書き込みに、
「そんな事を学んで、どうなるの?」
みたいなレスされてるのを見たんだげど、
最近のヤシって、CPUがプログラムをどう読み込んで実行するか、
と言う事すら調べないの?

630 :デフォルトの名無しさん:03/06/25 02:09
それに気を使わなくてもいいように高級言語があるんだけど

「気を使わなくてもいい」のと「知らなくてもいい」のはちがうんだけどね

ドライバーは車の仕組みがブラックボックスでも構わないけど
エンジニアが知らないのは致命的なのは車もコンピュータも同じ


631 :デフォルトの名無しさん:03/06/25 02:16
そんなものは金属線をどうエネルギーが伝播するか学ばないと
データストリームは理解できないというようなアホな話だ
計算機利用者は必要がなければそれが歯車式計算機で実行されるか
未来の化学式コンピュータで実行されるかなど知らなくてよい

632 :デフォルトの名無しさん:03/06/25 02:23
でもCやるなら、
実行モジュールがメモリにロードされて実行されるあたりのことをちょっとしらないと
動的リンクとかしてコアはいたりしたときわかんなくなるんじゃないかな

633 :デフォルトの名無しさん:03/06/25 02:25
知るべきことはあるだろ。

まぁCPUの本当の動きを思い描いている香具師なんてそうはいないだろ。
十年以上も前のCPUをモデル化して、なんとなく理解の助けにしているだけ。

仮想メモリがどう動いているかなんていうのは、多くのプログラマにとっては無用な知識。
でも変数やデータが、メモリ空間上にどういう規則でおかれるかというのは知るべきこと。

634 :デフォルトの名無しさん:03/06/25 02:31
>実行モジュールがメモリにロードされて実行されるあたり
それはOSの仕事の話

>変数やデータが、メモリ空間上にどういう規則でおかれる
それはプログラミング言語で規定されている話


>>632-633でも分かる様にハードウェアの知識など必要ないということだ

635 :デフォルトの名無しさん:03/06/25 02:33
そんなこといったら>>629だってハードなんて一言も言ってないよ。

636 :629:03/06/25 02:35
オレは概略位は知っておくべきかと思う。
やたら細かい所までは知らなくても、おおよそのイメージが出来るか、出来ないかは、
多少なりともプログラム言語の理解に差があると思う。

637 :デフォルトの名無しさん:03/06/25 02:35
メモリ空間の表現は言語だけで決まるものじゃないだろ。

638 :デフォルトの名無しさん:03/06/25 02:39
>>635
「CPUが」と言っているだろう「CPUが」と。
CPUがデータ要求して命令をフェッチして…、
はまさにCPU設計の話だ

>>637
仕様書を見てみな。その起源が既存のハードウェアに
依存しているかに関らず、細かく言語で規定しているから

639 :デフォルトの名無しさん:03/06/25 02:40
誰がハードの話なんかしてるんだよ。そんな事いったら原子の話になっちゃうだろ
アホか?

640 :デフォルトの名無しさん:03/06/25 02:41
メモリとディスクではアクセス速度に大きな違いがあるなんていうのはハードに起因する基礎知識で
プログラマが知っておくべきことじゃないか?

641 :デフォルトの名無しさん:03/06/25 02:42
非常に重い処理を作る時は結構そういう知識が役に立つ。

642 :デフォルトの名無しさん:03/06/25 02:46
>>640
ディスクもメモリだがな。
なぜ違いがあるかなど知る必要はないだろ、問題はデバイスによって
違うということだけだ。そしてその違いは必ずしも
ハードウェアだけの問題ではない。

643 :デフォルトの名無しさん:03/06/25 02:46
バグった時、パフォーマンスが気になる時、組み込みの仕事が来た時
などなど役に立つ
というか必須

644 :デフォルトの名無しさん:03/06/25 02:46
ま、この場合ポインタや配列のことを言いたいんだろうな。
メモリ空間というものを意識して理解いていけと。


645 :デフォルトの名無しさん:03/06/25 02:49
>>643
それはハードウェアにも関る場合が多いだろうが
今回の話とは関係ない。

646 :デフォルトの名無しさん:03/06/25 02:49
そんなことよりscanfの話しようぜ

647 :デフォルトの名無しさん:03/06/25 02:54
>>646
便利だよな。このスレには毛嫌いしている粘着がいるが
どんどん使おうぜ。どうせ今やちょっとした物はGUIなんだ。
心得てない奴らの想定外の使用など気にすることはないぜ

648 :デフォルトの名無しさん:03/06/25 02:59
そんなことよりバッファオーバーフローの話しようぜ

649 :デフォルトの名無しさん:03/06/25 03:01
それよりはスタックオーバーフローの方が

650 :デフォルトの名無しさん:03/06/25 03:02
そんなことよりfree()の話しようぜ

651 :デフォルトの名無しさん:03/06/25 03:04
free(NULLPO);

652 :デフォルトの名無しさん:03/06/25 03:04
くだらない保護機能があるCPUには困ったもんだぜ
周りを侵略するのは男の本懐だからな。
どんどんオーバーフローしようぜ

653 :デフォルトの名無しさん:03/06/25 03:05
そんなことよりぬるぽの話を

654 :ガッ>>651:03/06/25 03:06
 


655 :デフォルトの名無しさん:03/06/25 03:10
>>653
その話はマ板で思う存分して下さい

656 :デフォルトの名無しさん:03/06/25 05:27
GoogleでC言語関係を検索すると出てくる広告(サイト)どう思う?
http://rec.ncos.co.jp/

657 :_:03/06/25 05:51
http://homepage.mac.com/hiroyuki44/

658 :デフォルトの名無しさん:03/06/25 07:27
>>656の解説のページ

このデカ文字とブリンク、どこかでみたことがあるぞ。おいおいとつっこみたくなるような内容が多かったような・・・・

659 :デフォルトの名無しさん:03/06/25 07:55
Linux(レッドハット)のファイル構造体のメンバおしえてくれませんか?
stdio.hに書いてないもんで・・・

660 :デフォルトの名無しさん:03/06/25 08:25
>>659
FILE使ったソースコードをcppすればわかる

661 :デフォルトの名無しさん:03/06/25 08:30
>>659
FILEのメンバーを知りたい時ってどんな時だ!?
ファイルディスクリプタを得たいならfilenoを使え(もちろん標準関数ではない)。

662 :デフォルトの名無しさん:03/06/25 09:13
>>658
fjの嫌われ者の田部のページだね。

663 :621:03/06/25 10:25
>>626
ありがとうございます。
今回は行列のサイズがp0[30][75], p1[20][50] のサイズなので、
forループとnewかvectorクラス使います (C++コンパイラ使用)

664 :デフォルトの名無しさん:03/06/25 11:49
#include <stdio.h>
#include "CScreen.h"
CScreen scr;
void main(void)
{
int ten[7][7];
char name[6][7];
printf("1人目の氏名入れて(7文字以内)");
LOCATE(2,6);
rewind(stdin);
scanf("%s",name[0]);
LOCATE(20,20);
printf("%sさんの国語の点入れて     ",name[0]);
LOCATE(17,6);
scanf("%d",&ten[0][0]);
/*省略させてもらいます*/
LOCATE(20,20);
printf("2人目の氏名入れて(7文字以内)");
LOCATE(2,8);
rewind(stdin);
scanf("%s",name[1]);
/*省略させてもらいます*/
プログラム自体はできてるんですが質問があります。
char name[6][7];
の宣言はnameという変数名の箱を6個で、1箱7文字まで入るという意味で合ってるんでしょうか?
scanf("%s",name[0]);
で7文字以上打ってもname[0]には7文字しかはいらないから
printf("%sさんの国語の点入れて     ",name[0]);
では7文字までしか出力されないはずだと思うのですが
8文字以上出力されてしまいます。
なぜでしょうか?

665 :デフォルトの名無しさん:03/06/25 11:55
> の宣言はnameという変数名の箱を6個で、1箱7文字まで入るという意味で合ってるんでしょうか?
違います、7文字(6文字+NULL終端)までしか入れちゃダメ、という意味

666 :664:03/06/25 12:08
??とりあえずおちつけ、オレ。
ではchar name[6][7]; の[7]は本当はそれ以上も入ってしまうって
ことですか?
     /\⌒ヽペタン
   /  /⌒)ノ ペタン 慌てるな
  ∧_∧ \ ((    
 <; `щ´>∧_∧
 /  ⌒ノ(・ω・ ;)⊂⌒ヽ
.(O   ノ ) ̄ ̄ ̄()__   )
 )_)_) (;;;;;;;;;;;;;;;;)(_(


667 :デフォルトの名無しさん:03/06/25 12:14
入りません、入れちゃダメ
でもその管理はコンパイラはしてくれません、
プルグラマが責任持て

668 :664:03/06/25 12:18
わかりました

∧_∧
( ´・ω・) みなさん、お茶が入りましたよ・・・・。
( つ旦O
と_)_) 旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦

669 :デフォルトの名無しさん:03/06/25 12:32
scanf()の使用をやめ、
入力をfgets()で行い文字数制限はsscanf()(或いはsprintf())で行えばよい。
#勿論、fgets()でも文字数制限はできるが。

670 :デフォルトの名無しさん:03/06/25 14:57
4バイト以上の入力を制限するなら
fget(hoge, 3, stdin);
って感じですか?

671 :デフォルトの名無しさん:03/06/25 14:58
>fget(hoge, 3, stdin);
じゃなくて

fgets(hoge, 3, stdin);
でした・・・

672 :デフォルトの名無しさん:03/06/25 14:58
fgetってなに

673 :デフォルトの名無しさん:03/06/25 14:59
遅かった。ち。

674 :デフォルトの名無しさん:03/06/25 15:15
>>670
馬鹿か?

675 :670:03/06/25 15:18
>>674
どこかおかしいですか?
>>670の場合、制限というよりは無視といったほうがいいですね。

676 :デフォルトの名無しさん:03/06/25 15:27
おかしくないと思うが?

677 :デフォルトの名無しさん:03/06/25 16:26
改行とヌル文字の2バイトを余分に加えるべし。

678 :デフォルトの名無しさん:03/06/25 16:30
>>677
改行?

679 :デフォルトの名無しさん:03/06/25 16:58
fgets(hoge, n, stdin);

でn-1の長さの(\0を除く)文字列を取り入れるんじゃなかった?
だとしたら…

680 :デフォルトの名無しさん:03/06/25 16:59
合ってるのでは

681 :デフォルトの名無しさん:03/06/25 17:01
fgets()で制限すると、残りを読み捨てる為にもう一度fgets()を呼ぶ羽目になる。
それくらいなら、1行を安全に確保するようにして、残りを文字列処理すればいい。

つーところかな。

まぁ、>677は恥を晒したわけだが。

682 :デフォルトの名無しさん:03/06/25 18:22
fgets は改行も格納するわけだが。
まぁ、それよりも余分に読み込んだ方がいいわけだが。

683 :デフォルトの名無しさん:03/06/25 18:34
「わけだが」うざい

684 :デフォルトの名無しさん:03/06/25 18:36
改行格納したとしてもn-1の長さに収まるからね…

685 :デフォルトの名無しさん:03/06/25 18:41
>>682
ウソツキ

686 :デフォルトの名無しさん:03/06/25 18:42
fgetsの第二引数は最低でも1024U。これ常識。

687 :デフォルトの名無しさん:03/06/25 18:51
char *
fgets(char *str, int size, FILE *stream);

The fgets() function reads at most one less than the number of characters
specified by size from the given stream and stores them in the string
str. Reading stops when a newline character is found, at end-of-file or
error. The newline, if any, is retained. If any characters are read and
there is no error, a `0' character is appended to end the string.

688 :686:03/06/25 18:54
intだったか・・・・size_tだとばかり・・・・
そうか。0渡すと面倒なことになるんだ。
じゃあ1024

689 :デフォルトの名無しさん:03/06/25 18:56
>>682
改行を格納するのは、ファイルから読み込んだ時だよ。
標準入力の時は、改行は格納しない。

690 :デフォルトの名無しさん:03/06/25 18:58
>>689
そんなことないYO (^_^;)
改行を格納しないのはgets

691 :デフォルトの名無しさん:03/06/25 19:00
>>689
#include <stdio.h>
int main()
{
 char buf[1024];
 fgets(buf, sizeof buf, stdin);
 printf("[%s]\n", buf);
 return 0;
}



123
[123
]

となるのだが。

692 :デフォルトの名無しさん:03/06/25 19:15
>>689
標準入力もファイルも同じファイルストリーム

693 :デフォルトの名無しさん:03/06/25 20:16
fseekでファイルポジションを戻した後、
fwriteで書き込むと、そこにあったものが上書きされます。
これを上書きではなくて、挿入にするにはどうすればいいでしょうか。

694 :デフォルトの名無しさん:03/06/25 20:21
>>693
挿入したい部分より後ろをメモリに読み込む。
挿入したいデータを書き込む。
その後ろに先ほどメモリに読み込んだものを書き込む。

695 :デフォルトの名無しさん:03/06/25 20:46
ポインタ変数に、指定したアドレス値を入れることってできますか?
もしできるなら、どうかその方法をお教えください

696 :デフォルトの名無しさん:03/06/25 20:52
>>695
何を言っているんだろう・・・・
定数を入れたいのか?
int *p=(int *)0x015689EF;
0以外はこんな風にすればできると思うけど。

697 :693:03/06/25 20:56
>>694
ありがとうございます。

698 :デフォルトの名無しさん:03/06/25 21:36
giko();

int giko(void);
とか言ってるヴァカがいるスレはここですか?

699 :デフォルトの名無しさん:03/06/25 21:45
どのレスに対していってんのかわかんね

700 :デフォルトの名無しさん:03/06/25 21:46
宣言と定義の区別も付かないヴァカがいるスレはここですか?

701 :デフォルトの名無しさん:03/06/25 22:02
>>698
ちがうの?

702 :デフォルトの名無しさん:03/06/25 22:05
しかも関数プロトタイプだと
extern giko();
じゃないと警告されるような。

703 :デフォルトの名無しさん:03/06/25 23:59
C言語のみOS依存なしで、擬似スレッドを実現することって可能でしょうか?
たとえば、

void a()
{
while(1) { printf("a"); SwitchThread(); }
}
void b()
{
while(1) { printf("b"); SwitchThread(); }
}
void main()
{
MakeThread(&a);
MakeThread(&b);
while(1) SwitchThread();
}

があったとして、それぞれSwitchThread()で
実行が切り替わるようなことをしたいのですが、
SwitchThread()をどう作ればいいのやら…


704 :デフォルトの名無しさん:03/06/26 00:05
そういうのは、setjmp,longjmpで実装するのが相場。

705 :デフォルトの名無しさん:03/06/26 00:14
たしかRubyはそうだったような

706 :デフォルトの名無しさん:03/06/26 01:07
>>704-705
ありがとうございます。
setjmpの勉強してきます。


707 :デフォルトの名無しさん:03/06/26 10:25
FILE
マクロでもないのに全て大文字にした理由が分からない

708 :デフォルトの名無しさん:03/06/26 11:35
構造体が
struct list { char data ; struct list *nextptr ; } ;
と宣言されていて
struct list *p = NULL ;
とした状態だと
p->nextptr
これもNULLポインタになるんでしょうか?

709 :デフォルトの名無しさん:03/06/26 11:38
>>708
pはNULL
それを->を使って参照してはいけないYO!

710 :デフォルトの名無しさん:03/06/26 14:36
>>708
やってみてよ。
p->nextptr ←オブジェクトもないのにどこをさしてんの?ってこと。
実行すると見つけることが出来ずエラーを起こす。

711 :デフォルトの名無しさん:03/06/26 14:53
  ∧_∧
 ( ´∀`)<ぬるぽ

712 :デフォルトの名無しさん:03/06/26 15:40
  ∧_∧
 ( ´∀`)< ガッ

713 :デフォルトの名無しさん:03/06/26 16:45
インラインアセンブラの話なんですが.
Cのある関数からインラインアセンブラのラベルにジャンプするにはどうすればいいのでしょうか?
以下のような場合です.
asm("
MYLABEL:
movl ...(ここでの処理)
");

int main(){
...
//ここからジャンプしたい
}

アセンブラはgasです.
ちなみにmain内に以下のように記述してもダメでした.
asm(
"movl %0 %%eax\n"
"jmp %%eax\n"
:: "g"((void *)MYLABEL)
: "ax"
);
MYLABELが未定義である,というエラーが出ます.
どうやら同じasm("");内のラベルしか参照できないようです.
どなたかご教授お願いします.

714 :デフォルトの名無しさん:03/06/26 16:48
>>713
>>1 GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo!

715 :_:03/06/26 16:51
http://homepage.mac.com/hiroyuki44/

716 :デフォルトの名無しさん:03/06/26 16:52
>>713
ソースの構造がよく分からないがBcc32では下は通る

#pragma inline
int main(){
asm{
xor ax,ax;
label1:xor bx,bx;
}
goto label1;
return 0;
}

717 :デフォルトの名無しさん:03/06/26 17:10
>>716
ありがとうございます.
通るのはラベルが同じmain()内にあるからではないでしょうか.
とりあえずやりたいことは,
ある関数から外部にある(関数内ではない)インラインアセンブラのコードにジャンプする
ことです.

718 :デフォルトの名無しさん:03/06/26 17:12
どうにも必要な構造なのか、関数化する事はできんのか

719 :デフォルトの名無しさん:03/06/26 17:17
>>717
外部にあるインラインアセンブラという意味が分からない
インラインアセンブラなのだから何かの関数に
埋め込まれているのではないのか?

720 :sage:03/06/26 17:19
>>718
スタックフレームを変化させずに呼び出したいのです.

721 :デフォルトの名無しさん:03/06/26 17:23
sage間違えました・・

>>719
inlineというのはCの関数内に記述するからそう呼ばれるのではないのですか?
それともインラインアセンブラは必ずどこかの関数内に記述しなければならないのでしょうか?

722 :デフォルトの名無しさん:03/06/26 17:27
>>719
それはアセンブラに展開してから埋め込みでもしないと無理じゃないか?
別の位置に記述したいというだけならばdefineマクロが使えるか知らん

>>721
「Cの関数内に記述」と「どこかの関数内に記述」は同じかと。
ファイル内ということならそもそもコード以外のところは無理だろう

723 :デフォルトの名無しさん:03/06/26 17:32
スレ違いな質問に対しても親切ですね。

724 :デフォルトの名無しさん:03/06/26 18:06
ビット処理って、具体的にどんな用途があるんですか?


725 :デフォルトの名無しさん:03/06/26 18:06
>>713
素直に
__asm__("jmpl MYLABEL");
で通らないかい?


726 :デフォルトの名無しさん:03/06/26 18:09
画面中央に■を表示して、
Yを押したら上に、Gを押したら左に、Hを押したら右に、
Bを押したら下に1マス分移動するプログラムを作りたいんですが、
アルゴリズムはどうしたらいいでしょうか?
思いつかないのでヒントお願します。


727 :デフォルトの名無しさん:03/06/26 18:10
>>726
アルゴリズムなら726が答えだと思うけど。

728 :デフォルトの名無しさん:03/06/26 18:13
いや、もっと詳しく考えてみたいんです。
一度消してから空白を入れたりバックスペース、改行などを
駆使したらできますか?

729 :デフォルトの名無しさん:03/06/26 18:16
>>724
集合として使える。

730 :デフォルトの名無しさん:03/06/26 18:20
>>728
プラットフォームによるだろう

731 :デフォルトの名無しさん:03/06/26 18:27
>>729
ぐ、具体例をなにか挙げてくれたら嬉しいです。

732 :デフォルトの名無しさん:03/06/26 18:33
>>731
そのまえによ、適したスレにいけや。

733 :デフォルトの名無しさん:03/06/26 19:09
>>731
たとえばコンフィグ画面などで、項目のON/OFFをチェックする際に
項目の数だけフラグ変数を用意するよりも、変数を1つだけ用意して
各ビットのON/OFFで判定できたら、嬉しくないですか?俺は嬉しい。
全てONなら ~0、全てOFFなら 0 を代入するだけで済んでしまう所も
嬉しい。

734 :デフォルトの名無しさん:03/06/26 19:21
>>733
つまんねんぇことで嬉しがれるんだな。

735 :724:03/06/26 19:27
>>733
すいません。ありがとうございます。

736 :デフォルトの名無しさん:03/06/26 19:28
大人には嬉しいという感情がないんだよね。

737 :デフォルトの名無しさん:03/06/26 20:23
#include <stdio.h>

void main(){

int a,i;

a = 500000;

for( i=1 ; i=24 ; i++ ){
a = a*1.1;
}

}


コンパイルすると
おそらく不正な代入、'i'に代入した値は使われていない とエラーが出ます
どこに問題があるのでしょうか?
時間経つとやる気が萎えるので早めにレスくれたらありがたいっす

738 :デフォルトの名無しさん:03/06/26 20:24
i=24

739 :デフォルトの名無しさん:03/06/26 20:24
>>737
for( i=1 ; i=24 ←ここ ; i++ ){

740 :737:03/06/26 20:30
あぁ・・そっか・・・おれってほんとばかだな・・・
そこ実行する条件でしたね・・・よく終了する条件と勘違いしてしまいます
鬱堕詩嚢

レスサンクスでした

741 :デフォルトの名無しさん:03/06/26 20:33
>>740
なんにも分かっていない
=は代入

742 :740:03/06/26 20:39
>>741 それは知ってますよ

743 :デフォルトの名無しさん:03/06/26 20:41
分かっていたらなんで>>740のような発言ができるんだ・・・
i=24なんてやったら無限ループだ

744 :デフォルトの名無しさん:03/06/26 20:44
== が比較だ

745 :740:03/06/26 20:50
いまいちわからんけどおれがアフォなんか・・・
出直してきます

746 :デフォルトの名無しさん:03/06/26 21:01
C言語でビット処理は具体的にどのような用途があるのですか?

747 :デフォルトの名無しさん:03/06/26 21:04
>>746
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/open.2.html

748 :デフォルトの名無しさん:03/06/26 21:17
>>737
Cのint型は2バイトじゃなかったけ?確か6万5千・・・しか入らないよ!
C++のint型はCPUのビット数になる
javaのint型は4バイトです。

749 :デフォルトの名無しさん:03/06/26 21:18
>>726
簡単だよ

750 :デフォルトの名無しさん:03/06/26 21:18
>>748
初耳です

751 :デフォルトの名無しさん:03/06/26 21:19
>>748
釣りか?
それとも、釣りか?

752 :デフォルトの名無しさん:03/06/26 21:24
>>746
画像データのRGB 2の8乗255階乗の下位8ビットに文字情報を埋め込んだり、
通信データの各OSI参照層のビット操作など色々・・・


753 :デフォルトの名無しさん:03/06/26 21:28
>>748


754 :デフォルトの名無しさん:03/06/26 21:50
>>747&748&752
激しくdクス

755 :748:03/06/26 21:58
>>754
Cのint型は2または4バイトであると定義されてる。お前の環境では4バイト
かも知れないが、顧客では古いマシンを使ってるところがあるので、2バイト
で使うんだよ!
常識だろ!!!

756 :デフォルトの名無しさん:03/06/26 21:59
なるほど

757 :デフォルトの名無しさん:03/06/26 22:00
>>754
747,752と748はレスした相手が違うんだが

758 :デフォルトの名無しさん:03/06/26 22:01
>>755
どこで定義されているんだよ(;´Д`)

759 :デフォルトの名無しさん:03/06/26 22:02
>>758
釣られんなよ、だっせー

760 :デフォルトの名無しさん:03/06/26 22:05
>>755
お前は世界観がとてつもなく狭い

761 :667:03/06/26 22:06
>>753
エネル!

762 :デフォルトの名無しさん:03/06/26 22:08
ANSI Cに決まってんだろ!
関数辞典の一番初めでも見てみろ!

763 :デフォルトの名無しさん:03/06/26 22:08
>>760
貴様、神に向かって世界観が狭いとは無礼にもほどがあるぞ

764 :デフォルトの名無しさん:03/06/26 22:15
intは4バイトと決めうちしてよい。


765 :デフォルトの名無しさん:03/06/26 22:18
intは割り込みだと思っておいたほうがよい

766 :デフォルトの名無しさん:03/06/26 22:27
米国の標準化団体の規格票が手元にないくせにANSI, ANSIとしきりに喚くドアフォは痛杉

767 :デフォルトの名無しさん:03/06/26 22:45
つーか、原文読めない奴に限って(以下略)。

768 :デフォルトの名無しさん:03/06/26 23:01
正直にJISと言えないクソばかり

769 :デフォルトの名無しさん:03/06/26 23:08
画面中央に■を表示して、
Yを押したら上に、Gを押したら左に、Hを押したら右に、
Bを押したら下に1マス分移動するプログラムを作ってください。
できたら漏れの次に天才。
明日の夜に回答を出します。

770 :デフォルトの名無しさん:03/06/26 23:09
int のサイズは実行環境の構造に適した自然な大きさである、と定義されている。
具体的なサイズまでは規定されていない。

771 :769:03/06/26 23:09
この課題はどこかにあったけど、漏れには分かった。
ふん、俺しか分からないだろう

772 :デフォルトの名無しさん:03/06/26 23:21
main()
{
int a[2];
int *p, *tmp;

p = &a[0];
tmp = p;

*p = 10;
p++;
*p = 20;

p = tmp;

printf("%d, %d\n", *p, *(p++));

}

これを実行すると、10, 20 とでると思ったのに、20,10とでちまいまつ。
なんででしょうか?


773 :デフォルトの名無しさん:03/06/26 23:24
関数の引数がどの順番で(ryってやつか?

774 :デフォルトの名無しさん:03/06/26 23:30
仮引数の評価順は不定だからね。
それに後置インクリメントじゃますます意味がない。
printf("%d, %d\n", *p, *(p+1));

775 :デフォルトの名無しさん:03/06/26 23:32
>>774
仮じゃなくて実(;´Д`)

776 :デフォルトの名無しさん:03/06/26 23:32
漏れの環境では10,10になった

777 :デフォルトの名無しさん:03/06/26 23:33
printf("%d, %d\n", p[0], p[1]);


778 :デフォルトの名無しさん:03/06/26 23:34
>>775
すまそ逆に言ってしもた。

779 :デフォルトの名無しさん:03/06/27 00:06
Cのint型は2バイトじゃなかったけ?確か6万5千・・・しか入らないよ!
C++のint型はCPUのビット数になる
javaのint型は4バイトです。


780 :デフォルトの名無しさん:03/06/27 00:09
Cは何系ですか?

781 :デフォルトの名無しさん:03/06/27 00:10
>779
2カイメダヨ( ´д)ヒソ(´д`)ヒソ(д` )ヒソ

782 :デフォルトの名無しさん:03/06/27 00:12
intは最低でも64ビット

783 :デフォルトの名無しさん:03/06/27 00:19
int のサイズは実行環境の構造に適した自然な大きさである、と定義されている。
具体的なサイズまでは規定されていない。

784 :デフォルトの名無しさん:03/06/27 00:39
Tintin のサイズは実行環境の構造に適した自然な大きさである、と定義されている。
具体的なサイズまでは規定されていない。

785 :デフォルトの名無しさん:03/06/27 00:40
渋谷系

786 :デフォルトの名無しさん:03/06/27 01:13
すくなくともshortとintは16ビット

From K&R

787 :デフォルトの名無しさん:03/06/27 01:23
いつの時代の話やら。
おっと、K&Rの時代か。

788 :デフォルトの名無しさん:03/06/27 01:24
時代は関係ないだろ
あほ?

789 :デフォルトの名無しさん:03/06/27 01:40
もまえら何回ループしてるんだよ

790 :デフォルトの名無しさん:03/06/27 02:12
>>789

while( 1 )
{
  /* 処理 */
}

とかなってたりして(w

791 :デフォルトの名無しさん:03/06/27 03:11
char *a;
int b;
a = malloc(1);
b = strlen(a);
とした時にbが5となるのはなぜでしょうか?
絶対にaの長さ+4になるのですが意味が分かりません
どなたか分かる方いらっしゃいませんでしょうか?

792 :デフォルトの名無しさん:03/06/27 03:21
>>791
aに無いも代入してないからたまたま6バイト目に'\0'があったんだろ


793 :デフォルトの名無しさん:03/06/27 03:21
>>791
絶対になるとは限りませんよ。
まずstrlenが何をする関数か知ってますか?
与えられたポインタから'\0'が出てくるまでのバイト数を返す関数です。
そして、mallocで確保した領域には何が書かれているかわかりません。
あなたが5というのが出てきたというのはaが指す先から6文字目に'\0'があったのでしょう。
無論mallocで確保した領域を越えた不正アクセスになってます。

794 :デフォルトの名無しさん:03/06/27 03:21
単純にバグ

795 :デフォルトの名無しさん:03/06/27 03:55
プログラマじゃないが、訳わからん納期持って来たやつ。
(((( ;゚Д゚))) ガクガクブルブル

796 :デフォルトの名無しさん:03/06/27 03:56
誤爆スマ・・ソ

797 :デフォルトの名無しさん:03/06/27 09:17
>>791
callocを使えば長さは0になるよ

798 :デフォルトの名無しさん:03/06/27 12:28
 _, ._
(・∀・) ファイルが開けないんです

799 :デフォルトの名無しさん:03/06/27 12:34
>>798
で?

800 :デフォルトの名無しさん:03/06/27 12:47
 _, ._
(・∀・)チャックが開かないんです

801 :デフォルトの名無しさん:03/06/27 15:16
一通りK&Rを読み終えたら、なにを作ったら勉強になりますか?
どっかで、自分でコンパイラを組めば勉強になると聞きました。

802 :デフォルトの名無しさん:03/06/27 15:30
>>801=神?

803 :デフォルトの名無しさん:03/06/27 15:30
一通りK&Rを読み終わった程度の人に
コンパイラを組めば勉強になると言った人もアレだが、
それを信用する人もアレだぞ。

何か自分の作りたいものを作れば良い。
何かのツールでもいいし、ゲームでもいいし。
そうやっていろいろやってれば、自然と勉強になる。

804 :デフォルトの名無しさん:03/06/27 15:32
>>801
ソフトウェア作法

805 :デフォルトの名無しさん:03/06/27 15:52
int x[3][2] = {{1,2},{3,4},{5,6},};
const int (*xp)[2] = x; // 警告
const int (*x_p)[3][2] = &x; // 警告
// typedef int int_pair_by_int_array[2];
int_pair_by_int_array a[3] = {{1,2},{3,4},{5,6},};
const int_pair_by_int_array *ap = a; // 警告
const int_pair_by_int_array (*a_p)[3] = &a; // 警告
// typedef struct { int a, b; } int_pair_by_struct;
int_pair_by_struct b[3] = {{1,2},{3,4},{5,6},};
const int_pair_by_struct *bp = b; // OK ←どうしてこいつだけOK?(MinGW環境でつ)
const int_pair_by_struct (*b_p)[3] = &b; // 警告


806 :デフォルトの名無しさん:03/06/27 15:57
_bool, BOOL, Bool どれが正しいの?

807 :デフォルトの名無しさん:03/06/27 16:02
>>803
そか?
コンパイラやインタプリタはすごい勉強になるよ。

808 :デフォルトの名無しさん:03/06/27 17:12
>>807
物事には段階というものが...。

809 :デフォルトの名無しさん:03/06/27 17:20
>>805
> int x[3][2] = {{1,2},{3,4},{5,6},};
> const int (*xp)[2] = x; // 警告
C ではこういう時にはキャストが必要になる。
C++ だといらないんだけどね。

810 :デフォルトの名無しさん:03/06/27 17:39
>>808
べつに市販品なみの物を作るってわけじゃないし、
小さいものなら数百行程度でできるから、ちょうどいい教材だと
おもうけど。


811 :デフォルトの名無しさん:03/06/27 17:52
Basicインタプリタなんて、32kbもあれば動いてたわけだしな

812 :805:03/06/27 17:59
>>809
Cの仕様でつか。。ありがd

813 :デフォルトの名無しさん:03/06/27 18:19
>>809
そんな書き方する人いるの?
見にくいよ!

814 :デフォルトの名無しさん:03/06/27 18:20
>>805
int x[3][2] = {{1,2},{3,4},{5,6},};
const int (*xp)[2] = x;

なんでこれで警告がでるんだろう・・・・
VC++6.0ではxpを使いさえすれば警告はでないよ(/W4つきで)

815 :814:03/06/27 18:22
xを操作すればxpが指す先のものが変わる場合があるからか?

816 :ひよこ名無しさん ◆YFbiU3aPps :03/06/27 18:35
質問:

注釈文にすることを「コメントアウト(comment out)」って言いますよね。
じゃあ、逆にコメントから外すことは何て言うんですか?

817 :デフォルトの名無しさん:03/06/27 18:37
>>816
復活

818 :デフォルトの名無しさん:03/06/27 18:52
ベホイミ

819 :デフォルトの名無しさん:03/06/27 18:58
警告の内容は?

820 :r:03/06/27 19:20
"コメントアウトしてたの元に戻す"

821 :デフォルトの名無しさん:03/06/27 19:26
コメントイン

822 :デフォルトの名無しさん:03/06/27 19:29
http://www.edu.tuis.ac.jp/~susaki/c/
演習問題あるよん

823 :ヽ(´ー`)ノ:03/06/27 19:41
コメントを外す。

てか C に関k(略

824 :デフォルトの名無しさん:03/06/27 19:56
>>822
> printf("差 = %lf\n", a-b);

なんだよこれ(´Д`;)
printfに%lfなんてねーよ(´Д`;)

825 :824:03/06/27 19:58
%lfはないというのは間違いかも。
doubleに%lfは不適切

826 :824:03/06/27 20:00
やっぱり%lfはないな。long doubleは%Lf

827 :デフォルトの名無しさん:03/06/27 20:06
>>825
規格には%lfというのはないだろう。

printfのプロトタイプはint printf(const char *, ...);だから、
floatは格上げされてprintfにdoubleが渡る。

もしもlong doubleなんてものがある処理系だったら、
%lfとかいうものがあるかもしらんね。

828 :デフォルトの名無しさん:03/06/27 20:08
>>827
long doubleはANSI CにあるYO!
で、それは%Lf

829 :デフォルトの名無しさん:03/06/27 20:11
>>816 (コメントアウトの逆)
uncommentかもしんない
ちなみに、"opposite of comment out"で探してみた

830 :デフォルトの名無しさん:03/06/27 20:48
return 0;
をちゃんと書いたほうがいいといわれ、
書いてるんですが、いつも未定義のシノルと出ます。
Why?


831 :830@バカ:03/06/27 20:48
シノル→シンボル

832 :デフォルトの名無しさん:03/06/27 20:51
>>830
未定義のシンボルって多分リンク時のエラー。
return 0;は関係ないと思う。

833 :デフォルトの名無しさん:03/06/27 21:12
>>806
C99 のことなら、
× _bool
× BOOL
× Bool
◯ _Bool

typedef なら全部可。

834 :名無し@沢村:03/06/27 21:27
>>1
「C言語ならおれに聞け」って、C言語についてわからないことがあって質問するとう行為がおれには理解できんね。
例えば量子の動きがわからないとかDNAの構造がわからないとか言うんだったらわかるよ。
それらは自然がつくったもので、これから人間が解明していくものだからね。
しかしC言語は人間がつくったもので、それは公知のものだから、それが100%理解できんということは、おかしいだろうが!?えっ!?おまいらよ!?

835 :デフォルトの名無しさん:03/06/27 21:31
> 量子の動き
ワロタ

836 :デフォルトの名無しさん:03/06/27 21:48
http://www62.tok2.com/home/FTR223/akusesu.html

837 :デフォルトの名無しさん:03/06/27 22:09
>>834
あたまわるいなー

838 :デフォルトの名無しさん:03/06/27 22:41
>>837
「C言語」を「数学」に置き換えて読んでみたらどれだけナンセンスかわかるわなw
数学は純粋に人間の頭だけの人工的な世界なのに、未解決の難問がいくらでもある。
別に連続体仮説とかそういうの持ち出さなくても数学が理解できないとか苦手という人は山ほどいる。

あ、別におきかえんでもナンセンスさはわかるか。
おれは冗談だと思って読んだけどw

839 :デフォルトの名無しさん:03/06/27 22:45
>>830
retrun 0; とか書いてるに1票。

840 :デフォルトの名無しさん:03/06/27 22:47
>>839
それだとsyntax errorだろう。未定義のシンボルになるには、
retrun(0);
などと書いてるんじゃないかな。

841 :デフォルトの名無しさん:03/06/27 23:03
>>840
それだな。
C++ならエラーになるんだろう(宣言無しの呼び出しで)が、Cだと宣言は必須じゃないしな・・・

842 :デフォルトの名無しさん:03/06/27 23:10
出戻で格好つけるのはオジン臭い

843 :デフォルトの名無しさん:03/06/27 23:13
今どきオジンなんていわんよ

844 :デフォルトの名無しさん:03/06/27 23:19
>>838
数学は自然科学ですよ

845 :デフォルトの名無しさん:03/06/27 23:20
あんな不自然なものはないと思うけどな・・・

846 :デフォルトの名無しさん:03/06/27 23:22
>>844
科学じゃなくて、それを記述するための道具だろ?

847 :デフォルトの名無しさん:03/06/27 23:27
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055157603&res=3

このソースからいらないところを切り取って、
「縦横にキー入力で移動するプログラムを作れ」といわれたのですが、
よく分かりません。簡単に説明してもらえないでしょうか。
このソースの動きについてもお願します。

848 :デフォルトの名無しさん:03/06/27 23:28
>>847
char panel[Y][X*MOJI]={のYとX*MOJI

849 :デフォルトの名無しさん:03/06/27 23:31
私は数学は発端となった代数学や幾何学以来
つねに自然科学の最も抽象化された分野であると思う
その成果が余りにも生活感覚から離れているために
それを忘れがちなだけなのではないか?

850 :デフォルトの名無しさん:03/06/27 23:32
いい加減、スレ違い板違いな半端知識披露ヤメイ

851 :デフォルトの名無しさん:03/06/27 23:33
>>847
Tabなら移動って書いてあるから、その代わりに複数のキーを割り当てて縦横に動けるようにすればいいんじゃないの。


852 :デフォルトの名無しさん:03/06/27 23:34
実行すると表示される
A[ ] B[ ] C[ ]
D[ ] E[ ] F[ ]
も削除するにはどのようにしたら良いでしょうか


853 :852:03/06/27 23:36
全体的なプログラムがあまりよく分からないので、
カーソルが縦横に動く原理だけでも今理解したいのです。

854 :848@あほ:03/06/27 23:38
X*MOJIは必要だろ・・・
初歩の初歩だ。

855 :デフォルトの名無しさん:03/06/27 23:43
>>853
本当はスレ違いだけど・・・まあいいか。
http://www.gaia.h.kyoto-u.ac.jp/users/izui/technotes/escape.html

856 :852:03/06/27 23:48
>>855
すみませんでした。
どうもありがとうございます。

857 :デフォルトの名無しさん:03/06/27 23:54
move()の中でx,yの値をいじっている。
これをベースにup()、down()、right()、left()
という関数をつくればいい。


858 :デフォルトの名無しさん:03/06/28 00:05
>>834
量子もDNAも数学も人間が勝手に作った概念だよ
おまえさん、自然と人工の境がまるで解ってないな

859 :デフォルトの名無しさん:03/06/28 00:07
つーか、沢村なんかの相手すんなよ

860 :858:03/06/28 00:08
>>859
だな

861 :デフォルトの名無しさん:03/06/28 00:27
上のリンク逝ってみたが、
何がなんだか俺には分からん。
ESC[pl;pcHってどうやって記述すんだYO!
少なくとも>>852には理解できないだろう。
どうすんだこのやろ

862 :デフォルトの名無しさん:03/06/28 00:30
>>861
printf("\033[1;1H");

863 :デフォルトの名無しさん:03/06/28 00:34
\033の意味は?
覚えないといかんのか?

864 :デフォルトの名無しさん:03/06/28 00:35
>>863
ASCIIでESCは27 それを8進数にすると33
だから\033

865 :デフォルトの名無しさん:03/06/28 00:36
Cの標準ライブラリに付属の
sin(),cos(),tan()
と同じ関数を1から作りたいのですが
何処かに、詳しいコメント付きソースは無いですか?
知ってる方は教えて下さい

866 :デフォルトの名無しさん:03/06/28 00:46
テーブル作って終了

867 :853:03/06/28 00:47
#include <stdio.h>
int main(void){
char a;
int b,c;
b=1,c=1;
a=getchar();
if('a'=='y'){
c++;
printf("\033[b;cH");
}
}
わけわかんなくなってしまいました。
多分、180度逆の方向に・・・。
思いっきり叩いてください。

868 :865:03/06/28 00:48
>>866
マジレスを希望してます

869 :デフォルトの名無しさん:03/06/28 00:48
>>865
glibcなり、FreeBSDのソース見れ

870 :デフォルトの名無しさん:03/06/28 00:50
>>867
もしかしてbやcが展開されると思った?
そういうときはprintf("\033[%d;%dH",b,c);とする。

871 :デフォルトの名無しさん:03/06/28 00:52
エスケープシーケンスに触れた事ないヤシも居るのか…。
時代の差かなぁ〜…。

872 :デフォルトの名無しさん:03/06/28 00:56
>>869
コメントって付いてます?

873 :853:03/06/28 00:56
>>870
そうだったんですか。
気を付けます。
でも、まだ間違いがてんこもりの予感

874 :デフォルトの名無しさん:03/06/28 00:58
>>872
EnglishなCommentがたーくさん

875 :デフォルトの名無しさん:03/06/28 01:04
>>874
実際のソースが見つからないんですけど、
どのソースのアーカイブに含まれてるんでしょうか?

876 :保守:03/06/28 01:07
 

877 :デフォルトの名無しさん:03/06/28 01:07
>>875
sin.cをfindして出てこない?
VC++にもその名前ではないんだよね・・・

878 :867:03/06/28 01:13
どなたか、>>867の間違いを教えていただけないでしょうか?
それを参考にしたいのですが。
自分が至らないばかりに・・・。
すみません。叩きまくってください。

879 :877:03/06/28 01:16
ないね・・・
ファイル名がわからん。ないはずないと思うんだけど。

>>878
> if('a'=='y'){
>>870

880 :865:03/06/28 01:16
>>877
cygwinのソースから探してるんですけど
それぞれの関数の本体らしきソースは出て来ません
と言う訳で、どのソースにsin()等の本体があるか知ってる方は教えて下さい

881 :877:03/06/28 01:17
int a
中略
if(a=='y'){

882 :デフォルトの名無しさん:03/06/28 01:17
エスケープシーケンス懐かすぅぃ。

>>865
ftp://ftp.matsusaka-u.ac.jp/pub/algorithms/src/trig.c

883 :877:03/06/28 01:17
セミコロン忘れた

>>880
ちなみに俺は869じゃないから。

884 :デフォルトの名無しさん:03/06/28 01:20
>>878
とりあえず、エスケープシーケンスでググッてみ。

885 :865:03/06/28 01:24
cygwinの違うアーカイブで見つかりました
じっくり、ソースを読んでみます

886 :867:03/06/28 01:25
#include <stdio.h>
int main(void){
char a;
int b,c;
b=1,c=1;
a=getchar();
if(a=='y'){
c++;
printf("\033[%d;%dH",b,c);
}
}
どうもです。あれからちょっと変えてみたんですが、全く
実行されません。ヽ(`Д´)ノ

887 :867:03/06/28 01:28
自分はセンスないなぁ。
こんなにアドバイスもらってるのに・・・鬱。
がんがろ

888 :デフォルトの名無しさん:03/06/28 01:30
>>886
ちゃんとエスケープシーケンスをサポートするコンソールで実行しているか?

889 :デフォルトの名無しさん:03/06/28 01:33
>886
実行すると即終了してるということ?
ループ回さないと。

でないならどこでどう動かないか明記して。
ttp://bbs.gamdev.org/test/read.cgi/gamedev/1055402150/18


890 :デフォルトの名無しさん:03/06/28 01:41
ファイル入出力で
ioctl関数を使用してカーネルバッファリングの
バッファサイズを強制的に0にして
ファイル入出力の時間を計測せよ.

カーネルバッファリングのバッファサイズを0にするために,
ioctl関数をどのように使用すればいいですか?

891 :デフォルトの名無しさん:03/06/28 01:43
>>890
とりあえず所定の環境のスレで聞くことじゃな。

892 :デフォルトの名無しさん:03/06/28 02:05
>>886
>>888か、結果が目に見えていないだけのような・・・


893 :デフォルトの名無しさん:03/06/28 02:07
>>891
ここがいいとおもったんですが,
どの板ですか?

894 :デフォルトの名無しさん:03/06/28 02:08
>>893
板はここでいいが、スレは適切でない。
もしUNIXならUNIXプログラミングスレへ。かなり雰囲気悪いけど。

895 :デフォルトの名無しさん:03/06/28 02:10
>>893
ラ板

896 :デフォルトの名無しさん:03/06/28 02:14
>>886
b と c をもうちっと大きな値にして、
その後に何か表示してみるといいかと。

897 :デフォルトの名無しさん:03/06/28 02:43
int a = 0, b = 0;
は良くても
int a = b = 0;
は良くないと聞いたのですが、
どこが問題なのでしょうか?

898 :デフォルトの名無しさん:03/06/28 02:46
>>897
bが未定義

初期化の=と代入の=は違うよ。

899 :デフォルトの名無しさん:03/06/28 02:49
int b;
int a=b=0;

これならOK

900 :897:03/06/28 02:52
なるほど。
サンクスです。

901 :デフォルトの名無しさん:03/06/28 02:54
int a, b;
a = b = 0;

普通こうする

902 :デフォルトの名無しさん:03/06/28 03:01
>>901
そういえば最近、そういう書き方してないな。
a = 0;
b = 0;
こうやって、必ず分けて代入してる。


903 :デフォルトの名無しさん:03/06/28 03:14
int a;
memset(&a,0,sizeof(int));

904 :デフォルトの名無しさん:03/06/28 03:18
int a;
a-=a;

905 :デフォルトの名無しさん:03/06/28 03:20
int a;
a ^= a;


906 :デフォルトの名無しさん:03/06/28 03:26
int a;
a %= a;

907 :デフォルトの名無しさん:03/06/28 03:32
int a;
a&=0;

908 :デフォルトの名無しさん:03/06/28 03:35
int a;
a=strlen("");

909 :デフォルトの名無しさん:03/06/28 03:39
int a;
a = atoi("0");

910 :デフォルトの名無しさん:03/06/28 03:45
int a;
a="910get"[6];

911 :デフォルトの名無しさん:03/06/28 04:11
int a;
a = !1;


912 :デフォルトの名無しさん:03/06/28 08:39
>>902
とか言いながらfor(a = 0, b = 0;なんちゃってな

913 :デフォルトの名無しさん:03/06/28 09:03
int a;
a = &a - &a;

914 :デフォルトの名無しさん:03/06/28 09:05
int a;
a='-'-'-';

915 :デフォルトの名無しさん:03/06/28 09:06
int a;
a = 3["915"];

916 :デフォルトの名無しさん:03/06/28 09:10
int a;
a=a>a;

917 :デフォルトの名無しさん:03/06/28 09:14
int a;
a=stderr-stdin>>stdout-stdin>>stderr-stdout;

918 :デフォルトの名無しさん:03/06/28 09:16
int a;
a=(int)fopen("*.*","w");

919 :デフォルトの名無しさん:03/06/28 09:21
int a 0;

920 :デフォルトの名無しさん:03/06/28 09:27
int a;
a=~((unsigned)-1>>1)-INT_MIN;


921 :デフォルトの名無しさん:03/06/28 09:45
int a;
a=printf("");

922 :デフォルトの名無しさん:03/06/28 10:06
>>865
マクローリンの定理でも使っとけ


923 :デフォルトの名無しさん:03/06/28 11:29
>>918
おいおい、それでファイルが作れちゃうOSもあるぞ。

924 :デフォルトの名無しさん:03/06/28 12:46
>>919
それ、コンパイル通る?

925 :デフォルトの名無しさん:03/06/28 14:55
エスケープシーケンスに対応したコンパイラってどんなのが
ありますか?教えて下さい。
↑のコードを実行してみたいので

926 :925:03/06/28 14:57
しまった。さげてしまいました

927 :デフォルトの名無しさん:03/06/28 15:10
>>925
エスケープシーケンスは実行環境依存。
コンパイラの問題じゃないのでスレ違い。

928 :925:03/06/28 15:29
環境依存っすか?
WinXPでBCC55使ってるんですが、
無理ですた。


929 :デフォルトの名無しさん:03/06/28 15:34
>>925
windows2000/xpのコンソールでは、
エスケープシーケンスは使えないみたい。
APIを使うしかないね。

930 :925:03/06/28 15:36
APIですか。
#include <stdio.h>
int main(void){

int a,b,c;
b=1,c=1;
a=getchar();
if(a=='y'){
b++;
printf("\033[%d;%dH",b,c);
}
else if(a=='b'){
b--;
printf("\033[%d;%dH",b,c);
}
else if(a=='g'){
c--;
printf("\033[%d;%dH",b,c);
}
else if("a=='h'){
c++;
printf("\033[%d;%dH",b,c);
}
printf("\n\n↑ yボタン\n↓ bボタン\n");
printf("← gボタン\n→ hボタン\n");
}

このソースのどこを変えたら・・・鬱

931 :デフォルトの名無しさん:03/06/28 15:53
保守


932 :デフォルトの名無しさん:03/06/28 16:07
>>930
定期的に登る話題だな
"猫でもわかる"でぐぐれ。

933 :デフォルトの名無しさん:03/06/28 16:21
>>925
即席 & 処理系依存
#include <stdio.h>
#include <windows.h>
#include <conio.h>

int main(void)
{
HANDLE hOut;
COORD new_coset = {0, 0}, old_coset = {0, 0};
DWORD dwResult;
int c;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
do{
if(SetConsoleCursorPosition(hOut, new_coset) == 0) return(-1);
if(WriteConsole(hOut, "○", 2, &dwResult, NULL) == 0) return(-1);
c = getch();
if(c == 'y') new_coset.Y--;
if(c == 'b') new_coset.Y++;
if(c == 'g') new_coset.X--;
if(c == 'h') new_coset.X++;
if(SetConsoleCursorPosition(hOut, old_coset) == 0) return(-1);
if(WriteConsole(hOut, " ", 2, &dwResult, NULL) == 0) return(-1);
old_coset.X = new_coset.X;
old_coset.Y = new_coset.Y;
}while(1);
return(0);
}


934 :933:03/06/28 16:24
適当でスマソ

935 :ビル・ジョブス:03/06/28 17:05
久しぶりに日本に帰ってきました。
皆さんお元気そうで何よりです。(^^)

936 :デフォルトの名無しさん:03/06/28 17:27
ひさしぶり

937 :デフォルトの名無しさん:03/06/28 17:29
>>935
誰?

938 :デフォルトの名無しさん:03/06/28 17:32
>>937
このスレのPart1をたてやがった大馬鹿者。

939 :デフォルトの名無しさん:03/06/28 18:09
>>933
完璧です!どうもありがとうございます。
ちなみにC歴はどのくらいなんでしょうか?

940 :デフォルトの名無しさん:03/06/28 18:09
>>939
知りたがりは早死にする

941 :デフォルトの名無しさん:03/06/28 18:14
>>939
教えてあげないよ♪ジャン byポリンキー

942 :デフォルトの名無しさん:03/06/28 18:28
C言語でリアルタイムキー入力をするために関数は何をつかえばよろしいでしょうか。OSはlinuxです。アドバイス御願い致します。

943 :デフォルトの名無しさん:03/06/28 18:30
>>942
スレ違いだが教えてやろう。system("stty raw"); すればいい。
あとは犬板なりunix板なりunixスレなり行ってくれ。

944 :デフォルトの名無しさん:03/06/28 18:32
犬板???

945 :デフォルトの名無しさん:03/06/28 18:35
大阪

946 :デフォルトの名無しさん:03/06/28 18:47
http://www.darkcat.on.arena.ne.jp/cgi-bin/dknbbs2/bbs.cgi?sub=list&usr=hello_world82563
Cの掲示板はこちらへ移動しました。
雑談・質問なんでもこちらへどうぞ。

947 :デフォルトの名無しさん:03/06/28 20:21
int a;
a+=~a+1;

948 :デフォルトの名無しさん:03/06/28 20:22
int a;
while(a=rand());

949 :デフォルトの名無しさん:03/06/28 20:31
int a;
_asm { mov a,0 }


950 :デフォルトの名無しさん:03/06/28 20:32
int a;
#define a 0

951 :デフォルトの名無しさん:03/06/28 20:35
>>923
それは知らんかった。どこのやつ?

>>924
ちょっと古いコンパイラで試してみそ

952 :デフォルトの名無しさん:03/06/28 22:15
int a;
a<<=(sizeof(int)*CHAR_BIT-1);

953 :デフォルトの名無しさん:03/06/28 22:18
次スレ立てていい?

954 :952:03/06/28 22:19
あ、だめだ。

955 :デフォルトの名無しさん:03/06/28 22:19
>>954
だめ

956 :955:03/06/28 22:19
まちがった。
>>953

957 :953:03/06/28 22:23
立てたい

958 :955:03/06/28 22:24
>>957
頼んだ

959 :デフォルトの名無しさん:03/06/28 23:57
intとかdoubleなどの最大値、最小値は、どうやって知ることが出来るの?

960 :デフォルトの名無しさん:03/06/28 23:58
>>959
limits.hやfloat.hで定義されているマクロで

961 :デフォルトの名無しさん:03/06/28 23:58
スマソ
次スレ
http://pc2.2ch.net/test/read.cgi/tech/1056806789/

962 :デフォルトの名無しさん:03/06/28 23:59
>>960
とってもサンクス

963 :デフォルトの名無しさん:03/06/29 02:23
つるべのちんこ見ちまったよ(;´Д`)

964 :デフォルトの名無しさん:03/06/29 02:48
( ゚Д゚)ノω チソコクラエッ!
http://www5.tok2.com/home2/tv/cgi-bin/src/img20030629022414.avi

http://img.2chan.net/b/src/1056820907003.jpg
http://mistercap.hp.infoseek.co.jp/cgi-bin/source/img20030629022127.jpg
http://upload.fam.cx/cgi-bin/img-box/lsi30629022040.jpg
http://www5.tok2.com/home2/tv/cgi-bin/src/img20030629022120.jpg
http://mistercap.hp.infoseek.co.jp/cgi-bin/source/img20030629021948.jpg
 

965 :デフォルトの名無しさん:03/06/29 02:54
>>964
ありがトン(´Д`)ノ⌒■

966 :デフォルトの名無しさん:03/06/29 03:39
tちんこのためにまじめな顔して、お見苦しい映像があり申し訳ありませんでしたとか誤ってるアナウンサー萌え

967 :デフォルトの名無しさん:03/06/29 10:55
(∩д∩)

968 :デフォルトの名無しさん:03/06/29 23:36
うめたて

969 :デフォルトの名無しさん:03/06/30 02:46
1000取ったこと無いんでとってもいいですか?

970 :デフォルトの名無しさん:03/06/30 07:53
>>969
だめ。

971 :デフォルトの名無しさん:03/06/30 08:19
各スレ1000ゲットはアクセス規制の対象となる場合があります

972 :デフォルトの名無しさん:03/07/01 18:38
main(int argc, char *argv[])

という引数で、
**argv, *argv, argv[], argv は、それぞれ何を表しているんですか?

973 :デフォルトの名無しさん:03/07/01 18:45
>>972
コマンドライン引数 http://www9.plala.or.jp/sgwr-t/c/sec11-4.html

974 :972:03/07/01 18:49
>>973
こんなサイトあったんですか・・・ありがとうございましった!!

975 :デフォルトの名無しさん:03/07/08 06:43
今日から1日1回

  ∧_∧
 ( ´∀`)< ぬるぽ

976 :デフォルトの名無しさん:03/07/08 06:53
イチニチイッカイ
 ( ・∀・)   | |  ガッ
 と    )   | |
  Y /ノ   人
    / )   <  >__Λ∩
 _/し' //. V`Д´)/
 (_フ彡       /  ←>>975


977 :デフォルトの名無しさん:03/07/08 07:30
  ∧_∧
 ( ´∀`)<

978 :デフォルトの名無しさん:03/07/08 07:53
ぬゑぽ

979 :デフォルトの名無しさん:03/07/08 09:22
漏れもガッしていいですか?

980 :デフォルトの名無しさん:03/07/08 12:37
カウン


981 :デフォルトの名無しさん:03/07/08 12:38
トダ


982 :デフォルトの名無しさん:03/07/08 12:38



983 :デフォルトの名無しさん:03/07/08 12:59
ぬるぽ

984 :デフォルトの名無しさん:03/07/08 21:07
part60に追い越される前になんとしてでもこっちを埋めるんだ!

985 :デフォルトの名無しさん:03/07/08 21:56
埋め立てですかぁ〜

986 :名無し@沢森:03/07/08 23:56
ヌヒよ。

987 :デフォルトの名無しさん:03/07/09 00:09
  ∧_∧
 ( ´∀`)< ぬるぽ

988 :デフォルトの名無しさん:03/07/09 00:10
誰かマジでスレ立てろよ…

989 :デフォルトの名無しさん:03/07/09 00:11
C言語なら俺に聞け! Part 61

http://pc2.2ch.net/test/read.cgi/tech/1057677056/

990 :デフォルトの名無しさん:03/07/09 00:14
このスレがまた 61 の避難所になったりするんだろうか。

991 :デフォルトの名無しさん:03/07/09 00:32
それはそれで素晴らしい事です。

992 :デフォルトの名無しさん:03/07/09 01:32
  ∧_∧
 ( ´∀`)<

993 :デフォルトの名無しさん:03/07/09 01:53
  /__β ヽ_
  [ `↓´]   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ ←>>992
 (_フ彡        /


994 :デフォルトの名無しさん:03/07/09 03:30
    ∧_∧
   ( ´∀`)<埋め立てぬるぽ

995 :デフォルトの名無しさん:03/07/09 08:44
9 9 5


996 :デフォルトの名無しさん:03/07/09 08:44
996


997 :デフォルトの名無しさん:03/07/09 08:44
9 9 7


998 :_:03/07/09 09:03
http://homepage.mac.com/hiroyuki44/

999 :銀河鉄道:03/07/09 09:04


1000 :999:03/07/09 09:04
999

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

183 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)