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

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

C言語なら俺に聞け<34>

1 :ま  た  未  定  義  か:02/09/29 04:15
・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/

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

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


2 :デフォルトの名無しさん:02/09/29 04:15
【コンパイラ】
gcc
http://gcc.gnu.org/

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

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

3 :デフォルトの名無しさん:02/09/29 04:16
>>1
スレ立ておつです

4 :デフォルトの名無しさん:02/09/29 04:16
【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

【注意】
Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
まともな処理系を使いましょう。

5 :デフォルトの名無しさん:02/09/29 04:20
ござーるござるよハットリくんはー
ゆかいなみかたーにんじゃでござるー
にんじゃでござるー

6 :デフォルトの名無しさん:02/09/29 04:21
【過去ログ】
33 http://pc3.2ch.net/test/read.cgi/tech/1032606064/
32 http://pc3.2ch.net/test/read.cgi/tech/1031905402/
31 http://pc3.2ch.net/test/read.cgi/tech/1031340950/
30 http://pc3.2ch.net/test/read.cgi/tech/1030786546/
29 http://pc3.2ch.net/test/read.cgi/tech/1029605182/
28 http://pc3.2ch.net/test/read.cgi/tech/1028495798/
27 http://pc3.2ch.net/test/read.cgi/tech/1027160374/
26 http://pc3.2ch.net/test/read.cgi/tech/1026048820/

7 :デフォルトの名無しさん:02/09/29 04:22
【過去ログ】
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
23 http://pc.2ch.net/tech/kako/1023/10230/1023024817.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
21 http://pc.2ch.net/tech/kako/1022/10220/1022045622.html
20 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
19 http://pc.2ch.net/tech/kako/1020/10207/1020756993.html
18 http://pc.2ch.net/tech/kako/1020/10202/1020260813.html
17 http://pc.2ch.net/tech/kako/1019/10193/1019372139.html
16 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
15 http://pc.2ch.net/tech/kako/1016/10165/1016519243.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1013/10139/1013990673.html
12 http://pc.2ch.net/tech/kako/1012/10123/1012348974.html
11 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
10 http://pc.2ch.net/tech/kako/1008/10083/1008300863.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
7 http://pc.2ch.net/tech/kako/1003/10034/1003418249.html
6 http://piza2.2ch.net/tech/kako/999/999617524.html
5 http://piza2.2ch.net/tech/kako/994/994908590.html
4 http://piza.2ch.net/tech/kako/992/992357382.html
3 http://piza.2ch.net/tech/kako/989/989929288.html
2 http://piza.2ch.net/tech/kako/979/979529893.html
1 http://piza.2ch.net/tech/kako/967/967985026.html

8 :デフォルトの名無しさん:02/09/29 04:24
Cスレってもしかして、各種言語で一番回転速い?


9 :デフォルトの名無しさん:02/09/29 04:25
>>8
特定の言語専用スレではそうかも・・・
未定義のせいだ。

10 :デフォルトの名無しさん:02/09/29 04:26
つーか駄スレが多いだけだと思う

11 :デフォルトの名無しさん:02/09/29 04:27
Delphi関連スレが最速だと思う。

12 :デフォルトの名無しさん:02/09/29 04:28
これでvoidが戻ってきたら・・・・1スレッド一週間もたないかもな。

13 :デフォルトの名無しさん:02/09/29 04:29
場違いな5にワラタ

14 :デフォルトの名無しさん:02/09/29 04:30
どこかの言語と違ってスレが分散していないからである。
とてもいい傾向だ。まさしく2chでのスレのあり方についての
見本である。

15 :デフォルトの名無しさん:02/09/29 04:30
>9
確かに、phpやjavaだと質問するまでもないもんな・・・
ライブラリも豊富やし。
//Cでライブラリつーと、漏れはglibたまにつかっとるが。
Cスレは結構見てるんだけど回転速すぎ。

厨房質問は隔離シル!

16 :デフォルトの名無しさん:02/09/29 04:39
厨房質問スマソ

どんな型でも扱えるqsortという関数がありますよね?
あれは要素を交換するときは1バイトずつ要素の大きさ分交換すればいいんですか?
とりあえず交換するための関数を下のように書いてみたんですが。

static void swap(unsigned char *v1,unsigned char *v2;size_t n)
{
  unsigned char t;

  for(;n--;v1++,v2++)
    t=*v1,*v1=*v2,*v2=t;
}


17 :デフォルトの名無しさん:02/09/29 04:42
>>16
交換させる関数なんて作る必要ないよ?
配列要素の型のサイズを入れるだけ。

18 :デフォルトの名無しさん:02/09/29 04:43
>>16
余談だけどv1++,v2++よりv1[n] v2[n] のほうが早いらしい

19 :デフォルトの名無しさん:02/09/29 04:44
>>18
そんなの環境によるだろ

20 :デフォルトの名無しさん:02/09/29 04:45
その前にコンパイルできないと思うんだが・・・

21 :デフォルトの名無しさん:02/09/29 04:45
>>17
ごめんなさい。2行目の意味がわからないです・・・

>>18
そうなんですか?n--と一回やるだけだからですか?

22 :デフォルトの名無しさん:02/09/29 04:47
>>20
コンパイルはできました。きちんと動きました。
ただ、本当にこの方法でよいのかと思い質問しました。

23 :デフォルトの名無しさん:02/09/29 04:48
>>21
コンパイラがすげえ賢かったら
実際にインクリメントされるレジスタは一個だけかもしれない

24 :17:02/09/29 04:48
>>21
#define N 10
int a[N];
qsort(a,N,sizeof(int),comp);
つーかマニュアル読め

25 :デフォルトの名無しさん:02/09/29 04:48
>>21
qsort(array, count, sizeof(*array), CompareFunc);
のような感じ。

18はネタだろ。

26 :デフォルトの名無しさん:02/09/29 04:51
>>24
qsortを実装するときのことを聞いているんですが・・・

27 :デフォルトの名無しさん:02/09/29 04:53
>>26
はあ?
もしかしてコールバック関数のこと?

28 :デフォルトの名無しさん:02/09/29 04:54
>>27
qsortを自分でつくるときの要素の交換方法です。
型が決まっていればその型の変数を定義してそれを介して交換すればOKなんですが。

29 : ◆k/Ubp.Kg :02/09/29 04:56
>>28
もしかして、qsortと同じ働きをするものを自分で作りたいの?

30 :デフォルトの名無しさん:02/09/29 04:57
>>29
そうです!
というかもうつくりました。
ただ、本当にこんな方法でいいのかと・・・

31 :デフォルトの名無しさん:02/09/29 04:57
>>28
>型が決まっていれば
だからサイズを渡すんだろう?

32 :デフォルトの名無しさん:02/09/29 04:57
>>28
そういう意味ね。
同じようにコールバックで実装すればいいじゃん。
ただしこの場合でもコールバック関数の方では
あらかじめ型を知っておく必要がある。

33 :デフォルトの名無しさん:02/09/29 04:58
型情報をとらない(とれない)だから、memcpy系の方法で
移動させてるんじゃないの?

34 :32:02/09/29 04:59
あ、ごめん。31の方が正論。

35 :デフォルトの名無しさん:02/09/29 04:59
>>32
その型というのは型のサイズのことですよね?
>>16で書いた関数のnがそれにあたります。

36 :デフォルトの名無しさん:02/09/29 05:01
>>33
そのためのバッファの大きさがコンパイル時に決まらないのでmemcpyは使えないかと・・・
また失敗は許されないから、mallocも使えないし。

37 :18:02/09/29 05:01
>>21
19の言うとおり環境依存だけど
nはレジスタに置かれて
Pentium系だと
v1[n],v2[n]は*v1,*v2と速度的に同じくなる
++v1,++v2 がなくなる分だけ早いよ

38 :デフォルトの名無しさん:02/09/29 05:07
>>31
決まっているというのは、常に同じ型を扱うという意味です。

39 :25:02/09/29 05:08
>>37
> Pentium系だと
> v1[n],v2[n]は*v1,*v2と速度的に同じくなる
> ++v1,++v2 がなくなる分だけ早いよ

そうとは限らん。
コンパイラがソースと同じバイナリを吐き出すとは
限らない。極端に言えばどちらでも同じコードが
生成されるかもしれない。

40 :デフォルトの名無しさん:02/09/29 05:09
>>39
ん、そりゃもちろんそうです

41 :デフォルトの名無しさん:02/09/29 05:11
>>36
あーなるほど解ってなかった。とりあえず "qsort.c" でぐぐると
実装例が出てくるね。たしかに可変サイズのバッファなんか使ってないようだ

42 :デフォルトの名無しさん:02/09/29 05:17
結局、自分で実装するなら16のような方法でいいと思うぞ。
他にやるとすれば、intのサイズずつ処理するとか。

43 :デフォルトの名無しさん:02/09/29 05:19
glibcのqsort.cは交換の部分をマクロにしているね

44 :デフォルトの名無しさん:02/09/29 05:22
>>42
わかりました。ありがとうございます。

添え字を使うか今と同じポインタを使うかは自分の環境で速いほうを使いますね。

45 : ◆k/Ubp.Kg :02/09/29 05:24
>>43
実用レベルのライブラリで do { statement; } while(0) 形式のマクロが使われてるのって始めて見た。
俺が気が付いてなかっただけで意外とあるのかも…。てっきりDQNプログラマ用の構文だと思ってたのに。


46 :44:02/09/29 05:26
そういえば添え字かポインタかよりも、関数の再帰呼び出しでクイックソートを実現していることの方が速度的に問題があるかも・・・・

47 :デフォルトの名無しさん:02/09/29 05:26
>>45
俺は結構よく見かけるよ。

48 :デフォルトの名無しさん:02/09/29 05:46
>>45
なんにつかうのそれ
breakでぬけたりしたいの?

49 :デフォルトの名無しさん:02/09/29 05:52
>>48
あれだ、ブロックにして関数の途中でも変数を定義できるようにすると・・・・

50 :デフォルトの名無しさん:02/09/29 05:59
>>49
スコープ作りたいってことか

51 : ◆k/Ubp.Kg :02/09/29 06:33
>>48
俺は使わないけど、

#define print_10(string)              \
    do {                              \
        int i;                        \
        for(i = 0 ; i < 10 ; ++i) {   \
            printf("%s\n", string);   \
        }                             \
    } while (0)


52 :デフォルトの名無しさん:02/09/29 06:42
そんなマクロ組むくらいならinlineで関数書けばいいのにね
と思ったところではじまらないしおわらないわな

53 :デフォルトの名無しさん:02/09/29 06:44
>>52
ネタ?だよね?

54 :デフォルトの名無しさん:02/09/29 07:15
>>52
あのさあ、、、
もう突っ込む穴も無くなった。

55 :デフォルトの名無しさん:02/09/29 07:21
age

56 :デフォルトの名無しさん:02/09/29 10:48
>>51で宣言したi(int i; のi)の適用範囲を
明示したいとか理由があるんでしょ。

57 :デフォルトの名無しさん:02/09/29 12:26
>>1
これもちゃんと書いときなさい!

プログラマ必読・作ってわかるCプログラミング(通称 アヒル本)
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/


58 :とりあえず手持ちの:02/09/29 12:28
swap(x,y) \
  do{\
    struct z{char v[sizeof(x)]}t;\
    t = *(struct z*)&(x);\
    *(struct z*)&(x) = *(struct z*)&(y);\
    *(struct z*)&(y) = t;\
  }while(0);

59 :デフォルトの名無しさん:02/09/29 12:35
>>58
最後にセミコロンを付けてしまうと、
do{}while(0) を使う意味がなくなる
と思いますが?

60 :デフォルトの名無しさん:02/09/29 12:38
ここの人間にはどうでもよいかもしれないが、
一般的にデクリメント命令の方がインクリメント命令より
使用クロック数が少ない。

61 :デフォルトの名無しさん:02/09/29 12:40
>>60
ネタだよね? 一般的にって何?
俺が使ってるCPUはどちらも変わらない。

62 :(x,y):02/09/29 12:44
do{}while(0)は{}の数の対応も検出でき(以下略

63 :59:02/09/29 12:51
>>62
ごめん。意味わからんのだけど。

64 :58:02/09/29 12:55
>>59
ごめんマジボケ。

65 ::02/09/29 13:03
初心者でスマソ・・・・ポインタを使うことによって得られる利点て実際の所どんなもんなんですか?
参考書とかの例題見ても、これなら使う必要ないよな、とか思ってしまうのですが。


66 :デフォルトの名無しさん:02/09/29 13:05
memory節約?

67 :デフォルトの名無しさん:02/09/29 13:18
RubyはCより遙かに高速

68 :デフォルトの名無しさん:02/09/29 13:21
>>65
たくさんありすぎて書ききれないな。
たとえば、あらかじめサイズが予測できない
文字列に対して何らかの加工をする関数を
作ろうと思ったら、ポインタが使えないと不可能だね。

69 :デフォルトの名無しさん:02/09/29 16:05
>>36
qsort の話で無くて申し訳ないけど、、、
*BSD のライブラリに入っている heapsort は malloc を使っていて、
malloc に失敗したら潔くあきらめる(-1 を返す)。 おかげで、扱いが
面倒だけど、キーが同じ要素がたくさんある場合など qsort に比べて
性能が宵場合が少なからずあるので、状況によって使いわけている。
(heapsort はそのアルゴリズム上、要素1個分のメモリが確保できると
交換(と言うか書き込み)の回数が相当減るので、そういう実装も仕方が
無いのよね。)


70 :デフォルトの名無しさん:02/09/29 16:08
>>65
使う必要はありません。全部グローバル変数でOKです。

71 :デフォルトの名無しさん:02/09/29 16:25
厨房で申し訳ないのだが、perl でいうところの substr みたいな関数は
あるですか? FreeBSD で C の勉強してまふ。ないなら、それっぽい
処理方法をおしえてくらさい。


72 :デフォルトの名無しさん:02/09/29 16:29
char *substr(char *s, int from, int to);

73 :デフォルトの名無しさん:02/09/29 16:30
>>71
perlでいうところのsubstrが何をする関数かわからん。
文字列のオブジェクトから文字列を切り出して切り出した文字列のオブジェクトを作成して返すんだろうか?

74 :71:02/09/29 16:31
>>72
そんな関数定義されてないみたいですけど。少なくとも man や、string.h には。

>>73
文字列の何番目から何番目までを取り出す、っていう関数です。


75 :73:02/09/29 16:35
>>72
それはC標準ではサポートされていない。

76 :デフォルトの名無しさん:02/09/29 16:35
cなら、先頭はポインタで指定してstrncpy使うしかないと思います。

77 :デフォルトの名無しさん:02/09/29 16:40
strnlenはGNUの拡張らしいんですが、どの環境なら使えるのでしょうか?

78 :73:02/09/29 16:40


char *substr(char *s, int from, int to) {

char *pTemp = (char*)malloc(sizeof(char) * ((to - from) + 2));
if(pTemp) {
strncpy(pTemp , &s[from] , to - from + 1);
pTemp[to - from + 2] = '\0';
}
return pTemp;
}

79 :デフォルトの名無しさん:02/09/29 16:42
char *substr(char *s, int from, int to)
{
    char *p= s= s + from;
    while (to--)
        ++s;
    *s= '\0';
    return p;
}

80 :71:02/09/29 16:43
>>78
ぬぉっ。さんくす! 試してみて、漏れライブラリに追加しておきます。
# いい人だね。


81 :78:02/09/29 16:44
>>71
fromは0から始まるのでおきおつけて

82 :デフォルトの名無しさん:02/09/29 17:36
>>79
ねぇ、なんでこんなアフォなことするわけ ?

> while (to--)
> ++s;

s += to; でいいと思うんだけど。

つーか >>79 のプログラムなら、

char *substr(char *s, int from, int n)
{
 s += from;
 s[n] = '\0';
 return s;
}

で十分だよ。

まあ、これでは substr("abcd", 1, 2) とかやるとアウトだし、あんまり実用的じゃねーな。

83 :デフォルトの名無しさん:02/09/29 17:36
#include <stdio.h>

#define UNIX 1

int main(void){
   printf(&UNIX["\t%six\n"], (UNIX)["have"] + "fun" - 0x60);

    return 0;
}

なぜunixと表示されるのか、誰か解説してください。

84 :デフォルトの名無しさん:02/09/29 17:38
 strnpy(dst, src+from, to-from)[to-from] = '¥0';

85 :デフォルトの名無しさん:02/09/29 17:43
>>83
&UNIX["¥t%six¥n"] == &"¥t%six¥n"[UNIX] == "%six¥n"
(UNIX)["have"] == "have"[UNIX] = 'a'
'a' + "fun" - 0x60 = "fun" + 1 = "un"

86 :デフォルトの名無しさん:02/09/29 17:44
最後の行修正。
'a' + "fun" - 0x60 == "fun" + ('a' - 0x60) == "fun"[1] == "un"

87 :デフォルトの名無しさん:02/09/29 17:46
間違っちゃった…鬱氏…
× "fun"[1]
○ &"fun"[1]

88 :デフォルトの名無しさん:02/09/29 18:04
>>85-87
最終的にprintf("%six\n", "un");
になるってことでOK?

89 :デフォルトの名無しさん:02/09/29 18:10
>>88
そうだね。
printf(&1["\t%six\n"], (1)["have"] + "fun" - 0x60);
printf("\t%six\n" + 1, "have"[1] + "fun" - 0x60);
printf("%six\n", "fun" + 0x61 - 0x60);
printf("%six\n", "un");

90 :52:02/09/29 20:52
>>53
どこがネタだかわかんないんだけど
何かおかしなことを言っているんだったら
具体的に指摘をしてください
今日一日考えたけどわかりませんでした

91 :デフォルトの名無しさん:02/09/29 20:56
>>52
53がネタかCでインライン関数が使えないと思っているだけ。


92 :デフォルトの名無しさん:02/09/29 21:05
>>90
C99はまだ広まっていないよ・・・

93 :デフォルトの名無しさん:02/09/29 21:07
for を含む関数をインラインにするのはどうかと思う

つうことじゃないの?

94 :デフォルトの名無しさん:02/09/29 21:30
なるほど。つまり >91は
コンパイラの拡張機能を勝手に標準だと思っているか、
すべてのコンパイラがC99に準拠していると思っているか、
CとC++の違いをわかっていない、
つまり自分がネタを披露していることに気づいていない
ということですな。

95 :デフォルトの名無しさん:02/09/29 21:37
C99 って標準じゃないの?

96 :デフォルトの名無しさん:02/09/29 21:39
>>52はインライン関数がC99からではなく、最初から使えたと思いこんでいるところが痛いんだろ。
最初から使えたと思っていなければあんなレスはできないはず。

97 :デフォルトの名無しさん:02/09/29 21:44
漏れはC99から始めたので最初から使えましたが、なにか?

98 :デフォルトの名無しさん:02/09/29 21:44
つまり移植性をまるで考えに入れてないってことで。

99 :デフォルトの名無しさん:02/09/29 21:49
自分のコンパイラで使える機能は他のコンパイラでも
使えると思っている奴って、ある意味すごいな。
実用レベルのライブラリは一生作れないだろうけど。

100 :デフォルトの名無しさん:02/09/29 21:51
ちっちぇーなー
誰でも知っていることでえらそーにグダグダ書いて。
使ってるコンパイラによるんだから揚げ足取りやっててもおわんねーだろ。

101 :sage:02/09/29 21:52
>>100=91
逆切れですか。

102 :デフォルトの名無しさん:02/09/29 21:57
> 使ってるコンパイラによるんだから
だからinlineを使うのがまずいと言われていることに
気づいているのだろうか。

103 :デフォルトの名無しさん:02/09/29 22:15
インラインで書くべき処理じゃないということが要点なのでは?
いつから使えたかというのは2次的なことで。

104 :デフォルトの名無しさん:02/09/29 22:16
代入式って何で
j=i+50;
とは書けないんでしょうか?
超厨房質問でしょうがよろしくお願いします。

105 :104:02/09/29 22:17
すいません。書き間違えました。
代入式って何で
i+50=j;
とは書けないんでしょうか?
超厨房質問でしょうがよろしくお願いします。

106 :デフォルトの名無しさん:02/09/29 22:17
>>104
かけないわけないでしょ。
きちんとjとiを定義した?

107 :106:02/09/29 22:18
>>105
当たり前。
i+50は左辺にならない。iがポインタで*(i+50)ならできるけど。

108 :デフォルトの名無しさん:02/09/29 22:19
>>105
その結果どうなることを期待してるの?

109 :107:02/09/29 22:20
「左辺には」じゃなくて「左辺値には」だな。

110 :デフォルトの名無しさん:02/09/29 22:21
>>103
だったらマクロでも同じ事じゃん。
まあネタだったんからどっちでもいいや。

111 :デフォルトの名無しさん:02/09/29 22:23
代入先は左辺に書かなければならない

112 :104:02/09/29 22:25
>>106
すいません。書き間違いです。

>>107-108
=の演算子は「右辺値を左辺値に代入する」っていう決まりなんですか?
内心i+50の結果がjに入るのを期待したんですが・・・

113 :デフォルトの名無しさん:02/09/29 22:27
>>112
=は左にあるものに右の結果を代入する演算子だぞ(^_^;)

114 :104:02/09/29 22:28
>>106-113
ありがとうございます。勉強不足でした。

115 :デフォルトの名無しさん:02/09/29 22:28
>>112
つまり、x = yと書くとき、
「x の値が y に入るか、y の値が x に入るかが不定だったらいいなあ♥」
ってことか?

116 :デフォルトの名無しさん:02/09/29 22:29
>>115
それが不定だったら俺はCを捨てる(笑)

117 :デフォルトの名無しさん:02/09/29 22:29
未定義の方がイイ!

118 :デフォルトの名無しさん:02/09/29 22:34
>>112
キミは今すぐPrologを使え。

119 :デフォルトの名無しさん:02/09/29 22:35
なるほど

120 :デフォルトの名無しさん:02/09/29 22:59
>>115
んで、代入方向を明示的に指示するのには x<=y, x=>y などとするんだな。
もちろん、ifなどの条件式と通常の部分での間違いを防ぐために

121 :52:02/09/29 23:21
>>92
あーそういうことでしたか
了解しました

122 :デフォルトの名無しさん:02/09/29 23:34
x := y, x =: y にするとか

123 :デフォルトの名無しさん:02/09/29 23:45
swap(x,y){x:=y:=x;}

124 :デフォルトの名無しさん:02/09/29 23:57
よっしゃ!そんなときこそC++のストリーシンタクスだ!
x << y; // xにyを代入
y >> x; // yにxを代入



125 :デフォルトの名無しさん:02/09/30 00:43
普通に0を代入して初期化するのと,
ビット操作で0に初期化するのとどっちが早いですか?

126 :デフォルトの名無しさん:02/09/30 00:45
>>125
コンパイラとCPUに聞け。

127 :デフォルトの名無しさん:02/09/30 00:47
>>125
環境による。
でもその程度ならよほどタコなコンパイラでない限り
どちらも同じコードになると思う。

128 :デフォルトの名無しさん:02/09/30 00:48
>>125
ちなみにビット操作で0にするって、どうするの?

129 :デフォルトの名無しさん:02/09/30 00:53
x ^= x
Z80じゃあるまいし。。

130 :デフォルトの名無しさん:02/09/30 00:57
>>129
それ、よくやってたなぁ。今じゃ役に立たない知識だけど。

131 :デフォルトの名無しさん:02/09/30 01:20
>>129
まじでそんなコードを書く人がいるの?
同じ数同士XORを取れば確かに0になるが・・・・

132 :デフォルトの名無しさん:02/09/30 01:25
>>127
ていうか、最適化時に xor にしないコンパイラなんて存在するんだろうか

133 :デフォルトの名無しさん:02/09/30 01:28
xoreax, eax

VC++6.0はXORにするみたいだな。

134 :デフォルトの名無しさん:02/09/30 01:30
>>131
大昔はそうするのが常識だったんだ。

135 :デフォルトの名無しさん:02/09/30 01:37
いうなれば定石みたいなもんだったからな。
xor a

136 :デフォルトの名無しさん:02/09/30 01:40
>>131
>>132の言う通り。
適当なプログラムコンパイルした後
アセンブラにどう変換されているのか試してみれ。

137 :デフォルトの名無しさん:02/09/30 01:43
>>134-135
そうなんだ。
そんなに問題になるほどの差があったのかな・・・

>>136
やってみました。>>133がそれです。
アセンブラはよくわからないけど、これくらいならなんとか。
eaxレジスタにあるもの同士でXOR取ってまたeaxにいれるんですよね?

138 :デフォルトの名無しさん:02/09/30 01:51
>>132
gccでは最適化すると、XOR使ったソースでも 0をロードするアセンブラ
吐くようだ。

139 :デフォルトの名無しさん:02/09/30 01:55
>>137
結構有ったのよ。
有名なところでスーパーマリオをROMの中に詰め込む苦労話とか、
その当時はみんな同じような苦労をしていた。

それが今や、、Str[10]で足りると思うんだけど、余裕もって
Str[1000]で宣言しとくか! とかやってる俺。

140 :デフォルトの名無しさん:02/09/30 01:57
>>139
あ、おれも・・・
256とか1024とか、256の倍数で取っている。本当は30くらいでよいのだけれど(^_^;)

141 :デフォルトの名無しさん:02/09/30 02:00
俺も
面倒だから,全部1000にしているよ

142 :fuck!:02/09/30 02:00
Why I hate C
There is almost no run-time error checking. In particular, arguments passed to functions are not type-checked, and array offsets are not compared with the bounds of the array.

There is no real string type. So the syntax is convoluted for common tasks like appending one string to another. Also, there are subtle differences between "char stuff[]" and "char *stuff" that are hard for a beginner to debug.

The necessity for function prototypes means you have to put essentially the same information in two places, so every time you make certain changes you need to edit multiple files.

Possibly the fascistic insistence on prototypes was some sort of attempt to compensate for the lack of *run-time* error-checking.

Personally, I think the syntax is pointlessly convoluted.


while ((*dest++ = *src++) != '\0') {

seems so far removed from any English-language representation of what's happening that the assembler code is literally easier to understand.

Likewise, the "#include <stdio.h>" seems silly. It would be much more general to have syntax more like "#include "%LIB%/stdio.h"



143 :fuck!:02/09/30 02:01
The world would be a much better place if the people who invented C had learned to type first. (Ie, the syntax seems to have been designed to minimize keystrokes, no matter what the effect on readability.)

The language does not really support multidimensional arrays.


The comment characters require two keystrokes. Even worse, they don't nest, so it's hard to quickly comment out sections of
code when you're debugging -- unless of course you don't put actual comments in your code, until "I finish debugging and do the cleanup".

Also, personally I would like comments that last to the end of the line (like the semicolons in assembler).

And why do preprocessor commands use the "#" character, that everyone else uses as a comment? Seems like a last-minute kludge to me.

These "void pointers" seem to me like a kludge bolted onto a confession of defeat. What is the point of declaring the type of parameters when you don't know what it is??


On P142 of K&R (2nd ed) there's a sentence that sounds to me like sarcasm: "The question of the type declaration for a function like malloc is a vexing one for any language that takes its type-checking seriously."

Obviously C does not take type-checking seriously, and clearly K&R are hardly vexed at all by having to recommend a kludge that kicks type-checking in the groin.


144 :英語わからん:02/09/30 02:01
なんだなんだ?荒らしか?

145 :132:02/09/30 02:07
>>138
うぞーん

146 :127:02/09/30 02:09
>>134,135
x86では今でも XORでクリアするのが定石だと思う。
フラグを破壊したくない時だけ mov eax,0 かな。
Pen4ではどうなったか知らないけど。

147 :135:02/09/30 02:13
あうん、なんか過去形で書いてたな。
Pentium 4 なら 0.5 クロック命令だね

148 :146:02/09/30 02:16
>>147
Pen4でも 即値のロードと XORのクロックは変わらず?
もしそうだったらやはりXORが定石かな?

149 :135:02/09/30 02:20
xor でいいんじゃないかな?
命令長は xor なら 2 バイト、即値なら movzx で 3 バイトだから

150 :146:02/09/30 02:24
>>149
了解です。(MOVZX→MOV だよね)
ありがとう。

151 :デフォルトの名無しさん:02/09/30 02:52
BOX Box[10]; //構造体

for(i=0;i<10-1;i++)
{
box[i]=box[i+1];
}


*pbox=box;

for(i=0;i<10-1;i++)
{
pbox[i]=pbox[i+1];
}

ポインタを使ったほうが早い?

152 :デフォルトの名無しさん:02/09/30 03:00
>>151
環境による。
というか何それ? ほとんど同じじゃん。

153 :デフォルトの名無しさん:02/09/30 03:02
> *pbox=box;

pbox=&box;
だよね。
素直にmemmoveでもいいんじゃない?

154 :デフォルトの名無しさん:02/09/30 03:03
>>149
命令長とかクロック数はどこで調べられますか?

155 :デフォルトの名無しさん:02/09/30 03:05
>>154
Intelの日本語サイトに資料があると思うよ。

156 :デフォルトの名無しさん:02/09/30 03:05
>>153
memcpyってつかってはいけないんですたっけ?
memmove>memcpy?

157 :153:02/09/30 03:07
>>156
重なり合う領域だからmemcpyはまずい。

158 :デフォルトの名無しさん:02/09/30 03:17
あ,そうか
これからポインタの本ちょっと見返してみるよ

159 :135:02/09/30 03:24
>>154
命令長は Intel のリファレンス PDF を見るといいよ。(これ必携)

ttp://www.intel.co.jp/jp/developer/design/pentiumiii/manuals/index.htm
IA-32 インテル(R) アーキテクチャ・ソフトウェア・デべロッパーズ・マニュアル
上巻、中巻、下巻

クロック数は、CPU によって違うから一概にはいえない。

160 :デフォルトの名無しさん:02/09/30 03:31
>>155>>159
ありがとうございます。
今ISDNで必死にダウンロード中です。(笑

ところでZ80とかの純粋なCISCならともかく
P4みたいなパイプライン付きCISCや
RISCのプロセッサでは正確な実行時間は
把握できるものなのでしょうか。

161 :デフォルトの名無しさん:02/09/30 03:41
メモリのウェイトとかOSによっては
タスク切り替えとかはどう考えるつもりだ?

162 :デフォルトの名無しさん:02/09/30 04:20
どこかで見たような話だが、確かベンチマークとかだと
正確な実行時間は推測できないとかいう話だよな。


163 :デフォルトの名無しさん:02/09/30 07:11
昔はCPUの資料見て高速な命令使って最適化してたけど
クロックインフレのご時世にはそんなことは無意味だった気がする・・

164 :デフォルトの名無しさん:02/09/30 08:03
無意味ってこたーないだろ

165 :デフォルトの名無しさん:02/09/30 08:10
それは該当する関数の使用頻度によるのではないかと。

166 :デフォルトの名無しさん:02/09/30 14:08
>>163
無意味ってことは絶対にないけど、そういう作業は
コンパイラがガンガンやってくれるからね。
人間がやるべきは、CPU 命令単位の最適化よりも
アルゴリズムの最適化であることは間違いない。

MMX を使った画像処理のループとかになると、
やっぱり CPU の資料は手放せないけどね

167 :デフォルトの名無しさん:02/09/30 14:28
MMXってなんでそんなに特殊なのですか?
そういったものも含めて変わった事が色々出来るみたいだけれど。

168 :デフォルトの名無しさん:02/09/30 14:37
>>167
別に特殊じゃない(と思う)けど、MMX 使おうと思ったら
Intel の MMX 最適化コンパイラでも使わない限りは
インラインアセンブラで書くことになるでしょ。

コンパイラはアセンブラで書いた部分の最適化は
やってくれないから、自分でペアリングやクロック数を
考えたりしながら最適化することになるわけで。

169 :デフォルトの名無しさん:02/09/30 14:59
C言語の32個の予約語のうち、
volatile と unsigned signed enum が読めません。
どう読むのですか?

170 :デフォルトの名無しさん:02/09/30 15:05
>>169
http://www.okakogi.go.jp/People/miwa/program/c_lang/c_furoku.html

171 :デフォルトの名無しさん:02/09/30 15:05
>>169
まず英和辞典で調べろ。
ちなみに enum は enumeration の略だ。

172 :デフォルトの名無しさん:02/09/30 15:06
auto オート
break ブレーク
case ケース
char キャラ           チャー,キャラクタ
const コンスト
continue コンティニュー
default デフォルト
do ドゥー
double ダブル
else エルス
enum イナム エナム
extern エクスターン
float フロート
for フォー
goto ゴートゥー
if イフ
int イント インテ,インテジャ
long ロング
register レジスタ
return リターン
short ショート
signed サインド
sizeof サイズオブ
static スタティック
struct ストラクト
switch     スイッチ
typedef タイプデフ タイプデファイン
union ユニオン うにおん
unsigned アンサインド
void ボイド
volatile ボラタイル,ボラティル バラトル
while ホワイル

173 :デフォルトの名無しさん:02/09/30 15:09
>>169
揮発性 volatile

174 :mem:02/09/30 15:12
ポインタについて今勉強しているのですが、
今読んでいる本のところで
float balance[10][5];
float *p;

p=(float *) balance; ←←
*(p + (3*5)+1)

←←の所がよくわかりません。
float *(balance);
でわおかしいのですか?
基本的なことで申し訳ないのですが、
どなたかよろしくお願いいたします。

175 :デフォルトの名無しさん:02/09/30 15:28
>>174
専用スレがあったぞ
http://pc3.2ch.net/test/read.cgi/tech/1033365088/

176 :デフォルトの名無しさん:02/09/30 16:02
>>174
型キャストでス・・・・・・・

177 :デフォルトの名無しさん:02/09/30 17:59
C言語で putc()関数とgetc()関数を使って、
バイナリファイルのコピーを行っているのですが、
コピー後のファイルの末尾にゴミ(0xff)がついてしまいます。

これが付かないようにするにはどうすれば良いんでしょう

178 :デフォルトの名無しさん:02/09/30 18:07
>>177
多分 EOFのゴミです。if (feof(fp)) を使って EOFをスキップすれば
いいはず。

179 :デフォルトの名無しさん:02/09/30 18:09
>>177
スマソ。feof(stdin)だね。

180 :デフォルトの名無しさん:02/09/30 18:18
>>178==179
EOFをスキップするように書き換えたらうまくいきました。
ほんとうにありがとうございました

181 :デフォルトの名無しさん:02/09/30 18:38
>>180
ちなみに getc()もEOFを返すことができるので、int型の変数に読み込み、
if ((i = getc()) == EOF) でスキップすることもできる。これなら feof()は
必要ない。

char型の変数に読み込むとうまく行かないので注意。

182 :デフォルトの名無しさん:02/09/30 20:06
int max(int x,int y)
を関数値の型を書かないとint型と見なされてしまうそうなんですが、本当でしょうか?
また、なぜint型と見なされるのでしょうか?
お願いします。

183 :デフォルトの名無しさん:02/09/30 20:07
char 型の配列を double 型の配列に変換するにはどーしたらいいですか

184 :デフォルトの名無しさん:02/09/30 20:11
for(i=0;i<N;i++)darray[i]=carray[i];

185 :デフォルトの名無しさん:02/09/30 20:14
>>182
ANSI-C以前のCがそうだったから。

186 :デフォルトの名無しさん:02/09/30 20:18
>>183
↓これじゃだめなの?

void main(void)
{
char c[10];
double d[10];
int cnt;

for ( cnt=0; cnt < 10; cnt++ )
{
d[cnt] = (double)(c[cnt]);
}
}


187 :デフォルトの名無しさん:02/09/30 20:20
やっぱそれしかないみたいですね・・・
どうもでした

188 :デフォルトの名無しさん:02/09/30 20:21
stdlib.hをインクルードして、atofを使えばいいんじゃないの?

189 :デフォルトの名無しさん:02/09/30 20:21
ANSI以前からの決まりだったんですか。ありがとうございました。

190 :デフォルトの名無しさん:02/09/30 20:24
>>188
ダウト。atofはchar *からdoubleへの変換では?

191 :デフォルトの名無しさん:02/09/30 20:31
>>186
ダメ。




mainの戻り値はint

192 :デフォルトの名無しさん:02/09/30 21:10
>>191
そういう本題とズレたことはやめた方が・・・
誰か(オレモナー)が突っ込むと長くなるし。

193 :デフォルトの名無しさん:02/09/30 21:20
>>192
突っ込め突っ込め。議論は活発な方がよい

194 :デフォルトの名無しさん:02/09/30 21:31
a[0],a[1].a[2],a[3],a[4],a[5]
な配列を
a[3],a[4],a[5],a[0],a[1].a[2]
に入れ替える効率のいい方法を教えてください

195 :デフォルトの名無しさん:02/09/30 21:33
>>194
まずはその部分がボトルネックになっているかを調べろ。

196 :デフォルトの名無しさん:02/09/30 21:38
>>194

1.バッファを用意する
2.ループで条件を付けてa[i]をバッファに代入
3.バッファをa[]へコピー。

環境依存で型が分かればそれ以外も無くはない。

197 :デフォルトの名無しさん:02/09/30 21:43
安直に考えるとこうだが
TypeOfA a[6];
int i;
for (i = 0; i < 3; i++) {
  TypeOfA t = a[i];
  a[i] = a[i + 3];
  a[i + 3] = t;
}

198 :デフォルトの名無しさん:02/09/30 21:44
展開しろ。

199 :デフォルトの名無しさん:02/09/30 21:48
a[1].a[2]?

200 :200:02/09/30 21:51
200

201 :デフォルトの名無しさん:02/09/30 21:52
>>199
突っ込みが鋭いな。
漏れは全然気づかなかたよ(w

202 :デフォルトの名無しさん:02/09/30 22:05
デバッグすると
「ハンドルされていない例外はgrcve.exeにあります:
0xC0000005:Access Violation。」
という表示が出ます。
どういう意味なのでしょう?
それに、どうしたらバグがとれるのでしょうか?

203 :デフォルトの名無しさん:02/09/30 22:08
>>202
とりあえず確保した領域を越えて書き込んでいないか確かめろ

char array[5];
array[100]='a';
とかな。

204 :デフォルトの名無しさん:02/09/30 22:10
>>202
不正なアドレスを参照しようとした。
不正なアドレスに書き込みしようとした。
メモリを2回解放した。
ハンドルを余分に解放した。
のどれかと思われ

205 :202:02/09/30 22:15
領域を広くするとバグがなくなりました。
ありがとうございます

206 :デフォルトの名無しさん:02/09/30 22:22
>>205
uwa〜、怪しい。
ちゃんとどこが悪いのか掴んだんだろーな。
たまたま、動いてるだけかも知れんぞ。

207 :デフォルトの名無しさん:02/09/30 23:23
>>205

sz = 100;
p=malloc(sizeof(sz));

こんなことしてないだろうな?


208 :デフォルトの名無しさん:02/09/30 23:35
>>206 同意
>>205 それをバグがなくなったとは思うのは
気が早いと思われ。


209 :デフォルトの名無しさん:02/10/01 00:45
ありゃ、新スレ来てみたら、もう200超え。
お世話になりマウス。m(^_^)mペコ。

210 :デフォルトの名無しさん:02/10/01 01:08
文字列ポインタを数値に変換するにはどうしたらいいの?
strtokで数値でできた文字列を分割したあと
数値の入れ方がわからないんだけど誰か教えて下さい.

211 :デフォルトの名無しさん:02/10/01 01:11
>>210
意味が良くわからないのだが、printf("%p", pointer);ってことか?

212 :210:02/10/01 01:13
すいません.
数値で出来たテキストファイルを数値配列に読み込み
計算をしたいと言う意味です.

213 :デフォルトの名無しさん:02/10/01 01:15
sscanf

214 :デフォルトの名無しさん:02/10/01 01:15
数値変数 = atoi(文字列へのポインタ);
なんじゃないのか?
数値変数 = (数値変数)文字列ポインタ;
なのか??

215 :デフォルトの名無しさん:02/10/01 01:16
>文字列ポインタを数値に変換する
っていうのがいまひとつ分からんが、
↓こんな感じかい?

char *tok;
int num;

tok = strtok(str, sepa);
num = atoi(tok);


216 :デフォルトの名無しさん:02/10/01 01:19
普通はatoi,atol系使うよな。

217 :210:02/10/01 01:29
こんな初歩的な質問にまで答えていただいて
ありがとうございます.
早速やってみます.

218 :210:02/10/01 01:48
再度すいません.
下のソースはエラーが出るんですが何がいけないですか?

while(fgets(buf,1000,fp1)!=NULL){
 p=strtok(buf," ");
 data[a][b]=atof(p);
  do{
   b++;
   p=strtok('\0'," ");
   if(p){
   data[a][b]=atof(p);
   }
  }while(p);
 a++;
}

219 :デフォルトの名無しさん:02/10/01 01:52
>>218
どこでどういうエラーが出るのかくらい書いたら?

220 :デフォルトの名無しさん:02/10/01 01:56
>p=strtok('\0'," ");
これどーなのよ。
第一引数は、文字列でしょ。'\0'は、NULLだべ

221 :デフォルトの名無しさん:02/10/01 01:59
PC-UNIX上で動く画面制御のライブラリってないんでしょうか
カーソル移動したり、画面クリアするやつなんですけど。

222 :210:02/10/01 02:00
p=strtok('\0'," ")
のところでエラーが出ます.
本で見たらこうなってたのでやってみました.
ただファイルへの書き込みではうまくいくんですけど.


223 :デフォルトの名無しさん:02/10/01 02:04
>221
ライブラリじゃないですが、↓こんなのどうでしょ。ソースコードつき
なので、さんこうになるのでは?
http://www2.plala.or.jp/mita/download/hi/info.html

224 :デフォルトの名無しさん:02/10/01 02:06
>>221
cursesをキーワードに検索すべし。

225 :デフォルトの名無しさん:02/10/01 02:08
>>222
その本がC言語を主題として書いてるのなら、捨てたほうがいいと思う。

226 :210:02/10/01 02:12
なんかそんな気がしてきました.
それでエラーの位置なのですが,

while(fgets(buf,1000,fp1)!=NULL){
 p=strtok(buf," ");
 data[a][b]=atof(p);
  do{
   b++;
   p=strtok('\0'," ");
   if(p){
   data[a][b]=atof(p);ここでエラーになります.
   }
  }while(p);
 a++;
}
何がいけないのですか?

227 :220:02/10/01 02:16
自爆しましたぁ〜
strtok('\0'," ");
の第一引数のNULLは、「次のトークンを探す」場合にそうしてするみたい。
m(__)m

228 :210:02/10/01 02:20
じゃあ何でエラーになるのでしょうか?

229 :デフォルトの名無しさん:02/10/01 02:20
>>227
http://www.catnet.ne.jp/~kouno/c_faq/c5.html#13


230 :デフォルトの名無しさん:02/10/01 02:21
>>226
strtok()は、トークンが見つからないと、NULLを返すので、
atof(NULL)
となってしまうので良くないのでは?

231 :デフォルトの名無しさん:02/10/01 02:23
strtokの第一引数はポインタ。
strtok('\0'," ");
ではint型の '\0' を第一引数として渡しているので間違い。

strtok(0, " ");

strtok(NULL, " ");
に変更すべし。

232 :230:02/10/01 02:45
あぁ、また自爆だぁ〜
if(p)があるから、atof(NULL)とはならないのかぁ〜〜〜〜〜〜。m(__)m
にしても・・・、strtok()の結果って、ホントに数字の羅列になってるのかな?
データの中に、空白文字が複数連続して書かれてあったらどうなるんだろ?

スレ汚してごめんなさい。m(__)m


233 : :02/10/01 02:52
>>226
aかbがdataのサイズを超えているのではないかな?
どう見ても b = 0 が抜けているが。
つーか、なんでどういうエラーなのかを言わんのだ?

234 :デフォルトの名無しさん:02/10/01 03:52
>>226
コンパイルエラーだったら怒るぞ

235 :210:02/10/01 04:01
エラーの内容は
「?????のメモリが????を参照しました.
メモリがwrittenになることが出来ませんでした.」
です.
自分でもいろいろやってみるのですが,エラーなんです.
教えてください.

236 :デフォルトの名無しさん:02/10/01 04:13
>>235
>>233さんのいってることは確認したかい?

237 :デフォルトの名無しさん:02/10/01 04:17
>   p=strtok('\0'," ");
何したいんだ?

238 :デフォルトの名無しさん:02/10/01 04:19
×  p=strtok('\0'," ");
○  p=strtok(p," ");

誰も突っ込まんから一応突っ込んでおく。
whileが無限ループになってるからいつかはエラー出るだろうなあ。

239 :210:02/10/01 04:21
b=0は宣言のときに書いてあります.
それでただ読み込んでファイルに書き込むことは出来ました.
よって読み込みの段階での間違えは無いと思います.
つまりatofのところ(226で書いたところ)でうまくいかないみたいです.
何が間違っているのでしょうか?

240 :デフォルトの名無しさん:02/10/01 04:24
>>239
で、dataはどのくらいのサイズ設定してあるんだ?
仮にdata[10][10]としてあったときに、b=10のときエラーになることくらいは分かってるよね?
10*10と仮定すると、
if( a < 10 && b < 10 ){
   data[a][b]=atof(p);ここでエラーになります.
}
ってやれば回避できる。

241 :デフォルトの名無しさん:02/10/01 04:25
>>239
人の話きけよ…

242 :210:02/10/01 04:31
241さんは238さんでしょうか?
すいません.
書き込んでいる最中に増えていました.
そのとおりにやってもエラーが出ます.
あとサイズ設定はかなり大きくとっているので(300,100)大丈夫です.

243 :デフォルトの名無しさん:02/10/01 05:01
>>210
俺がstrtokで作るとこうなる・・・かもしれない↓
  for (a = 0; fgets (buf, sizeof (buf), fp1) != NULL; a++) {
    char *p = strtok (buf, " ");
    for (b = 0; p != NULL; b++) {
      data[a][b] = atof (p);
      /**/printf ("(%d,%d) = %g\n", a, b, data[a][b]);
      p = strtok (NULL, " ");
    }
  }

しかし、バグはバグとして、そもそもsscanfを使わない理由は?

244 :デフォルトの名無しさん:02/10/01 05:05
おっとすまん、サイズが決まってなければsscanfでは簡単にはできないか

245 :243=244:02/10/01 05:08
そういえば、最初
#include <stdlib.h>
をやりわすれたのにコンパイルエラー出なかったのが不思議。
(結果は出鱈目だった)

246 :デフォルトの名無しさん:02/10/01 07:42
文字列の中身は?

247 :デフォルトの名無しさん:02/10/01 07:44
えっスペース区切りじゃないの

248 :デフォルトの名無しさん:02/10/01 07:46
まーそもそも、data[a][b]というデータ構造があやしいのだが
(サイズが不定なのか固定なのかわからん)

249 :デフォルトの名無しさん:02/10/01 09:12
bがインクリメントされっぱなしのような気がするが?

250 :デフォルトの名無しさん:02/10/01 10:07
何で、do{〜}while(p);とするのか・・・
while(p){〜}でいいじゃん。
pを確認してから、strtokを取るってわかりやすいし。結構行数はしょれる。

>○  p=strtok(p," ");
何でpとpなんだ?

b=0;の適当なところでの処理は必須。

' '半角スペースが2個連続している所とかは無いのか?
あれば、strtokに掛ける前に処理しておいた方が良いと思うが。

strtok(NULL, " ");がいいな。

全角スペースは混ざっていないよね?

 などなど

251 :デフォルトの名無しさん:02/10/01 12:15
すいません。教えて下さい。
プログラムを実行して、WWW上のどこかに飛ばすにはどうしたらいいでしょうか?
初心者用のサイトは大方見たのですがドコも詳しく書いてなくて、
どなたか、お願いします。

252 :デフォルトの名無しさん:02/10/01 12:17
RFCでIPの使用域について調べて、IP生成して、試しにping打って、getしてみて、
そこにサイトがあったら、飛ばせ。

253 :デフォルトの名無しさん:02/10/01 12:17
>>251
printf("Location:どこか\n\n");

これをCGIとして実行。

254 :デフォルトの名無しさん:02/10/01 12:18
> WWW上のどこかに飛ばすにはどうしたらいいでしょうか
何を飛ばすのか、そもそも「飛ばす」とはどんな処理・動作・結果を指しているのか?
具体的に書けや (#゚Д゚)ゴルァ!!

255 :デフォルトの名無しさん:02/10/01 12:23
>>254
> 何を飛ばすのか
電波

256 :251:02/10/01 12:28
>252-254
回答ありがとうございます。
言い方悪くてすいません。
exeを実行語、ヤフーなりgoogleなりIEが開いて表示する
って言うのをやりたいです。
>252
おもしろそうなので詳しく調べて見ます!!
>253
個人的に使いたいのでCGIは無理ですが、勉強になりました。
もしもCGIを使う事になったら使用させていただきます!!
>254
ごめんなさい(T_T
次からはもっと詳しく書かせていただきます!!

257 :デフォルトの名無しさん:02/10/01 12:34
>>256
IEコンポーネントを使うことになるから、↓のすれがよさげ

IEコンポーネントを使い倒すスレ
http://pc3.2ch.net/test/read.cgi/tech/982930049/l50

258 :デフォルトの名無しさん:02/10/01 12:46
>>256
最初の1回だけなら、
ShellExecuteでIEのフルパスと対象のURLを書けばイイかも

259 :デフォルトの名無しさん:02/10/01 13:02
printfのフォーマット指定で「小数点以下の無効なゼロは表示しない」って無いんですか?
0.01fを%fでやると0.010000ってなっちゃいますよね?

260 :デフォルトの名無しさん:02/10/01 14:08
>>259
%gは?

261 :デフォルトの名無しさん:02/10/01 14:19
コンソールアプリとWindowsSDKをやるだけなんですけど、
VC++を買う必要はありますか?

今の環境はBCCに専用のエディタを組み合わせてます。

262 :デフォルトの名無しさん:02/10/01 14:44
>>261
その今の環境でできないの?

263 :デフォルトの名無しさん:02/10/01 15:08
>261
根性があれば必要ない
プラットフォームSDKはBCCに含まれてるから
がんばってMSDNライブラリに検索かけまくる
(抜けがあるけど・・・)

264 :デフォルトの名無しさん:02/10/01 15:58
>>261
> VC++を買う必要はありますか?
ない

ウィンドウズプログラムの作り方
http://www.neco.nu/gohodoji/bccfaq/bccfaq.html#windowsprogram

# -Wオプションを付けるのを忘れるな


265 :デフォルトの名無しさん:02/10/01 21:00
>>261
この辺りからリンクされているツールを使うと、BCCでも比較的
楽にWinアプリも作れると思う。
http://hi-tag.hoops.jp/prgmemo/cpp_try00.html

266 :デフォルトの名無しさん:02/10/01 23:12
構造体で、
typedef struct test {
char test1[10];
char test2[10];
} test;

typedef struct value {
char test1[10];
char test2[10];
test test3[10];
} value;

として、

value a[10];
と宣言して、

a[0].test3[0].test1[0] = 'a';

というのは、できないのでしょうか?






267 :デフォルトの名無しさん:02/10/01 23:19
メンバの命名は気をつけた方がいいとおもうが、べつにいいんじゃない?

268 :デフォルトの名無しさん:02/10/01 23:27
あの、聞きたいんですけど。
VC++6.0で簡単なウインドウを作るプログラムを作ろうと思ったんですが、
新規作成→WIN32Application→新規作成→C++ソース、と普通にやって
#include<windows.h>をするとエラーがでます。エラーの場所はなんか
winnt.hというところに出ます。そんな所いじってないのになぜでしょうか。
教えてください!

269 :デフォルトの名無しさん:02/10/01 23:36
ふ〜ん。
教えて欲しいくせに「C言語なら俺に聞け」スレに書き込むのか。
ふ〜ん。つまらんネタだな。

270 :デフォルトの名無しさん:02/10/01 23:45



271 :デフォルトの名無しさん:02/10/01 23:51
>>268
とりあえずこちらへ
http://pc3.2ch.net/test/read.cgi/tech/1022499000/

272 :デフォルトの名無しさん:02/10/01 23:58
char (*Numbox)[MAX2];

初期化するにはどうしたらいいでしょうか?


273 :デフォルトの名無しさん:02/10/02 00:00
>>272
char [MAX2] の先頭を指すポインタだから

 char hoge[MAX2];
 Numbox = hoge;

274 :デフォルトの名無しさん:02/10/02 00:01
>>272
char (*Numbox)[MAX2] = {0};

最近はなんとかっつー規定でゼロクリアしてくれるぞ。
駄目ならsizeofでmemsetだ

275 :272:02/10/02 00:22
NULL=0?
C言語だけですっけ?

276 :デフォルトの名無しさん:02/10/02 00:25
> 最近はなんとかっつー規定でゼロクリアしてくれるぞ。
ANSIのことか?

277 :デフォルトの名無しさん:02/10/02 00:42
274はNumboxが配列だと思っているのかもな

278 :デフォルトの名無しさん:02/10/02 00:44
>>273-274
おいおい、何言ってんだ?
配列へのポインタだぞ。書くとしたら、
char (*Numbox){MAX2] = NULL;
char (*Numbox){MAX2] = &hoge;// <- char hoge[MAX2];
char (*Numbox)[MAX2] = (char (*)[MAX2])malloc(10*sizeof(char (*)[MAX2]));
だろうが。

279 :デフォルトの名無しさん:02/10/02 00:58
ミスった。3つ目は
char (*Numbox)[MAX2] = (char (*)[MAX2])malloc(10*sizeof(char [MAX2]));
だな。

280 :デフォルトの名無しさん:02/10/02 01:53
char abc=100;
const char *a=abc;

*a=10;

OK?

281 :デフォルトの名無しさん:02/10/02 02:11
>>280
const char *a = &abc; ・・・・

282 :273:02/10/02 02:48
>>278
あぁ、& が要るわ。失敬。

283 :デフォルトの名無しさん:02/10/02 04:44
>>282
&が要るかどうかはhogeの型によるだろ。たとえば
  char hoge[10][MAX2];
だったら &は不要。

284 :283:02/10/02 04:47
あ、俺がよく読んでなかっただけだわ。
char hoge[MAX2];
と最初に書いてあった。ごめん。

285 :デフォルトの名無しさん:02/10/02 05:04
(´-`) oO(流行ってるのかな… 自己ツッコミ)

286 :デフォルトの名無しさん:02/10/02 06:17
(´-`) oO(みんなせっかちなんだよ。「早飯早糞早レス」プログラマに不可欠(ってどっかのスレで言ってた)

287 :デフォルトの名無しさん:02/10/02 06:22
(´-`) oO(流行ってるのかな… このキモイ顔文字)

288 :デフォルトの名無しさん:02/10/02 10:14
教えて下さい。
ファイルのステタースを確認したいのですが、
使い勝手のいい関数はあるでしょうか?
用途なんですが、ファイルに書き込む作業で、多人数が同時に
アクセスする可能性があるので、ファイルロックのような
機能を持たせたいと考えております。
どなたか教えて下さい

289 :デフォルトの名無しさん:02/10/02 10:22
厨デス

slen=strlen ( argv[2] );
と宣言したとして、
その確保した先頭のアドレスに
char ZERO = '0';
を入れたいんですけどドウスレバヨロシイノデショウカ?


290 :デフォルトの名無しさん:02/10/02 10:24
>>289
argv[2][0] = ZERO;

291 :289:02/10/02 10:29
>290サソ

アリがd

コソパイルできたけどcore dump吐キヤガッタ
ヽ(`Д´)ノ ウワァァン!!

ガンバッテミマス

292 :デフォルトの名無しさん:02/10/02 10:41
>>288
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/flock.2.html
ただ、ファイルロックを行わないツールで書き込まれたらどっちみちアウト

293 :デフォルトの名無しさん:02/10/02 10:59
>>292
解凍ありがとうございます。
私もFlockには目をつけていたのですが何故か使えません。
UNIXではないんですが…
ヘッダーが無いとVCがおっしゃるので。
ショートカットのリンク作るやつでやろうかなとか考えてます。
ありがとうでした。

294 :デフォルトの名無しさん:02/10/02 11:29
>>292
linuxのflock()って排他ロックしても書き込まれちゃうの?

>>293
「UNIXではない」から使えないんでしょ。Winなら
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_lockfileex.htm
これかな。

295 :ポチョムキン:02/10/02 15:42
1週間ほど前、こちらでgnuplotを使ってリアルタイムにプロットする方法を教えていただいた者なんですが、おかげさまでpopenを使ってデータをGnuplotに遅れるようになりました。しかし、gnuplotにエラーが
生じたときロボット制御の画面が崩れてしまいます。bash等の場合の
標準エラー出力の解決法はwebで見かけたのですが、gnuplotでは
うまくできませんでした。
gnuplotの標準エラーを出力させないようにするにはどうしたら
よいのでしょうか?

どなたかアドバイスしていただけると助かります。
よろしくお願いします。

296 :デフォルトの名無しさん:02/10/02 16:24
>>296
popen("(gnuplot > /dev/tty) >& /dev/null", "w");
じゃダメかい?

297 :デフォルトの名無しさん:02/10/02 16:37
自分でforkして、dupって、execしたら?

298 :デフォルトの名無しさん:02/10/02 18:50
だれか教えてください!
#include<stdio.h>
#include<stdlib.h>
int main()
{
char file[64];
char buf[256];
FILE *fp;

if(null==(fp=fopen("test.txt","w")))
{
printf("File Open Error!\n");
exit(1);
}
else
{
buf[0]='1';
while(buf[0] !='0')
{
printf("文字列を入力してくれ_");
gets(buf);
fputs(buf,fp);
fputs("\n",fp);
}
}
fclose(fp);
}
とVC++でコンパイルしたんですがエラーになってできません。
デバッグ情報みてもよく意味が分かりません。
どなたか分かる人いませんか?

299 :デフォルトの名無しさん:02/10/02 19:10
>>298
298.c
298.c(9) : error C2065: 'null' : 定義されていない識別子です。
298.c(9) : warning C4047: '==' : 間接参照のレベルが 'int ' と 'struct _iobuf *' で
異なっています。

そのまんまだと思うけど…

300 :288:02/10/02 19:30
すみませんどのように修正すればちゃんとコンパイルできるんでしょうか?
超初心者ですみません・・・

301 :デフォルトの名無しさん:02/10/02 19:31
NULL

302 :298:02/10/02 19:33
ありがとうございましたちゃんとできました感謝〜

303 :ポチョムキン:02/10/02 19:52
解決しました。お騒がせしました。

304 :ポチョムキン:02/10/02 19:54
>296
ばっちりでした。ありがとうございました。

305 :デフォルトの名無しさん:02/10/02 20:42
Windowsのコンソール用のアプリケーション用の画面制御ライブラリ
というのはありませんでしょうか(できればフリーで)

306 :デフォルトの名無しさん:02/10/02 21:20
>>305
エスケープシーケンスでいいやん

307 :デフォルトの名無しさん:02/10/02 21:52
>>306
Windows2000のDOSプロンプトでは使えません

308 :デフォルトの名無しさん:02/10/02 22:28
>>307
つかえるぞよ

309 :デフォルトの名無しさん:02/10/02 23:08
>>308
何か常駐ソフトが必要なのでは?ansi.sysとか。

310 :デフォルトの名無しさん:02/10/02 23:12
win2kのDOSプロンプトは使えるけど、
win2kのコマンドプロンプトでは使えない、
と言う話では無かろうな。

311 :デフォルトの名無しさん:02/10/03 00:49
すくなくともVCから立ち上がるDOSプロンプトでは使えません

312 :デフォルトの名無しさん:02/10/03 01:12
WinNT系では Win32 プログラムからエスケープシーケンスは使えない。
代わりに Console API を使う必要あり。
16bit プログラムなら ansi.sys を組み込めば使用可能。
って、数日前にもどっかで書いたような。


313 :デフォルトの名無しさん:02/10/03 01:14
cygwinでcursesを。
いや使えるかどうかしらんけど、
vimとか動いてるからたぶん使えるんだろう。

314 :デフォルトの名無しさん:02/10/03 01:23
>>305
BCC32の付属ライブラリじゃだめなのか?
エディタ制作中の初心者がいろいろ使っていたぞ。

315 :デフォルトの名無しさん:02/10/03 01:27
ansi.sysってどうやて組み込むの?

316 :デフォルトの名無しさん:02/10/03 01:31
>>294
linuxのflockはflockをよんだ時に、ほかのプロセスが排他ロックをしていたらロックが解除されるまで待つというだけ。
flockを呼ばずに書き込みを行えば書き換えられてしまう。
ひとつのプログラムからしか書き換えないようなファイルに対しては有効。


317 :デフォルトの名無しさん:02/10/03 02:41
>>177でバイナリファイルのコピーの質問をしたものですが

EOFをスキップするように書きかえると0xffをEOFと誤診しているような
非常に怪しい挙動を起こすのですが、何かいい方法は無いでしょうか。

318 :デフォルトの名無しさん:02/10/03 02:43
>>317
きちんとint型でうけとっているか?

319 :デフォルトの名無しさん:02/10/03 02:47
>>318
charで受け取っていたのが原因でした。
初歩的なミスに回答して頂いて有難うございました。

320 :デフォルトの名無しさん:02/10/03 02:48
>>317
>>181

補足すると、EOFはchar型では表せないint型の定数。正しくはint型という
わけではないが、getchar()がint型を返すため、EOFもint型だと考えれば
便利。

321 :デフォルトの名無しさん:02/10/03 02:55

●●●●●●●●「オセロさえ納期内に作れない=OO役立たず 」祭り●●●●●●●
/|         |  |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
  |         |  | ̄ ̄ ̄ /|                    ||
  |         |  |   / /|TTTTTT   TTTTTTTTTT||TTTTT
  |        /\ |  /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|
  |  /  /  |文|/ // /
  |/  /.  _.| ̄|/|/|/         Λ_Λ
/|\/  / /  |/ /           (___)
/|    / /  /ヽ            /〔 非OO 〕〕つ
  |   | ̄|  | |ヽ/l            `/二二ヽ
  |   |  |/| |__|/   Λ_Λ     / /(_)
  |   |/|  |/      ( ´∀`)   (_)    Λ_Λ
  |   |  |/      // /  ^ ̄]゚        (`   )
  |   |/        ゚/ ̄ ̄_ヽ         ⊂〔〔 非OO 〕


322 :デフォルトの名無しさん:02/10/03 03:13
>>321
OO?

323 :デフォルトの名無しさん:02/10/03 03:29
>>322
Object Orientedかなあ?なんでCスレに?

324 :デフォルトの名無しさん:02/10/03 03:37
ム板のほとんどのスレにコピペあり

325 :デフォルトの名無しさん:02/10/03 04:22
覚えたら即書こう

c="Asadayo"[2];

c=i"Asadayo";

326 :デフォルトの名無しさん:02/10/03 04:31
(ノ゚Д゚)朝だよ

327 :デフォルトの名無しさん:02/10/03 04:55
グローバル変数,グローバル関数には,先頭に
gnum;
gSeachcat();

とかでいいんでしょうか?

328 :デフォルトの名無しさん:02/10/03 05:07
グローバル関数ねぇ・・・

329 :デフォルトの名無しさん:02/10/03 05:11
グローバル関数ねぇ・・・

330 :デフォルトの名無しさん:02/10/03 05:15
素股ねえ・・・


331 :デフォルトの名無しさん:02/10/03 06:39
C言語はなんでこんなに未定義が多いんですか?

332 :デフォルトの名無しさん:02/10/03 06:46
>>331
本当のところはわからんけど
現在の仕様で未定義とされてる部分を、エラーからの復帰方法とか細かく定めたら、
それにスマートに対処する方法がない環境では複雑になったり遅くなったり、
全く対応できなかったりするからじゃなかろうかと

333 :デフォルトの名無しさん:02/10/03 06:59
>>332
ああなるほど。
様々な環境で使えるようにするためにはそうするしかないわけか。

334 :デフォルトの名無しさん:02/10/03 08:02
意味のある未定義なんかない。

335 :ネターリ:02/10/03 10:37
88 - 66 = 11

式が成立しません!
これに手を加えず成立させるにはどうすればいいれすか?

336 :デフォルトの名無しさん:02/10/03 11:02
*(int*)(88-66)=11

337 :デフォルトの名無しさん:02/10/03 11:12
#if 0
88 - 66 = 11
#else
(void)0
#endif
;


338 :デフォルトの名無しさん:02/10/03 11:41
>>335
せめて 88 - 66 = 22 とかけよ・・・

339 :デフォルトの名無しさん:02/10/03 11:49
>>335
88 - 66 = 11 + 11
手は加えてませんよ。












11を加えたんです。

340 :デフォルトの名無しさん:02/10/03 11:55
struct A
{
A const& operator -( int ) const{ return *this; }
bool operator =( int ) const{ return true; }
};

A() - 88 - 66 = 11

C++ならなんとか・・・なるかな?

341 :デフォルトの名無しさん:02/10/03 11:57
#define 88 77
88 - 66 = 11

342 :デフォルトの名無しさん:02/10/03 12:31
>>341
記号定数は英字か_で始まらないといけないんだYO!

343 :デフォルトの名無しさん:02/10/03 12:34
それ以前に = は代入だから成立してないよ

344 :デフォルトの名無しさん:02/10/03 13:08
#define COMMENT(expr) /* expr */
COMMENT(88 - 66 = 11)

345 :デフォルトの名無しさん:02/10/03 13:19
>>344
素直に /* 88 - 66 = 11 */ じゃだめ?

346 :デフォルトの名無しさん:02/10/03 13:24
ワラタ

347 :デフォルトの名無しさん:02/10/03 13:29
>>345
ソウイエバソウダネ

348 :デフォルトの名無しさん:02/10/03 16:30
main関数から
returnで抜けるのと、
exitで抜けるのでは、
なにか違いがあるんでしょうか?


349 :デフォルトの名無しさん:02/10/03 16:54
>>348
ないよ

350 :デフォルトの名無しさん:02/10/03 16:54
>>348
違いはない。
http://www.catnet.ne.jp/kouno/c_faq/c11.html#16

351 :デフォルトの名無しさん:02/10/03 17:45
>>348
ちょっとある。
exit()は一応関数コールなので、スタックがぎりぎりだとあぼ〜んする
ことあり。と言ってもほとんどそんな事は皆無だが。

352 :デフォルトの名無しさん:02/10/03 17:57
>>348
つい最近、同じような質問を見た記憶が。

353 :10000000:02/10/03 20:37
あいさつもなしに質問なんですがCでフォルダを指定して
そのフォルダに入っているファイルの名前をすべて挙げるには
どうすればいいでしょうか?

354 :デフォルトの名無しさん:02/10/03 20:39
>>353
Cの標準関数にはフォルダにアクセスする関数はない。
OS依存ではいくつか方法はあるけど、私には君のOSはわからない

355 :1000000:02/10/03 20:43
>>354
あいさつも無しにお礼です、ありがとう。
答えてくれて。
私はwin98SEだけど基本的にwin全般での方法はありませんか?
NTとか3.2とかはいいんですけど・・

356 :デフォルトの名無しさん:02/10/03 20:45
>353
popen("ls", "r")もしくはpopen("dir", "r")でがんがれ。

357 :デフォルトの名無しさん:02/10/03 20:48
プログラミングの勉強したいんですけど。
まとめてください。、何を詠んだあと何を読めばいいですか?
勉強方法の王道でおねがいします

358 :デフォルトの名無しさん:02/10/03 20:51
>>357
そんな大仕事をおまえのためにやれと?

359 :デフォルトの名無しさん:02/10/03 20:53
すいません・・でも・・有名な。。本の紹介でいいんで。。
まとめを。スレの1に書いといてくれれば。もっと、いいです、、

360 :デフォルトの名無しさん:02/10/03 20:55
>>359
お勧めの書籍スレがあるから、そこに書いてある本を
かたっぱしから読めばいいかも。


361 :100000:02/10/03 21:00
>>356
あいさつも無しに、うれしいです。
調べてみたところ私には全くの未知の関数でしたので
勉強してみます、パイプという言葉をCの中で知りませんでしたし。
それでわ。

362 :デフォルトの名無しさん:02/10/03 21:00
>>357
そういう質問してる時点で、王道から激しく外れてるが。

363 :デフォルトの名無しさん:02/10/03 21:01
>>359
> すいません・・でも・・有名な。。本の紹介でいいんで。。
スレの1に書いてあることも読めん奴はいくら本を読んでも
身に付かないと思うが...

 Cプログラマ必読 ・プログラミング言語C(通称 K&R)
 http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
 推薦図書/必読書のためのスレッド PART6
 http://pc3.2ch.net/test/read.cgi/tech/1033207156/

364 :デフォルトの名無しさん:02/10/03 21:22
>>361
だまされてるよ。

365 :デフォルトの名無しさん:02/10/03 21:25
>>364
だね。パイプじゃなくてバイブだよ!>>361

366 :356:02/10/03 21:35
>>364
ruby坊は去れ

367 :デフォルトの名無しさん:02/10/03 21:45
ruby基地外に「Perlについての質問箱」が潰されたよ。
ひどいもんだ。見てきてみ。


368 :デフォルトの名無しさん:02/10/03 21:50
ぷっ
くやしいか?ああ?

369 :デフォルトの名無しさん:02/10/03 21:53
お前の居場所はあのPerlスレしかなかったんだな。
可哀想な367
はやく自殺するなりなんなりしてくれ。

370 :Default:02/10/03 21:57
C言語でキーボードの入力を、別の処理をしながら逐次受け付けるように
するにはどうすればいいのですか?




371 :デフォルトの名無しさん:02/10/03 22:01
>>370
またその質問かよ。
それに環境書けって言われてただろ。
進歩のない奴はだめだ。

372 :デフォルトの名無しさん:02/10/03 22:08
>>370
別の処理をしながら時々キーボードの入力をチェックする

373 :Default:02/10/03 22:09
OSはLinuxで、コンパイラはgccです。
すみませんでした。
スレ立てるまでも無い・・・スレにも一応書いたのですが。
よろしくおねがいします。

374 :Default:02/10/03 22:11
>>372
キーボードの入力のチェックってどうやるんですか?

375 :デフォルトの名無しさん:02/10/03 22:29
>>373
GUI使ってるのか、使ってないのかも書くように。
使ってるのなら、そのライブラリもな。

376 :Default:02/10/03 23:03
たびたびすいません。
えーと、GUIを使ってて、Xlibを使ってます。
HPを調べてマウスの使い方は分かったのですが、キーボード
はわかりませんでした。

377 ::02/10/03 23:07
>376
そっか、わからなかったか。
、、、で?

378 :デフォルトの名無しさん:02/10/03 23:08
>>377
ruby坊氏ね

379 ::02/10/03 23:19
>377
確かに仕事で今はruby使ってるが。
唐突にそんなこと言われても
ムカツクよりも「
なんだこいつ??」
みたいな感じだな。

380 ::02/10/03 23:20
あ、自分を批判してもーたw

381 :デフォルトの名無しさん:02/10/03 23:20
>>376
Xlib キーボード
というキーワードをgoogleにかけたら
http://x68000.startshop.co.jp/~68user/xprogram/xlib-2.html
なんてものがでてきたが?

にしても、x68000とは。

382 :デフォルトの名無しさん:02/10/03 23:21
>>376
Xlibならキーチェックする方法あるだろ。
それ使えばいいじゃん。

383 :デフォルトの名無しさん:02/10/03 23:25
>>379, >>380
あの有名なruby基地外によく似てるがな。


384 :デフォルトの名無しさん:02/10/03 23:29
GCCのソースファイル見てるんだが、厨の俺にはどうしてもわからん記述がある。
iovfsscanf.cの中に

extern u_long strtoul __P((const char*, char**, int));
extern long strtol __P((const char*, char**, int));

こんな宣言があるんだが、これってコンパイラ通るのか?

385 :Default:02/10/03 23:33
>>381
欲しかった情報にぴったりです。そのサイト。
そこにあるソースを参考にして、いろいろやってみたいと思います。
ありがとうございました。


386 :デフォルトの名無しさん:02/10/03 23:36
>>384
__Pって、何かのマクロ?

387 :デフォルトの名無しさん:02/10/03 23:36
放送禁止マクロです

388 :デフォルトの名無しさん:02/10/03 23:43
#ifdef 〜〜
#define _P(x) (x)
#else
#define _P(x) ()
#endif
とかやってんじゃないの?

389 :デフォルトの名無しさん:02/10/03 23:57

●●●●●●●●恒例・「オセロさえ納期内に作れない=OO役立たず 」祭り●●●●●●●
http://pc3.2ch.net/test/read.cgi/tech/1032985885/l50
/|         |  |_____ΦΦΦΦΦΦΦΦΦΦΦ||ΦΦΦ
  |         |  | ̄ ̄ ̄ /|                    ||
  |         |  |   / /|TTTTTT   TTTTTTTTTT||TTTTT
  |        /\ |  /|/|/|^^^^^^ |三三| ^^^^^^^^^^^||^^^^^^^
  |      /  / |// / /|
  |   /  / |_|/|/|/|/|
  |  /  /  |文|/ // /
  |/  /.  _.| ̄|/|/|/         Λ_Λ
/|\/  / /  |/ /           (___)
/|    / /  /ヽ            /〔 非OO 〕〕つ
  |   | ̄|  | |ヽ/l            `/二二ヽ
  |   |  |/| |__|/   Λ_Λ     / /(_)
  |   |/|  |/      ( ´∀`)   (_)    Λ_Λ
  |   |  |/      // /  ^ ̄]゚        (`   )




390 :デフォルトの名無しさん:02/10/03 23:58
ANSI-Cなプロトタイプ宣言に対応していないオールドタイプなコンパイラの
ための対策かな

391 :デフォルトの名無しさん:02/10/03 23:59
    ∧∧
   /⌒ヽ)
  [ 祭 _]
  三___|∪
  (/~∪
  三三
 三三

392 :デフォルトの名無しさん:02/10/04 00:04
やっぱruby基地外が出没してるようだな。





393 :デフォルトの名無しさん:02/10/04 00:04
gccなら、このマクロのことじゃねぇの?
stdio.h

#ifndef __P
#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
#define __P(args) args
#else
#define __P(args) ()
#endif
#endif /*!__P*/

394 :デフォルトの名無しさん:02/10/04 00:34
>>387 ワラ

395 :age:02/10/04 02:07
mainなんかなくてもいいじゃん!

396 :デフォルトの名無しさん:02/10/04 02:13
>>395
そりゃそうだ。スタートアップスクリプトを書き換えて好きな関数から呼び出そう!

397 :デフォルトの名無しさん:02/10/04 02:34
mallocでメモリ確保したいんですが、
mallocで確保できる容量の制限とか、
デカイ容量確保すると危険とかってあるんでしょうか?


398 :デフォルトの名無しさん:02/10/04 02:41
そういうことは自分の処理系に訊いてくれ。
DOSなら、普通mallocで64KB以上のメモリは確保できないし
それ以下でも失敗することがある。

399 :デフォルトの名無しさん:02/10/04 04:09
>>397
失敗したらNULLが返るだけだからきちんと戻り値をチェックすれば問題ないと思うけど。

400 :デフォルトの名無しさん:02/10/04 05:09
400get

401 :デフォルトの名無しさん:02/10/04 05:12
すいません・・・マクロってどんな意味ですか?

402 :デフォルトの名無しさん:02/10/04 05:14
おっきい

403 :デフォルトの名無しさん:02/10/04 05:16
>>401
プリプロセッサのdefineディレクティブで定義されるもののことをマクロというようだ。
正式な言葉なのかただの慣習なのかはしらんが。

404 :401:02/10/04 05:22
レスさんくすー


405 :デフォルトの名無しさん:02/10/04 12:37
>>399
malloc() したときに, 確保できたものとして NULL を返さないような
環境もみたいだけど(自分では試してない), そういう環境では
もっと他の対策を取らないといけないのかも.

406 :デフォルトの名無しさん:02/10/04 12:52
>>405
ハア?

407 :デフォルトの名無しさん:02/10/04 13:18
>>405
ヲイヲイ、そんな危険な仕様のmalloc()なんか使い物にならないぞ。
捨ててしまえ。

408 :デフォルトの名無しさん:02/10/04 13:54
>>407
Linuxなんかそうだよ。

あまりに巨大なサイズを要求するとNULL返すけど、
小さい場合は触った瞬間にSEGVであぼーん。

よーするに、アドレス空間が使えることは保証するけど、
それに物理的な裏付けがあるという保証はない、と。

409 :405:02/10/04 14:11
いわゆる overcommit だと思う.
私なりの現状の理解では overcommit を認めるように実装された mmap(2) とか sbrk(2) で
実装された malloc(3) では, (もし malloc が確保した領域がちゃんと使えることを
保証するような実装になってなければ) malloc 時には NULL を返さないけど, その領域に
アクセスしたところで, 天罰が下る, ということで OK ?

私はこの辺の議論をする知識が欠けているから, みんなでこのスレなりの
議論をしてくれ.

ttp://search.luky.org/fol.2001/msg00337.html
ttp://home.jp.freebsd.org/cgi-bin/thread?mesid=%3c199910040604%2ePAA01232%40bluemoon%2eelec%2eryukoku%2eac%2ejp%3e

410 :デフォルトの名無しさん:02/10/04 14:18
>>408-409
冗談だろ?
それでは使えないじゃないか。

411 :デフォルトの名無しさん:02/10/04 14:23
h抜き厨うざいな・・・
http://search.luky.org/fol.2001/msg00337.html
http://home.jp.freebsd.org/cgi-bin/thread?mesid=%3c199910040604%2ePAA01232%40bluemoon%2eelec%2eryukoku%2eac%2ejp%3e

412 :デフォルトの名無しさん:02/10/04 14:28
>>409 のリンクより。
> Linux 2.2以降では、/proc/sys/vm/overcommit_memory に1を書き込むと
> overcommit動作をするようになりますが、デフォルトではovercommitしません。
ほう。知らなかった。
まぁ、そんなにでかいメモリ使うアプリ書いたこともないけど。

413 :88 - 66 = 11:02/10/04 14:58
誰も答えがわからなかったか? おまえら!!

モニターをひっくり返せアホ!


11 = 99 - 88




414 :デフォルトの名無しさん:02/10/04 15:08
>>413
エラー:左辺値が必要

415 :デフォルトの名無しさん:02/10/04 15:31
ははは、バカだなぁ。413も414も。

11をひっくり返したら、LLになるだろ。
LL=99-88
になるから、全く合法。
(変数宣言はねーねどな。)

416 :デフォルトの名無しさん:02/10/04 16:08
    ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ( ´Д`)/< センセー、 ; がないので成立しません。 BASICでもやってろ!
 _ / /   /   \____________
\⊂ノ ̄ ̄ ̄ ̄\
 ||\        \
 ||\|| ̄ ̄ ̄ ̄ ̄||
 ||  || ̄ ̄ ̄ ̄ ̄||

417 :デフォルトの名無しさん:02/10/04 16:48
>>413
手を使わずにモニターひっくり返すのは結構難しいですね。




自分が上下逆に見ればいいだけでは?
どっちにしろコンパイルできないが。

418 :デフォルトの名無しさん:02/10/04 17:46
>416
335によれば、
>88 - 66 = 11
>式が成立しません!
である。「式」として成立するかはセミコロンによらない。
たとえば、if( LL = 99 - 88 )の括弧の中も「式」である。

ちなみにセミコロンが要るのは、式文。
>expression-statement:
>  expression(opt) ;

419 :デフォルトの名無しさん:02/10/04 18:09
よしよし、あっちに積み木があるからあっちで遊ぼうね。

420 :416:02/10/04 18:27
>>418
この部分が式であっても、その式を含む文を
完成するためにはセミコロンが不可欠になる
(逆さでは無理)という意図で書いたんだが、

なるほど確かに335に「式として成立」と書いてあるんだな。
出所不明なので 413-415 しか読んでなかった。

421 :デフォルトの名無しさん:02/10/04 19:45
>>129
    ∧_∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ( ´Д`)/< センセー、 ; がないので成立しません。 BASICでもやってろ!
 _ / /   /   \____________
\⊂ノ ̄ ̄ ̄ ̄\
 ||\        \
 ||\|| ̄ ̄ ̄ ̄ ̄||
 ||  || ̄ ̄ ̄ ̄ ̄||

422 :デフォルトの名無しさん:02/10/04 20:14
↑C をはじめて知ってよっぽどうれしいんだな。

423 :デフォルトの名無しさん:02/10/04 20:14
#include <stdio.h>
main()
{
int a,b;
for(a=0;a<10;a++){
for(b=0;b<a;b++){
printf("*\n");
}
printf("\n");
}
ちゃんとできません。おしえてください


424 :デフォルトの名無しさん:02/10/04 20:17
>>423
最後の行に}をつけくわえる。

>>422
プ

425 :デフォルトの名無しさん:02/10/04 20:23
APIってなんすか?

426 :デフォルトの名無しさん:02/10/04 20:31
スレ違い。
API=アピ=アップルパイの略。

427 :デフォルトの名無しさん:02/10/04 20:32
>>425
スレ違い
http://yougo.ascii24.com/gh/04/000481.html

428 :デフォルトの名無しさん:02/10/04 20:50
scanf系は初心者にはお勧めできない、とよく聞くのですが
代替法を教えてくらさい。

int i;
scanf("%d",&i);
printf("%d",i);

としたときに i に文字列を入れられると怖いんです。

429 :デフォルトの名無しさん:02/10/04 20:54
>>428
int i;
char buf[30];

fget(buf,sizeof buf,stdin);
i=atoi(buf);
printf("%d",i);

エラーチェックしたかったらstrtolなりsscanfなりを。

430 :429:02/10/04 20:55
4行目はfgetじゃなくてfgets

431 :デフォルトの名無しさん:02/10/04 23:00
聞けーーーー

432 :デフォルトの名無しさん:02/10/04 23:35
じゃあ聞くけど、「未定義」「不定」 といったあいまいな部分
たとえば恒例の a=a++; などのやつな。
これらをきちんと動作定義しようという動きは無いのか?
それと、定義しないならしないで なぜWarningなりErrorなりを
コンパイルは吐かないんだ?

納得のいく説明しろ

433 :デフォルトの名無しさん:02/10/04 23:38
a=a++; これは決まった処理するだろ

434 :デフォルトの名無しさん:02/10/04 23:42
>>433
根拠は?

435 :デフォルトの名無しさん:02/10/04 23:58
人から貰った関数の引数に double *&a というのがあるのですが
これってどういう意味なんですか?

436 :デフォルトの名無しさん:02/10/05 00:01
それってC++じゃないの

437 :デフォルトの名無しさん:02/10/05 00:05
>>432
未定義や不定に関しては、プログラムをどう書き直しても解決しないわけで、
Warningを出すとうるさいからじゃない?。

>>433
有名なC FAQを見ればわかるよ

438 :デフォルトの名無しさん:02/10/05 00:09
>>436
C++スレで聞いたほうがいいのでしょうか?

439 :デフォルトの名無しさん:02/10/05 00:21
>>433
> a=a++; これは決まった処理するだろ

またこれかよ。いいかげん覚えろ、ヴァカ。

>>432

> それと、定義しないならしないで なぜWarningなりErrorなりを
> コンパイルは吐かないんだ?

厨房は、C なんか使うなってことだ。

440 :デフォルトの名無しさん:02/10/05 00:36
>435
(double*) (&a)と読めばわかるかも

441 :デフォルトの名無しさん:02/10/05 00:43
int a; int *p = &a;
*p = a++;

警告の出せる処理系を見てみたいもんだ。

442 :デフォルトの名無しさん:02/10/05 00:48
>>440
なるほどー。thxです。

443 :デフォルトの名無しさん:02/10/05 00:51
>>437
未定義や不定の処理を修正すれば解決するだろ。

>>439
>> それと、定義しないならしないで なぜWarningなりErrorなりを
>> コンパイルは吐かないんだ?

> 厨房は、C なんか使うなってことだ。

答えになってないな。脳味噌入ってるか?

444 :デフォルトの名無しさん:02/10/05 01:00
>>443
この話題いいかげん飽きた。
未定義でも自分で大丈夫だと思えば使えばいいじゃん。
誰も止めない。勝手にしろ。

445 :デフォルトの名無しさん:02/10/05 01:02
> 未定義でも自分で大丈夫だと思えば

自分の使う環境で動作が確認されれば

だろ。

446 :デフォルトの名無しさん:02/10/05 01:09
>>443
441は読んだか?

447 :デフォルトの名無しさん:02/10/05 01:25
ま  た  未  定  義  か

448 :デフォルトの名無しさん:02/10/05 01:35
C99に対応したコンパイラってありますか?

449 :デフォルトの名無しさん:02/10/05 01:37
age

450 :デフォルトの名無しさん:02/10/05 01:43
>>444
自分が大丈夫だと思っていれば、他人が大丈夫じゃないと思っていても
使っていいのか? ずいぶんと勝手な奴だな。協調性が無いんじゃないか?

>>446
全部出せとは言ってないよ。

451 :デフォルトの名無しさん:02/10/05 01:48
動作未定義なコードを、それと解ってて放置する理由って
なにかあるんだろうか…

452 :デフォルトの名無しさん:02/10/05 01:49
>>451
引継ぎ。

453 :デフォルトの名無しさん:02/10/05 01:53
文句があるなら使うな。もしくは自分で好みの言語を作れ。

454 :デフォルトの名無しさん:02/10/05 01:55
ビットフィールドで質問。

struct{
  unsigned char b1:1;
  unsigned int b2:1;
  unsigned long b3:1;
}BITS;

とかしたら、メモリイメージってどうなるんでつか?
あと、やっぱりBITS.b3はunsigned long型なんでつか?
よくわかんない。

455 :デフォルトの名無しさん:02/10/05 02:02
なんか共用体と混同しているようだな。

456 :デフォルトの名無しさん:02/10/05 02:06
>>453
C言語に限らず言語仕様に文句がないなんて、
良くわかってない初心者か、信者くらいなもんでしょう。

457 :デフォルトの名無しさん:02/10/05 02:20
>>454 bit 数指定ね・・・

458 :デフォルトの名無しさん:02/10/05 02:37
>>443
>> 厨房は、C なんか使うなってことだ。
> 答えになってないな。脳味噌入ってるか?

お前が、答えを読み取れないだけだろ ?

459 :デフォルトの名無しさん:02/10/05 04:05
scanf("%d",&a);rewind(stdin);
っていうのは
改行キーを吸収してくれますか?

460 :デフォルトの名無しさん:02/10/05 04:10
試せばわかるんじゃあ・・・・

461 :デフォルトの名無しさん:02/10/05 04:19
その前に構造体のパディングが入る。
32bits マシン(int=long=32)と仮定すると、(□/■は1バイト)
■□□□ char (□はPADDING)
■■■■ int
■■■■ long
16bits マシン(int=16,long=32)と仮定すると、(□/■は1バイト)
■□■■ char, int
■■■■ long
となるだろう。
ビットフィールドは実装依存であり、(○/●は1ビット)
●○○○○○○○ かもしれないし、
○○○○○○○● かもしれない。

462 :デフォルトの名無しさん:02/10/05 09:04
>>458
お前、文章読めるか? 答えになってないだろ。
答えが読み取れるというのなら言ってみろ。
どうせ、「お前には言ってもわからないよ」とか言い訳するのが関の山だろ。

463 : :02/10/05 09:05
fpBin = fopen("binary.txt","wb");
if( fpBin != NULL ){
 fwrite(buf,1,strlen(buf),fpBin);
fclose(fpBin);
}

書きこんだファイルがバイナリモードなのに,テキストファイルを見たら,ちゃんと書かれているのはなぜでしょうか?
普通なら,人間には理解しにくい字がバイナリで書かれているはずなんですが

464 :デフォルトの名無しさん:02/10/05 09:18
>>462
おまえが答えを読み取れてないだけだろ。
日本語がよめねーの?
アフォにはここにきてほしくねーな。
日本語学校でもいってろ!!

465 :デフォルトの名無しさん:02/10/05 09:27
>>463
バイナリモートとテキストモードの違いを調べてみれ

466 :デフォルトの名無しさん:02/10/05 09:29
>>465
おまえが調べろ!

467 :デフォルトの名無しさん:02/10/05 09:33
>>464
やはり、言い訳するのがやっとか(w
これ以上やっても無駄だから放置するにかぎるな。

468 :デフォルトの名無しさん:02/10/05 09:49
厨房は何を使えばいいの?

469 :デフォルトの名無しさん:02/10/05 10:01
>>467
やはり日本語が理解できないのか(w
これ以上やっても無駄だから無視するにかぎるな。

470 :デフォルトの名無しさん:02/10/05 10:35
#include <stdio.h>
main()
{
  int *p,i=10;
  p=&i;
  printf("%d\n",*p);
  return 0;
}
4行目と6行目は*付いてる。5行目に*が付かないのはなぜですか?

471 :デフォルトの名無しさん:02/10/05 10:41
>>470
p 指し示す先(iのアドレス)
*p 指し示す先の値(iの値)

472 :デフォルトの名無しさん:02/10/05 10:43
>>463
バイナリモードとテキストモードは改行文字の扱いに違いがあるだけでそ。
というか"\n"が0x0Aなのがバイナリモード
"\n"がUNIXだと0x0A,DOSだと0x0D0x0Aになるのがテキストモードでそ。

473 :470:02/10/05 10:49
>>471
わかるようなわからんような・・
宣言してないものを使って変な感じがするのですが

474 :デフォルトの名無しさん:02/10/05 10:52
>>473
int *p;はint型へのポインタの宣言。
p=&i;はpにiのアドレスを入れる。
printfの行の*pはpに入っているもの(iのアドレス)が指すものを参照する。

475 :474:02/10/05 10:53
訂正
×int *p;はint型へのポインタの宣言。
○int *p;はint型へのポインタpの定義。

476 :デフォルトの名無しさん:02/10/05 10:55
ポインタの定義と間接参照が同じ形だからいけないんだろうな・・・

477 :470:02/10/05 11:02
>>474>>475
このプログラムは使い方わかりました。ありがとう

参考書見てるとこれより全然複雑だ・・・・・

478 :439:02/10/05 12:19
>>462
> >>458
> お前、文章読めるか? 答えになってないだろ。
> 答えが読み取れるというのなら言ってみろ。

元々 C 言語は、高級アセンブラみたいな発想で作られてるから、「コンパイルしたコードがわからん奴は使うな」と言うことだ。
その昔は、int とポインタを相互にがんがん代入し合っても文句一つ言われなかった事ぐらい知ってるか ?
まあ、最近はアセンブラも読めない奴が C/C++ なんかを使うようになったから、いろんな警告を出すようになったけどね。
未定義の場合に警告を出せと言うのはいいけど、>>441 のようにできないケースがある。できるものだけやれと言う思想はわかるけど、できないなら全てやらないという思想もある。
大方の C の処理系製作者は「ウザイ警告出すぐらいなら、プログラマの裁量に任せた方がいいな」と考えて後者を採用してるんだろな。

それが嫌なら、自分で作れよ。コンパイラじゃなくても、lint みたいな奴でもいいんだからさ。

> どうせ、「お前には言ってもわからないよ」とか言い訳するのが関の山だろ。

そんなことは言わんけど、上に書いたことぐらい理解できない厨房は C なんか使わないほうが身のためだよ。

479 :デフォルトの名無しさん:02/10/05 12:36
HANDLE hf = CreateFile("test.dat",GENERIC_READ,0,NULL,OPEN_ALWAYS,0,NULL);

if(hf != INVALID_HANDLE_VALUE){
char buf[256];
DWORD read;
printf("オープン成功\n");
ReadFile(hf,buf,sizeof(buf),&read,NULL);
buf[read]='\0'; //バイナリモードでは,改行コードがないから?
printf("buf=%s",buf);
CloseHandle(hf);
}

buf[read]='\0';は何をしているんでしょうか?

480 :デフォルトの名無しさん:02/10/05 12:36
HANDLE hf = CreateFile("test.dat",GENERIC_READ,0,NULL,OPEN_ALWAYS,0,NULL);

if(hf != INVALID_HANDLE_VALUE){
  char buf[256];
  DWORD read;
  printf("オープン成功\n");
  ReadFile(hf,buf,sizeof(buf),&read,NULL);
  buf[read]='\0'; //バイナリモードでは,改行コードがないから?
  printf("buf=%s",buf);
  CloseHandle(hf);
}

buf[read]='\0';は何をしているんでしょうか?

481 :デフォルトの名無しさん:02/10/05 12:54
ファイルの中身を文字列とみなし、ASCIIZ文字列にしてるんでしょう。

ところで
> ReadFile(hf,buf,sizeof(buf),&read,NULL);
の第三引数は sizeof(buf)-1 にしないとまずいですね。

482 :デフォルトの名無しさん:02/10/05 13:11
>>478
プログラマの裁量に任せるというのならWarningなんてすべて出さなければ良い。
警告がウザイなら、ワーニングレベルを下げればいいだけの話だろ。
だいたい、未定義の動作のコードをプログラマの裁量にあわせてどうなるって言うんだ。
書いた奴の力量がわかる以外なんの意味も無いだろ。

483 :デフォルトの名無しさん:02/10/05 13:18
解りました。まとめましょう。

未定義や不定はCの『美徳』

これでよろしいかな?

484 :デフォルトの名無しさん:02/10/05 13:21
>>482
で、おまえは誰にどうしてほしいわけよ。
ここでわめいてたって何も変わらんぞ。

485 :デフォルトの名無しさん:02/10/05 13:26
Cなんか止めて、みんなJAVA使え、ってことじゃーねーの。

486 :デフォルトの名無しさん:02/10/05 13:29
なーんだ。じゃあスレ違いだから放置だな。

487 :デフォルトの名無しさん:02/10/05 13:32
>>484
別にここでどうしてほしいとも思わないよ。何かしてほしいならしかるべきところに言う。
ただ「未定義や不定でWarningやErrorにならない納得できる理由は無い。」という結論にしたいだけだ。
>>483は『美徳』という言葉が引っかかるが、それ以外に理由は無いという点で納得できる。

488 :デフォルトの名無しさん:02/10/05 13:39
「仕様です」

489 :デフォルトの名無しさん:02/10/05 13:40
>>488
warningにしてはいけない仕様は無いだろ。

490 :デフォルトの名無しさん:02/10/05 13:46
ワーニング

491 :デフォルトの名無しさん:02/10/05 13:47
仕様なんだからしようがない。

492 :デフォルトの名無しさん:02/10/05 13:52
>>487
このスレでそういう結論が出れば納得かー。
生粋の2ちゃんねらだな。

493 :デフォルトの名無しさん:02/10/05 13:56
>>481
日系ソフトウェアのサンプルプログラムなのだが・・・
-1するのは,最後の配列の次に代入しないため?
(255に\0を入れるため?)

494 :デフォルトの名無しさん:02/10/05 14:00
>>492
しかたないだろ。他に納得のいく理由を言えないのだから。

495 :デフォルトの名無しさん:02/10/05 14:23
仕様なんだから仕様が無いと書きたかったと思われ・・・

496 :デフォルトの名無しさん:02/10/05 14:53
> 日系ソフトウェアのサンプルプログラムなのだが・・・

日経系の記事を間に受けちゃダメ(T_T)

>-1するのは,最後の配列の次に代入しないため?
> (255に\0を入れるため?)

ビンゴ。データが256バイト以上あると、readは256になる。
んで buffer[read]=0 とやるとバッファオーバーランだね。

497 :デフォルトの名無しさん:02/10/05 15:24
>>456に反論しようかとも思ったがウザいんでやっぱやめた。

498 :デフォルトの名無しさん:02/10/05 15:56
>>487
> ただ「未定義や不定でWarningやErrorにならない納得できる理由は無い。」という結論にしたいだけだ。

未定義で警告やエラーになるケースはいくらでもある。(もちろん処理系依存だけど、例として return 文のない関数 (void 型は除くよ) の戻り値とか)

要は、a = a++; なんて言うコードを見つける労力とそれに見合う利益を見比べて、多くの処理系では警告やエラーにしなくていいと思ってるだけだよ。別に規格で決まっているわけじゃないし、嫌なら...

> それが嫌なら、自分で作れよ。コンパイラじゃなくても、lint みたいな奴でもいいんだからさ。

と言うだけのことなんだよ。まあ、こいつは...

> 別にここでどうしてほしいとも思わないよ。何かしてほしいならしかるべきところに言う。

とわめくことしかできない DQN みたいだから、何言っても無駄みたいだけどね。(しかるべきとこってどこだよ、言ってみな。ププッ。)

499 :デフォルトの名無しさん:02/10/05 16:00
Cの文句を言ってここの人たちに同意してもらいたい、ただそれだけのことだろう。
それで納得してぐだぐだ言わなくなるのなら快く同意してあげようじゃないか。

500 :デフォルトの名無しさん:02/10/05 16:16
うむ。
                               ≡≡≡( ・ω・)ノ500

501 :デフォルトの名無しさん:02/10/05 17:07
みんなくだらないことをうだうだ続けてるなぁ。
未定義で警告にならない例ってのはコンパイラを作っているところの趣味(たまに技術不足?)ってだけだろ。
最初(>>432か?)から、ただの趣味。特に警告にならない理由なんて無いって答えればよかったんだよ。
>>432も馬鹿だけど煽りだけで的確な返答が出来ない奴も馬鹿だね。

502 : :02/10/05 17:15
>>496
親切にありがとん

503 :デフォルトの名無しさん:02/10/05 17:27
501は自分の回答も馬鹿であることに気づいてるのか...

504 :デフォルトの名無しさん:02/10/05 17:35
>>503
し〜〜〜っ、それいっちゃダメ。>>501 は、今満足感でいっぱいなんだから。いらんこと言うとまた暴れだすかもしれないしね。

505 :デフォルトの名無しさん:02/10/05 17:41
>>503 >>504
し〜〜〜




























煽るだけならだまっとれ。

506 :デフォルトの名無しさん:02/10/05 17:45
改行迷惑だって

507 :デフォルトの名無しさん:02/10/05 17:46
a++だけの単文以外は全て警告を出すとか
ダメ?

508 :デフォルトの名無しさん:02/10/05 18:22
>>507
ダメ。

char *strcpy(const char *d, char *s)
{
char *s1 = s;
 while((*d++ = *s1++) != '\0')
  ;
 return s;
}

とかで警告でまくる。

まずは...

・同一式中で同一変数に対して書き込みが2回以上あるケース
・同一式中で同一変数に対して読み込みと書き込みが1回以上あるケース
・代入文で、同一変数に対して両辺で書き込みを行っているケース

は警告するとかじゃだめかなぁ。

509 :デフォルトの名無しさん:02/10/05 19:09
>>480
改行コードじゃないよ。0は文字列終端。

510 :デフォルトの名無しさん:02/10/05 19:34
agetoke

511 :デフォルトの名無しさん:02/10/05 19:59
printf以外の出力のほうほうありますか?

512 :デフォルトの名無しさん:02/10/05 20:04
puts,put_

513 :デフォルトの名無しさん:02/10/05 20:18
fprintf

514 :デフォルトの名無しさん:02/10/05 20:19
_write

515 :デフォルトの名無しさん:02/10/05 23:26
ビデオメモリに直接描画してこそ漢

516 :432=馬鹿:02/10/06 00:01
つーか、a=a++とかって、「Cの仕様」 じゃあ未定義だけど
「コンパイラの仕様」 だとバッチリ定義されてるんだよねー
ってのが言いたかった。 なんてね。

いやマジでコンパイラで弾いてほしいよな。
マジでエラーやワーニングにしない理由が和姦ねーよ

517 :デフォルトの名無しさん:02/10/06 00:02
死ぬほどデバイス依存

518 :デフォルトの名無しさん:02/10/06 00:14
>>516
> マジでエラーやワーニングにしない理由が和姦ねーよ

>>498
> 要は、a = a++; なんて言うコードを見つける労力とそれに見合う利益を見比べて、多くの処理系では警告やエラーにしなくていいと思ってるだけだよ。

これでもダメか ?

>>517
デバイス ? コンパイラ依存だろ ?

519 :デフォルトの名無しさん:02/10/06 00:20
>>515
ネットワークサーバなのでビデオメモリなぞ持っていない罠。
コンソールもシリアルコンソールだったりして。

520 :デフォルトの名無しさん:02/10/06 00:22
>>516
ANSI の「未定義」ってのはそういう事です。つか RTFM だ莫迦。

521 :デフォルトの名無しさん:02/10/06 00:30
>>518
517 は 516 に割り込まれました

522 :名無しさん@XEmacs:02/10/06 00:34
どうでもいいんですが
a = a++;
こんな文を書く人が実際にいるんですか?

523 :デフォルトの名無しさん:02/10/06 01:15
>>522
未定義です

524 :デフォルトの名無しさん:02/10/06 03:20
>>518
ダメだ。
if(a=b) に警告出すくせによー
怠慢だ。

525 :デフォルトの名無しさん:02/10/06 04:20
ところでさ、

526 :デフォルトの名無しさん:02/10/06 04:27
ゴラァ、言いかけて途中でやめんな!で、何だってんだ!


527 :デフォルトの名無しさん:02/10/06 04:39
>>524
if(a=b) の検出はすごく簡単だぞ。

528 :デフォルトの名無しさん:02/10/06 10:08
LinuxでBMP画像を読み込んで表示して、
その画像の中から目的の色(オレンジ)を探し出すプログラムを作りたいんですが
よく分からないんです・・・
今までに関数やポインタ、ファイルの入出力くらいしか学んだことが無くて・・・
位置からご教授願えないでしょうか?
よろしくお願いしますm(_ _)m



529 :デフォルトの名無しさん:02/10/06 10:20
>>527
> if(a=b) の検出はすごく簡単だぞ。

それにいっぱい奴やるいるからな。

>>524 も、気に入らないなら自分で作ればいいんだよ。

530 :デフォルトの名無しさん:02/10/06 10:22
>それにいっぱい奴やるいからな。

+ 激しく意味不明 +

531 :529:02/10/06 10:27
>>529
> それにいっぱい奴やるいるからな。

ちょっと変だな。

「それにやる奴いっぱいいるからな。」

に修正だ。

532 :デフォルトの名無しさん:02/10/06 10:30
>>531
>ちょっと変だな。
ご謙遜を、、
すごく変ですよ。

533 :デフォルトの名無しさん:02/10/06 10:32
>>529>>532
おまいら激しく面白い

534 :デフォルトの名無しさん:02/10/06 11:37
これって、違法なコードなの?
コンパイラに「 LValue じゃない!」って怒られたんだけど・・・

void f(int *a, int *b, int c, int d)
{
int i;

for(i=0;i<10;i++) *((c<d)?a:b)++=1;
}


535 :デフォルトの名無しさん:02/10/06 11:44
>>534
C++であれば合法

536 :デフォルトの名無しさん:02/10/06 11:44
>>534
頭大丈夫か ?

int a;
a++ = 1;

とやってんのと一緒だぞ。

537 :534:02/10/06 11:49
>>536
へ?どして?

538 :536:02/10/06 12:05
>>537
> へ?どして?

ごめん、頭大丈夫じゃないのは俺だ。* と ++ の結合順序勘違いしてた。

>>534
>>535 が言うように、C だとダメで、C++ だと OK。

539 :デフォルトの名無しさん:02/10/06 12:06
for(i=0;i<10;i++) (c<d)?*a++=1;:*b++=1;
じゃだめなの?

540 :534:02/10/06 12:06
>>535
>>538
へ?どして?


541 :534:02/10/06 12:09
>>539
いや、別にそれに相当するコードの書き方が
分からない訳じゃなくて、
一見正当そうに見えるコードにコンパイラが
ケチをつけた事にびっくりしただけの話

542 :539:02/10/06 12:10
って、ゆうかー
何でループのなかで比較繰り返しているの???
効率悪くなーい??

543 :539:02/10/06 12:11
そういう意味ね。542先走ってて恥ずかしいや

544 :デフォルトの名無しさん:02/10/06 12:12
> 効率悪くなーい??

最適化かければ比較は外でやると思う

545 :536:02/10/06 12:17
>>539
> for(i=0;i<10;i++) (c<d)?*a++=1;:*b++=1;
> じゃだめなの?

そりゃダメだろ、文法エラーだ。(';' が余分だよ。)

>>540
C は、条件演算子の結果は、左辺値になれない。(GCC とかの、拡張機能でサポートしていた記憶がある。)

だから、

int a, b, c;
a ? b : c = 1;

なんて式は、C ではダメだけど、C++ では合法。

546 :534:02/10/06 12:32
>>545
じゃあ、こんなのも駄目なの?
(基本的に今回の例と大差が無い様な気がするけど)

void f(int a, int b, int c[])
{
c[ a < b ? 0 : 1 ] = 1;
}

547 :デフォルトの名無しさん:02/10/06 12:33
>>545
a?b:c=1;ってaが真ならbを返し、偽ならcに1を代入してそれを返すという式にならない?
a?b:(c=1);としないとだめ?


548 :デフォルトの名無しさん:02/10/06 12:42
a?b:c=1;を-ansiオプションつけてgccでコンパイルしたら通ったよ。


549 :548:02/10/06 12:45
わるい、-pedanticオプションもつけたらだめだっていわれた。

550 :デフォルトの名無しさん:02/10/06 12:46
>>548
-pedantic 付けてみな。

551 :デフォルトの名無しさん:02/10/06 12:57
>>547
> a?b:c=1;ってaが真ならbを返し、偽ならcに1を代入してそれを返すという式にならない?
ならない。代入より条件演算子の方が優先順位が上。

>>546
物凄く大差がある。>>534
「代入式の左辺の中で左辺値になれないものを使うこと」が
マズいのではなくて、「左辺値になれないもの( c<d?a:b )に
左辺値を要求する演算子( ++ )を適用していること」 が問題。
*( c ? a++ : b++ ) = ... なら問題なし。

552 :デフォルトの名無しさん:02/10/06 13:01
>>546
> じゃあ、こんなのも駄目なの?
> void f(int a, int b, int c[])
> {
> c[ a < b ? 0 : 1 ] = 1;
> }

これは、大丈夫。( a < b ? 0 : 1 ) の部分は、左辺値じゃないから。
左辺値なのは、c[...] の部分だからね。

>>547
そう言うこと。

553 :デフォルトの名無しさん:02/10/06 13:04
a?b:c++; OK
(a?b:c)++; NG

正しい?


554 :デフォルトの名無しさん:02/10/06 13:09
a?b=1:c;
?と:の間ならOKなのか。。。

555 :デフォルトの名無しさん:02/10/06 13:13
>>528
GTKを使えば画像を読み込んで表示することができるんではないでしょか。


556 :534:02/10/06 13:17
>>552
もしかして今回の例でケチをつけられた所は
++ 演算子を使用している部分なの?

たとえば

*((c<d)?a:b)=1;

だったら問題が無かったのか?

557 :デフォルトの名無しさん:02/10/06 13:19
>>556
> たとえば
> *((c<d)?a:b)=1;
> だったら問題が無かったのか?

そう言うこと。

558 :534:02/10/06 13:22
>>557
なるほど、勉強になりますた。

559 :デフォルトの名無しさん:02/10/06 14:10
>555
えっとGTKをどのように使えばよいでしょうか・・・?
GTKはウィジェットをすこしつかったことがあるだけなんでよく分からないんです(汗;

560 :528:02/10/06 14:11
↑528です^^

561 :デフォルトの名無しさん:02/10/06 15:17
>>557
初心者をからかってたのしかったですか?

562 :デフォルトの名無しさん:02/10/06 15:20
>>561
> 初心者をからかってたのしかったですか?

何を言いたいの ? 単なる煽りか ?

563 :557:02/10/06 15:38
>>561
初心者は適当にあしらっておけばいーんだよ

564 :デフォルトの名無しさん:02/10/06 15:41
>>563
2ちゃんねらは性格歪んでるな(藁

565 :デフォルトの名無しさん:02/10/06 16:52
>>561
話の内容が自分には理解できなくて悔しかったですか?

566 :デフォルトの名無しさん:02/10/06 17:23
きみたち、たぶん、西友で買った霜降りジーパン履いてますね?

567 :デフォルトの名無しさん:02/10/06 17:30
今パンツ一丁だが、何か?

568 :デフォルトの名無しさん:02/10/06 17:31
俺は一応シャツも着てます

569 :デフォルトの名無しさん:02/10/06 17:36
俺は一応ブラだけ着けてます。

570 :デフォルトの名無しさん:02/10/06 17:39
>>569
> 俺は一応ブラだけ着けてます。

パンティーは ?

571 :デフォルトの名無しさん:02/10/06 17:41
おれはちんぽに女をつけてます。

572 :デフォルトの名無しさん:02/10/06 17:44
漏れはケツの穴に男がささってます

573 :デフォルトの名無しさん:02/10/06 20:47
すみません、あるバイトの中の、特定のビットをOFFにする方法を知りたいのですが
どなたかご存知ないですか?

574 :デフォルトの名無しさん:02/10/06 20:50
ビット演算かましてください

575 :デフォルトの名無しさん:02/10/06 20:51
x &= ~(1<<bit);

576 :573:02/10/06 20:58
>>574-575
ありがとうございます。おかげで問題が解決しました。
短い間にお答えいただきありがとうございました。

577 :デフォルトの名無しさん:02/10/06 21:25
すみません、longで宣言した変数の特定のビットをONNにする方法を知りたいのですが
なにかいい関数はありませんか?

578 :デフォルトの名無しさん:02/10/06 21:55
int n=123;
char ss[256];

sprintf(ss,"%3d",n);

ss[0]=1;
ss[1]=2;
ss[2]=3;
ss[3]=?;

ssの配列に入っている数字は,あってます?
文字列としては入っているんでしょうか?

int num=ss[0];
などはだめなんでしょうか?

579 :デフォルトの名無しさん:02/10/06 22:00
>>577
>>575を見て思いつかんのか…

x |= (1L << bit);

580 :デフォルトの名無しさん:02/10/06 22:03
>>578
何をしたいのかわからん。

まず、
ss[3]には'\0'が入ってる。

次に、
int num=ss[0];
をやっても構わんが、たぶん君の思ってる値とは違うものが入っているだろう。

581 :デフォルトの名無しさん:02/10/06 22:03
>>578
> ssの配列に入っている数字は,あってます?

合ってない。
あんたの環境がわからないから答えようがないけど、多分...
ss[0] = 49; ss[1] = 50; ss[2] = 51; ss[3] = 0;
になってると思う。

> 文字列としては入っているんでしょうか?

そう言うこと。

> int num=ss[0];
> などはだめなんでしょうか?

何を期待しているのかは知らないけど、num = 1 になることを期待してるならダメ。

582 :デフォルトの名無しさん:02/10/06 22:05
>>579
>>577 は、ネタだと思うが...。第一、ONN って何だよ ?

583 :デフォルトの名無しさん:02/10/06 22:22
>>582
ぐぐれ、話はそれからだ

584 :デフォルトの名無しさん:02/10/06 22:29
>>581

nt num=atoi(ss[0)]

もあかんですよね?;

585 :デフォルトの名無しさん:02/10/06 22:30
そんなもんまずコンパイルが通らん

586 :デフォルトの名無しさん:02/10/06 22:45
>>584
> nt num=atoi(ss[0)]

一行中に、三つ以上間違いがある投稿は、ネタとみなす。

587 :582:02/10/06 22:48
>>583
なかなか、おもろい。>> ONN

588 :デフォルトの名無しさん:02/10/06 22:52
>>586
3つ…?
ぷっ、指摘されて気付いた。笑いますた。

589 :デフォルトの名無しさん:02/10/06 22:53
文字列を返すDLLを作ったんですが、
リターンの後に動的に確保したメモリを解放するにはどうすれば良いんでしょうか

590 :デフォルトの名無しさん:02/10/06 23:03
int num=atoi(ss[0)]);

もあかんですよね?

591 :デフォルトの名無しさん:02/10/06 23:07
なんか最近ネタばっかだな

592 :デフォルトの名無しさん:02/10/06 23:08
>>590
ネタでなければ一回コンパイルしてから、
書き込んだほうがいい。

593 :デフォルトの名無しさん:02/10/06 23:28
ANSI Cのqsortで、swap作業はどうやってるんですか?
for (p = (char *) v, end = (char *) v + nmemb*size; p < end; p += size)
  ...
こういうループで調べていくのは分かったんですが。。。

594 :デフォルトの名無しさん:02/10/06 23:29
何をえらそーに

595 :デフォルトの名無しさん:02/10/06 23:30
>>589
メモリを確保して返す関数なら解放用の関数も作れ

596 :デフォルトの名無しさん:02/10/06 23:34
>>593
buf = malloc(size);
  :
memcpy(buf, p1, size);
memcpy(p1, p2, size);
memcpy(p2, buf, size);
  :
free(buf);

て感じじゃないの。swapするときにいちいちmalloc、freeしてたら遅くなるから、
qsort呼ばれたときにbufを確保して使いまわして、終わったときにfreeだろうな。
他に方法あるかな。

597 :デフォルトの名無しさん:02/10/06 23:37
つーか激しく外出。
このスレの >>16から読め。

598 :589:02/10/07 00:55
これでいいですか?


const char *buffer;

BOOL APIENTRY DllMain(HINSTANCE hInstance, DWORD ul_reason_for_call, LPVOID pParam)
{
  switch (ul_reason_for_call) {
  case DLL_PROCESS_ATTACH:
    buffer=malloc(16);
    break;

   case DLL_PROCESS_DETACH:
    free(buffer);
    break;
  }
   return TRUE;
}

__declspec(dllexport) const char *WINAPI res_c(){
    strcpy(buffer,"てすと");
    return(buffer);
}

599 :589:02/10/07 00:57
>>598
あと追加質問で、DllMain()の
 buffer=malloc(16);
を res_c()で行うのはOKですか?

600 :デフォルトの名無しさん:02/10/07 00:58
>>598
うむむ。windowsに詳しくないのだが、それ、リエントラントじゃないのでは。
共有ライブラリでリエントラントでないのはまずいんじゃないの。

601 :デフォルトの名無しさん:02/10/07 01:08
ポインタbufferは、プロセス別に取られるはずだから、別にいいんでわ?
Threadとか、ライブラリにグローバル変数使う事については知らない。

602 :600:02/10/07 01:17
>>601
あ、そうなんですか。失礼しました。

ただ、マルチスレッドでは問題が起きそうだね。
res_cを呼んだスレッドがあって、返ってきた物を使う前に
別のスレッドがres_cを呼んじゃって書き換えられるという
ことは十分ありうる。

603 :デフォルトの名無しさん:02/10/07 01:42
char c[80];

sizeof(c)

って可能なんですか?
どういう動作をしているんでしょうか?

604 :デフォルトの名無しさん:02/10/07 01:43
sizeof(char) * 80 になるYO!

605 :デフォルトの名無しさん:02/10/07 01:45
>>602
仮に文字列の書き換えがres_c内だけでしか行われて
いないなら、別スレッドで書き換えられても問題なし。

しかし、それ以前に >>598のやっていることは
あまり意味がないというか、一体何がやりたいんだ?

>  buffer=malloc(16);
> を res_c()で行うのはOKですか?
これをやるならわかるけど。

606 :デフォルトの名無しさん:02/10/07 01:46
>>604
つまり80ね

607 :デフォルトの名無しさん:02/10/07 01:47
テキストファイルの一行目だけを読み込んでSというAnsiString変数に代入したいのだが・・・

608 : :02/10/07 01:50
>>604

sizeof(char)*80

と毎回やっていた俺はあほですか?

自動で文字列数(配列数)を調べてくれるって事?
char型=1だからできる技なんですよね?

609 :デフォルトの名無しさん:02/10/07 01:51
で、何?

610 :デフォルトの名無しさん:02/10/07 01:51
>SというAnsiString変数
AnsiStringって型みたいだが、本当にCか?

611 :デフォルトの名無しさん:02/10/07 01:52
>>608
>char型=1だからできる技なんですよね?
んなこたーない

612 :607:02/10/07 01:53
C++でした。Stringに代入したいんです。

613 :デフォルトの名無しさん:02/10/07 01:54
>>608
int a[80]; なら sizeof(a) は sizeof(int)*80 になるよ。

> と毎回やっていた俺はあほですか?

80を #define しているなら別にいいんでないかな
たとえば
 char c[80]; を
 char* c = malloc(80);
に書き換えたときのために。

614 :デフォルトの名無しさん:02/10/07 01:54
>>612
String?C#か?

615 :デフォルトの名無しさん:02/10/07 01:54
>>607
C++Builderですか?

AnsiStringに>>を適用すると、改行文字も含めてファイルの中身を
全部読んでしまいますからねえ。

私はchar[]に一度読み込んで、S(buf)などのコンストラクタを呼び出して
いますがスマートじゃないですね・・・・・

616 :デフォルトの名無しさん:02/10/07 01:56
■ VisualC++(MFC限定)相談室 5■
http://pc3.2ch.net/test/read.cgi/tech/1028553308/


617 :デフォルトの名無しさん:02/10/07 01:56
>>607
std::stringなら、getline(strm, str); という形式が使える。

618 :616:02/10/07 01:57
ごめん。607しか見てなかった。
>>616は間違いです

619 :607:02/10/07 02:00
>>615
えぇ、C++Builderです。
TStringListで読み込むと、一行だけ必要なのに時間がかかると思うし・・・
簡単に言うと、Delphiの
var
F: TextFile;
S: String;
begin
AssignFile(F);
Reset(F);
Readln(F, S);
CloseFile(F);
を、C++でできないかな

620 :デフォルトの名無しさん:02/10/07 02:04
>>619
delphi知らんけど。
gets()じゃいかんの?

621 :デフォルトの名無しさん:02/10/07 02:22
>>619
AnsiStringにはpush_back()がないから、back_inserterも使えんしな。
getlineも使えない。

std::string str;
S = "";
getline(ifs, str); //もしくはホワイトスペースで区切られてもよいなら ifs >> str;
S.printf("%s", str);

とやって、一度std::stringに読み込んだ文字列をAnsiStringにコピーしてはどうか。

622 :Default:02/10/07 02:29
Xlibで、

57: XLookupString((XKeyEvent *)&event,string,sizeof(string),&key,NULL);
58: if ( string[0] == 'q' ){
59: goto FINISH;
60: }

のようにして文字キーの押されたのは取得できたのですが、文字キー以外のキー
の取得しかたがわかりません。どうやればいいんですか?
矢印キーを取得したいです。

623 :デフォルトの名無しさん:02/10/07 02:39
>>619
もう一度分かりやすく書きます。

std::ifstream(F, "text.txt");
std::string str;
AnsiString S;
std::getline(F, str);
S.printf("%s", str); // std::stringをAnsiStringにコピーする
F.close();

624 :デフォルトの名無しさん:02/10/07 02:46
やっぱりこの方がいいかな。

std::ifstream(F, "text.txt");
std::string str;
AnsiString S;
std::getline(F, str);
S.printf("%s", str.c_str()); // std::stringをAnsiStringにコピーする
F.close();

"%s"に対してstd::stringを適用した時はoperator*が呼ばれるわけで
すが、これがCスタイルの文字列を返すことは保証されてないわけで、
c_str()メンバ関数を適用すればいいかと。

625 :デフォルトの名無しさん:02/10/07 03:26
>>624
AnsiStringって知らないんだけど、
AnsiString S(str.c_str());
って出来ないの?

626 :デフォルトの名無しさん:02/10/07 04:28
>>625
できるようです。
コピーはprintf、初期化にはコンストラクタと使い分ければいいかな。

627 :デフォルトの名無しさん:02/10/07 05:23
>>626
まともな文字列くらすなら、
operator=(const AnsiString&)/operator=(const char *)くらいは
用意されてると思うのだが・・・

つーか、ここCすれだよな。

628 :デフォルトの名無しさん:02/10/07 06:28
本を読んでいたら、こんなのを見かけました。
(void *(*)(void *))func <-- funcは関数

なんで(void *)funcだけじゃだめなんですか?


629 :デフォルトの名無しさん:02/10/07 06:46
(void *)func は、関数funcのアドレスを
void*にキャストする式。

(void *(*)(void *))funcは、funcのアドレスを
void*をとり、void*を返す関数ポインタにキャストする式。

型が違う。

630 :デフォルトの名無しさん:02/10/07 06:48
>>628
関数へのポインタへのキャスト。

631 :600:02/10/07 08:10
>>628
その例における、funcに代入できる関数のプロトタイプは

void *f(void *);

だ。

632 :デフォルトの名無しさん:02/10/07 08:13
>>631
がーん、変なのが残ってた。
キャストか。キャストだよな。代入はできないよな…

633 :デフォルトの名無しさん:02/10/07 11:11
>>596
mallocしなくても出来るだろ。

void memswap(char *p1, char *p2, size_t len)
{
 while (len-- > 0) {
  char t = *p1;
  *p1++ = *p2;
  *p2++ = t;
 }
}

634 :デフォルトの名無しさん:02/10/07 11:45
>>633
外出。

635 :デフォルトの名無しさん:02/10/07 11:53
>>633
遅いコードだなおい・・・

636 :デフォルトの名無しさん:02/10/07 13:14
>622
XLookupString 後に key に入っている KeySym を使いましょう。


637 :596:02/10/07 18:37
>>635
ま、3回もmemcpy呼ぶのとどっちが遅いかはなんとも言えんが(w

638 :デフォルトの名無しさん:02/10/07 18:41
というか、>>36でも言ったけどqsortは失敗が許されないからmallocは使えない。


なんでqsortの要素の交換方法なんてマイナーな話題が二度も同じスレででるんだろう。

639 : :02/10/07 22:47
int num[NUM_SIZE];

&numとnumが同じなの?

numは,配列の先頭アドレスですよね
&numは・・・?
&は,アドレスを指すから・・・?

640 :デフォルトの名無しさん:02/10/07 23:07
ageてないからネタ確定ってことでよろしいか?
ネタじゃないんなら>>1のリンク読め

641 : :02/10/08 00:28
int num[NUM_SIZE];

&numとnumが同じなの?

numは,配列の先頭アドレスですよね
&numは・・・?
&は,アドレスを指すから・・・?

642 : :02/10/08 00:32
ネタ=sageはいかがなものか

643 :デフォルトの名無しさん:02/10/08 00:38
>>641
まず
>&numとnumが同じなの?
なんでこんなふうに思っちゃったのかが問題だ

644 :D級初心さ:02/10/08 00:44
641さんの書き込み見て

#include <stdio.h>
#include <conio.h>

int main()
{
int num[]={1,2,3};
printf("%d %d %d %d",num, &num, *(&num), **(&num));
getch();
return 0;
}

ってやったんですけど、結果が
688760 688760 688760 1

ってなりました。どうして、numと&numがおんなしなんですか?


645 :デフォルトの名無しさん:02/10/08 00:46
構文豆腐

646 :デフォルトの名無しさん:02/10/08 00:49
&num は配列のアドレスを表す
num は配列そのものを表すが配列の先頭要素のアドレスへの暗黙の変換がある

しかしポインタを%dで受け取るのは止めようぜ

647 :デフォルトの名無しさん:02/10/08 00:50
   λ...............    。るくてっ逝だ当本

648 :デフォルトの名無しさん:02/10/08 00:51
>>646
*(num+1)=5;
と、使えますもんね。

649 :デフォルトの名無しさん:02/10/08 01:05
>>643
http://piza.2ch.net/tech/kako/967/967985026.html
の62を見て

650 :デフォルトの名無しさん:02/10/08 01:13
>>649
これが初代?
しかしこの痛い1でよくこれだけ長寿のスレができたもんだな・・・

651 :デフォルトの名無しさん:02/10/08 01:31
>>649
このスレの「俺」ってそこの1だったんだね。目から鱗が落ちました。

652 :デフォルトの名無しさん:02/10/08 01:34
みなさん 迷える子羊に合いの手を(シャンシヤン!)

私は、ソースの書き方に ほんの少々のこだわりを持ってCのプログラミング
をしています。でも同僚に言わせると「その書き方は邪道」と言われて
今悩んでいます。みなさんの意見を聞かせてください。


{は、その行の末尾に付ける
   if(a==b){
      c=d;
      e=f;
   }
理由 {を単独で1行にすると、1画面で見えるコードの行数が少なく
   見にくい。と思う。
   
   
   
一部が異なるだけで、同じ内容が構文が連続するときは、1行中でも
複数の命令可
   if(a==1){ printf("NEC\r");   c=sub(1); }
   if(a==2){ printf("FUJITSU\r"); c=sub(2); }
   if(a==5){ printf("IBM\r");   c=sub(5); }
   if(a==6){ printf("DELL\r");   c=sub(6); }
   if(a==8){ printf("COMPAQ\r"); c=sub(8); }
   if(a==9){ printf("APPLE\r");  c=sub(9); }
理由 COPY&Pasteで複写して、必要な部分のみ変更すれば早く書ける
   ぱっと見に、何をしているのかがわかりやすい。
   1行には1命令で書くと、リストが長くなり、見にくい、と思う。

どんなもんでしょうか。

653 :デフォルトの名無しさん:02/10/08 01:46
>>652
{は}とそろえたほうがどこからどこまでが対応するブロックかわかりやすいでしゅ
行末につけるとアンチK&Rにキモがられましゅ

if ( a==1 ) printf( "NEC\r" ), c=sub(1);

とかできるかもしれましぇん

654 :デフォルトの名無しさん:02/10/08 01:47
俺もそう書いてる
特にクレームつけられたことはないね

655 : :02/10/08 01:48
>>652
> {は、その行の末尾に付ける

センスと好みの問題なのでどうでもいい。

> 一部が異なるだけで、同じ内容が構文が連続するときは、1行中でも
> 複数の命令可

同じような内容が3箇所以上出てくることに疑問を持たないのは
どうかと思う。

656 :デフォルトの名無しさん:02/10/08 02:01
   if(a==1){ printf("NEC\r");   c=sub(1); }

はBASIC臭がするからイヤだ。

657 :デフォルトの名無しさん:02/10/08 02:10
結論。
コーディングスタイルを語るのもいいが、
その前にコードの設計を見直した方がいい。

658 :デフォルトの名無しさん:02/10/08 02:18
漏れの場合、ローカル変数漏れを防ぐブロック化を多用するんで
if (a == b)
{
 do something;
}

if (a == b) do something;
{
 other things;
}
の区別がしにくいので、特に制御構文の場合は
if (a == b) {
 do something;
}
にしてる

逆に関数の宣言とか、実行文中に現れないヤツは
void func_hoge(int arg)
{
 do something;
}
にしてる

こっちのほうがよっぽど汚い(藁)

659 :デフォルトの名無しさん:02/10/08 02:22
俺はこう書く
for(〜){
  for(〜){
〜〜〜〜
} }
やっぱダメ?

660 :デフォルトの名無しさん:02/10/08 02:32
りすぱーが、コードの最後を
  )))))))))))
とかで終えるのを思い出した。

661 :デフォルトの名無しさん:02/10/08 02:36
>>660
LispじゃないC系言語で
}}}}}
ってのを見た時には憤死するかと思った

662 :デフォルトの名無しさん:02/10/08 05:46
>>659
やめてほしい(^_^;)

663 :デフォルトの名無しさん:02/10/08 06:03
ランダムに発生させた0〜9までの整数を
DWORD型、例えば 0x007fffff の7の部分に入れたいのですが
どうすればいいのでしょうか?
例えばrandで3が出たら 0x003fffff にするといった具合です。
できれば0〜15まで整数を発生させて0〜fに置き換えたものを
7以外の部分にも入れられるといいのですが・・・


664 :デフォルトの名無しさん:02/10/08 06:28
a = (a & ~(0x0f <<20)) | (rand_val <<20);

665 :デフォルトの名無しさん:02/10/08 06:28
int r = rand() % 15;
DWORD v = 0xfffffUL | (r << 20);
printf( "result: %x\n", v);

666 :デフォルトの名無しさん:02/10/08 06:31
randの罠
http://www.catnet.ne.jp/kouno/c_faq/c13.html#16

667 :デフォルトの名無しさん:02/10/08 06:34
>>663
いくつか解がある。DWORDの型がわからんが、
たぶんunsigned longのtypedefだろうと仮定する。

乱数の値はr(0 <= r < 10)とするよ。求める値をvに代入する。
まず無理やりな解から。

char buf[7];
sprintf(buf, "%dfffff", r);
v = strtoul(buf, NULL, 16);

これはやってることがアフォなんでやらないように(w
で、正当な答は

v = ((DWORD)r << 20) | 0xfffff;

他にもあるかな。

>できれば0〜15まで整数を発生させて0〜fに置き換えたものを
>7以外の部分にも入れられるといいのですが・・・

意味がよくわからない。0x00000000〜0x009fffffの乱数を
発生させたいという意味だろうか。だとすると0〜15の乱数を発生させる
やりかたがわかるのならできるんじゃないかな?

668 :デフォルトの名無しさん:02/10/08 10:09
各桁にランダムな値を順に入れて行けば良い
桁数分繰り返せば出来る、と言うのが適当なのか?
シフトを1回に一桁づつすればとか
ヒントになるようなならないようなことも書いておく。

669 :デフォルトの名無しさん:02/10/08 10:28
質問。
c == EOF のあと、もういちど c = fgetc(fp) とやった場合、
c == EOF になることは保証されますか?

670 :デフォルトの名無しさん:02/10/08 11:11
はい

671 :うんっちっち坊や:02/10/08 13:31
ポインタって一体どんなときに使うのですか?
ポインタを知らずして、ゲームは今まで作ってきました。
特に問題なかったのですが、今資格のために正しいC言語を
勉強してるのですが、ポインタがいまいちわかりません。

どういうものなのか、どういうときにつかうのか。簡単におしえてください。


672 :うんっちっち坊や:02/10/08 13:36
えーっとたとえば
Aという数値データがあって
1つはAそのもの。もうひとつ*zは
A+5の値を毎回表示とかってときに使うんですかね?
言葉ヘタクソですけど。

*z=&A+5
A 1,2,3,4,5,6、・・
*z 6、7、8、9、10、11・・  みたいな。

でも
*zを使わないでも
Z=A+5
でも一緒だし、なんか数が変になっちゃう例ってないですか?
そういうときに使うんですよね?

673 :デフォルトの名無しさん:02/10/08 13:38
>>671
http://pc3.2ch.net/test/read.cgi/tech/1030901827/l50
あたりを読め

674 :デフォルトの名無しさん:02/10/08 14:18
>>671
FILE *fp;
fp = fopen(filename, "r");
とか
void f(int *ap) {

}

int a[10];
f(a);
とか

675 :nobodyさん:02/10/08 14:42
>>674
int a[10];
f(a);
って?ポインタ入ってないんですが

676 :デフォルトの名無しさん:02/10/08 14:45
画像処理ボードから取り込んだデータ(画素値,char型)をintに変換したい
のですが,atoiを使ってるのですが,うまくいきません.
なんか他に方法ありますか?

取り込むデータは
char data;
で定義しています.

677 :676:02/10/08 14:48
ボードから正しく取り込めていることは確認しています.
あと.atoiを使うと,"char"を "const char*"に出来ないとか出ます.

678 :デフォルトの名無しさん:02/10/08 14:49
>>676
文字列で取り込んでいるの?

679 :デフォルトの名無しさん:02/10/08 14:50
>>676,677
char data;
int idata;
idata = data;

680 :デフォルトの名無しさん:02/10/08 15:23
>>675
> って?ポインタ入ってないんですが

関数の引数がポインタなんだと思うが。

681 :675:02/10/08 15:24
>>674
int a[10];
f(a);
ポインタ演算子入ってないんですがf(a)のaはポインタ
というのですか。



682 :675:02/10/08 15:26
>>680
ありがd。書き込みのタイミング悪かったっす。


683 :680:02/10/08 15:29
>>682
まずは >>1のリンクにある C FAQ を読んだ方がいい

684 :デフォルトの名無しさん:02/10/08 15:33
>>672
以下のプログラムの???を埋め、
int型の数値を入れ替えるswap関数を作ってみろ
#include <stdio.h>
void swap( ???, ??? )
{
  ???
}

int main(void)
{
  int a = 10, b = 20;
  printf("a = %d, b = %d\n", a, b); /* a = 10, b = 20 */
  swap( ???, ??? );
  printf("a = %d, b = %d\n", a, b); /* a = 20, b = 10 */
  retrun 0;
}


685 :デフォルトの名無しさん:02/10/08 15:40
int &a
int &b
*a^=*b^=*a^=*b;
&a
&b

686 :675:02/10/08 15:44
>>683 Thanks much. 激しく厨でスマソ
「配列とポインター」の章にございました。
http://www.catnet.ne.jp/kouno/c_faq/c4.html#8の質問に
; が落ちてました。>厨が何ぬかすか

687 :デフォルトの名無しさん:02/10/08 15:52
>>685
ハズレ
> int &a
> int &b
int *a
int *b

688 :デフォルトの名無しさん:02/10/08 16:07
ま た 未 定 義 か

689 :676:02/10/08 16:19
>678
1バイト文字です.データが8ビットなんで.
>679
試してみたらうまくいってるみたいです.ありがとうございます.

690 :デフォルトの名無しさん:02/10/08 16:21
>>689
文字と文字列の違いがわかっちょらんな

691 :デフォルトの名無しさん:02/10/08 18:58
>>690
違う。
文字と数値をわかっていない。

692 :663:02/10/08 19:45
>>664-668
ありがとうございます

>>667
例えば 0x7f3c90 は
7f → 音の強さ 00〜ff
3c → 音 3c=ド (3d=ド# 3e=レ 3f=レ# 40=ミ 41=ファ....)
9 → 1001(b) = 音を鳴らす (1000(b) = 音を止める)
0 → チャンネル番号
ということだそうです。(下のページより)
 ttp://hp.vector.co.jp/authors/VA007941/program/no2090.html

で、上のデータ 0x7f3c90 は音程が3cなわけですが
音程を3eや40などに変えたい場合、どうすればいいのでしょうか?
(ランダムの話しは忘れてください(汗)


693 :デフォルトの名無しさん:02/10/08 19:48
(既にあるデータ(0x7f3c90でも良い??))*0x110011+0x000100*(0x3e)
で、出来ない?

694 :デフォルトの名無しさん:02/10/08 20:45
#define ONTEI_HENKOU(a, b) \
  (((a) & ~0xff00UL) | (((b) & 0xff) << 8))

x = ONTEI_HENKOU(0x7f3c90, 0x3e);

695 :デフォルトの名無しさん:02/10/08 20:57
あっ、そっかゴメン、16進数なのだからffだねw
&の方が適しているし手間かけて済まん。

696 :デフォルトの名無しさん:02/10/08 20:57
>>692
汎用の関数作って使いまわしたほうがよくないか?
音程以外にも変えたいだろうし。

#define OFFSET_PITCH 8
#define OFFSET_VELOCITY 16
#define OFFSET_NOTE_ONOFF 4
DWORD set_byte(DWORD data, unsigned char value, int offset) {
 return (data & ~(0xff << offset)) | (value << offset);
}
DWORD set_nibble(DWORD data, unsigned char value, int offset) {
 return (data & ~(0xf << offset)) | (value << offset);
}
DWORD set_pitch(DWORD data, unsigned char pitch) { // 音程を変える
 return set_byte(data, pitch, OFFSET_PITCH)
}
DWORD set_velocity(data, unsigned char velocity) { // 強さを変える
 return set_byte(data, velocity, OFFSET_VELOCITY);
}
DWORD set_note_on(data) { // 音を鳴らす
 return set_nibble(data, 0x9, OFFSET_NOTE_ONOFF)
}
DWORD set_note_off(data) { // 音を止める
 return set_nibble(data, 0x8, OFFSET_NOTE_ONOFF)
}
みたいな感じで。チャンネルを指定するやり方は自分で考えてくれ。
行数多すぎだバカ、と文句言われたので詰めるのに苦労した(w

697 :デフォルトの名無しさん:02/10/08 21:01
Cの質問です!

(1)次の4つの記号 ┏ ┓┗ ┛を用いて4角を出力する rect() 関数を作成しましょう. ? 出力例 ┏┓ ? ┗┛
(2)さらに┃を利用して, 4角の縦のサイズを変えられるように rect() 関数を変更しましょう.
 Hint. rect(int n) というように引数 n を取って, n の数だけ ┃┃ を出力します.

だれかこの問題を解いてください!


698 :デフォルトの名無しさん:02/10/08 21:04
>>697
×:Cの質問です!
○:Cの宿題です!
よってスレ違い

宿題手伝いますYO!!
http://pc3.2ch.net/test/read.cgi/tech/1029422194

699 :デフォルトの名無しさん:02/10/08 21:05
>>697
どういうふうにやればいいと思う? というか君、Cを学ぶ気ある?
あるんなら、ヒントだけにしとくし、全くないのなら、答え書いちゃうけど。

700 :699:02/10/08 21:06
>>698
あ、そうか、ここ宿題スレじゃなかった。すんませんですた。

701 :デフォルトの名無しさん:02/10/08 21:06
ヒントでお願いします!

702 :デフォルトの名無しさん:02/10/08 21:08
ヒント
・もっと自分の頭で考えましょう

703 :デフォルトの名無しさん:02/10/08 21:08
>>700
他のスレにも書き込んでおいて知らなかったはないだろ。

704 :デフォルトの名無しさん:02/10/08 21:09
>>699
2chにあるまじきレスですな。

705 :699:02/10/08 21:12
>>703
いや、おれは>>698じゃないんだが…

706 :デフォルトの名無しさん:02/10/08 21:14
>>705 すまん。まちがいた。

707 :697:02/10/08 21:15
(1)#include <stdio.h>
main() {
printf("┏┓\n");

printf("┗┛");
}

はこれで表示されることがわかったのですが、(2)がわかりません。
ヒントだけでいいのでお願いします!

708 :デフォルトの名無しさん:02/10/08 21:16
>>705
 >>697だろ

709 :デフォルトの名無しさん:02/10/08 21:17
もうグダグダだな。

710 :デフォルトの名無しさん:02/10/08 21:18
>>707
rect関数じゃないじゃん

711 :699:02/10/08 21:18
>>708
そ、そうですた。ウワァァァ

712 :デフォルトの名無しさん:02/10/08 21:19
>>697
マルチやめれ!
http://pc3.2ch.net/test/read.cgi/tech/1029422194/531


713 :697:02/10/08 21:20
すみません。宿題の方で聞けといわれていたもんで・・・
悪気はなかったんです。

714 :デフォルトの名無しさん:02/10/08 21:21
>>707
> ヒントだけでいいのでお願いします!

[重要ヒント]
forを使う。


715 :デフォルトの名無しさん:02/10/08 21:22
#include<stdio.h>
int main(void){
int i,hoge;scanf("%d",&hoge);printf("┏┓\n");
for(i=0;i<hoge;i++){printf("┃┃\n");}
printf("┗┛\n");return 0;}
/*この変数hogeの数値を変更することによって┃┃の長さは変わる*/

716 :デフォルトの名無しさん:02/10/08 21:23
>>707 ヒント:10回までは表示できる
void rect(int n) {
  printf("┏┓\n");
  swich(n) {
  case 10:printf("┃┃\n");
  case 9:printf("┃┃\n");
  case 8:printf("┃┃\n");
  case 7:printf("┃┃\n");
  case 6:printf("┃┃\n");
  case 5:printf("┃┃\n");
  case 4:printf("┃┃\n");
  case 3:printf("┃┃\n");
  case 2:printf("┃┃\n");
  case 1:printf("┃┃\n");
  }
  printf("┗┛\n");
}

717 :デフォルトの名無しさん:02/10/08 21:24
つうか、わざわざ関数作ってやることなのか?

718 :デフォルトの名無しさん:02/10/08 21:25
つーかお前ら優しすぎるぞ。

719 :デフォルトの名無しさん:02/10/08 21:26
>>718
やっと俺が教えれる問題だったので。

720 :デフォルトの名無しさん:02/10/08 21:34
枠がるな

721 :697:02/10/08 21:34
皆様、どうもありがとうございました!
感動しました。
これを応用していろいろ頑張ってみます。

722 :デフォルトの名無しさん:02/10/08 21:35
>>721
ついでにマルチはしないように。

723 :697:02/10/08 21:35
>>722
OKです

724 :デフォルトの名無しさん:02/10/08 21:36
void rect( int n )
{
int i;
printf( "┏┓\n" );
for( i=0; i<n; i++ ) printf( "┃┃\n" );
printf( "┗┛\n" );
return;
}

725 :デフォルトの名無しさん:02/10/08 21:38
スペースキーを押したというのを読み取るにはどうすればいいですか?

726 :デフォルトの名無しさん:02/10/08 21:41
int main(){
  printf("input n ");
  scanf("%d",&n);
  rect(n);
  return 0;
}


727 :デフォルトの名無しさん:02/10/08 21:42
>>725
getcher()

728 :デフォルトの名無しさん:02/10/08 21:42
>>725
if (スペースキーが押されたか) {
  押された。
}





OSによって違う

729 :デフォルトの名無しさん:02/10/08 21:43
>>728
間違い

処理系によって違う

730 :デフォルトの名無しさん:02/10/08 21:44
>>725
>>370-

731 :デフォルトの名無しさん:02/10/08 21:45
>>725
>>370-371

732 :692:02/10/08 21:52
>>693-696
うおー ありがとうございます
道が開けますた!

733 :デフォルトの名無しさん:02/10/08 21:56
n[i]まとめられた各々の実数をまためて足す場合どうすればいいですか?
n[1]=1 n[2]=2 n[1]+n[2]=3みたいな感じで。。

734 :デフォルトの名無しさん:02/10/08 22:01
float sum=0.0;//float実数型(doubleでもよし)
for(i=0; i<n; i++)//n個のデータのときはこう
  sum+=n[i];

735 :733:02/10/08 22:02
734
ありがとうございました

736 :デフォルトの名無しさん:02/10/08 22:03
int ii:
int nn=0;

for(ii=0; ii<i; ii++ ){
  nn = n[ii];
}

737 :734:02/10/08 22:08
ごめん
n[],n一緒に使えないじゃん。直しといて。逝って来ます。

738 :デフォルトの名無しさん:02/10/08 22:08
>>736
>>734から2分遅れの上に間違ってる
>   nn = n[ii];
nn += n[ii];

739 :デフォルトの名無しさん:02/10/08 22:14
>>738
>>733 の「各々の実数を」と言うところは、直さなくていいのか ?

740 :_:02/10/08 22:16
<突然ですがここで問題です。>

和宛ゲームの作成!
仕様:ある任意の数(固定)をプレイヤーは当てます。任意の数字は1〜100
 答えられる回数は10回。プレイヤーは答えるたびにあとチャンスはn回
 です。との情報を受ける。
 外れた場合は入力した数字が任意の数字より大きいか小さいか知らせる。
 10回のチャンスがなくなるまでつづく。

    以上


741 :デフォルトの名無しさん:02/10/08 22:17
>>740
課題丸投げするなボケ!

742 :デフォルトの名無しさん:02/10/08 22:20
> <突然ですがここで問題です。>

こんな切り出し方するヤシは放置。何様だ?

743 :デフォルトの名無しさん:02/10/08 22:34
「和宛ゲーム」の読みを当てるのが問題ですか?

744 :デフォルトの名無しさん:02/10/08 22:46
つーか普通に宿題スレ逝け。

745 :デフォルトの名無しさん:02/10/08 22:46
それって、ゲームとして成立するの?
絶対、解けるじゃん。

746 :デフォルトの名無しさん:02/10/08 22:49
>>745
確かにそうだな。まあいいよ。ネタは放置。

747 :デフォルトの名無しさん:02/10/08 22:50
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main() { int r, input, count = 10; srand( time(NULL) ); r = rand()%100; do{
printf("アト%dカイ\n",count); scanf("%d", &input); if( r == input ) break;
printf("%sイデス\n",input > r ? "オオキ" : "チイサ"); }while( --count );
if( count == 0 ) printf ("ザンネンデシタ\n"); else printf("セイカイデス\n"); return 0;}

748 :デフォルトの名無しさん:02/10/08 22:54
>>747
七行スレにでも投稿する?

749 :デフォルトの名無しさん:02/10/08 22:56
2^10=1024だから解ける。

750 :デフォルトの名無しさん:02/10/08 23:00
>>749
惜しい

751 :まーヴぉー:02/10/08 23:02
このサイトの「C言語を始めるには」
わかりやすい!?あふぉか!!!
しかも出来たばっかだしw
http://s1.buttobi.net/hiloshi/

752 :デフォルトの名無しさん:02/10/08 23:03
とりあえず一行縮めてみた。

main(){int r,i,c=10;srand(time(NULL));r=rand()%100+1;do{printf("アト%dカイ\n",c);
scanf("%d",&i);if(r==i)return puts("セイカイデス"); printf("%sイデス\n",i>r?"オオキ":
"チイサ");}while(--c); return puts("ザンネンデシタ");}

753 :デフォルトの名無しさん:02/10/08 23:04
>>752
スレ違い

754 :デフォルトの名無しさん:02/10/08 23:06
>>751
ワラタ。
つーか、イカスじゃねえか。そのサイト。
YOっしゃ。削除依頼だしてこい。

755 :デフォルトの名無しさん:02/10/08 23:25
>>751
下手な解説サイトより、笑えてイイ。
つづきはあるのか?

756 :740:02/10/08 23:36
数と言えば自然数しか思い浮かばない
ヴァカどもばかりだな、ここは・・・

757 :デフォルトの名無しさん:02/10/08 23:39
自然数に0が含まれるかどうかの議論しようぜ

758 :749:02/10/08 23:41
なるほど、3.14157とかされると解けんなw
小数点以下第1位までなら解けるってとこか

759 :デフォルトの名無しさん:02/10/08 23:41
>>757
よし、じゃぁ、含まれる。
なぜなら、テストで0点取ったことがあるから。
まさにしzうぇんたい。

760 :デフォルトの名無しさん:02/10/08 23:46
議論するものなのか?自然数・・・

761 :740:02/10/08 23:46
>>756
出題の意図を常識の範囲で読み取る能力もないクズ
よりはマシだろうけどな。

762 :デフォルトの名無しさん:02/10/08 23:49
>>760
0が含まれると主張している人たちもいた
電波系というわけでなく・・・

763 :デフォルトの名無しさん:02/10/09 01:32
>>756
無理数だったらヤだな…

764 :デフォルトの名無しさん:02/10/09 02:06
>>763
無理数は無理っす

とかいったりして ギャハー

765 :デフォルトの名無しさん:02/10/09 02:07
無理数って酷い訳語だよな

766 :デフォルトの名無しさん:02/10/09 05:10
正の整数←→自然数
っていう定義じゃないの?
定義だから議論の余地なしだと思っていたのですが…

>>751
>2chに宣伝したっけ予想以上の反響が!
宣伝かYO!

767 :デフォルトの名無しさん:02/10/09 07:16
>>751
すげー面白かったYO!
この調子で進んでいってほしいYO

とりあえず、ヲチして間違っていると思われるところは
どんどんつっこみを入れていくことにしよう

768 :デフォルトの名無しさん:02/10/09 10:39
>>751
> 何も言わずに、「cd my documents」と入力しろ
普通「指定されたパスは見つかりません」と表示されるが、
君は本当にコンパイルできたのか小一時間問いつめたい。
「cd "my documents"」
じゃないのか?

769 :デフォルトの名無しさん:02/10/09 11:29
>>752
本体を更に縮めてみるテスト。関係ないのでsage。
#include<stdio.h>
#include<time.h>
main(){int r,i,c=10;r=time(0)*79%100+1;do{scanf("%d",&i);printf("%sイデス\n",r-i?
"セイカ":i<r?"チイサ":"オオキ");}while(--c);return puts(c?"":"ザンネンデシタ");}


770 :デフォルトの名無しさん:02/10/09 11:30
>>768
多分マイドキュメントに保存しろと言いながら、自分では他のところに保存しいるんでしょ。

771 :デフォルトの名無しさん:02/10/09 11:32
>>769
なんでrand使うのやめたんだ?(^_^;)

772 :769:02/10/09 11:56
>771
短くしたいから。

773 :デフォルトの名無しさん:02/10/09 12:04
プログラムを実行し始めてからの時間を返すclockという関数がありますよね?
あれは時間がclock_t型で表せる最大の数を超えたら間違った値が返ってくるんですか?

774 :デフォルトの名無しさん:02/10/09 12:16
>>773
表現できる限界を超えても正しい値が返ってくるすげぇ実装方法があったら教えてプリーズ

775 :デフォルトの名無しさん:02/10/09 12:20
>>774
GENKAI TOPPA
KYOなら出来る

776 :773:02/10/09 12:36
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/clock.3.html

よく見たら-1が返るって書いてあった。
以前見たときは書いてなかった気がしたけど、、、、

777 :デフォルトの名無しさん:02/10/09 12:39
777get

778 :デフォルトの名無しさん:02/10/09 12:40
>表現できる限界を超えても正しい値が返ってくる
そもそも論理的にこの文章は矛盾しているかと・・・

779 :デフォルトの名無しさん:02/10/09 13:24
60cm浮き上がるタンはもうこないのでしょうか


780 :デフォルトの名無しさん:02/10/09 14:07
DOS窓にグラフィックを描くという冗談をまだやっているのか気になる

781 :デフォルトの名無しさん:02/10/09 15:03
AAですか?

782 :デフォルトの名無しさん:02/10/09 15:17
いや、違う

783 :デフォルトの名無しさん:02/10/09 16:04
>>775
こんなところでKYOスレの住人に会えるとは思わなかった・・

784 :デフォルトの名無しさん:02/10/09 16:26
ストリングをある文字だけで埋めるルーチンをなるだけ簡単な形で作りたいんだけど。
これ位しか思いつかない。

strをcharでnum個だけ埋める。
#define fillstr(str, num, char) {int i;for (i=0;i<num;i++) str[i]=char; str[i]='
\0';}

もっと良い方法があったら教えて。


785 :デフォルトの名無しさん:02/10/09 16:33
>>784
memset

786 :デフォルトの名無しさん:02/10/09 16:33
正直、ネタにしか見えないんでマジレスする気にならん・・
親切なやつ教えてやれよ↓

787 :デフォルトの名無しさん:02/10/09 16:34
>>784
memset(s, ch, strlen(s));
は?

788 :デフォルトの名無しさん:02/10/09 16:37
memset()でいいと思うけど、>>787のstrlen()はマズイだろう。
memset(str, char, num); str[num] = '\0';


789 :787:02/10/09 17:13
>>788
だね。
仕様を勘違いした。

790 :デフォルトの名無しさん:02/10/09 17:16
sprintf

791 :デフォルトの名無しさん:02/10/09 17:20
memsetってint型の配列のすべての要素を1とかで初期化したい時に使えないから嫌い。







そんなことが必要な時はあまりないけど。


792 :デフォルトの名無しさん:02/10/09 17:28
> そんなことが必要な時はあまりないけど。

そう?そういうケースは結構あると思うけどな。
どうでもいいが無意味な空行はやめてくれ。
ウケると思ってるのかしらんが、読みにくくてウザイだけだ。

793 :デフォルトの名無しさん:02/10/09 17:36
>>792
ごめんなさいね。
でも最後の行は無駄ですね。「どうでもいいが無意味な空行はやめてくれ。」だけで十分だと思います。

794 :デフォルトの名無しさん:02/10/09 17:41
>>793
まあいいだろう。
でも最後の行は無駄ですね。謝るなら謝るだけにしろ。この糞が。

795 :デフォルトの名無しさん:02/10/09 18:25
>>784 strset()

796 :デフォルトの名無しさん:02/10/09 18:31
>>791intset()(w

797 :高粘性ゲーム脳:02/10/09 19:45
>>783
KYOスレって何ですか?

798 :デフォルトの名無しさん:02/10/09 19:58
>>797
少年マガジンで連載中の江戸時代を舞台とした超能力漫画。

刀からカマイタチが巻き起こり、火を噴いたりするのはもちろん
絶対零度以下の冷気や最近はブラックホールも出ました。
彼らはいつもいろいろな限界を突破します。

799 :デフォルトの名無しさん:02/10/09 21:14
いくつか質問させて頂きます。
1、文字の色を変えるにはどうやればよいですか。
2、printf関数のようなものを作りたいのですが、引数が"で囲まれているようなものはどうやるのですか。

800 :デフォルトの名無しさん:02/10/09 21:17
>>799
1についてですができません。
2についてですが、作れません。

801 :デフォルトの名無しさん:02/10/09 21:18
お願いです。
conio.hのgetch関数の内容を教えて下さい。

802 :デフォルトの名無しさん:02/10/09 21:23
>>799
1
printf("<FONT COLOR=\"#ff0000\">赤です。</FONT>\n");

2
const char *


803 :デフォルトの名無しさん:02/10/09 21:24
>>801
1文字取得

804 :デフォルトの名無しさん:02/10/09 21:25
>>799
1についてですが、環境依存ですができます。「エスケープシーケンス」でgoogle
2についてですが、引数が""で囲まれている場合は文字列とみなされアドレスが渡されます。

805 :デフォルトの名無しさん:02/10/09 21:25
>>800
バカ?

806 :801:02/10/09 21:25
>>803
puts関数ですか?

807 :デフォルトの名無しさん:02/10/09 21:27
>>806
キーを押すとすぐに反応する。
エコーなしに一文字読む。
エコーありはgetche。

だったかな。

808 :デフォルトの名無しさん:02/10/09 21:45
>>807
お願いです。
次はkbhit関数の内容を教えて下さい。

809 :デフォルトの名無しさん:02/10/09 21:47
>>807
その次はoutp関数の内容を。

810 :デフォルトの名無しさん:02/10/09 21:50
次は僕の質問に答えてください。
WSAStartup関数の内容、使い方、サンプルソース。

811 :デフォルトの名無しさん:02/10/09 21:52
int 21hについて教えてください・・・

812 :デフォルトの名無しさん:02/10/09 21:53
次はlistenの内容、使い方を丁寧に教えてもらおうか。

813 :デフォルトの名無しさん:02/10/09 21:54
forkのつかいかたが分かりません

814 :デフォルトの名無しさん:02/10/09 21:56
>>810
一応、マジレスしとくか
http://msdn.microsoft.com/library/en-us/winsock/winsock/wsastartup_2.asp

815 :デフォルトの名無しさん:02/10/09 21:57
>>813
手で握ってさしたりすくったりするだけだろ

816 :812:02/10/09 21:59
810や813は答えてもらっているのに、おいらは放置! ウワァァン

817 :デフォルトの名無しさん:02/10/09 21:59
>>813
これを読め、
http://www.sigoto.co.jp/hotel/tablemanners/manners/teblemanners6.htm

818 :デフォルトの名無しさん:02/10/09 22:01
>>816
http://www.listen.co.jp/hp_get_info.xtp?path=guide/hp_main.jsp

819 :813:02/10/09 22:02
>>815 >>817
ありがとうございます!参考にします!

>>812
( ´,_ゝ`)

820 :60cm浮き上がるストレート:02/10/09 22:08
>>801
キー入力があるまでgetch()の所でプログラムが止まります。
キーが押されるとバッファからキーの番号取り出し、それを戻り値として返します。
取り出したキーはバッファから消えます。
使い方の例を書きます。参考にしてください。
1、終了間際にgetch()を書いて何かボタンを押すと終了するようにする。
void main( void )
{
  ・・・
  printf("何かボタンを押してください。終了します。");
  getch();
  return;
}

2、ロープレなどで、1を押すと城へ行く、2を押すと町へ行く等と
  ユーザーの入力によって分岐させたいとき、
  scanf()やgets()の代わりにgetch()を使うとEnterキーを省略できる。
  scanf("%c",&key); → key=getch();
  if( key == '1' ) 「城へ行く処理」;
  if( key == '2' ) 「町へ行く処理」;

3、アクションゲームなどプログラムが止まると困ってしまう場合は、
  kbhit()をいっしょに使う。kbhit()はバッファにキーがあるかを調べて
  バッファにキーがあると1以外を返し、無いと0を返す。
  if( kbhit() != 0 )
  {
    key = getch() ;
    if( key == '+' ) 「ジャンプの処理」;
    if( key == '6' ) 「右へ移動する処理」;
  }

821 :デフォルトの名無しさん:02/10/09 22:08
キターーーーーーーーーーーーーーーー!!!!!

822 :808:02/10/09 22:13
>>820
その調子でconio.hに定義されている関数を全て教えてください。

823 :デフォルトの名無しさん:02/10/09 22:14
>>820
すっげーいい。とくにアクションの例が。
実験してみるよ。

824 :デフォルトの名無しさん:02/10/09 22:36
>>820
DOS窓グラフィックはどうなった?

825 :デフォルトの名無しさん:02/10/09 23:42
C言語を使ってプログラミングしたいんですけど
フリーソフトでおすすめのものってありますか?

826 :デフォルトの名無しさん:02/10/09 23:46
>>825
LSIC試食版

827 :デフォルトの名無しさん:02/10/09 23:48
>>825
>>2あたりも読めないような奴に勧められるものはない

828 :デフォルトの名無しさん:02/10/09 23:49
>>825
フリーなPC-UNIX入れれば?

829 :デフォルトの名無しさん:02/10/10 11:06
すいませんマルチになります。
web板の方が寂しいのでこちらでCGIに関するC言語のサーバー設定を聞いても
いいでしょうか?こちらの方が詳しそうな人が多そうなので…
だめなら消えます。

830 :デフォルトの名無しさん:02/10/10 11:12
C言語のサーバーってなんやー?

831 :デフォルトの名無しさん:02/10/10 11:22
>>829
激しくスレ違いな気がするが、質問ならageて。

832 :デフォルトの名無しさん:02/10/10 11:50
コンパイラが進化した・・・

warning C4553: '==' : 演算子にプログラム上の作用がありません。'=' を意図しましたか?

833 :829:02/10/10 12:03
聞いていいのかな?
思いっきりスレ違いは覚悟しておりますが、多分詳しい人多そうなので
教えて下さい。
IISでCGIを動かしたところperlは動くのですがCは動かないのです。
昨日までは動いていたのですが設定をいじったところ、今日は動かなくなりました。
ローカルでコンパイルしたものを.CGIに変えてあげています。
その際、C言語だと特別な設定が必要なのか教えて下さい。
本当にスレ違いでマルチで申し訳ないのですが、ここしかもう頼るところが
ありません。お願いします。

834 :デフォルトの名無しさん:02/10/10 12:11
>>833
>昨日までは動いていたのですが
では必ず動くはず。
>設定をいじったところ、今日は動かなくなりました。
その変更を元に戻してください。

これで解決できなかったら、Webプログラム板に逝ってください。

835 :デフォルトの名無しさん:02/10/10 13:03
>>833
>昨日までは動いていた
昨日は,全ての条件について試したのかな?
動くと思っていても,どこかに落とし穴があるかも









なんてね

836 :デフォルトの名無しさん:02/10/10 13:06
そうか、memsetがありましたね。
thx!>教えてくれた人


837 :------------------さん:02/10/10 13:55
ポインタはどういうものかは分かったが使い道がわからない。
例えば /* 関数とポインタをつかった勉強プログラム */
#include <stdio.h >
void z(int *g)
{
if (*g<50)
*g=50;
}
int main (void)
{
int a=10;
int b=20;
int c;
printf("c=?");
scanf ("%d",&c);
z(&c); /* すなわち g=&c */
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("c=%d\n",c);
return (0);
}


838 :------------------さん:02/10/10 13:56
つづき、 
で、なにもポインタを使わなくても以下のようにできてしまうような気がするのですが
#include <stdio.h >
void z(int c)
{
if (c<50)
c=50;
}
int main (void)
{
int a=10;
int b=20;
int c;
printf("c=?");
scanf ("%d",&c);
z(c);
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("c=%d\n",c);
return (0);
}


839 :デフォルトの名無しさん:02/10/10 14:05
気がするのですか、そうですか、良かったですね。

840 :nanashi:02/10/10 14:06
 99999以下とは限らない正の整数を次々と読み、データの個数と最小値、
2番めに小さい値および3番目に小さい値を印字するプログラムを作れ。ただし、
データがつきたことをあらわすために、0または負の数を入力することにする。

このアルゴリズムのを書いてください。流れ図でも箇条書きでもよいです。

 

841 :------------------さん:02/10/10 14:09
あ、てか自分でわかったかも
ポインタつかわないと
void z(int c)のcと下のcは別物あつかいみたいになってしまう??


842 :デフォルトの名無しさん:02/10/10 14:10
宿題は宿題スレへ逝け。
ただし丸投げする前にすこしは自分で考えろ。

843 :nanashi:02/10/10 14:13
逝ってきます

844 :------------------さん:02/10/10 14:14
てか受け渡しっぱなしでcに帰ってこないか。
あー自分でわかりました。

845 :デフォルトの名無しさん:02/10/10 14:37
最小値の表し方は?


846 :デフォルトの名無しさん:02/10/10 14:38
>>845
(・∀・)?

847 :デフォルトの名無しさん:02/10/10 14:43
>>845
くすっ。コボラーしねよ。

848 :デフォルトの名無しさん:02/10/10 14:52
コボラーってなんですか?


849 :デフォルトの名無しさん:02/10/10 14:56
>>848
コボルする奴。

850 :デフォルトの名無しさん:02/10/10 15:05
>>845
limits.hを調べるべし

851 :デフォルトの名無しさん:02/10/10 15:32
>>840
最大値、2番目に大きい数、3番目に大きい数を初期化する
カウンタを初期化する
1. 0か負数が入力されるまで繰り返し
  1.1.入力値が1番目に小さい数かどうか調べ、
    1番目に小さい数未満の場合、1番目に小さい数と入力値を交換する。
  1.2.入力値が2番目に小さい数かどうか調べ、
    2番目に小さい数未満の場合、2番目に小さい数と入力値を交換する。
  1.3.入力値が3番目に小さい数かどうか調べ、
    3番目に小さい数未満の場合、3番目に小さい数と入力値を交換する。
  1.4.カウンタをカウントUPする
2.データの個数と最小値、2番めに小さい値および3番目に小さい値を印字する

※1.1.〜1.3.は処理が非常によく似ているので関数にするのが望ましい

852 :デフォルトの名無しさん:02/10/10 15:39
>>851
交換した後、ずらす処理が必要では?

853 :デフォルトの名無しさん:02/10/10 16:15
>>851
1番目に数値が入るとき、入れる前に、
2番目の値を3番目に、1番目の値を2番目に入れたりせなあかんよ。

854 :デフォルトの名無しさん:02/10/10 16:41
C言語をやりはじめたばかりの者です。独習Cをやっているのですが、
いくら読んでも腑に落ちなくて、困り果ててのカキコです。
以下のプログラムは123と表示するだけのものなのですが、説明文に
よるとmain()がfunc2()を呼び出し、次にfunc2()がfunc1()を呼び出す
となっています。問題はfunc2()がfunc1()を呼び出すというところです。
どうしてfunc2()がfunc1()を呼び出してくれるのですか? 
たぶんすごく初歩的なことなのでしょうけれど理解できません。
これは単にそういう約束だと思えばいいのでしょうか。
教えてください。

#include <stdio.h>
void func1(void); /*プロトタイプ宣言*/
void func2(void);

int main(void) /*プログラムの開始位置*/
{ func2(); printf("3 ");
return 0; }

void func2(void)
{ func1(); printf("2 "); }

void func1(void)
{printf("1 ");}

855 :デフォルトの名無しさん:02/10/10 16:45
>どうしてfunc2()がfunc1()を呼び出してくれるのですか? 
...
> void func2(void)
>{ func1(); printf("2 "); }
  ~~~~~~~
func1()を呼び出しせって書いてあるやん。

856 :デフォルトの名無しさん:02/10/10 16:45
>>854
func2()関数の中にfunc1()の呼び出しがあるから。
void func2(void)
{ 
func1();    ←ここ
printf("2 "); 
}

857 :デフォルトの名無しさん:02/10/10 16:45
>>854
mainがfunc2を呼び出してるのは理解できて
func2がfunc1を呼ぶ出すのは理解できないのか?


・・・・不思議だ・・・

858 :デフォルトの名無しさん:02/10/10 16:59
>855>856>857さん。ありがとうございます。
おかげさまで、だいぶ分りました。なんていうか数字の順番で物事を考える
癖が抜けきらないというか・・・・・。一番の次は二番だろという
ような。
つまりmainは直後のfunc2()を呼び出し、その下のvoid func2(void)
に行きvoid func2(void) はfunc1();で1番下のfunc1();に
流れて最後に1まで行って表示して、またfunc2()戻って今度は2を
表示して、それでmainが最後に3を表示するということで、いいんですか。


859 :デフォルトの名無しさん:02/10/10 17:03
>>858
合ってます。

860 :デフォルトの名無しさん:02/10/10 17:04
>>858
定義順と呼び出し順に相関関係はないよ

861 :デフォルトの名無しさん:02/10/10 17:08
#include <stdio.h>
void mona(void); /*プロトタイプ宣言*/
void giko(void);

int main(void) /*プログラムの開始位置*/
{ giko(); printf("2ちゃんねる");
return 0; }

void giko(void)
{ mona(); printf("ギコ "); }

void mona(void)
{printf("モナー ");}

なら問題なく理解できたと言うことなのかなぁ。


862 :854:02/10/10 17:10
>860 定義順と呼び出し順に相関関係はないよ

そのようですね。さっき試したら問題なく表示されました。
まだプログラムの流れをすんなり掴めていないみたいなので、
もっとたくさん練習してそういうことが分るようにがんばります。

863 :851:02/10/10 17:17
>>852-853
頭の悪いお前らは、交換してしまえばずらす必要がないことが
理解できないようだな。じゃあこのソースを見ても無駄か(w
#include <stdio.h>
#include <limits.h>
static void swap(int *n, int *m);
int main(void)
{
  int n, min1, min2, min3;
  int cnt = 0;
  min1 = min2 = min3 = INT_MAX;
  while(scanf(" %d", &n) == 1 && n > 0) {
    if(n < min1) swap(&n, &min1);
    if(n < min2) swap(&n, &min2);
    if(n < min3) swap(&n, &min3);
    cnt++;
  }
  printf("cnt = %d, min1 = %d, min2 = %d, min3 = %d\n",
      cnt, min1, min2, min3);
  return 0;
}
static void swap(int *n, int *m)
{
  int tmp;
  tmp = *n; *n = *m; *m = tmp;
}


864 :デフォルトの名無しさん:02/10/10 17:21
Cでの構造体の宣言についてお訊きしたいのですが、
typedef struct fooA {
int tmp ;
fooB *whole ;
} fooA ;

typedef fooB {
fooA instance1 ;
fooA instance2 ;
} fooB ;

このような場合、どのように宣言するとコンパイルが通るのでしょうか。


865 :デフォルトの名無しさん:02/10/10 17:21
struct fooB;

typedef struct fooA {
int tmp;
fooB* whole;
} fooA ;

typedef struct fooB {
fooA instance1;
fooA instance2;
} fooB;


866 :デフォルトの名無しさん:02/10/10 17:23
struct fooA{
int tmp ;
struct fooB *whole ;
} ;

struct fooB {
struct fooA instance1 ;
struct fooA instance2 ;
} ;

867 :864:02/10/10 17:29
>>865, >>866
thanks !


868 :デフォルトの名無しさん:02/10/10 17:40
*.iniファイルへの値の書きこみ、値の取得はどのようにすればいいんですか?

869 :デフォルトの名無しさん:02/10/10 17:41
>>863
…アルゴリズム変わってないか?

870 :デフォルトの名無しさん:02/10/10 17:50
>>868
どうせWindowsだろうからコレでも使っとけ
ttp://www.mars.dti.ne.jp/~suzunari/suz/suzsoft/regini_readme.htm

871 :デフォルトの名無しさん:02/10/10 18:31
C言語で行列→逆行列にするプログラムってどのように作ればよいのでしょうか?
誰か教えてくれませんか?

872 :デフォルトの名無しさん:02/10/10 18:37
マルチカコ(・∀・)イイ!

873 :デフォルトの名無しさん:02/10/10 18:39
main()関数の引数の argc と argv の
言葉の意味はそれぞれどんな意味があるんですか。

874 :デフォルトの名無しさん:02/10/10 18:42
>>871
http://www.sra.co.jp/people/miyata/algorithm/

875 :デフォルトの名無しさん:02/10/10 18:43
argument_count
argument_value

876 :デフォルトの名無しさん:02/10/10 18:44
CでCのコンパイラを作りたいのですが、どういう仕組みなのですか?

877 :デフォルトの名無しさん:02/10/10 18:46
argument_vector no yokan

878 :デフォルトの名無しさん:02/10/10 18:46
vector な罠

879 :デフォルトの名無しさん:02/10/10 18:47
>>876
main()を最初に処理する

880 :デフォルトの名無しさん:02/10/10 18:48
kekooooon

881 :デフォルトの名無しさん:02/10/10 18:48
>>876
ギコBASICを参考にしろ

882 :875:02/10/10 18:52
知ってたけどね

883 :デフォルトの名無しさん:02/10/10 18:59
ハイハイ

884 :デフォルトの名無しさん:02/10/10 19:01
返事は1回

885 :デフォルトの名無しさん:02/10/10 19:03
ハーーーーーーーーーーーーーイ

886 :デフォルトの名無しさん:02/10/10 19:06
(・∀・)

887 :デフォルトの名無しさん:02/10/10 19:11
>>876
こっちのスレで聞くがよいかと。

『コンパイラ・スクリプトエンジン』 相談室 2
http://pc3.2ch.net/test/read.cgi/tech/1021136715/

888 :デフォルトの名無しさん:02/10/10 20:13
std::

ってなに

889 :デフォルトの名無しさん:02/10/10 20:17
>>888
> std::
さぁ?Cにはそんなものないよ


890 :デフォルトの名無しさん:02/10/10 20:19
>>889
C++だけならまだいいです。どうも

891 :デフォルトの名無しさん:02/10/10 20:39
>>863
ずらしてるじゃん

892 :デフォルトの名無しさん:02/10/10 20:40
>>851
つか、リングバッファ使えばいいのでは?

893 :892:02/10/10 20:45
ごめんなさい、よくありませんでした。反省します。

894 :デフォルトの名無しさん:02/10/10 20:59
main()
{
int m,n;
n=3;
m=n++

printf("%d-%d",n,m);

return 0;
}

が、4-3となる理由がわからん。だってn=3っていってるのになぜに4って言うの?
俺ってバカ?
租借して租借して説明してくれる人。おながいします。

895 :デフォルトの名無しさん:02/10/10 21:03
m=n++
でnがインクリメントされてる

896 :デフォルトの名無しさん:02/10/10 21:07
>>894
> 4-3となる理由がわからん。
俺は m=n++ の最後にセミコロンがないのにコンパイルできる理由がわからん。

897 :デフォルトの名無しさん:02/10/10 21:10
n++;
++n;
上記はどちらも n に1を足しなさいという意味

m=n++;
まず n の値を m に代入してから n に1を足すという
意味

m=++n;
まず n に1を足してから、その値を m に代入しなさい
という意味


898 :デフォルトの名無しさん:02/10/10 21:15
mはどちらも同じ数字になりますよね?

でもなんでn自体の値が変わるのかがわかりません。
だってnは3っていったじゃん。

;忘れました。ごめんなさい。ごめんなさい。ごめんなさい。

899 :デフォルトの名無しさん:02/10/10 21:17
>>898
>>895は読んだ?

900 :デフォルトの名無しさん:02/10/10 21:22
>>898
まずプログラムの基本ができてない気がする。
数学では n=3 と書いたら紛れも無く n=3 だが、プログラムでは
n の値は刻一刻と変化すると考えてください。

n = 3;
m = n + 5;
n = m;
printf("n = %d",n);

こう書いたら、上から順番に解釈されていって n = 8 と表示される。

901 :デフォルトの名無しさん:02/10/10 21:25
>>900

ありがとう。ございます。

とってもありがたい説明です。

なんだかやる気が出てきました。

ほかの皆さんもありがとう。ちゅっ

902 :デフォルトの名無しさん:02/10/10 21:41
m=n++ならmは4じゃないのはなぜ? なしてmが3になったの? もちろん実行してみたんだけど、おいらもわからん。

903 :デフォルトの名無しさん:02/10/10 21:47
>>902
m=n++;
 ↓
m=n;
n++;


n=++n;
 ↓
m=n+1;

904 :デフォルトの名無しさん:02/10/10 21:52
>>903
おい、間違えてるぞ

905 :デフォルトの名無しさん:02/10/10 21:52
>>903
> n=++n;

?? また、未定...。

906 :デフォルトの名無しさん:02/10/10 21:53
>>903
なんか違うな

907 :デフォルトの名無しさん:02/10/10 21:53
>>903
m=++n;
 ↓
++n;
m=n;
だろが

908 :デフォルトの名無しさん:02/10/10 21:53
:ま  た  未  定  義  か :02

909 :デフォルトの名無しさん:02/10/10 21:56
システムファイルの中身をぐちゃぐちゃにするプログラム作ってもいいですか

910 :デフォルトの名無しさん:02/10/10 21:57
もうCスレの代名詞だね「また未定義か」。
次スレの副題に付けるか?

C言語なら俺に聞け「また未定義か」 <1>

911 :デフォルトの名無しさん:02/10/10 21:58
C言語に将来はありますか?

912 :デフォルトの名無しさん:02/10/10 21:59
>>909
おれが書いてやる

FILE* fp = fopen("システムファイル", "w");
fputs("ぐちゃぐちゃ", fp);
fclose(fp);

どうよ?

913 :デフォルトの名無しさん:02/10/10 22:05
>>911
君の将来よりはまし

914 :デフォルトの名無しさん:02/10/10 22:07
>>912
ありがとうございます!

915 :912:02/10/10 22:09
人に感謝されるというのは気持ちのよいことだ・・・

916 :デフォルトの名無しさん:02/10/10 22:23
なんでCスレはすぐにネタスレになるんだろうなぁ

917 :デフォルトの名無しさん:02/10/10 22:26
みんなCが好きだから

918 :デフォルトの名無しさん:02/10/10 22:30
やっぱりBよりもCの方がいいからね
もちろんプログラム言語の話だよ。

919 :デフォルトの名無しさん:02/10/10 22:31
俺はB言語を使っていたから難なくC言語を覚えられたよ。

920 :デフォルトの名無しさん:02/10/10 23:03
>>898はプログラマーですか?
C言語を習い始めて1時間経った人よりお馬鹿です。(合掌)

921 :デフォルトの名無しさん:02/10/10 23:15
最初はかるーくA
次にイヤンB
ウハウハのC
最後はムフフDで合掌。

922 :デフォルトの名無しさん:02/10/10 23:17
みんなオラにちょっとずつ力を分けてくれ。

スタックをモデルにしたプログラム作ってけろ ^^

923 :デフォルトの名無しさん:02/10/10 23:22
>922
ちょっとづつな。
int

924 :名無しさん@XEmacs:02/10/10 23:25
スタックをモデルにしたプログラムって何?

925 :デフォルトの名無しさん:02/10/10 23:32
Forthとか、PostScriptとか?

926 :デフォルトの名無しさん:02/10/10 23:54
              少しは右側使えよ
              はじめてのC

927 :デフォルトの名無しさん:02/10/10 23:55
>>922
54*12/+

928 :デフォルトの名無しさん:02/10/11 00:29
>>921
Ada > Basic > C > Delphi ??
波瀾万丈の言語歴だね

929 :デフォルトの名無しさん:02/10/11 01:12
FILE *fp;
char mona[10];
char giko;
int ret;


ret = fread ( &giko,sizeof(giko),1,fp );
printf ("%d\n",ret );

としたときretに0しか入りません。
引数でファイル渡していて、そのファイルには確実に
数バイト書き込まれているはずなのに"0"しか返ってきません。
freadって読み込んだバイト数を戻り値として返すんですよね?



930 :デフォルトの名無しさん:02/10/11 01:44
>>929
freadが返すのは読み込んだ要素数だ。

931 :デフォルトの名無しさん:02/10/11 01:45
>>929
その部分だけを見ると間違ってないみたい。
あとはfopenとか、その後の処理がどうなっているかだね。

932 :デフォルトの名無しさん:02/10/11 04:04
fopenに失敗しているまたはfopenそのものを忘れている

933 :デフォルトの名無しさん:02/10/11 04:18
char *zonu;
char *str="abcdefghi";
int val;

zonu=(char*)malloc(func()+1);
strncpy(zonu,str,func());

便宜上func()は3を返すとします。つまり
zonu=(char*)malloc(4);
strncpy(zonu,str,3);
このあとstrncpyだとヌルが
自動付加されないんですが
どうすればヌルを付けれますか?

934 :デフォルトの名無しさん:02/10/11 04:20
strncpyは挙動があやしいというか仕様が古い
callocで0で初期化しといたら?

935 :デフォルトの名無しさん:02/10/11 04:27
>>934
うまく逝きました。サンクスレス

936 :デフォルトの名無しさん:02/10/11 04:42
おれはmemcpyと終端'\0'代入をお勧めする。


937 :デフォルトの名無しさん:02/10/11 05:25
初期化めんどいときはstrncpy+終端\0

strncpyってsourceの文字列がdestinationの
バッファサイズ未満の場合, 残り全部を\0で埋めるんだよね
なぜなんでしょう?

938 :デフォルトの名無しさん:02/10/11 05:49
>>937
・C FAQ 日本語訳
に書いてるよ。


939 :デフォルトの名無しさん:02/10/11 06:01
>>938
サンクス

疑問なのはこちらです
>>strncpy()の関連する奇妙なところは、
>>指定された長さになるまで\0を埋めることである

strcpyみたいに1個だけ\0を埋めるだけじゃ駄目なのかなぁ?

940 :デフォルトの名無しさん:02/10/11 06:04
c言語でネットワークなプログラムのことをしりたいのですが
どのような書籍がお奨めでしょうか
TCP/IPプログラミング
などいろいろな本があるみたいですが
いろいろあるのでうかつに買えません
教えてください

941 :デフォルトの名無しさん:02/10/11 07:49
すみません。どうしても結論がでないので、お聞きします。

(1)メモリ上のデータの先頭アドレスを「ポインタ」と呼ぶのですか?

倉薫の本を読むと、書籍の前半では、ある変数の(先頭)アドレスを記憶させる変数が「ポインタ」と説明が
してあるのに、文字列処理関数群の説明当たりでは、コード中に書き込んであったり、gets()で取得した文字列の
先頭アドレスが「ポインタ」みたいな説明になっています。とにかくデータの先頭アドレスを「ポインタ」というので
すか?


(2)gets()などで文字列を習得すると、メモリの特定領域に記憶されるわけで、それをプログラムで利用
するときには先頭アドレスが必要だと言うことは分かります。しかし、ソースコード内に「文字列リテラル」みたいな
形で文字列が書き込まれているとき、その先頭アドレスの取得が必要なのですか?
そもそも、コンパイル後のリテラルの扱いはどうなっているのですか?一般のコードの中に埋め込まれているのですか?

942 :デフォルトの名無しさん:02/10/11 07:58
>941
アドレスを入れる変数がポインタ型
関数にポインタ「型変数」を渡すと書いてあってもおかしくないのでは

943 :デフォルトの名無しさん:02/10/11 08:24
>>941
CPUがどんな風に働いてるのかを勉強したらすぐわかると思うわれ(レジストリな)
ポインタって言葉は、「アドレスを渡すとか、アドレスを扱う」ってニュアンスだとわかりやすいんじゃね?
ちなみに、gets()関数の引数には、ポインタを返すって決まりだったと思う
文字列関係のポインタは、基本的に先頭アドレスを渡す。
おそらく図柄を見てイメージができてるとわかると思うんだがなー

944 :デフォルトの名無しさん:02/10/11 08:24
>>941
文字列リテラルは別のところに集められるのが普通。
コンパイル後のバイナリをバイナリエディタなどで見るとわかると思う。
(アセンブラわかるのならアセンブラコード見てもいいと思うけど)

プログラム実行時には実行ファイルから文字列リテラルをメモリ内に読み
込んでその先頭アドレスを使用する。

945 :デフォルトの名無しさん:02/10/11 08:27
>>943
レジストリ?

946 :944:02/10/11 08:30
文字列リテラルをメモリ内に読み込むのはOSな。

947 :デフォルトの名無しさん:02/10/11 08:34
>>942

function(文字列のポインタ、文字列のポインタ)

function(str,"なんなのこれ")

みたいな説明になってるんだけど、変数strの識別子が先頭アドレスを表すことは分かるけど、
”文字列”を直接関数に引数で渡すと、ポインタを渡したってことになるわけ?

948 :デフォルトの名無しさん:02/10/11 08:36
>>947
そうなる。

949 :943:02/10/11 08:36
>>945
すまん・・・レジスタな

950 :デフォルトの名無しさん:02/10/11 08:37
いまきづいたのだけど、本によって

「ポインタ」「ポインタ変数」が別扱いのものと同義語のものがある。

951 :デフォルトの名無しさん:02/10/11 09:21
short array[] = {0,1,2,3};
short *arr_pt;
short i,j,num;

arr_pt = array;
for(i = 0; i < 4; i ++)
{
num = arr_pt[i];
printf("%d\n",num);
}
出力は 0123。
ポインターは銭湯アドレスつっても、
どこでもさせるようです。

char *string = "AHO";
文字列リテラルはテキストセグメントに確保さるようですが、
以後は別段stringをつかってください。


952 :デフォルトの名無しさん:02/10/11 09:43
>>947
ダブルコーテーションで囲まれた"文字列定数"←は
つまりコンパイルの時点で(強引な表現をすれば)exeに埋め込まれるわけで
関数に文字列定数を渡すようなコーディングをした場合は
その文字列定数が、文字列定数が埋め込まれた場所を指すconst charポインタに
置き換えられていると思えば良いのではないかな

953 :デフォルトの名無しさん:02/10/11 09:45
>>951
どうでもいいけど、どうしshort?

954 :デフォルトの名無しさん:02/10/11 09:50
>>953
951の書き込みは全体的に良く分から

955 :デフォルトの名無しさん:02/10/11 09:53
リテラル。セグメント。
初耳・・・どんな意味で?

956 :951:02/10/11 11:03
僕に聞かれてもあんまりシランっす。

引っ張り出した本に書いてありますた。

--------------------
スタックセグメント // ローカル変数とか



ここから--------------
ヒープ // mallocにより動的確保

BBS // グローバル変数(初期値なし0)

データ // グローバル変数(初期値あり)
-----------------ここまで、データセグメント
テキストセグメント // プログラムのコード部分が
// おさめられている読み出し専用領域

てなふーに割り当てられるっちゅ−よーなことらしいです。




シランでもいいと思いますた。

957 :デフォルトの名無しさん:02/10/11 11:09
>>956
それは個別の実装の話だから一般論として語るもんじゃないよ。

958 :デフォルトの名無しさん:02/10/11 11:09
おsage。
わすれてた。

959 :デフォルトの名無しさん:02/10/11 11:18
>>956
シランでもいいかどうかは時と場合によるが。
ついでに言うと、BSSだと思うが。BBSじゃなくて。

960 :デフォルトの名無しさん:02/10/11 11:25
> 957

うぅ、
言われてみればLinux固有だと気がつきました。
あほなこと語ってしまいましたすみません。


961 :デフォルトの名無しさん:02/10/11 11:58
>>970
次スレよろしこ

962 :デフォルトの名無しさん:02/10/11 17:50
>どこでもさせるようです
arr_ptはarrayの先頭のアドレスを受け取っただけ。
arrayを宣言したときにその後ろに連続してデータが入るので、
arr_pt[i]で辿る事が出来る。

963 :962追加:02/10/11 17:57
プログラムはarr_pt[i]=*(arr_pt+i)と解釈している。

964 :デフォルトの名無しさん:02/10/11 18:38
i[arr_pt]

965 :デフォルトの名無しさん:02/10/11 19:01
> 963

そうですよね。
ぽいんたーっていうと、ふつーそれしか思い当たらないので
>>941さんが銭湯アドレスって言葉にこだわって混乱してるのかと思って
ぽいんたーは銭湯アドレスを取得したら、
メモリー領域にアクセスするのに使えると思えばわかりやすいかと思ったら
なおさらわかりずらかったです。

それよりも、>951で不可解なのは、
変数 j の使い道だと思います。


966 :デフォルトの名無しさん:02/10/11 19:07
>>894
s/租借/咀嚼/g
:)


967 :デフォルトの名無しさん:02/10/11 19:29
2つの入出力があります。
入力ではselectを使いたいんだけど、出力はfprintfを使いたい。
つまり、このままではファイルポインタとファイルディスクリプタが
同居してしまうのですが、こういうばあいの
どこまでの操作なら安全でどこからの操作が危険か
というガイドラインはありますか?

そもそもFILE*使うなよ、というのはありますが まあそれは置いといて。

968 :デフォルトの名無しさん:02/10/11 20:12
while ( fgets ( str,256,fp ) != NULL ) {
getchar ();
printf ( "%s",str );
}
fpで示すファイルを一行づつ読みこんで
Enter押すまで止めておくプログラムです。
例えばファイルの中身が
123
4567
89
10
というもだとしてこのプログラムを実行すると
123

4567
1行スペースが空いてしまいます。
fgetsが復改文字も読みこむのが原因ですよね?
スペースの空かないプログラムを作りたいのですが・・・
strlenで長さを測って、最後尾の"\n"を取ればいいと思うのですが
各行で長さがちがうので困っております。
ご教授おながいします!

969 :デフォルトの名無しさん:02/10/11 20:17
>>967
ファイルポインタから対応するディスクリプタ取り出せるよ。それ使えばOK

970 :デフォルトの名無しさん:02/10/11 20:40
>>969
その方法を教えてください。
逆はfdopenでできますけど。

971 :970:02/10/11 20:41
次スレたててきます。

972 :デフォルトの名無しさん:02/10/11 20:42
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/fileno.3.html

973 :デフォルトの名無しさん:02/10/11 20:45
>>968
> fgetsが復改文字も読みこむのが原因ですよね?
いや、復改文字がエコーバックされるのが原因
でも、改行が取りたかったら
str[strlen(str) -1] = '\0';
とかしろ

974 :デフォルトの名無しさん:02/10/11 20:45
>>972
ありがとうございます!

・・・・やっぱりFILE *からFDを得る関数があったんだ・・・・

975 :デフォルトの名無しさん:02/10/11 20:51
http://pc3.2ch.net/test/read.cgi/tech/1034337064/

新スレたてました。

976 :デフォルトの名無しさん:02/10/11 20:53
お疲れ様です

977 :NEW THREAD:02/10/11 20:56
http://pc3.2ch.net/test/read.cgi/tech/1034337064/l50

978 :デフォルトの名無しさん:02/10/11 20:57
記念パピコV(^o^)V

979 :デフォルトの名無しさん:02/10/11 21:59
1000いただいてもよろしいのですか?

980 :デフォルトの名無しさん:02/10/11 22:30
for(i = 20;i > 0;i ++)

981 :デフォルトの名無しさん:02/10/11 23:21
{

982 :デフォルトの名無しさん:02/10/11 23:21
printf("%d\n", i+980);


983 :デフォルトの名無しさん:02/10/11 23:23
exit(0);

984 :デフォルトの名無しさん:02/10/11 23:24
いただいちゃってください

985 :デフォルトの名無しさん:02/10/11 23:25
// >>983
// 終わらせるな!ヴォケ


986 :デフォルトの名無しさん:02/10/11 23:26
// >>984
// エラー出すなヴォケ


987 :デフォルトの名無しさん:02/10/11 23:27
}


988 :デフォルトの名無しさん:02/10/11 23:27
void func(Object* nanika)
{

989 :デフォルトの名無しさん:02/10/11 23:38
// 988さん、Object型の扱い方教えてくらはい


990 :デフォルトの名無しさん:02/10/11 23:40
//>>980
//ループお椀ね円だよ!

991 :デフォルトの名無しさん:02/10/11 23:55
return 0;

992 :デフォルトの名無しさん:02/10/11 23:56
} // nanika は一度も使用されませんでした。

993 :デフォルトの名無しさん:02/10/11 23:59
>>990
>>987で終わってるじゃ名井


994 :デフォルトの名無しさん:02/10/12 00:05
994

995 :デフォルトの名無しさん:02/10/12 00:06
まんこ

996 :デフォルトの名無しさん:02/10/12 00:07
ちんこ

997 :デフォルトの名無しさん:02/10/12 00:14
すっせんんー


998 :デフォルトの名無しさん:02/10/12 00:15
せせせせせんんんー


999 :デフォルトの名無しさん:02/10/12 00:17
999

1000 :デフォルトの名無しさん:02/10/12 00:17
1000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

211 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)