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

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

C言語なら、俺に聞け! <23>

1 :日下部陽一:02/06/02 22:33
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならぜんてわかるから、疑問な点があったら漏れに聞け。

だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。

・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/
推薦図書/必読書のためのスレッド PART3
http://pc.2ch.net/test/read.cgi/tech/1016722820/

・前スレ
<22> http://pc.2ch.net/test/read.cgi/tech/1022402165/

他のリンクは>>2-10を見な。

2 :デフォルトの名無しさん:02/06/02 22:34
>>1
メールアドレスがvoidになってない。
・作ってわかるCプログラミング(通称 アヒル本)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/249-4698746-2014711

3 :デフォルトの名無しさん:02/06/02 22:34
【コンパイラ】
ぼくもgccは好きです!
http://gcc.gnu.org/
タダで使えるBorland C++!
http://pc.2ch.net/test/read.cgi/tech/1002377328/l50

【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

【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

4 :デフォルトの名無しさん:02/06/02 22:34

1コンピュータの操作法
2Cの文法の基礎知識
3簡単な各種アルゴリズム
4デバッグ手法(スナップショット、デバッガの使い方)
5さまざまなトラブルの対処法(文法ミス、アルゴリズムのミス、勘違い)
6大きなプログラムの作成法(モジュール化)
7アルゴリズムの最適化
8システム分析法
9データ構造論
10さまざまなトラブルの対処法(メモリの管理(ポインタ)、環境の違い、境界条件)
11オペレーティングシステムの違い(移植性)


5 :デフォルトの名無しさん:02/06/02 22:43
for(i=0;i<n;i++)
for(j=0;j=m;j++)
で,nとmが20の時は,400回ですが
nとmが35の時は,1225回ループします。
どのくらいの時間差があるのでしょうか?
for分の中は,if(Kou1[i] == Kou2[j])
のような感じです

6 :すまん:02/06/02 22:43
for(i=0;i<n;i++)
for(j=0;j<m;j++)
で,nとmが20の時は,400回ですが
nとmが35の時は,1225回ループします。
どのくらいの時間差があるのでしょうか?
for分の中は,if(Kou1[i] == Kou2[j])
のような感じです


7 :デフォルトの名無しさん:02/06/02 22:44
実行して計測すれば?

8 :デフォルトの名無しさん:02/06/02 22:47
スタンダードだから無理

9 :デフォルトの名無しさん:02/06/02 22:47
フリーのコンパイラ使えば?

10 :デフォルトの名無しさん:02/06/02 22:48
>>8


11 :デフォルトの名無しさん:02/06/02 22:48
スタンダードだから無理?
最適化が効かないからって事?

12 :デフォルトの名無しさん:02/06/02 22:49
実行して計測ってどうやるの?

13 :デフォルトの名無しさん:02/06/02 22:50
>>12
わからなきゃストップウォッチでも持って測れ

14 :デフォルトの名無しさん:02/06/02 22:50
>>12
ストップウォッチ

15 :デフォルトの名無しさん:02/06/02 22:50
>>13
同じ0.4秒でした。

16 :14:02/06/02 22:51
>>13
俺とケコーン汁(・∀・)!!

17 :デフォルトの名無しさん:02/06/02 22:51
>>15
じゃあ同じでいいじゃん。

18 :デフォルトの名無しさん:02/06/02 22:52
いぢわる。

19 :13:02/06/02 22:53
>>16
私めんくいなの

20 :デフォルトの名無しさん:02/06/02 22:54
>>18
で?

21 :14:02/06/02 22:57
鬱だ...

22 :デフォルトの名無しさん:02/06/02 22:57
マヂレス
そのプログラムを100万回ループした実行時間をストップウォッチで計って100万で割れ

23 :デフォルトの名無しさん:02/06/02 23:02
>>22
実行時間を計るプログラムってあるの?

24 :デフォルトの名無しさん:02/06/02 23:03
まずそれから作れ


25 :デフォルトの名無しさん:02/06/02 23:03
>>23
ストップウォッチ

26 :デフォルトの名無しさん:02/06/02 23:04
>>23
system()で100万回呼び出して、その開始時間と終了時間をclock()で得ればいいだろ。

27 :デフォルトの名無しさん:02/06/02 23:05
clockは禁句だったのに…

28 :デフォルトの名無しさん:02/06/02 23:06
じゃあgettimeofday

29 :デフォルトの名無しさん:02/06/02 23:06
>>27
あれって使っちゃいけない関数だったの?(汗
平気で使っていたんだけど(汗

30 :デフォルトの名無しさん:02/06/02 23:11
>>29
clock教えたら面白くないから禁句なんだろ。

31 :デフォルトの名無しさん:02/06/02 23:15
>>30
そういういぢわるやめてまともにおしえてほすぃ・・・。

32 :デフォルトの名無しさん:02/06/02 23:19
最適化かけても消えてしまわないビジーループを作るには
ちょっとしたコツがいります。

33 :デフォルトの名無しさん:02/06/02 23:20
volatile使うか#pragmaすればいいんでないの?

34 :デフォルトの名無しさん:02/06/02 23:21
>33
volatileが一番楽。pragmaは素人にはおししめできない

35 :デフォルトの名無しさん:02/06/02 23:22
K&RのANSI対応版見たんだけど、
signedだと保証されてるのは整数型の中ではint型だけみたい。


36 :デフォルトの名無しさん:02/06/02 23:25
>>35
整数型はintとcharだけでしょ?
longやshortはそれぞれlong int,short intという意味だし。

37 :デフォルトの名無しさん:02/06/02 23:28
strの中身の文字列で、スペース10個目より後ろの値を得たいので
(下記プログラムだと「ab0523092616p」の部分)、以下のプログラムを
書いてみましたが、states_mesに上手く格納できません。

どうもstrcatの2番目の引数がよろしくないみたいですが・・・
perlの経験は有りますが、変数の型に甘い言語に慣れてしまっていまして
対処方法がいまいちわかりません。
最終的にstates_mes内に「ab0523092616p」を格納出来るようにするには
どうしたらよろしいでしょうか?


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_LENGTH 1024

main(){
 char str[MAX_LENGTH] = "d k 1022174 10311 102590 759 uuune rejp 27354 1010 ab0523092616p";

 int i;
 int spc_check = 0;
 char states_mes[MAX_LENGTH];

 for(i=0;i<MAX_LENGTH;i++){
  if(spc_check==10){
   if(str[i]==NULL){
    break;
   }else{
    strcat(states_mes , str[i]);
   }
  }else{
   if(str[i]==' '){
    spc_check++;
   }
  }
 }

 printf("%s\n",states_mes);
}

38 :デフォルトの名無しさん:02/06/02 23:28
恐怖!

(char)255 って -1 になるのは負の表現が2の補数なCPUだけじゃん
かと思いきや・・・

39 :デフォルトの名無しさん:02/06/02 23:30
for ( here ; i<=10 ; i++){

↑のhereの場所に i=1とかだけじゃなくて
x=d , i=1 とかなんか別の式を一緒に書いてあることあるけど
x=d はforループにはいる前、例えばその上とかに
書いた場合と違いはあるんですか?

40 :デフォルトの名無しさん:02/06/02 23:31
>>38
思わせぶりしないで続きを書いてYO(´д`;

41 :ネパール弾:02/06/02 23:34
>>39
ない。なんつーか、コード上の表現として
「このループの先頭であーして欲しいこーして欲しい」
というのをすっげー強調したいときに使うやり方。

言葉の通じない外人といっしょのチームになったとき
コードだけで会話してたの・・・。

42 :デフォルトの名無しさん:02/06/02 23:36
>>37
何がしたいのかさっぱり分からない。

43 :デフォルトの名無しさん:02/06/02 23:37
>>41
なるほど、
産休

44 :デフォルトの名無しさん:02/06/02 23:39
>>39
ヒント カンマ演算子

45 :デフォルトの名無しさん:02/06/02 23:47
for(space = 10, i = 0;str[i] && (str[i] == ' '?--space:1);i++);
strcpy(buffer, str+i+1);

スペースが10個入ってることが確実ならこれでどーよ!(´д`;)

46 :デフォルトの名無しさん:02/06/02 23:48
>>37
strcatはポインタを求める気がする。
頭に&をかぶれ。

47 :デフォルトの名無しさん:02/06/02 23:50
    strcat(states_mes , &str[i]);


48 :46:02/06/02 23:54
47
ケコーン。この場合は違うか・・・

45は39への絡みもあるのか。トリツキな感じだ。

49 :37:02/06/03 00:26
みなさんありがとうございます。

無事思い通りのことができました。
拙い説明の仕方で済みませんでした。

C言語の勉強、もっと精進いたします。

50 : :02/06/03 00:34
struct{
int num[200];
POINT Pos[200];
}KOU;

KOU Kou;

struct{
int num;
POINT pos;
}KOU;

KOU Kou[200];

どっちがいいですか?

51 : :02/06/03 00:35
用途による。

52 :デフォルトの名無しさん:02/06/03 00:38
#define 50 (´д`)

53 :デフォルトの名無しさん:02/06/03 00:46
>>50
それ通らないでしょ?それともC++ですか?

54 :デフォルトの名無しさん:02/06/03 00:47
>>50
書くとしたら typedef を struct の前につけれ。紛らわしくていかん。

55 :デフォルトの名無しさん:02/06/03 00:48
#define _50 (´д`)

56 :デフォルトの名無しさん:02/06/03 00:50
>>53
C++にそんな昨日はありません

57 :デフォルトの名無しさん:02/06/03 00:51
そんな明日もありません

58 :デフォルトの名無しさん:02/06/03 00:51
そんな今日も

59 :デフォルトの名無しさん:02/06/03 00:52
もっこりますか?

60 :デフォルトの名無しさん:02/06/03 00:53
#define >>50 (´д`)

61 :デフォルトの名無しさん:02/06/03 00:54
>>60
通りませんよ。

62 :デフォルトの名無しさん:02/06/03 01:08
このスレ何日で消費する?

63 :デフォルトの名無しさん:02/06/03 01:11
@ 一週間
A 3日
B 6日
C 日下部陽ちゃん♥

64 :デフォルトの名無しさん:02/06/03 01:26
Cに√2票

65 :デフォルトの名無しさん:02/06/03 01:37
せっかくだから、本日8:00までに使い切らないか?

66 :デフォルトの名無しさん:02/06/03 02:05
基本的な質問していい?

++i と i++ってどう違うんだっけ?

67 :デフォルトの名無しさん:02/06/03 02:10
>>66
実行してみそ。

int i = 0, j;
j = i++;

int i = 0, j;
j = ++i;

のそれぞれの j の値を見れば意味がわかる。

68 :デフォルトの名無しさん:02/06/03 02:17
>>67
0と1になったよ
なんでか全然わからん・・

69 :デフォルトの名無しさん:02/06/03 02:19
>>68
その結果見てもわからんか・・・・
++iは、iを先にインクリメントしてからの値を返す。
i++は、iの値を先に評価してから返し、その後インクリメントする。

70 :デフォルトの名無しさん:02/06/03 02:20
i++はインクリメントを行う前のiの値(左辺値になれない)を返す。
++iはインクリメント後のi(左辺値になれる)を返す。

71 :デフォルトの名無しさん:02/06/03 02:25
>>69-70
副作用と式の値の区別がつかないといくら説明しても無駄。

72 :デフォルトの名無しさん:02/06/03 02:25
>>70
いいこと聞いた。
++i = 0; とかできるんだね。あまり意味ないけど。

73 :デフォルトの名無しさん:02/06/03 02:31
>>68
j=++i;
これは
i=i+1;
j=i;
と同じ。

j=i++;
これは
j=i;
i=i+1;
と同じ。


厳密に言うと少し違うんだが。

74 :デフォルトの名無しさん:02/06/03 02:33
>>72
できません。

75 :68:02/06/03 02:35
>>All
非常によくわかった。
さんきゅ〜

76 :デフォルトの名無しさん:02/06/03 02:36
>>74
ん?BCC5.5.1だと通ったぞ。

77 :デフォルトの名無しさん:02/06/03 02:37
>>76
ん?悪名高いVC++6.0Proだと通らなかったぞ。

78 :デフォルトの名無しさん:02/06/03 02:40
>>76>>77
どっちが正しいんだ?

79 :デフォルトの名無しさん:02/06/03 02:43
int main()
{
int i=44;
++i=0;
return 0;
}

cl test.c

test.c
test.c(4) : error C2106: '=' : 左のオペランドが、左辺値になっていません。


VC++6.0Proでこう出た。

80 :デフォルトの名無しさん:02/06/03 02:47
>>79
こちらでは、gcc3.1でコンパイルしてみたら通った。
LSI-C86試食版では「左辺値が必要」と出た。
処理系依存なのだろうか?

81 :デフォルトの名無しさん:02/06/03 02:50
うちのBCCは通らない

82 :デフォルトの名無しさん:02/06/03 02:53
>>81
変ですね。なぜ同じBCCなのに結果が違うのか。
ちなみにTurbo Debuggerで中身を見てみたら、ご丁寧にも
一度incrementしてから0を転送していたよ。

83 :デフォルトの名無しさん:02/06/03 02:56
++ と = の優先順位の差異かと思ったけど
これって環境依存関係なく規定されてたよな?
あれか? 例によって未定義とかそーゆーの?

84 :デフォルトの名無しさん:02/06/03 02:58
>>82 CPPファイルをコンパイルしていないだろうか。(CPPは通る)

85 :デフォルトの名無しさん:02/06/03 02:59
そーゆーのだ。

そもそも++した時点でその式は左辺値ではなくなる。
左辺値でないものに代入はできない。

できたとしたら、コンパイラのバグか、規格外の拡張機能だ。


86 :デフォルトの名無しさん:02/06/03 03:00
>>84
拡張子を.cppにして、C++のソースファイルとしてコンパイルしたらVC++6.0でも通った。

87 :デフォルトの名無しさん:02/06/03 03:01
>>83
私にはわからないです。専門家の登場を待つとしますか。

88 :デフォルトの名無しさん:02/06/03 03:01
Cは駄目、C++ならOKか。

89 :デフォルトの名無しさん:02/06/03 03:03
>>84
その通りです。CPPをコンパイルしていました。
>>88
そうなんでしょうか?もう一度C++第3版を穴が開くほど
読み直してみるとします。

90 :デフォルトの名無しさん:02/06/03 03:23
うぉ C++としてコンパイルすると確かに通る。
Cの場合は>>85のとおり、値に値を代入する形になるのでエラーになるが・・・

91 :68:02/06/03 03:27
またまた質問です。

配列で a[i] と b[j][k] を作ったのですが
その時、a を渡すと a[0] のポインタとして処理しますが
b を渡すとポインタとして認識せず、*b で渡さないとダメなようです。
なぜなんですか?
どこか間違っていますか?

92 :デフォルトの名無しさん:02/06/03 03:33
C++ の場合、++i は i=i+1 と等価らしいね。 よって、 i=i+1=0; よって 0
らしいです。
ちなみに i++=0; はエラーだった。 恐らく i+(+=0); って感じか?・・・ワカラン

適当にコンパイルしてみた結果なので理論とか定義とかは無視してます。
うそついてたらゴメンヨ

93 :デフォルトの名無しさん:02/06/03 03:52
>>91
間違っていません。ただし、*bの意味は、pointer to array[k] なので、
(*b)[x]のように使う必要があります。*b[x]やb[x]と書くと、意味が違って
しまうので注意です。

bが1増えると、b[j][k]のjが1増えたのと同じ意味になります。

94 :デフォルトの名無しさん:02/06/03 03:54
>>91
もちろん、b[j][k]のような書き方もOKです。このb[j]の部分が*bに
化けていると思っていただいて差し支えありません。

95 :デフォルトの名無しさん:02/06/03 03:56
>>92
C++は演算子の多重定義機能があるので、Cとは演算子の解釈の
仕方が異なるのでしょうね。

96 :68:02/06/03 03:56
>>93
レスありがとう。
なんか凄く重要そうなこと言ってる気がするけど
よくわかりません。
a ではそのままポインタをさすのにbではなぜささないのでしょうか?
あと(*b)[x]とかの意味が全然わからないっす。。

97 :68:02/06/03 03:59
>>93
*b[x]やb[x] はどう違うのですか?


98 :デフォルトの名無しさん:02/06/03 04:01
>91
a[i] の a は &a == &a[0] だし
b[j][k] の b は &b == &b[0] == &b[0][0] だよ。

で、だ。
*a == a[0] だけど、 *b == b[0] であって、 *b != b[0][0] だよもん。

ここを乗り越えればポインタ博士へ一歩前進だ。がんがれ


99 :68:02/06/03 04:02
>>94
じっくり考えたらなんとなくわかってきました。

a[i]というのはaがポインタでa[0]のアドレスを指し、
例えばa[2]とかがa[0]の場所から2つめの場所にある値ってことですか?

100 :68:02/06/03 04:05
>>98
a[i]と宣言した場合
a==&a[0]ではないのですか?

すいません。今日からはじめてC言語を勉強し始めたので。
一日ずっとやってこのざまです。

101 :デフォルトの名無しさん:02/06/03 04:16
>>97>>98
Cではポインタは基本的に一次元配列しか指すことができません。
だから、bは array[k]という一次元配列を指すようにしているわけです。
(*b)[x]は、b[0][x]と同じ意味です。(b[0])[x]と考えて下さい。
*b[x]は、*(b[x])となってしまうので、b[x][0]と等価になってしまいます。
b[x]は、同じ理由から、b[x][0]へのポインタとなります。

102 :デフォルトの名無しさん:02/06/03 04:19
>>100
そうですね。a == &a[0]です。&a != &a[0]です。

103 :デフォルトの名無しさん:02/06/03 04:24
bをインクリメントすると、sizeof b[k] だけ増えます。
もしc[i][j][k]という配列があったとして、cをインクリメントすると、
sizeof c[j][k] だけ増えます。
ここで誤解のないように書いておきますが、cは定数ですので、
直接インクリメントできないので、例えば

int c[1][2][3], (*d)[2][3];

のように定義しておき、d = c; とすれば、dをインクリメントしたり
デクリメントしたりできます。

104 :68:02/06/03 04:28
>>102
今いろいろためしていたら
&a != &a[0]
となったのですが、これはなぜでしょう??
例題が悪かったのでしょうか?
こうなる場合もあるということでしょうか?

105 :68:02/06/03 04:29
間違えました
&a == &a[0]
です

106 :デフォルトの名無しさん:02/06/03 04:30
申し訳ない。間違いがありました。
sizeof b[k] -> sizeof(type[k])
sizeof c[j][k] -> sizeof(type[j][k])

107 :68:02/06/03 04:32
>>106
typeってなんですか?

108 :デフォルトの名無しさん:02/06/03 04:34
ええと、&a == &a[0] となるのは、値が同じになるということですが、
Cの文法上から言えば、意味が違います。
aはaddress of array[0]で、a[0]はvalue of array[0]です。偶然に
値が同じになることがあるかもしれませんが、何の意味もありません。
例えば、aが0x1000で、a[0]に0x1000が入っていたら、&a = &a[0] と
なることでしょう。これが同じでも意味がないことはわかりますね?

109 :デフォルトの名無しさん:02/06/03 04:36
>108
意味は違うが値はいっしょ
値がいっしょになるのは保証されてる

110 :デフォルトの名無しさん:02/06/03 04:37
>>108
間違いでした。スマソ。&aと&a[0]の値はいつも同じになりますが、
&aはaddress of array[i]、&a[0]はaddress of typeとなり、意味が
違います。
typeとは、intとかdoubleとか、あるいはstructなどの型のことです。

111 :デフォルトの名無しさん:02/06/03 04:37
>>108は、*aと*a[0]を比較してました。ごめんなさい。

112 :デフォルトの名無しさん:02/06/03 04:39
\ │ ハァ? .| ./ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/
___ ___ .\ | |/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
|ハァ?| |ハァ?| \.└――──―──/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
 ̄∩( ゚Д゚ ) 〃 ̄∩( ゚Д゚ )\ ヽ(゚Д゚ )ノ ./ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
ヾ. ) ヾ. ) \∧∧∧∧∧/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
| | | │ │ | .< 激 >.| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| /
(__)_) (__)_) < ハ し >.| (゚Д゚)ハァ? 最 中 .| ./
────────────< な ァ く >────────────────
|o ゝ○ノ| ::/^'ヽヽ:::::::< 予 ? > / ○ _ ○\ /
.ヽ( )_,,ノ |ゝ○_ノ o|:::::< 感 >( ││ )< / \ ア ?
^'' `‐' ヽ..,,_( )ノ ::l< !! > \ 丿 | / \
~~ ( / ̄ ̄ヽ -‐‐‐--l-∨∨∨∨∨. /  ̄ ̄ \ \____
,,,, | |||!|||i|||!| | ~^'‐..,,_/ /. ____.\( )
(:::::}| :| |ll ll !! !.| | ,,,, イ ~''/ Ю)__) \ /
. ~~ | :|!! || ll|| !!:| | {:::::) ::l ./ | ゚Д゚.| ハァ? . \ | |(゚Д゚) ハァ?
. | | ! | l ~~ l / ^^^^^ \. \ \⊂)
`ー--― 'ノ / \. ) ) |

113 :デフォルトの名無しさん:02/06/03 04:39
\ │ ハァ? .| ./ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/
___ ___ .\ | |/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
|ハァ?| |ハァ?| \.└――──―──/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
 ̄∩( ゚Д゚ ) 〃 ̄∩( ゚Д゚ )\ ヽ(゚Д゚ )ノ ./ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
ヾ. ) ヾ. ) \∧∧∧∧∧/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
| | | │ │ | .< 激 >.| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| /
(__)_) (__)_) < ハ し >.| (゚Д゚)ハァ? 最 中 .| ./
────────────< な ァ く >────────────────
|o ゝ○ノ| ::/^'ヽヽ:::::::< 予 ? > / ○ _ ○\ /
.ヽ( )_,,ノ |ゝ○_ノ o|:::::< 感 >( ││ )< / \ ア ?
^'' `‐' ヽ..,,_( )ノ ::l< !! > \ 丿 | / \
~~ ( / ̄ ̄ヽ -‐‐‐--l-∨∨∨∨∨. /  ̄ ̄ \ \____
,,,, | |||!|||i|||!| | ~^'‐..,,_/ /. ____.\( )
(:::::}| :| |ll ll !! !.| | ,,,, イ ~''/ Ю)__) \ /
. ~~ | :|!! || ll|| !!:| | {:::::) ::l ./ | ゚Д゚.| ハァ? . \ | |(゚Д゚) ハァ?
. | | ! | l ~~ l / ^^^^^ \. \ \⊂)
`ー--― 'ノ / \. ) ) |

114 :デフォルトの名無しさん:02/06/03 04:40
>>112
そう非難しないでくれよ。2chは間違えに気づいても、削除できない
んだから。

115 :68:02/06/03 04:41
>>108
確かにa[0]を参照するならそのとおりだと思います。

aがaddress of array[0]なら
&aはいったい何を示しているのでしょう?
プログラムでは&aもまたaddress of array[0]となったのですが。。

116 :デフォルトの名無しさん:02/06/03 04:43
>>115
Cの文法上、この場合は、ただのaも&aも、同じ意味になります。
aが定数だからです。

117 :68:02/06/03 04:43
>>111
なるほど。

118 :68:02/06/03 04:45
>>116
なるほど、わかってきました。
ではb[i][j]の場合はどうなるのですか?

(*b)[x] ←この表記が理解できないです

119 :デフォルトの名無しさん:02/06/03 04:48
>>118
配列演算子はすべて優先順位が等しいので、左から右に解釈されます。
つまり、b[i][j]は、(b[i])[j]と同じです。
b[0]と*bは等しいので、b[0][j] == (*b)[j]となります。
*b[j]と書いたら、*(b[j])となり、b[j][0]になってしまいます。
これは、*演算子が[]演算子より優先順位が低いためです。

120 :68:02/06/03 04:52
>>119
なるほど。非常に良く分かりました。
これを踏まえて今までのログをもう一度読んで見ます

121 :デフォルトの名無しさん:02/06/03 04:56
>>120
途中間違いがあって非常にすみませんでした。もう少しよく考えて
書けばよかったのですが、チャット形式になると、どうしても間違い
が顔を覗かせます。
ちなみに、int **a; なんて形式もすぐに出てきますので、わからな
くなったらまた書き込みしてみて下さい。誰かが答えてくれるはず
です(他力本願)。

122 :68:02/06/03 04:58
>>121
とんでもないです。
いろいろ教えてくださってありがとうございました。
おかげでかなり理解できました。


123 :デフォルトの名無しさん:02/06/03 12:45
>わからなくなったらまた書き込みしてみて下さい。誰かが答えてくれるはず
>です(他力本願)。
余計な事書くなって・・・


124 :デフォルトの名無しさん:02/06/03 13:13

  ∧ ∧   カタ       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚Д゚),____カタ__< みなさんさようなら…と、
  / つ._.|| ̄ ̄ ̄ ̄ ̄ ̄| \__________
 (,  |\.|| Upple iBook |
      \,,|============|




125 :デフォルトの名無しさん:02/06/03 14:47
読み込むファイルをランダムに変更したいのですが
どのようにすればいいのでしょうか?
fopen()は文字列しか引数として受け取ってくれないと聞きました。
fopen(rand()%X,"r");
ということは出来ないのでしょうか?


126 :デフォルトの名無しさん:02/06/03 14:50
文字列に変更すれば良いじゃん

127 :デフォルトの名無しさん:02/06/03 15:00
>>125
*Filename[]={"file1.aaa","file2.aaa"};
みたいにファイル名のリストつくっといて、
fopen(Filename[rand()%X],"r");
、とか

128 :デフォルトの名無しさん:02/06/03 15:01
確かに
b[i][j]と宣言して

b==b[0]==*b となって
b[0][0]==(*b)[0] となるのに
式を見ればあたりまえだが b[0] != b[0][0]
となるのはなぜなんだろう?

129 :デフォルトの名無しさん:02/06/03 15:02
>>125

char buf[128];
sprintf(buf, "%d", rand() % X);
fopen(buf, "r");

130 :デフォルトの名無しさん:02/06/03 15:03
>>128
b[0]はポインタ(b[0][0]のアドレス)。b[0][0]は値。

131 :デフォルトの名無しさん:02/06/03 15:05
b[0] == &b[0][0]

132 :デフォルトの名無しさん:02/06/03 15:06
>>130
そうだけどさ

b==b[0] となってるから両辺の右側に
[0]をつけるとおかしくなるって変じゃない?
b が値を持つことが変だと思うんだけど

133 :125:02/06/03 15:08
ありがとうございました。
無事、解決しました。

134 :デフォルトの名無しさん:02/06/03 15:13
for文で ++i とする場合は
どんな用途で使われるのですか?

135 :デフォルトの名無しさん:02/06/03 15:21
printfのfって何の意味ですか??
ファイルとかフィールドとか?


136 :デフォルトの名無しさん:02/06/03 15:21
>>135
format

137 :デフォルトの名無しさん:02/06/03 15:29
好きなMusicianは誰ですか?

138 :デフォルトの名無しさん:02/06/03 15:33
加藤茶

139 :デフォルトの名無しさん:02/06/03 15:35
>>132
あんたの頭がおかしいだけ。
型の勉強をした後>>131をみれ 

140 :デフォルトの名無しさん:02/06/03 16:03
>>139
>あんたの頭がおかしいだけ。

一言多いアフォだな

141 :デフォルトの名無しさん:02/06/03 16:05
>>140
まぁ、値を持たない変数とか言ってる時点である程度の寝たレスは覚悟した方がいいと思われ。

142 :デフォルトの名無しさん:02/06/03 16:07
ある値を持つb 自体はどういう意味があるの?
>>131は理解できるけど

143 :デフォルトの名無しさん:02/06/03 16:10
>>141
int i;
printf("%d ",i);

するとなんか大きい数が表示されるけど
これはなんか意味あるの?
とりあえずはiを格納するメモリ領域が
決まって、iに値を入れる前はその領域に
以前に書かれたデータがそのまま表示されてるだけだと思うけど

144 :デフォルトの名無しさん:02/06/03 16:11
>>143
そらそうだね。

145 :デフォルトの名無しさん:02/06/03 16:12
>>143
それとあれとの関係は?
わからなかったっす。

146 :デフォルトの名無しさん:02/06/03 16:14
141==144==145

( ´,_ゝ`) プッ


147 :デフォルトの名無しさん:02/06/03 16:15
>>146
オチがこれか。
ファイト!

148 :デフォルトの名無しさん:02/06/03 16:19
>>147
オマエモナ

149 :デフォルトの名無しさん:02/06/03 16:43
>>148
そんなあなたも>>141

150 :馬鹿☆栗子:02/06/03 20:28
void mul(const int ma[2][3],const int mb[3][2],int mc[2][2])

っていう mc=ma+mbのような配列を作りたいんですけど

 だれか 教えて

151 :デフォルトの名無しさん:02/06/03 20:36
意味側下欄

152 :デフォルトの名無しさん:02/06/03 20:40
>>150
mc = ma * mbでしょ。

153 :デフォルトの名無しさん:02/06/03 20:45
>配列を作りたいんですけど
int ma[2][3]={
{0,1,2},
{3,4,5}
};
int mb[3][2] = {
{0,1},
{2,3},
{4,5}
};
int mc [2][2];
mul( ma, mb, mc);


154 :粟 稗子:02/06/03 21:13
char *a[]とはどういうこととなのか教えていただきたいですわ。


155 :デフォルトの名無しさん:02/06/03 21:17
>>154
char型へのポインタの配列a。
もう逝ってよし!

156 :デフォルトの名無しさん:02/06/03 21:25
char *とintを引数に取りchar *を返す関数へのポインタを返す関数funcのプロトタイプを書け。(15点)

157 :デフォルトの名無しさん:02/06/03 21:27
char* iya_n(char *cp, int *ip);

158 :157:02/06/03 21:29
Σ(゚Д゚;)しまった罠か

159 :デフォルトの名無しさん:02/06/03 21:33
>>156
funcの引数は?

160 :デフォルトの名無しさん:02/06/03 21:35
>>159
任意。
つーか俺もわからん。

161 :デフォルトの名無しさん:02/06/03 21:36
>>156
char *(*func())(char *, int);

162 :160:02/06/03 21:37
char (*)(char *,int)
これを返す関数か・・・わからん

163 :デフォルトの名無しさん:02/06/03 21:40
>>161
それだとfuncの引数がchar *とintにならない?
とすると、char *(*func(char *, int))(void);
こうなるんだろうか。

164 :デフォルトの名無しさん:02/06/03 21:42
>>163
それだとfuncの引数がchar *, intになってしまうよ。

165 :デフォルトの名無しさん:02/06/03 21:42
>>163
ならないよ。

166 :デフォルトの名無しさん:02/06/03 21:43
typedef char* iya_n(char *cp, int *ip);
iya_n func( ... );

167 :デフォルトの名無しさん:02/06/03 21:44
>>163はchar *型を返す関数へのポインタを返す、char *, intを引数に取る関数func。

168 :デフォルトの名無しさん:02/06/03 21:44
iya_n *func( ... ); ダナ

169 :163:02/06/03 21:45
そうなのか・・・
じゃあfuncがintを引数に取るとすると、>>161はどんな感じになるの?

170 :デフォルトの名無しさん:02/06/03 21:46
>>169
char *(*func(int))(char *, int);

171 :デフォルトの名無しさん:02/06/03 21:46
>>169
char *(*func(int))(char *, int);

172 :デフォルトの名無しさん:02/06/03 21:47
>>170-171
そこにfuncの引数リストが来るのかー!!
ありがとう。

173 :デフォルトの名無しさん:02/06/03 21:58
配列を宣言する時
n=5;
a[n]としたいんですがどうすればいいでしょう??
defineはなしで。
nが変数なので

174 :デフォルトの名無しさん:02/06/03 21:59
>>173
C99対応コンパイラでそのままコンパイルできる。

175 :デフォルトの名無しさん:02/06/03 21:59
>>173
できません。
C99ではできるらしいけど。

176 :デフォルトの名無しさん:02/06/03 22:02
おお!ケコーン>>174-175

177 :デフォルトの名無しさん:02/06/03 22:05
>>173
配列定義は整数定数式じゃなきゃ無理

178 :1:02/06/03 22:07
>>173
ポインタにしてmalloc


179 :こまった君:02/06/03 22:10
double **ps;
double ps_dammy[30];
for(i = 0; i<30; i++ ) {
〜〜〜中略〜〜〜
ps_dammy[ i ] = psbuff;
}
ps = &ps_dammy[0]
for (j=0; j<20; j++){
printf (" ps[ %d ] = %f \n ", j , ps[j]);
}
これで、0ばかり表示されます。うまくはいっていないようです。
ちなみに中略の部分の問題ではないです。(∵一次元の配列ポインタならうまくいくので。。)
僕的には、
ps = &ps_dammy[0];
とすると、下記の二次元配列の■の部分に格納されると、認識しているのですが、違うのでしょうか?
  j→
  ■■■■‥■■
i   :
↓□□□□‥□□
  □□□□‥□□
要は、上記のような■の行にps_dammy[30]という配列を入れたいんですが。。
--------------------------------
または下記のような列にいれたい。。。けど、
下記のような列だと、メモリ内のアドレスは、とびとびですよね?
  j→
  ■□□□‥□□
i   :
↓■□□□‥□□
  ■□□□‥□□


180 :ファナルアンサー?:02/06/03 22:11
さてここで問題

そんな困惑中の>>173さんが次にとる方法は?

A #defineを使う        B malloc/free
C Cがイヤになって逃亡     D >>174>>175の仲人をつとめる

181 :こまった君:02/06/03 22:13
>>180
C でファイナルアンサー。

182 :デフォルトの名無しさん:02/06/03 22:15
C でファイナルロリータ

183 :デフォルトの名無しさん:02/06/03 22:16
>>180
マジレス。C99未対応ならBです。

184 :デフォルトの名無しさん:02/06/03 22:17
俺はロリコン

185 :デフォルトの名無しさん:02/06/03 22:17
psは二次元配列とちゃいまっせ。

186 :デフォルトの名無しさん:02/06/03 22:17
int float_to_int_cast(float n)
{
 const int bias = 1258291200;
 n += *(float*)&bias;
 return *(int*)&n - bias;
}

float>intへのキャストに上の関数を使うと良いらしいんですが、
負数の時におかしい値が返ってきます。
負数に対応してないならunsignedにすると思うのですが、
そうなっていないので、コードのバグでしょうか?

187 :デフォルトの名無しさん:02/06/03 22:23
>>179
何をしたいのかよくわからんが、

double *pp[30];
for (j = 0; j < 30; j++) pp[j] = &ps_dammy[j];
ps = pp;

で、ps[j][0] としてアクセスすれば目的は達成される。

>>186
ダメダメ。アドレスをキャストしても、肝心の値のキャストがされていない。

188 :デフォルトの名無しさん:02/06/03 22:23
>>179
何をするプログラムなの?

189 :デフォルトの名無しさん:02/06/03 22:24
>>186
おいおい、なんでそんなtrick code使うんだね?
ってのはともかく。

biasの値の意味を正確に説明してみ? それができたら答えも分かるっしょ。

190 :デフォルトの名無しさん:02/06/03 22:30
>>186
IEEEの定義を読まないと答えられない問題だわね。

191 :186:02/06/03 22:37
bias の値は ((23 + 127) << 23) らしいっす。
んでもって、何かの本に書いてある高速キャストのテクニックだとか。

192 :186:02/06/03 22:38
>>187
レスどもです。
アドレスをキャストして、int値を(int値のメモリイメージのまま)floatとして使うらしいです。

193 :デフォルトの名無しさん:02/06/03 22:39
>>191
その23, 127, 23はどこからきているのか、だよ。

194 :デフォルトの名無しさん:02/06/03 22:45
>>193
IEEE754の定義によると、floatは、

・符号1ビット
・指数部8ビット
・仮数部23ビット
で出来ている。

正規化バイアスは0x7f(127)である。

195 :デフォルトの名無しさん:02/06/03 22:49
>>194
正規化バイアスは、指数部の正規化のためのものです。

196 :186:02/06/03 22:49
>>193
わかんないです。
分かれば自分で結論が出せるんでしょうが…
負数に対応していそうなんだけど、実際どうなんだろう?
って事です。

ソースコピペで自前のライブラリに組み込む時に、
unsignedに直すべきか否かで迷っていたりするので。


197 :デフォルトの名無しさん:02/06/03 22:54
>>196
たとえunsignedにしても、nが負だったときにはやっぱりおかしくなるっしょ。意味ない。

198 :デフォルトの名無しさん:02/06/03 22:56
>>196
先頭の1ビットを見て、0と1の時で処理を分けたら?

199 :デフォルトの名無しさん:02/06/03 23:00
>>197
それでも、戻り値がunsignedだったら負数には対応してない
という主張が多少でも読みとれるんじゃないかと。

>>198
それじゃ高速変換の意味が無いと思います

200 :デフォルトの名無しさん:02/06/03 23:10
そこまでするならFLD、FISTを使ったほうがいい

201 :デフォルトの名無しさん:02/06/03 23:20
この場合、単なるキャストのほうがマシでない?

202 :デフォルトの名無しさん:02/06/03 23:38
23と127の謎を解く
http://www.mathworks.com/access/helpdesk/jhelp/toolbox/fixpoint/c3_bev12.shtml

203 :デフォルトの名無しさん:02/06/03 23:42
fld/fistpを使った方が微妙に遅かったけど、負数も正確にキャストでけた。
1000万回のキャストループで
>>186 85ms
fld&fistp 123ms
(int) 931ms
となった


204 :デフォルトの名無しさん:02/06/03 23:44
>>203
(int)を使うと、FLDCW命令が生成されるので、ストールが発生して
遅くなるんだろうね。

205 :こまった君:02/06/04 00:29
>>187
ということは、
>>179のようなとき、次の認識はあっていますよね?
ps = &ps_dammy[0];
とすると、下記の二次元配列の■の部分に格納されると、認識しているのですが、違うのでしょうか?
  j→
  ■■■■‥■■
i   :
↓□□□□‥□□
  □□□□‥□□

>>188
すでにある人の作った会席プログラムをいじって改造したいんですが,内部はいじれないので、
ps[i][j]という二次元配列になんとか格納して、送り出そうとしてるわけです。
ただ、今あるps_dammy[30]という配列を
ps2[i][0]に入れなければならないので、それには、
for文などで、一個一個いれなければならないのかな..と思って質問した次第です。

206 :デフォルトの名無しさん:02/06/04 00:35
>>205
それだったら、
double **ps;
とせずに、
double (*ps)[30];
として、ps = ps_dammy; とすればよろしい。
ps[0][0]〜ps[0][29]まで使える。

double **psでどうしても使いたいなら、もう一つポインタ変数を用意して、
double *ps2 = ps_dammy;
ps = &ps2;
として使えばよいが、メモリを二回参照しなければならないので、遅くなり
非効率的。

207 :こまった君:02/06/04 00:44
>>206
さっそくのレス感謝いたします。
*psに添え字をつけるのは思いつきませんでした。。
ps[0][ i ]
ではなくて、
ps[ i ][0]のように簡単に入れるほうほうはありませんか?
ps[0][0]〜ps[29][0]のように使用したいのです。
つまり、下記のようにです。こんなのどっちでもいいと思われるかもしれませんが、入れる解析プログラムのほうが複雑なので、いじれないので、解析プログラムが必要なように用意してやらなけりゃいけないのです。
  j→
  ■□□□‥□□
i   :
↓■□□□‥□□
  ■□□□‥□□
これを**psで宣言すると、
■の部分は、メモリ内のアドレスがとびとびになりますよね?
ps = ps_dammy;
とすると、下記のようにはいっちゃいますよね?
  j→
  ■■■■‥■■
i   :
↓□□□□‥□□
  □□□□‥□□

208 :デフォルトの名無しさん:02/06/04 00:51
>>207
問題の要点がよくわかった。
そしたら、
double (*ps)[1]; として、
double (*ps)[1] = (double (*)[1])ps_dammy; とすれば、
ps[0][0]〜ps[29][0]まで使える。

209 :デフォルトの名無しさん:02/06/04 00:54
>>207
ただし、ps[i][1]〜ps[i][29]までは使えない。
もしワークエリアとして上の変数を使いたいなら、やはりループで
代入するしかない。

210 :こまった君:02/06/04 01:07
>>208
ありがとうございます。
..二行目がよくわかりませんが、
代入の仕方をキャストして代入してるってとこでしょうか.
この方法について、まずは調べて見ます。
ありがとうございました。これでやってみます!

>>209の意味は、ようするに、
こんどはps[0][〜]のほうがいっきに代入したりできなくなる。
諸刃の・・ってことで合ってますよね?
つまり、ps[0][〜]のほうに入れたければ、ループで入れろと。
ま、こちらのほうは、5列くらいしかないものですので、ループで回すなりなんなりします。

211 :デフォルトの名無しさん:02/06/04 01:11
>>210
>>208は、違う表現のポインタに変換するためにキャストは必須です。
ないと、エラーが出ます。

>>209については、その認識であってます。無理矢理列が1の二次元
配列として認識させているためにこのようなことが起こります。

212 :デフォルトの名無しさん:02/06/04 01:14
>>210
>>209の意味は、ps[i][1]〜ps[i][29]は、ps[1][0]〜ps[29][0]と重なって
しまうという意味です。だから、ループで代入するには、>>208のような
方法は使えないということです。

213 :こまった君:02/06/04 01:31
>>212
アドレス上重なるということを理解するのが非常に難しいですね、
>>208の方法だと、
double data[30];
double ps_dammy[30];
double (*ps)[5];
for(i=0; i<4; i++){
  for(k=0; k<30; k++) ps_dammy[ k ] = data[ k+i ];//i によって一個ずれたps_dammy[0〜30]を作る
double (*ps)[i] = (double (*)[i])ps_dammy;
}
このようなことをすると、アドレスがかぶって上書きみたいになる(ようするにできない)ってことかな??

214 :デフォルトの名無しさん:02/06/04 01:42
>>213
そのように書くと、ps[0][0]〜ps[0][4]にps_dammy[0]〜ps_dammy[4]
が入ってしまいます。
やはり素直に、
double ps[30][5];
for (i = 0; i < 30; i++) ps[i][0] = ps_dammy[i];
のように書いた方がよいですね。

215 :こまった君:02/06/04 01:46
>>214
なるほど。。
難しいところですね。
でわ。とりあえず、実践してみます。
ありがとうございました!

216 :デフォルトの名無しさん:02/06/04 02:05
Algorithms in C セジウィック著の完全日本語略はないですか??

217 :デフォルトの名無しさん:02/06/04 02:17
>>216
第1巻〜3巻まで持ってるよ。
近代科学社刊。
今ではAlgorithm in C++の方しか書店で見かけなくなったけど、
注文すれば手に入るはず。

218 :デフォルトの名無しさん:02/06/04 02:19
>>216
第1巻:ISBN4−7649−0255−9 ¥2,800
第2巻:ISBN4−7649−0256−7 ¥3,200
第3巻:ISBN4−7649−0257−5 ¥3,300
各税別

219 :デフォルトの名無しさん:02/06/04 02:27
>>217,218
ありがとうございます。探してみます。

220 :デフォルトの名無しさん:02/06/04 06:25
a<i<b
の条件を論理的に表したらどうなるのでしょう??

221 :220:02/06/04 06:32
間違えました
(a<i<b)の範囲ではないi 
はどのように表現すればいいのでしょう?

222 :デフォルトの名無しさん:02/06/04 06:35
a<=i || i>=b

223 :220:02/06/04 07:31
>>222
ありがとうございます

224 :デフォルトの名無しさん:02/06/04 07:32
(i<=a)||(b<=i)

225 :220:02/06/04 07:34
>>224
ありがとうございました。。

って222は俺がやってたミスと同じだ。


226 :デフォルトの名無しさん:02/06/04 09:06
>>186
解説。
 const int bias = ((23 + 127) << 23);
// biasは、IEEE 32bit float表現で +1.0E23。

 n += *(float*)&bias;
//  仮数部は最上位に立ったbitのひとつ下から精度分が格納される。
//  1.0E23を加算することで、指数が23未満だったときに23に引き上げられ、かつ
// 仮数部に隠れた最上位ビットが1.0E23(今加算した値)となる。
//  指数が23(精度と同じ)ということは、仮数部がそのまま整数となる。
//  なお指数部がもともと23以上だった場合はこの限りでない。
//  また、負数で絶対値が1E23未満だった場合、この加算で
// 正数(絶対値を1E23から引いた値)になり、その最上位ビットが隠れ、指数が1減る。

 return *(int*)&n - bias;
//  指数が23の場合、指数23のイメージを引くことで、整数部だけが残る。
// 23以外だったときは壊れる。
//  負数だった場合、指数が22のため、23を引いて-1(オール1)になる。
// 仮数部も補数になっているが、指数が1少なかったため、小数点の位置がひとつ低い。
// つまり結果として2倍の値が得られる。

227 :デフォルトの名無しさん:02/06/04 10:33
WINDOWSでVC++を使っているのですがMFCやWIN32APIは理解したほうがよいのですか>
3ねんくらいC言語を使っているのですがいまだにHelloWorldしかできません。

228 :デフォルトの名無しさん:02/06/04 10:46
MFCとかWin32APIの前にもう少しCを勉強汁。

229 :デフォルトの名無しさん:02/06/04 10:47
>>227
3年で1週間レベルだから、100年ぐらいは頑張ってね。

230 :デフォルトの名無しさん:02/06/04 11:01
>>229
HelloWorldなら1時間レベルでは

231 :デフォルトの名無しさん:02/06/04 11:03
>>230
環境を整えたり、Cの概要を調べるだけで1時間以上かかると思われ。

232 :デフォルトの名無しさん:02/06/04 11:30
じゃぁ中とって1日レベル。
3年で1日レベルか・・・・憐れだ。

233 :デフォルトの名無しさん:02/06/04 12:34
227は今までgccとか使ってて、
Windows上だとHello Worldしかだせないと言ってるのでは?

234 :デフォルトの名無しさん:02/06/04 12:37
だろうな

235 :デフォルトの名無しさん:02/06/04 12:37
>>227
>WINDOWSでVC++を使っているのですがMFCやWIN32APIは理解したほうがよいのですか
理解しないと何もできません。

236 :デフォルトの名無しさん:02/06/04 13:18
プログラムってやりたいことない人は上達するのですか?
教科書とか参考書って見ていてあまり面白くないですし…


237 :デフォルトの名無しさん:02/06/04 13:23
>>236
コンピューターを自分の思うがままに操ることに快感を覚える
人は、プログラムの上達が人一倍早いです。
興味が沸かないなら、他の興味がある事を探した方が得策で
しょう。

238 :デフォルトの名無しさん:02/06/04 14:04
>>237
ほかにない場合は…
ぜんぜん伸びないなぁ、と思う今日この頃。
本に頼るからだめなのでしょうか?
言語と全然関係ないじゃん。

239 :デフォルトの名無しさん:02/06/04 14:26
本は頼るものじゃなくて利用するもの、と言ってみたり。

プログラム書いてて面白いと思えてればそのうち伸びるでしょ、思えていないなら早めにやめたほうがいいし。
参考書なんてどれもつまらないもの。
さっさと卒業して他のものに手だそう。
キタ━━━━(゚∀゚)━━━━!!と思える本に出会おう。

240 :デフォルトの名無しさん:02/06/04 15:24
>>239
キタ━━━━(゚∀゚)━━━━!!
と思える本とは何ですか。
お勧め本見てもぱっとしない


241 :デフォルトの名無しさん:02/06/04 15:46
Cマガ、Interface、or 洋書

242 :デフォルトの名無しさん:02/06/04 15:59
>>240
スレ違いだけどModern C++ Designとか

243 :デフォルトの名無しさん:02/06/04 16:08
C言語(結局VC++)使っているとしてPGから見るOSというのはAPIですよね。
WinならWin32API(MFCやATLはひとまず置いておいて)ですよね。
WinでのProgramを理解するならWin32を理解しろということですよね。
それを使ってC言語の予約語を使ってWindowsでプログラムするのがWindowsプログラムだと。

で、Win32をC++で使うときに一応使い易くするために作ったのがMFCなりOWCだと。


当たり前すぎて馬鹿らしいでしょうが、
これであってますよね。

244 :デフォルトの名無しさん:02/06/04 16:13
もう15年前だが、俺も文法なんて1週間かからずに覚えたな。
勉強したって感じより、ゲーム感覚でのめり込んで遊んでるうちに
覚えてしまったって感じ。本なんてなんでもよかったよ。
でも、K&Rだけは読んでもわけわからんかったが(笑)。

245 :デフォルトの名無しさん:02/06/04 16:45
getchar()などで入力を待っている状態に
difftime( now,start )などで待ち時間を表示したいのですが
どうすればいいのでしょうか?

246 :デフォルトの名無しさん:02/06/04 16:59
selectするとか、thread使うとか。

247 :デフォルトの名無しさん:02/06/04 17:03
>>241
洋書なら何でも良いのか?
Cマガと書いてるあたりネタとしか思えないが

248 :デフォルトの名無しさん:02/06/04 17:06
float型の配列を0クリアするのにmemset()を使ってよいですか?
他に初期化するのに使える関数はありますか?

249 :デフォルトの名無しさん:02/06/04 17:08
>>248
良い

250 :245:02/06/04 17:16
>>246

select case()を使えってことでしょうか?
後、threadとは何でしょうか?

251 :デフォルトの名無しさん:02/06/04 17:18
selectとswitchは違うぞ

252 :デフォルトの名無しさん:02/06/04 17:20
C#、C++雑談スレッド     
http://pc.2ch.net/test/read.cgi/prog/1023178697/

253 :デフォルトの名無しさん:02/06/04 19:24
strnlenという関数を使いたいのですが、使えません。
LSI CでもFreeBSDでも使えませんでした。なぜなのでしょうか…?
strncpyなんかは使えるのに…

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strnlen.3.html

254 :デフォルトの名無しさん:02/06/04 19:25
この関数は GNU の拡張である。
っていう文字が見えませんでしたか?

255 :デフォルトの名無しさん:02/06/04 19:58
>>254
それってどういう意味ですか?

256 :デフォルトの名無しさん:02/06/04 20:00
>>255
その関数がGNUの拡張だってこと

257 :デフォルトの名無しさん:02/06/04 20:01
ワラタ

258 :デフォルトの名無しさん:02/06/04 20:08
size_t
strnlen(s, n)
char const *s;
size_t n;
{
size_t i;
for (i=0; i<n && *s; i++, s++) ;
return i;
}


259 :デフォルトの名無しさん:02/06/04 20:30
size_t size = sizeof typeof(3.14 * gundam);

260 :デフォルトの名無しさん:02/06/04 21:02
Cプログラマは『新ANSI C言語辞典』って持ってた方がいい?
http://www.amazon.co.jp/exec/obidos/ASIN/4774104329/qid=1023192020/sr=1-48/ref=sr_1_2_48/249-8054570-0244362

261 :デフォルトの名無しさん:02/06/04 21:06
ただのCなんぞK&R1冊あれば十分。
C++なら色々買え。

262 :shige:02/06/04 21:15
CはK&RとエキスパートCプログラミングで十分。
それ以外は不要。

263 :260:02/06/04 21:19
>>261-262
ってことはなくてもいいってことですね。

264 :shige:02/06/04 21:25
info/man
調べものはこれで十分

265 :デフォルトの名無しさん:02/06/04 21:27
ふっふっふ

266 :デフォルトの名無しさん:02/06/04 23:23
C/C++を独習し始めて何ヶ月くらいでVectorにフリーソフトを出せるくらいに
なりますか?ソフトにもよると思いますがいちばん簡単なもので。

267 :デフォルトの名無しさん:02/06/04 23:24
1日。Hello Worldプログラム(ソース付属)

268 :デフォルトの名無しさん:02/06/04 23:26
>>266
何でそんなこと訊くの?

269 :デフォルトの名無しさん:02/06/04 23:32
packがほしいとか。
ってか、今もpackあるの?

270 :デフォルトの名無しさん:02/06/04 23:35
pack最近(というかここ数年)届かねーぞゴルァ。
もう作ってないんだろうけど。

271 :デフォルトの名無しさん:02/06/04 23:57
Vectorなんて自分で登録するんだからソフトの出来なんて関係ないよ

272 :デフォルトの名無しさん:02/06/05 00:02
vectorに登録されるソフトって増える一方なんだろうか。

273 :デフォルトで名無しさん:02/06/05 06:59
>>271
え、あれって自分で登録するもんだったの?
漏れんとこは登録させてくれって向こうから来たよ。
もうかなり昔だけど。


274 :デフォルトの名無しさん:02/06/05 10:17
まだ登録ソフト数が少なくて数を増やしたかったんだろ

275 :デフォルトの名無しさん:02/06/05 13:40
makefileで教えてください。
プログラム中の#defineを、代わりにmakefile中に記述できますか?

276 :デフォルトの名無しさん:02/06/05 13:42
>>275
コンパイラオプション熟読。

277 :デフォルトの名無しさん:02/06/05 13:49
>>275 多分-D。
>>276 も言ってるように、makefileじゃなくコンパイラの問題だと思うがどうか。

278 :デフォルトの名無しさん:02/06/05 13:57
>>276
>>277
べりーさんくす。-Dでできました。感謝age

279 :デフォルトの名無しさん:02/06/05 15:16
Sun のCコンパイラなんですけど「機能」などの文字列定数がコンパイル時に
警告: 不適切なエスケープ: \<0xba>
を出します。
どうしたものでしょう?

280 :デフォルトの名無しさん:02/06/05 15:19
>>279
0xba->ASCIIじゃないっす。

281 :デフォルトの名無しさん:02/06/05 15:19
>>279
>\<0xba>
漢字コードじゃないの?

282 :素人ですみません:02/06/05 15:22
C言語をこれから学びたいと考えてますが、何分お金がないのでタダで学ぼうと
図書館に行ったんですが、どの本に付属しているCDROMがいいのかっていうのが
判りません。

cygwinを使えって言われたんですが、これはどこで手に入るんですか、また
これと本を借りれば学べるんですかね?

283 :デフォルトの名無しさん:02/06/05 15:23
http://www.cygwin.com/

284 :デフォルトの名無しさん:02/06/05 15:24
>>279
[ュ],5cba,FAAD,3F

>>282
検索してからでも良いんじゃない?せっかくのインターネット。

285 :デフォルトの名無しさん:02/06/05 15:24
>>282
マルチしまくりですね。

286 :>285:02/06/05 15:26
いや、すみません。
早く知りたいもので。

以後気をつけます。

287 :デフォルトの名無しさん:02/06/05 15:31
早く知りたきゃさっさと検索すれ。

288 :279:02/06/05 15:35
ヽ(`Д´)ノウワァァァン!!
どうすればいいのー?

289 :デフォルトの名無しさん:02/06/05 15:37
printf("機能:%s", ss);

とかやってますか?

290 :デフォルトの名無しさん:02/06/05 15:39
>>288
ソースをshift jisで書いてるんじゃないの?
EUCとかで書けってことかと。

291 :279:02/06/05 15:40
やってます。

292 :279:02/06/05 15:40
マシンはShiftJISみたいなんです。あまりUNIX詳しくないんです。

293 :デフォルトの名無しさん:02/06/05 15:43
0x5cがエスケープシーケンスとして見なされてるんじゃないの?
"機能"→"機能\"にしてみれ

294 :デフォルトの名無しさん:02/06/05 15:45
printf("%s%s", "機能:", ss);

なんつって。

295 :デフォルトの名無しさん:02/06/05 15:47
コンパイラがsjisのエスケープをしてなくて平気な環境ってことは
sjisでは書くなという意思表示だと思うが。
それに「マシンがsjis」って何だよ(笑)文字コードはマシンには依存しないし。
エディタ次第でしょ。

296 :279:02/06/05 15:52
>>293
Pro*Cかますんでそれだとまずいみたいなんです。

>>294
いっしょのような気が

>>295
んだば、秀丸で書いてFFFTPでEUCに変換してアップしてコンパイルすれば
いけるのかなー
やってみよう

297 :デフォルトの名無しさん:02/06/05 15:59
>>295
>それに「マシンがsjis」って何だよ(笑)文字コードはマシンには依存しないし。

PC98x1

298 :デフォルトの名無しさん:02/06/05 16:13
>>297
PC98x1のVRAMはJISで、SJISではないよな。

299 :デフォルトの名無しさん:02/06/05 16:14
ストリームの概念がいまいち掴めません、教えて

300 :デフォルトの名無しさん:02/06/05 16:15
279
コンパイラだますだけなら。
printf( "\x8B\x40\x94\x5c %s", s );
printf( "\x8B\x40能 %s", s );

301 :デフォルトの名無しさん:02/06/05 16:17
>>299
ファイル開いて。

302 :デフォルトの名無しさん:02/06/05 16:18
>>299
よんで

303 :デフォルトの名無しさん:02/06/05 16:18
>>299
とじる。

304 :デフォルトの名無しさん:02/06/05 17:09
staticな関数のプロトタイプをヘッダーファイルに書いているやつがいるんですが。

305 :デフォルトの名無しさん:02/06/05 17:10
許してあげなさい。
生成されるバイナリが膨れるだけで実害はないから

306 :279:02/06/05 17:14
うーん。こまった。

307 :デフォルトの名無しさん:02/06/05 17:15
サイズは河原んだろ。意味ないだけで。

308 :デフォルトの名無しさん:02/06/05 18:00
>>307
その代わり、同名で引数が違うstatic関数を別ファイルで定義できなく
なる。百害あって一利なし。

309 :デフォルトの名無しさん:02/06/05 18:02
>>279
適当なところに\を挿入

310 :デフォルトの名無しさん:02/06/05 18:03
>>308
それが目的とか。メリットが想像もつかんけど(笑)

311 :デフォルトの名無しさん:02/06/05 18:06
>>306
まだ困ってるの?
EUCに変換やってみようってのはどうなった?

312 :279:02/06/05 18:21
EUCに変換したら表示される文字が化け化けになりました。
しかたないので機能という文字はすべて消しました。めでたしめでたしです。

313 :デフォルトの名無しさん:02/06/05 18:32
"機能\"でもだめなのか

314 :デフォルトの名無しさん:02/06/05 18:34
>>313
>>296
うーん。
"機能\\"はどうか。

315 :デフォルトの名無しさん:02/06/05 18:36
printf("unkounko")でコンソールにunkounkoと出力されますが、
コンソールじゃなくてファイルにunkounkoと出力する関数ってありますか?

316 :デフォルトの名無しさん:02/06/05 18:39
fprintf();

317 :デフォルトの名無しさん:02/06/05 18:40
>>316
速レスサンクスです。
調べてみます。

318 :名無し募集中。。。:02/06/05 18:42
printf("うんこうんこ");

319 :デフォルトの名無しさん:02/06/05 18:49
main()
{
 freopen("test.txt", "w", stdout);
 printf("unkounko");
}

320 :デフォルトの名無しさん:02/06/05 18:59
Void氏ね

321 :デフォルトの名無しさん:02/06/05 19:21
>>312
SJISに設定したtelnetで化けたとかか。

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


323 :デフォルトの名無しさん:02/06/06 02:49
sscanf(str,"%[^,],%[^,]",buf01, buf02);
で、文字列strをカンマ区切りでbuf01/buf02に読み込めると
どこかのスレで読んだのですが、
%[^,]の部分て、どのような規約によって決まっているのでしょうか?
MSDN(VC++6付属)で「書式指定」で探してみたんですが
いま一歩理解できなかったです。

何をキーワードにして検索すればよいでしょうか?
それとも、自分みたいなアフォにもわかりやすく
説明しているようなページはありますでしょうか?


324 :デフォルトの名無しさん:02/06/06 03:20
>>323
ここなんか明快でよくないか?
http://homepage1.nifty.com/hujitako/yapt/SmartScanf2.htm

325 :The 中村:02/06/06 11:39
C言語で
ファイルの削除の仕方を教えてください
シェルでchmod→rmを行いsystemでそのシェルを呼び出す方法をしてますが
これ以外で関数一発でファイル削除が出来るようなのってないでしょうか?
サーチしても見つからず困ってます
どうかご教授お願いします

326 :デフォルトの名無しさん:02/06/06 11:41
remove
unlink

327 :The 中村:02/06/06 11:53
326さん
どうもありがとうございました

328 :デフォルトの名無しさん:02/06/06 12:00
削除にchmodはイランだろ。それともディレクトリに対してchmodしてんのか。

329 :デフォルトの名無しさん:02/06/07 04:19
コンソールから入力した10進数値の各桁の値を
配列に格納するにはどうしたらよいでしょうか?
文字列から数値変換するのはなしです。



330 :デフォルトの名無しさん:02/06/07 04:34
-'0'

331 :デフォルトの名無しさん:02/06/07 04:45
>>330
よくわかんないです(´д`;)


332 :デフォルトの名無しさん:02/06/07 04:58
>>329
int i;
char str[20];
scanf("%d", &i);
sprintf(str, "%d", i);

333 :デフォルトの名無しさん:02/06/07 05:30
>>329

数字 c ---> 数値 c - '0'

ASCII コード表を見ながら、 c に '1' から '9' までの
数字を実際に代入して確認してみてください。

334 :デフォルトの名無しさん:02/06/07 05:32
>>329

捕捉。「数字」と「数値」の違いを調べてみて下さい。

335 :1 :02/06/07 11:43
本を買えよ

336 :デフォルトの名無しさん:02/06/07 11:47
ソフトもかえよ

337 :デフォルトの名無しさん:02/06/07 12:02
memcopyの使い方を教えてください。
コピーするのはわかるんやけど、
ヘルプを見ても意味がわからないのです。
memcopyで配列をコピーしたいのです。
例えばp[20][30]の配列をw[20][30]の配列へ・・・

338 :デフォルトの名無しさん:02/06/07 12:21
memcopyって何ですか?

339 :デフォルトの名無しさん:02/06/07 13:04
#include <mem.h>
void *memcpy(void *dest, const void *src, size_t n);

void *_wmemcpy(void *dest, const void *src, size_t n);

解説

n バイトのブロックをコピーします。
memcpy は,UNIX の System V で使用できます。
memcpy は,n バイトのブロックを src から dest にコピーします。src と dest が重複する場合の memcpy の動作は未定義です。

こう書いてるけど実際、どうやるのかがわからない。


340 :デフォルトの名無しさん:02/06/07 13:09
int p[20][30];
int w[20][30];

memcpy((void*)w, (void*)p, sizeof w);

(キャストはいらないかもしれない。)

341 :デフォルトの名無しさん:02/06/07 13:20
>>339
memcpyなら知ってます。

342 :デフォルトの名無しさん:02/06/07 13:23
C言語でこの意味がわかりません、教えてください

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

343 :デフォルトの名無しさん:02/06/07 13:23
Cの2次元配列って隙間なくびっちりだっけ?

344 :デフォルトの名無しさん:02/06/07 13:24
>340
憶測でものを言うな!


345 :344:02/06/07 13:25
>343
多分。


346 :デフォルトの名無しさん:02/06/07 13:25
>341 ヴォイドレス イラネ

347 :デフォルトの名無しさん:02/06/07 13:26
>>342
おまじないです。

348 :デフォルトの名無しさん:02/06/07 13:27
>>343
もし隙間があったとしても、このばあい問題ないんじゃねーの?

349 :デフォルトの名無しさん:02/06/07 13:27
>>343
配列の要素のアドレスを調べて確認しる。

350 :343:02/06/07 13:30
そりゃそうだなヽ(´ー`)ノ

351 :デフォルトの名無しさん:02/06/07 13:30
1 little
2 little
3 little indians,
4 little
5 little
6 little indians,
7 little
8 little
9 little indians,
10 little indian boys.

プログラム中にlittle、indianは一回、数字は2と4から10は一回もでない

誰か教えてください!

352 :デフォルトの名無しさん:02/06/07 13:33
>>351が何を言ってるのかわかりません。

誰か教えてください!

353 :デフォルトの名無しさん:02/06/07 13:34
>>351 教えて欲しいのはこっちだ。

354 :351:02/06/07 13:34
このプログラムを作らなくてはいけません


355 :デフォルトの名無しさん:02/06/07 13:35
            ρ(´-`ρ)
      ★ゆんゆん★
(σ´ー`)σ

356 :デフォルトの名無しさん:02/06/07 13:36
>>351
printf(
"1 little \n"
"2 little \n
"3 little indians, \n"
"4 little \n"
"5 little \n"
"6 little indians, \n"
"7 little \n"
"8 little \n"
"9 little indians, \n"
"10 little indian boys. \n"
);

357 :デフォルトの名無しさん:02/06/07 13:37
>>356
そういうの飽きた

358 :351:02/06/07 13:37
>>356
プログラム中にlittle、indianは一回

359 :デフォルトの名無しさん:02/06/07 13:40
>>351
プログラミングを勉強する前に日本語を勉強してください。

360 :デフォルトの名無しさん:02/06/07 13:42
>>358
何をするプログラムなの。

361 :351:02/06/07 13:42
>>359
波平

362 :351:02/06/07 13:43
歌詞を表示するプログラムです

363 :デフォルトの名無しさん:02/06/07 13:48
宿題なら宿題スレに。
しかし >>359 に同意

364 :351:02/06/07 13:49
早く教えて

365 :デフォルトの名無しさん:02/06/07 13:52
失せろ。

366 :351:02/06/07 13:58
>>363
宿題スレに書きました

367 :デフォルトの名無しさん:02/06/07 14:28
memcpy教えてくれてありがとう!!

368 :デフォルトの名無しさん:02/06/07 23:35
cpyって何の略? capacity?

369 :デフォルトの名無しさん:02/06/07 23:35
>>368
copy.......

370 :デフォルトの名無しさん:02/06/08 00:00
wavファイルを読み込んで音量を調節したものを出力するソフトを作っています
波形データを配列に格納するところまでは成功したので,とりあえず音量を半分にしてみようと思って
for(DWORD i = 0; i < nSamples; i++)
{
lChannel[i] /= 2;
rChannel[i] /= 2;
}
とやってみたのですが,どうにも上手くいきません.出力された波形を見ると,
真ん中で二つにパックリ割れてしまっているような感じになっています.
正しい処理の方法を教えてください

371 :デフォルトの名無しさん:02/06/08 00:10
波形処理とか全然詳しくないが、音量を半分にするのは
単に値を1/2すればいいってもんじゃなかったぞ、確か。
詳しいことは↓で聞いてみるとよいかも。

サウンドプログラミング
http://pc.2ch.net/test/read.cgi/tech/996171508/l50

372 :デフォルトの名無しさん:02/06/08 00:48
最強の言語はやっぱCですか

373 :デフォルトの名無しさん:02/06/08 00:59
>>372
いや、オヤジギャグでしょう。
どんなにまじめな気分のときでも、どんなにやる気がみなぎっているときも、
一瞬にして皆を脱力させてしまう。
暴漢に襲われそうになったときは、まずオヤジギャグで相手の攻撃意欲を
打ち砕き、脱力しているすきに逃げ去る。
戦わずして勝つ方法。「孫子の兵法」にもこの手は載っていない。
最強の言語。


374 :デフォルトの名無しさん:02/06/08 01:09
>>370
DBからAMPに変換した後1/2にして、その後またDBに変換

375 :デフォルトの名無しさん:02/06/08 01:10
370
無圧縮PCM formatのデータはDWORD(unsigned long)はかったと思う。
たしか8bit符号なしか16bit符号つきのどちらかだったと思う。

376 :デフォルトの名無しさん:02/06/08 01:10
ウィンドウに線を表示するにはどうしたらいいでしょうか

377 :デフォルトの名無しさん:02/06/08 01:13
LineTo

378 :デフォルトの名無しさん:02/06/08 01:14
for(i = 0 ; i < MAX_WIDTH ; ++i) {
 pset(i, 10);
}


379 :デフォルトの名無しさん:02/06/08 01:18
>>377
どうもありがとうございました

380 :デフォルトの名無しさん:02/06/08 01:20
>>377
>>378
ついでにヘッダーも教えてください

381 :デフォルトの名無しさん:02/06/08 01:25
#include <windows>

382 :デフォルトの名無しさん:02/06/08 01:42
>>376
> ウィンドウに線を表示するにはどうしたらいいでしょうか
OSくらい示せよ・・・それ以前にスレ違いだが。

383 :323:02/06/08 07:24
>>324
おそレスすまんです。
かなり参考になりそうな気がしますです。
少なくとも、ただの文法書よりは100倍読む気になります。
1回読んでもわからないと思うので、がむばつてみます。


384 :デフォルトの名無しさん:02/06/08 21:08
windowsプログラムですが(スレ違いかな?)、
const char型の戻り値を返す関数の戻り値を配列に格納したいのですが
うまくいきません。配列中身が全て同じになってしまいます。


385 :デフォルトの名無しさん:02/06/08 21:12
>>384
コード晒せ

386 :デフォルトの名無しさん:02/06/08 21:20
いまさらだけどInterfaceっていう雑誌の今月号おもしろい

387 :こまった君:02/06/08 21:25
---------------------------
dataは
230 231 229
231 229 243
229 243 221
 :
という風なタブ区切り,改行区切りファイルで、
一行づつ(例えば【230 231 229】)読み取って、文字列chaに収めたい。。。
もしも、
FILE *data;
char cha[256];
なら、
data = fopen("test.txt","r");
while( ( fgets(cha , 256, data)) != NULL ) [
〜作業〜
i++
}
でOKなんですが、
----------------------------
double data[100];
char cha[256];
の宣言で、
data[100]が
data[0] = 230 231 229
data[1] = 231 229 243
data[2] = 229 243 221
 :
の場合、
上と同じように一行づつchaに入れるには、どのようにすればよかでしょうか?
while( ( ??? != ??? ) [
作業
i++
}

388 :384:02/06/08 21:26
const char *str[128];

for(i=0;i<5;i++){
str[i] = xxx();
}

xxx()関数の戻り値はPCSTR型です。
こんな感じです。配列strに文字列が入ると思うんですが、うまくいかない感じです。
PCSTR型ってconst char *型ですよね?違ったかな・・・

389 :デフォルトの名無しさん:02/06/08 21:29
constjyなくstaticじゃねーの
constって定数じゃなかったけ

390 :デフォルトの名無しさん:02/06/08 21:34
>>388
LPCSTR str;

str = xxx();

ならポインタ変数strに文字列の先頭アドレスが入るとは思うが。

391 :デフォルトの名無しさん:02/06/08 21:35
>>388
str[i] = xxx();
は、xxx()が既存のどこか別の場所に文字列を書き込み、その先頭アドレスを返すわけだな。
実行するごとに変わるのはその文字列の内容であって、アドレスは変わらない。

str[i] = xxx();の代入は、文字列の内容ではなくアドレスを保存しているため、
すべて同じアドレスしかなく、内容を参照すると最後の実行結果の文字列しか読めないわけね。

アドレスじゃなく内容をコピーしる!

392 :デフォルトの名無しさん:02/06/08 21:35
>>388
単にxxxが同じバッファ再利用してるだけじゃねぇの?

393 :デフォルトの名無しさん:02/06/08 21:41
適当なこと書くんじゃねーYO!

394 :384:02/06/08 21:47
確かに>>388さんがおっしゃるように、内容を参照すると
最後に実行結果の文字列しか表示されません。
アドレスじゃなくて内容をコピーするのはどうすれば良いでしょう?

395 :384:02/06/08 21:48
間違えました、>>391さんですね。

396 :デフォルトの名無しさん:02/06/08 21:53
>>394
それくらい自分で(以下略

397 :デフォルトの名無しさん:02/06/08 21:53
>387
君はまずデータ型と実データの関係をもっと勉強するべき。
「double data[100]」と宣言してるのに、
実データのイメージを「data[0] = 230 231 229」と書いている時点でかなりヤバイよ。

398 :デフォルトの名無しさん:02/06/08 23:05
>>394
memcpy使え。
その前にxxxが返す文字列分のメモリをstr[i]に割り当てる必要はあるが

399 :デフォルトの名無しさん:02/06/08 23:12
>>398
文字列なら strdup() かね。非標準だが、大抵の処理系にはあるし、なければ
簡単に自作できる。

400 :384:02/06/08 23:30
>>399
strdup()でうまくいきました。ありがとうございますー。
文字列のコピーを考えたとき、strcpyとlstrcpyが頭に浮かんできたので
試してみたけどダメでした。コピーと言っても方法がいろいろあるのでしょうか。
良ければstrdup関数の自作方法を教えていただきたいのですが。

401 :デフォルトの名無しさん:02/06/08 23:32
>>400
メモリ管理(malloc, free)について勉強しましょう。

402 :384:02/06/08 23:49
>>401
了解しました。もう少しCの勉強をしておきます。

403 :デフォルトの名無しさん:02/06/09 00:23
>>370
そんな感じのやり方で良いと思うが…。
処理後の波形でplayすると歪んだ音になるのか?
>真ん中で二つにパックリ割れてしまっているような感じ
どうゆう波形なのか今いち想像つかん(w


404 :_:02/06/09 01:22
ファイルのサイズを、取得する方法をおしえて。

405 :デフォルトの名無しさん:02/06/09 01:25
>>404
二種類ある。
1. ディレクトリ検索結果から得る方法。
2. ファイルを開き、末尾にseekして現在位置を得る方法。
あとは自分で調べて。

406 :デフォルトの名無しさん:02/06/09 01:46
WindowsならGetFileAttributesExがいい

407 :デフォルトの名無しさん:02/06/09 01:55
>>370
音量を半分にするなら
信号の振幅をdbmで半分にしないと

408 :デフォルトの名無しさん:02/06/09 01:59
変わり種で、_stat

409 :デフォルトの名無しさん:02/06/09 02:13
>403
unsignedとsignedを間違えて扱ったんじゃないか?


410 :デフォルトの名無しさん:02/06/09 02:59
>>400


#include <string.h>

char *strdup(char *s){

    char *p = NULL;

    p = (char *)malloc(strlen(s) + 1);
    if(p != NULL)
        strcpy(p, s);

    return p;
}

411 :デフォルトの名無しさん:02/06/09 03:07
>>387

    char cha[100][256];
    int i = 0;

    while(fgets(char[i], 256, data) != NULL && i < 100){
        作業
        ++i;
    }


412 :デフォルトの名無しさん:02/06/09 06:28
すいません厨房です。
RGBで白の場合は(0xff,0xff,0xff)となるらしいですがその中の「0x」というのは
何ですか?

413 :デフォルトの名無しさん:02/06/09 06:40
>>412
0xがわからないのに、ffは何か知ってるの?

414 :デフォルトの名無しさん:02/06/09 06:43
何故本を読まないのですか|o|

415 :デフォルトの名無しさん:02/06/09 08:50
>>413
アングラかぶれだからです。

>>414
2ちゃんねらーだからです。

416 :デフォルトの名無しさん:02/06/09 09:07
>>412
Cの仕様でしょう。
変数名と区別するために、先頭に0をつけ次のxで(以下略


417 :デフォルトの名無しさん:02/06/09 10:30
まだC++でもかんぜんにCを凌駕出来ないといわれますが
C言語に出来てC++に出来ないことは何ですか?


418 :デフォルトの名無しさん:02/06/09 10:36
はぢめて聞いた・・・まぢで?

419 :417:02/06/09 11:09
C++はまだ完全にCを超えてないといいませんか?
確かそう聞いた。
2chでも見たような気がする。
それで何が違うのだろうと思ったのです。

420 :デフォルトの名無しさん:02/06/09 12:27
>>419
> C++はまだ完全にCを超えてないといいませんか?
はつみみです。

421 :デフォルトの名無しさん:02/06/09 12:28
>>419
使える人の数とかじゃないの?

422 :デフォルトの名無しさん:02/06/09 12:56
配列を値で返すことはできるでしょうか。
できたら、どうすればいいか教えて下さい。お願いします。

423 :御茶目菜子:02/06/09 13:04
バカか
いまごろCかよ。ふるいんだよ。おまえら死ね。
いまどきの言語はよ〜
ポケコンBASICだぜ!!

424 :デフォルトの名無しさん:02/06/09 13:05
>配列を値で返す
どういう意味?

425 :デフォルトの名無しさん:02/06/09 13:22
>>422
配列自体はできないが、構造体は返せる。
これを利用して、構造体の中に配列を入れて返せばいいんでない?

426 :デフォルトの名無しさん:02/06/09 13:59
配列の先頭へのポインタを返すんじゃないの?

427 :デフォルトの名無しさん:02/06/09 14:03
>>426
値を返すこと、といってるし

428 :デフォルトの名無しさん:02/06/09 14:46
> C言語に出来てC++に出来ないことは何ですか?

void*から他のポインタ型への暗黙のキャスト

429 :デフォルトの名無しさん:02/06/09 14:47
プロトタイプ宣言なしの未知関数呼び出し

430 :デフォルトの名無しさん:02/06/09 15:01
>>411

x  fgets(char[i], 256, data) != NULL && i < 100

o  i < 100 && fgets(char[i], 256, data) != NULL

431 :デフォルトの名無しさん:02/06/09 15:08
逆にC++にできてCに出来ないことの1つに
ブロック中のどこでも変数が宣言できるってのがあるけど、
これってプログラムが見にくくならない?

俺はC++でも新しい変数使うときはブロックにしてるけど

432 :デフォルトの名無しさん:02/06/09 15:15
>>431
当たり前。どうしても仕方ない時だけに使う。
あと演算子関数以外でリファレンスを使いまくって読みづらくするのはDQN

433 :デフォルトの名無しさん:02/06/09 15:17
constじゃない&ね

434 : :02/06/09 15:28
構造体で,
typedef struct{
 int a;
 int b[30][30];//ここ
}c;

というふうにしてはいけないんですか?

435 :デフォルトの名無しさん:02/06/09 15:32
>>434
いけなくないよ。
誰かがいけないなんていったのなら、そいつに問いただせ。

436 :デフォルトの名無しさん:02/06/09 15:32
>>434
いけないんですか?

437 :434:02/06/09 15:39
前々スレでいわれました
気になったんで聞きました

438 :デフォルトの名無しさん:02/06/09 15:39
>>434
ここで聞かなくてもコンパイラが教えてくれると思うが・・・

439 :monosiri:02/06/09 15:41
コンパイラは,だめでもそのままってことあるっしょ
じゃなきゃおちないじゃん

440 :デフォルトの名無しさん:02/06/09 15:43
>>439
シンタックスエラーで落ちるってのは初耳

441 :デフォルトの名無しさん:02/06/09 15:49
>>440
ttp://pc.2ch.net/test/read.cgi/tech/1021554929/348

442 :デフォルトの名無しさん:02/06/09 15:54
>>441
http://pc.2ch.net/test/read.cgi/tech/1021554929/349

443 :デフォルトの名無しさん:02/06/09 15:59
>>439 「コンパイルは通っても・・・」って意味か?
>>434の質問(あのような構造体を定義していいかどうか)とは関係ないと思うが。

>>441
>>442 ?

444 :デフォルトの名無しさん:02/06/09 16:03
猫でも分かるプログラミングという有名ページがありますが
あそこには長初心者用と書いてあります。
あれが理解できても初心者ですか?
Windowsプログラミングに関してはかなりのものになると思うのですが
実際はまだまだなのでしょうか…
確かにあそこだけでは自分でオリジナルなものを作るのには
厳しいと思いますけどWindowsの仕組みを理解するには十分すぎる気もします。


445 :デフォルトの名無しさん:02/06/09 16:05
>>432
程度問題だが、俺の判断基準だと

 インスタンス構築にコストがかかる or コンストラクタに引数を渡す必要がある
 場合には、ギリギリまで遅らせる意味がある。

 ループカウンタ(イテレータ)は for の中で宣言。

ぐらいかな。もっとも C++ だとループも algorithm 使うことが多いけど。
(これ以上は C++ スレで聞いた方が良いと思うぞ)

446 :デフォルトの名無しさん:02/06/09 16:06
>>444
初心者という言葉は知識をまったく規定しない。本人の意識の問題。

447 :デフォルトの名無しさん:02/06/09 16:06
あのページを便利なリファレンス(あるいはコピペ元)として使ってる奴は
たくさんいると思われ。

448 :デフォルトの名無しさん:02/06/09 16:06
>>444
Win32 スレで聞け。

449 :デフォルトの名無しさん:02/06/09 16:09
>>443

>>439 = シンタックスエラーとバグを混同
>>440 = 突っ込み
>>441 = 実は439はネタでした(藁
>>442 = そうでも言わないとやってられないね(憐

450 :デフォルトの名無しさん:02/06/09 16:12
>>449
ああ、何でDelphiのスレ指してるのかと思った。そういうことね。

451 :444:02/06/09 16:40
誘導有難うございます

452 :デフォルトの名無しさん:02/06/09 17:36
ちゃんとファイルの先頭に#include <math.h>と書いてあるのに
コンパイルすると次のようなエラーがでます。

/tmp/cc5Soiex.o: In function `main':
/tmp/cc5Soiex.o(.text+0x144): undefined reference to `sqrt'
/tmp/cc5Soiex.o(.text+0x152): undefined reference to `log'
/tmp/cc5Soiex.o(.text+0x1f4): undefined reference to `getBf'
/tmp/cc5Soiex.o: In function `dft':
/tmp/cc5Soiex.o(.text+0x336): undefined reference to `cos'
/tmp/cc5Soiex.o(.text+0x358): undefined reference to `sin'
/tmp/cc5Soiex.o: In function `idft':
/tmp/cc5Soiex.o(.text+0x3e1): undefined reference to `cos'
/tmp/cc5Soiex.o(.text+0x403): undefined reference to `sin'
collect2: ld returned 1 exit status

アドバイスお願いします。

453 :デフォルトの名無しさん:02/06/09 17:38
>>452
-lm

454 :デフォルトの名無しさん:02/06/09 17:43
UNIX関係だね。

#include <math.h>で解決するのはコンパイル。
そのエラーはリンクエラーね。
gcc(cc)の引数に -lm を付けろってこと。-lはライブラリ指定で、mがmath用の名前。

455 :452:02/06/09 17:51
ありがとうございました。

456 :デフォルトの名無しさん:02/06/09 19:43
#include <stdio.h>
#define N 4
int count, p[N];

void show(void)
{
int i;

count++; printf("%5d: ", count);
for (i = 0; i < N; i++) printf(" %d", p[i]);
printf("\n");
}

#define TRUE 1
#define FALSE 0
char ok[N + 1];

void put(int pos, int k)
{
int j;

p[pos] = k;
if (pos == N - 1) show();
else {
ok[k] = FALSE;
for (j = 1; j <= N; j++)
if (ok[j]) put(pos + 1, j);
ok[k] = TRUE;
}
}

void genperm(void)
{
int k;

count = 0;
for (k = 1; k <= N; k++) ok[k] = TRUE;
for (k = 1; k <= N; k++) put(0, k);
}


#include <stdlib.h>

int main()
{
printf("順列\n"); genperm();
return EXIT_SUCCESS;
}


457 :456:02/06/09 19:48
456のプログラムで1〜4までの順列を辞書順に列挙できると思うんですが、これを改良して
たとえば4個から2個を選んでその順列を辞書順に列挙するようにはできないでしょうか・・・

458 :デフォルトの名無しさん:02/06/09 19:59
>>432
何でリファレンス使ったら読みづらくなんのよ?


459 :デフォルトの名無しさん:02/06/09 20:02
>>458
奴がDQNだから。

460 :デフォルトの名無しさん:02/06/09 20:04
>>458
使ったらじゃ無くて使いまくってだろ

461 :デフォルトの名無しさん:02/06/09 21:40






                DQN的質問、定期的に出るよなぁ。


462 :デフォルトの名無しさん:02/06/09 22:43
>>461
それが普通だと思われ。

463 :ERROR:スレッド立てすぎです。。。:02/06/09 22:56
みんなで力をあわせて、軽くてオープンソースなprintfを作りませんか?
スタック消費量は とりあえずの目標値として100バイト以下って感じで。

浮動小数点とか、16進表示とか、いる機能いらない機能を
使う人が自由にカスタマイズできる、そんな自由なprintfを!



464 :C言語永久不明:02/06/09 23:00
学生時代から現在にかけてC言語はいまだに分からん。全く理解できていない。
初心者と思ってくれて良い。この永久不明君に教えてくれ1よ。
社内でも、外注先でも、C言語が分かる人=Cマガ読者なんだよね。
そんないい加減な言語に対処するため、ANSI C言語辞典をかたわらに
今日も独学で頑張る俺。さて、俺がにらんだからには
一人で沢山カキコします。お付き合いください。

465 :デフォルトの名無しさん:02/06/09 23:00
>>463
昔作った奴。
好きなように改造してくれ

int sprintf(char*b,char*f,...)
{
 va_list v;
 unsigned i,n;
 char x,*o,*h=b,s[99];
 va_start(v,f);
 while(*f){
  if(*f^37)
   *b++=*f;
  else{
   o=s+97;s[98]=i=0;x=*++f;
   x==37?*o=37:x==99?*o=va_arg(v,char):x=='s'?o=va_arg(v,char*):0;
   if(i<9){
    n=va_arg(v,int);
    if(i>6)
     if((int)n<0)*b++='-',n=~n+1;
    i=i==5?16:i==6?8:10;
    while(*o="0123456789abcdef"[n%i],n/=i)o--;
   }
   while(*b=*o++)b++;
  }
  f++;
 }
 va_end(v);
 return b-h;
}


466 :デフォルトの名無しさん:02/06/09 23:06
>465
ソースの汚さは別にして、オレはあんたを尊敬する。

467 :デフォルトの名無しさん:02/06/09 23:15
確かに汚いソース(笑)

468 :465:02/06/09 23:18
ゴメソ試したら動かなかったんで、作成中かその他のソースだったらしひ
こっちが正しい奴みたい。

#include <stdarg.h>
typedef char c;
int sprintf(c*b,c*f,...)
{
 va_list v;
 unsigned i,n;
 c x[9]="%csuxodi",*o,*h=b,s[99];
 va_start(v,f);
 while(*f){
  if(*f^37)
   *b++=*f;
  else{
   o=s+97;s[98]=i=0;x[8]=*++f;
   while(x[i++]!=*f);
   if(i<3)*o=i==1?37:va_arg(v,c);
   else if(i<4)o=va_arg(v,c*);
   else if(i<9){
    n=va_arg(v,int);
    if(i>6)
     if((int)n<0)*b++='-',n=~n+1;
    i=i==5?16:i==6?8:10;
    while(*o="0123456789abcdef"[n%i],n/=i)o--;
   }
   while(*b=*o++)b++;
  }
  f++;
 }
 va_end(v);
 return b-h;
}

#include <stdio.h>
int main()
{
 int i;
 char buf[512];
 printf("\n%d:%s\n", i, buf);
 i = sprintf(buf, "%%%s%s%s %c %d %u %x %i %u %o", "test1 ", "test2 ", "test3", 'a', -123, 123, 0x123fe, -123, -123, 83);
 printf("\n%d:%s\n", i, buf);
 return 0;
}


469 :デフォルトの名無しさん:02/06/09 23:21
>>463
作るのはおもしろい、というか俺も昔作ったけど、当時は狭苦しいDOSとか用だったしなあ。
今はそういう要求は思いつかん。なんでスタック消費にこだわるの? それによるメリットは何?
組み込み系で使うのかな?

470 :C言語永久不明:02/06/09 23:41
C言語は動作が仕様で決まってないなど、不明点が多いこと、
入門書しかない点だ。腹立つことが多いね。
例えば、>>452の質問だ。これあきらかに452の指導者がバカなわけでしょ。
452はどうせ高校か大学の情報処理の授業の宿題程度だろ。教官がバカだね。

あきらかにコンパイル、リンク、ヘッダファイル、ライブラリ、アーカイブ、
そういった基本的なことを理解してないことが集約されている質問。
ansi cとして提供(実装)されている関数の基本的な利用方法を教えていない。
cc,ar,nm(あるか?)とかの使いかたも当然、教えていないと思う。
*.o,*.so,*.aの違いを知らんと。
分割コンパイルをやったことも無いだろうし、makefileも作ったことないと思う。
推論規則、拡張子ルール、依存関係そんなものも分かっていないはず。
当然構文解析や、字句解析、コンパイラがどう実装されているかも知らんわな。
最適化だのインライナーだのアセンブラだの、処理系で違うだろうが、ccのオプション
でいろいろできることもしらんわな。

471 :C言語永久不明:02/06/09 23:49
>>431,432も何いってんの。
変数使用する直前に変数宣言できるからいいんでしょ。
それで公共システム何個も動かしてて問題起きないよ。
C言語でやるときはしょうがないから、{}でブロック作るんでしょ。

472 :デフォルトの名無しさん:02/06/09 23:51
>>461
それは誰に対して?

473 :デフォルトの名無しさん:02/06/09 23:56
>>470
あなたは釣り師デスカ?

474 :デフォルトの名無しさん:02/06/10 00:06
>>471
変数宣言がまとまってるのが嫌い?

475 :デフォルトの名無しさん:02/06/10 00:10
>>474
カウンターなどの変数なら、関数の先頭で宣言を強制してもよいと
思うが、クラス変数や反復子までもが先頭での宣言を強要されると
ウザイよ。というか困るよ。

C++でのクラス変数の宣言は、文と同じくらいの意味を持っているか
らね。

476 :デフォルトの名無しさん:02/06/10 00:11
470が超弩級のアフォだということはわかった

477 :デフォルトの名無しさん:02/06/10 00:13
(´_ゝ`)ふーん

478 :デフォルトの名無しさん:02/06/10 00:14
>>471
そうだね。
そして使わなくなった直後にスコープ外に出すことは出来ない(藁
これをするには結局{}で囲まなきゃ

479 :465:02/06/10 00:17
>>475
「リソースの獲得は初期化」イディオムだな。
この場合、クラスのコンストラクト時にリソースの獲得を行うのが普通、と。

480 :デフォルトの名無しさん:02/06/10 00:17
479
消し忘れ

481 :デフォルトの名無しさん:02/06/10 01:03
>>470
> 例えば、>>452の質問だ。これあきらかに452の指導者がバカなわけでしょ。

独学だろ。

482 :デフォルトの名無しさん:02/06/10 02:45
質問です。
関数で複数の返り値を返したい時はどうすればいいのでしょうか?


483 :デフォルトの名無しさん:02/06/10 02:48
>>482
1)同じ型の値なら配列を返すことはできる。
2)異なる型のセットなら構造体で返すことができる。
3)自由に構成が変わるタプルの構成なら文法レベルでは無理。ライブラリを作って擬似的に対処する。

484 :デフォルトの名無しさん:02/06/10 02:52
>482
4)とりあえずグローバル変数経由で返すのはやめとけ。

485 :デフォルトの名無しさん:02/06/10 02:53
>>482
>>483の3)に相当するのなら、unionで定義しておき、void *を返して
戻り先でキャスト汁!

486 :デフォルトの名無しさん:02/06/10 02:53
5)返すわけではないが返してほしい値をセットするための変数を引数として渡す。一般的にはこれかな。scanf等がいい例。

487 :デフォルトの名無しさん:02/06/10 02:54
>>482
方法は色々あるけど、ふつうは構造体へのポインタを渡して、そこに書き込ま
せるかな。構造体を作るまでもないデータなら、組込型へのポインタを渡して、
そこに書き込ませることもある。

void foo(int *np1, int *np2)
{
  *np1 = 1;
  *np2 = 2;
}

int main()
{
  int m, n;
  foo(&m, &n);
  /* m に 1, n に 2 が書き込まれる */
  ...
  return 0;
}

488 :デフォルトの名無しさん:02/06/10 02:55
>>484
errnoならいいよね?

489 :486:02/06/10 02:57
> 変数を引数として

変数のアドレスを引数として
と言うべきだったな。

490 :482:02/06/10 03:05
レスありがとうございます。
構造体はまだ使った事が無く分からないので
487さんの方法を試してみます


491 :デフォルトの名無しさん:02/06/10 09:48
質問なのですが。。
構造体を関数に渡す場合、値で渡しちゃってもプログラムに悪影響は無いのでしょうか?

492 :デフォルトの名無しさん:02/06/10 09:52
>>491
無いです。
でも、サイズが32ビット以上(ポインタのサイズ以上)の物を渡す場合は参照渡しよりメモリを食って処理時間も増えます。


493 :491:02/06/10 10:01
そうですか、ありがとうございます。
あと一つ
前に
#define LENGTH 255
char str[LENGTH];
str[LENGTH-1] = NULL;
こんな感じのコードを見ました
間違った書き方ですよね?

494 :デフォルトの名無しさん:02/06/10 10:04
>>493
エラーは出ないね。NULLが整数型なら(最近は全部(void *)か)。
どっちにしろその配列を何に使うかは激しく謎だけど。


495 :デフォルトの名無しさん:02/06/10 10:05
>>493
間違ってはいないけど、NULLは'\0'にすべきだな(笑)

496 :デフォルトの名無しさん:02/06/10 10:11
>>494
char str[LENGTH];とstr[LENGTH-1] = NULL;の間の処理は>>493が省略したんだろ。

497 :デフォルトの名無しさん:02/06/10 10:14
>>496
もしかしたら、

「文字列用配列宣言したらその直後にNULLを入れましょう。」

と言う考え方を否定しているのかも。

まぁ、変だけど。

でも、文字列操作失敗しても確保したメモリ以上の参照が行われにくくなるという点では評価できないこともない。

498 :463:02/06/10 10:27
>468
すぅばらしい。ムスカ君、キミは英雄だ!

というわけでこれから検証してみます。

499 :デフォルトの名無しさん:02/06/10 11:17
497は何か勘違いをしている

500 :デフォルトの名無しさん:02/06/10 11:59
NULL == '\0' == 0

501 :デフォルトの名無しさん:02/06/10 12:06
>>500
(゚Д゚)ハァ??

502 :デフォルトの名無しさん:02/06/10 12:14
http://www.catnet.ne.jp/kouno/c_faq/c5.html

503 :デフォルトの名無しさん:02/06/10 12:16
int* p = '\0';
VC++でコンパイル通った・・・(゜д゜;)
C++では'\0'はchar型のはずなのに・・・

504 :デフォルトの名無しさん:02/06/10 12:21
最小2乗法のプログラムを作り途中なのですが、
下のエラーのコメントをしている部分で、
どうしてもエラーが出て成功しません。
全くどこが悪いのかわかりません。
多次元配列のとり方がまちがってるのでしょうか?
ご教授お願い致します。
#include <stdio.h>
#include <stdlib.h>
main()
{
int i,j,k,n,m,row,column,x,y;
double t,u, det;
double **a,*d;

printf("データセットの数(何セット?)=");
scanf("%d",&n);

printf("1セットのデータ数(ターゲットデータは含まない。)=");
scanf("%d",&m);

/* start_データ入力用配列確保 */
d=(double *)calloc(m+1,sizeof(double));
if(d==NULL) printf("データ入力用配列の確保に失敗\n");
/* end_データ入力用配列確保 */

row=m+1;
column=m+1;

/*start_配列a[row][column]の確保*/
a=(double **)calloc(row,sizeof(double *)); /*行(row)の確保*/
for(i=0;i<row;i++) a[i]=(double *)calloc(column,sizeof(double)); /*列(column)の確保*/
/*end_配列a[row][column]の確保*/

for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%dset_data%d=",i,j);
scanf("%lf",&d[j]);
}

for(x=0;x<row;x++)
{
for(y=0;y<column;y++)
{
if(x=0 && y=0)
        a[x][y]=1;
if(x=0 && y>=1) a[x][y]+=d[y-1];    /*←(エラー)左辺値が必要*/
if(x>=1 && y=0) a[x][y]+=d[y-1];    /*←(警告)不正な代入*/
if(x>=1 && y>=1) a[x][y]+=d[y-1]*d[x-1]; /*←(エラー)左辺値が必要*/
}
}
}
free(d);
for(i=0;i<row;i++) free(a[i]);
free(a);


return(0);
}

505 :デフォルトの名無しさん:02/06/10 12:21
>>503
charはintに暗黙変換するので通る。

506 :デフォルトの名無しさん:02/06/10 12:22
>>505
じゃなくて 値0 は pointerとも暗黙変換するので、だった。見間違いすまん

507 :504:02/06/10 12:23
504です。
すみません。
なんか括弧 { の位置が
めちゃくちゃになって、
見にくくなっちゃいました。。

508 :デフォルトの名無しさん:02/06/10 12:23
>>505
int *p = (char)0; // 通らない

509 :デフォルトの名無しさん:02/06/10 12:26
>>504
×if (x = 0 && y = 0)
○if (x == 0 && y == 0)

510 :504:02/06/10 12:30
509さん。
ありがとうございます。
全く、基本的なとこで間違ってました。
はずかしっ。。。

511 :デフォルトの名無しさん:02/06/10 12:33
>>508
Cでは通るがC++では通らない

512 :デフォルトの名無しさん:02/06/10 15:29
復活

513 :デフォルトの名無しさん:02/06/10 15:48
dj?

514 :デフォルトの名無しさん:02/06/10 19:47
if(Flg==START)
{
 if(i=1) p=Kou[0].a;
 if(i=2) p=Kou[0].b;
 if(i=3) p=Kou[0].c;
 if(i=4) p=Kou[0].d;
 Flg=end;
}

for(i=0;i<KouMax-1;i++)
{
 if(p[i] < p[i+1])
 temp=p[i]; p[i]=p[i+1]; p[i+1]=temp;
 p+=sizeof(Kou)/sizeof(Kou[0]);
}

こうやるのは可能ですか?
構造体のメンバをソートしたいのですが,
例えば値段順で並べるだけならいいのですが,項目が増えた場合は,
押された項目の番号(i)を使ってソートする内容を変えたいのですが.

515 :デフォルトの名無しさん:02/06/10 19:54
>>514
不可能です
if(i=1)...のあたり

516 :デフォルトの名無しさん:02/06/10 19:58
ソート関数の引数に「構造体を2つとって比較結果を返すような
関数へのポインタ」を渡す。
構造体をstruct Hogeとすると
かりにa,b,c,dがすべて数値なら(文字列だったらstrcmp)
int cmpA(struct Hoge *m, strcut Hoge *n)
{
return m->a - n->a
}
なのを
cmpB, cmpC
とか作ってソート関数を
void sort(struct Hoge *hoge_array, int (*cmp)(struct Hoge *m, struct *n))
にして
if(i == 1) sort(Kou, cmpA);
else if ( i == 2) sort(Kou, cmpB);
・・・
などと呼び出す。



517 :516:02/06/10 19:59
>struct *n
strcut Hoge *n
だった。

518 :516:02/06/10 20:00
>strcut
structね・・・欝。

519 :デフォルトの名無しさん:02/06/10 20:02
>>516-518
何を焦ってるんだい?

520 :516:02/06/10 20:04
>>514
あ、「構造体の配列をソート」じゃないのね。
私の書き込みは忘れてください・・・。


521 :デフォルトの名無しさん:02/06/10 20:08
>>514
なんか激しく不自然なデータ構造のような。
とりあえずKouの定義と、どういう風にデータを入れるつもりなのかを説明してみ。

おそらく結局は>>516-518のようなことをやりたいんじゃないかと思うが。


522 :初心者家労:02/06/10 20:27
Cでアドレス帳が作れますか?

523 :デフォルトの名無しさん:02/06/10 20:28
>>522
出来ます。

524 :初心者家労:02/06/10 20:29
やはり構造体を使ったほうが便利ですかな?

525 :デフォルトの名無しさん:02/06/10 20:31
>>524
そらね。

526 :初心者家労:02/06/10 20:33
ソート機能を作りたいのですが、2次元配列で比較することはできるかな

527 :デフォルトの名無しさん:02/06/10 20:36
配列をなら #t
配列でなら #f

528 :初心者家労:02/06/10 20:42
漢字はソートしてくれますかな

529 :初心者家労:02/06/10 20:43
やっぱり#include <stdio.h>っていうのが何を意味しているのか
ちゃんと知っておいたほうがいいのかな?

530 :初心者家労:02/06/10 20:44
ライブラリ関数を定義してるもの?

531 :デフォルトの名無しさん:02/06/10 20:46
>>529
しっとくべき。

>>530
ライブラリ関数の名前と引数と返値の型を定義してるもの。

532 :デフォルトの名無しさん:02/06/10 20:47
ライブラリ関数を宣言してるもの。

533 :初心者家労:02/06/10 20:48
文字列は文字列のまま比較しちゃっていいの?

534 :デフォルトの名無しさん:02/06/10 20:50
   /⌒ヽ 
  / ´_ゝ`)   2ちゃんねるで聞いて損した。
  |    /    かえろ!
  | /| |   
  // | |  
 U  .U

535 :デフォルトの名無しさん:02/06/10 20:54
>>533
== で比較しては行けない。strcmp() 使え。

536 :初心者家労:02/06/10 20:57
ファイル処理関数は何を使えばいいですか?

537 :デフォルトの名無しさん:02/06/10 20:57
C言語の入門書をなんか読んでくれ(´д`;) > 初心者家労

538 :初心者家労:02/06/10 20:58
5/2を計算しても2.5にならないのはなんで?C言語壊れてるのかな?

539 :デフォルトの名無しさん:02/06/10 20:59
>>538
浮動小数点数についてお勉強。

540 :デフォルトの名無しさん:02/06/10 21:04
>>538
5.0/2

541 :初心者家労:02/06/10 21:21
こんなにがんがっても逝かないのはなんで?嫁さん壊れてるのかな?

542 :デフォルトの名無しさん:02/06/10 21:25
>>541
相性が悪いと思われ。

543 :デフォルトの名無しさん:02/06/10 21:32
読めさん、炎症でヒリヒリするって、泣いてたよ

544 :デフォルトの名無しさん:02/06/10 21:36
そういうときは口で優しく(以下略

545 :デフォルトの名無しさん:02/06/10 22:20
typedef struct{
int nedan;
int kosuu;
int syurui;
int uribi;
}KOU;
KOU Kou[10];

void sort( int num ){//numはソートしたい項目の番号
 KOU *p;
 if(num==1) p=Kou[0].nedan;
 if(num==2) p=Kou[0].kosuu;
 if(num==3) p=Kou[0].syurui;
 if(num==4) p=Kou[0].uribi;

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

 if(p[i] < p[i+1])
 temp=p[i]; p[i]=p[i+1]; p[i+1]=temp;
 p+=sizeof(Kou)/sizeof(Kou[0]);
}
こうやるのは可能ですか?
構造体のメンバをソートしたいのですが,
例えば値段順で並べるだけならいいのですが,項目が増えた場合は,
押された項目の番号(i)を使ってソートする内容を変えたいのですが.

546 :デフォルトの名無しさん:02/06/10 22:42
>>545
C++ スレで聞いてる以上、こう答えるけど。

o そもそも効率激悪いソートアルゴリズムを自前で実装せずに std::sort 使え。
o ソート条件を変えたければ 3 つの引数を取る sort に適当な述語を渡せば OK。

547 :デフォルトの名無しさん:02/06/10 22:44
>>546
ここはCスレだったり

548 :デフォルトの名無しさん:02/06/10 22:44
>>546 迷子の迷子の子猫ちゃん

549 :デフォルトの名無しさん:02/06/10 22:46
>>546
ライブラリ使わないと何も出来ない人ってかわいそうだと思います。

550 :546:02/06/10 22:46
すまん、ここ C 言語スレだったか……。qsort() に比較関数へのポインタを
渡すけど、それを項目番号によって変えれば?

551 :521:02/06/10 22:46
だめ。>>516-518を嫁。
ついでにpは何を指してるんだかよく考えろ。
適当に切り貼りするんじゃない。

552 :545:02/06/10 22:55
sortを使えと?

553 :デフォルトの名無しさん:02/06/10 22:58
むしろ>>550支持

554 :546:02/06/10 22:59
こんなもんかね。

#include <stdio.h>
#include <stdlib.h>

typedef struct{
  int nedan;
  int kosuu;
  int syurui;
  int uribi;
} KOU;

KOU kou[10];

#define NELEM(x)    (sizeof(x) / sizeof(x[0]))

#define CMP_FUNC(obj_) \
static int \
cmp_by_##obj_(const void *p1, const void *p2) \
{ \
  const KOU* q1 = p1; \
  const KOU* q2 = p2; \
  return q1->obj_ - q2->obj_; \
}

CMP_FUNC(nedan)
CMP_FUNC(kosuu)
CMP_FUNC(syurui)
CMP_FUNC(uribi)

static int (*cmpfunc[])(const void *, const void *) =
{
  cmp_by_nedan,
  cmp_by_kosuu,
  cmp_by_syurui,
  cmp_by_uribi,
};

void
kou_sort(int sorter)
{
  qsort(kou, NELEM(kou), sizeof(kou[0]), cmpfunc[sorter]);
}

555 :デフォルトの名無しさん:02/06/10 23:03
>>554
> #define NELEM(x)    (sizeof(x) / sizeof(x[0]))

(sizeof x/sizeof x[0])にしてくれ。

556 :デフォルトの名無しさん:02/06/10 23:08
きったないコード

素直にC++でメンバポインタを使えばいいだろ

557 :デフォルトの名無しさん:02/06/10 23:12
>>556
負け惜しみですか?STLオタさん。

558 :デフォルトの名無しさん:02/06/10 23:15
>>555
なぜ?
というかむしろ
#define NELEM(x)    (sizeof(x) / sizeof(x)[0])
では。

559 :デフォルトの名無しさん:02/06/10 23:17
リストを使おうと思っているのですが,
5番目の構造体とかって参照しずらいですか?

560 :デフォルトの名無しさん:02/06/10 23:18
>>556
自分できれいなコード晒してから言えよ。他人におかしな所を指摘されるの怖くて出来ないか?
しかもCスレでC++とはおめでてーな。

561 :デフォルトの名無しさん:02/06/10 23:24
>>558
sizeofで括弧で囲むのは型だけにすべき。

562 :デフォルトの名無しさん:02/06/10 23:25
>>559
「しずらい」の意味にもよるが、そういう関数を作っとけばいい。
ただし、配列に比べて後ろのほうはアクセスが遅くなるのはしょうがない。

563 :デフォルトの名無しさん:02/06/10 23:25
>>561
囲んでも問題ないし、それ以上に#defineの引数は括弧で囲まなければ危険。

564 :デフォルトの名無しさん:02/06/10 23:25
>>561
マクロの引数は囲むだろ、ふつう。

565 :デフォルトの名無しさん:02/06/10 23:26
>>561 なぜか教えてクリ

566 :デフォルトの名無しさん:02/06/10 23:28
>>563
> 囲まなければ危険

それはMACRO(i-3)とかやると危険だということでしょ。sizeof(i-3)なんてやるかしら?

567 :デフォルトの名無しさん:02/06/10 23:31
#define NELEM(x) ((sizeof x)/(sizeof x[0]))
これなら安全だろ。

568 :デフォルトの名無しさん:02/06/10 23:32
>>566
sizeof(i-3)はべつに変じゃありませんが。
それと、MACROの引数がsizeofに渡るかどうかなんてMACROの利用者には知る必要のないこと。

569 :デフォルトの名無しさん:02/06/10 23:33
>>560
汚いことを指摘されて逆切れですか?

570 :デフォルトの名無しさん:02/06/10 23:35
>>569
俺(560)は>>554じゃねーよ

571 :デフォルトの名無しさん:02/06/10 23:36
>>568
マクロを関数のように使うのなら知るべきだと思うが・・

572 :デフォルトの名無しさん:02/06/10 23:40
>>561の理由がわからん。
余分な括弧があっても式は式だし、冗長という以上のものではないよな。
付けるべきでない、とまでいうのなら何か実際的な問題があるという主張なはずだ。

573 :デフォルトの名無しさん:02/06/10 23:41
>>561
> sizeofで括弧で囲むのは型だけにすべき。

すべき理由を教えてクリ。

574 :デフォルトの名無しさん:02/06/10 23:43
>>555>>556

何 で も い い か ら 、 い ち ゃ も ん 付 け た か っ た だ け で す か



575 :デフォルトの名無しさん:02/06/10 23:49
dj?

576 :デフォルトの名無しさん:02/06/10 23:51
>>555, 556のF5攻撃ダー!!

577 :お願いです:02/06/10 23:54



C の や り 方 教 え て く だ さ い







まだ童貞なんです。。

578 :デフォルトの名無しさん:02/06/10 23:55
>>576
F5?
押しても何もおきませんが?

579 :デフォルトの名無しさん:02/06/10 23:59
>>578
                      ____    、ミ川川川彡
                    /:::::::::::::::::::::::::""'''-ミ       彡
                   //, -‐―、:::::::::::::::::::::三  ギ  そ  三
            ___    巛/    \::::::::::::::::三.  ャ  れ  三
        _-=三三三ミミ、.//!       l、:::::::::::::三  グ  は  三
     ==三= ̄      《|ll|ニヽ l∠三,,`\\::三  で       三
        /              |||"''》 ''"└┴‐` `ヽ三   言  ひ  三
         !             | /          三   っ  ょ  三
       |‐-、:::、∠三"`    | ヽ=     U   三.  て   っ  三
       |"''》 ''"└┴`       | ゝ―-        三  る  と  三
       | /           ヽ ""        ,. 三   の   し  三
        | ヽ=   、    U    lヽ、___,,,...-‐''"  三   か  て  三
.        | ゝ―-'′          |  |::::::::::::_,,,...-‐'"三  !?    三
          ヽ ""        ,.    | | ̄ ̄ ̄      彡      ミ
        ヽ、___,,,...-‐''"  ,,..-'''~             彡川川川ミ
          厂|  厂‐'''~      〇
        | ̄\| /

580 :デフォルトの名無しさん:02/06/11 00:02
>>579=IE厨
だって何も起きないもん(笑)

581 :576:02/06/11 00:04
先に言っとくけど漏れは>>579じゃないぞ!
>>579 バーヤバーヤ!!

582 :デフォルトの名無しさん:02/06/11 00:07
>>535
> == で比較しては行けない。strcmp() 使え。
ってなぜなんですか?

583 :デフォルトの名無しさん:02/06/11 00:08
>>582
==だとポインタ同士の比較になるから。
それが目的ならいいけど。

584 :デフォルトの名無しさん:02/06/11 00:14
>>545
((int*)&Kou[i])[num-1]

585 :546:02/06/11 00:16
なんか荒れとるが、

- そもそも STL 使えと言ったヤツ
- qsort() 使ったコードを晒したヤツ

は同一人物(俺)だ。556 の C++ 厨は別人。

だいたい STL の std::sort 使うなら、メンバ関数ポインタではなく単なる関数
オブジェクトにすると思うが……。

586 :デフォルトの名無しさん:02/06/11 00:19
文字列の配列でなんか作れって課題が出たのですが、
ネタがなくて困っています。
面白いソースがあったらパクらせてください。

パクるの駄目だったら、おすすめの入門書を教えてください。

587 :デフォルトの名無しさん:02/06/11 00:23
>>585
> 556 の C++ 厨は別人。
実は人ではなく鳥類という罠。とか。

588 :デフォルトの名無しさん:02/06/11 00:26
>>585
そもそも>>554のコードで>>546と名乗ってるからな。
>>557は何か勘違いしたんでしょ。

589 :586:02/06/11 00:30
自力でなんとかします。
クソなこと言ってすいません。

590 :586:02/06/11 00:33
         ∧_∧
         (´Д` ) 切腹しますた
         /  y/  ヽ
    Σ(m)二フ ⊂[_ノ
        (ノノノ | | | l )
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

591 :デフォルトの名無しさん:02/06/11 00:39
>>586
おっ ちょーどいいや。 頼みがあるんだけど。

シフトJISの文字列を引数として、その文字列のうち
2バイト文字のみを全て %xx%xx にエンコードして、
同じく引数のバッファに格納する

そんな関数を作ってくれ。  8時間たったら取りにきます。

592 :591:02/06/11 00:41
%が続いたら? とかそういう細かい条件は気にしなくていいです。
つまんない細かいところはこっちで修正して使います。

593 :デフォルトの名無しさん:02/06/11 00:48
>>591
URLエンコードならつくったけど。
2バイト文字だけじゃなくURLに使えない文字はすべてエンコードするけどね。

594 :デフォルトの名無しさん:02/06/11 00:50
>593
やったー。 ほしいです。 もちろんただでとは言いません。
2Dでも3Dでもお好きなエロ絵をプレゼントします。

595 :デフォルトの名無しさん:02/06/11 00:51
>>586
文字列の配列って文字列を指すポインタの配列のこと?

596 :デフォルトの名無しさん:02/06/11 00:55
>>591
char *url_encode(char *str)
{
char *tp1=str,*tp2,*buf;
char chtable[]={'_','-','.','*',' '};
int i;

if((buf=(char *)malloc(strlen(str)+1))==NULL)
return NULL;
strcpy(buf,str);
tp2=buf;

for(;*buf;buf++){
if(isalnum((unsigned char)*buf)){
*str=*buf;
str++;
goto loopend;
}
for(i=0;i<5;i++){
if((unsigned char)*buf==chtable[i]){
*str=*buf;
str++;
goto loopend;
}
}
sprintf(str,"%%%02X",(unsigned char)*buf);
str+=3;
loopend:
;
}
*str='\0';
free(tp2);

strcrep(tp1,' ','+');

return tp1;
}


goto使ったのはcontinueだとうまくゆかないから。

597 :デフォルトの名無しさん:02/06/11 01:00
こいつも入れておかないと・・・

char *strcrep(char *str,int trgtc,int repc)
{
char *tp=str;
for(;*tp;tp++)
if(*tp==trgtc)
*tp=repc;

return str;
}

598 :デフォルトの名無しさん:02/06/11 01:00
strchr()使えばいいじゃん。つーかstrcrep()ってなんだ。

char *url_encode(char *str)
{
char *tp1=str,*tp2,*buf;
unsigned char c;
static const char chtable[]="_-.* ";
int i;

if((buf=(char *)malloc(strlen(str)+1))==NULL)
return NULL;
strcpy(buf,str);
tp2=buf;

for(;c = *buf;buf++){
if(isalnum(c) || strchr(chtable, c)){
*str++=*buf;
}
else {
sprintf(str,"%%%02X",(unsigned char)*buf);
str+=3;
}
}
*str='\0';
free(tp2);

strcrep(tp1,' ','+');

return tp1;
}


599 :デフォルトの名無しさん:02/06/11 01:04
>>598
strchrって文字列中からchrを見つける関数じゃなかった?
文字列中の' 'を全て'+'に置き換えたいんだけど・・・

600 :599:02/06/11 01:05
そこじゃなかった。
そうか、forで回さずにstrchr使えばいいんだ(笑)

601 :463:02/06/11 02:42
>>468
いやー便利っすよ!!
ちょっとスタック食ってたから削って、ついでに2進表示つけたりバグも直してみたり。
正確には測ってないけど、スタック消費量は多分2,30バイトくらいかな?
(引き数分はまあおいといて)

これってすごく文字数節約してるけど もとネタは7行系かなんかですか?
フィールド幅とかゼロパディングとか 暇な時につけてみようかな。

602 :デフォルトの名無しさん:02/06/11 02:55
if( i<x && c[i++]>0 )hoge();
って書いたとき、式はちゃんと左側から順に評価されましたっけ?

if( i<x ? c[i++]>0 : 0 )hoge();
きちんとこう書くべき?

603 :デフォルトの名無しさん:02/06/11 03:03
>>602
評価されると思う。
第一式が成立しなかったら抜けるから。
ていうかこのぐらいならテストコードかいてみればいいじゃん。。。

604 :デフォルトの名無しさん:02/06/11 03:06
左から評価されます。ただし i<x が偽のとき次の c[i++]>0 は
評価されません。

605 :デフォルトの名無しさん:02/06/11 03:08
>603
テストコード書いて自分の環境では問題ないと確認してるんだけどね。
動けばいいってもんでもないかな、と。
やれ環境依存だとかやれ不定だとかあるじゃん。
C-FAQも量が多くて見きれなくてさ。

606 :デフォルトの名無しさん:02/06/11 03:12
>>604
一般的には多分それでいいと思う。
けど、蟹炒飯によると、
「演算子の優先順位と結合規則は完全に指定されているが、
 式の評価順序は、定義されていない」
とあるんだよね。

ヘソ曲がりなコンパイラや なんかすげー最適化がかかったりしたときには
式が左から右へ評価されてく保証がなくなるような、そんな悪寒がしたもので・・

607 :546:02/06/11 03:20
>>606
C99 の規格書から

6.5.13 Logical AND operator
4 Unlike the bitwise binary & operator, the && operator guarantees left-to-right
evaluation; there is a sequence point after the evaluation of the first operand.
If the first operand compares equal to 0, the second operand is not evaluated.

ANSI から C99 の規格書 (PDF 版) 買っておけば? 目次がしっかりしてるし、
文字列検索もできるから、手元に置いておくと便利だよ。

608 :デフォルトの名無しさん:02/06/11 03:22
じゃあvolatileとか。
if( i<x && c[i]>0 )i++, hoge();
とか。



609 :デフォルトの名無しさん:02/06/11 03:25
>>607
(゚∀゚)サンクスコ
&&だと左から右がきちんと保証されてるのねん・・・
多分 || も同様だろうな〜。 この際きちんと学習しておこっと。

>>604、疑ってすまんかった。

610 :デフォルトの名無しさん:02/06/11 03:37


-----------------------------------------------------------

751 :不明なデバイスさん :02/06/11 01:06 ID:7GUIyFYr

           ∧_∧ ヒロクソはもうギブアップしたってよ(藁
           ( ´_ ゝ`) ∧_∧
         / \/ )( ´,_ゝ`)プッ
        /  \___//       \
  __   .|     | / /\_ _ \ \_____
  \   ̄ ̄ ̄ ̄ ̄ ̄(__ノ   \    \__)      \
  ||\             \  .||\            \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||    ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||


      
           ↑しかし、こいつ超馬鹿だよな〜

http://ton.2ch.net/test/read.cgi/gline/1019935829/l50 
 こいつは↑ここを見た方がこいつの為になるのにねぇ〜

611 :デフォルトの名無しさん:02/06/11 05:28
2つの文字列が同一かどうか調べたいのですが、
strcmp を使うのと
頭から1文字ずつ比較していって異なった時点で終了するのでは
どちらの方が速いのでしょうか?
後者は全部の文字調べなくて済む分、速そうな気がするのですが。

612 :デフォルトの名無しさん:02/06/11 05:39
>>611
strcmp()はあなたが速いと思ったその方法で処理しています。
関数呼び出しの分遅いけど、頻出関数なのでインライン化できるのもあるね。

613 :デフォルトの名無しさん:02/06/11 05:40
strcmpはふつー異なった時点で終了する実装に
なっているはずですが。

614 :デフォルトの名無しさん:02/06/11 05:45
たぶん、あなたが書くよりスマートに実装されている上、アセンブリの可能性が高いです。

615 :デフォルトの名無しさん:02/06/11 05:52
>>612-614
早朝にもかかわらず即レス有り難うございます。
> あなたが書くよりスマートに実装されている
全くそのとおりだと思います。素直にstrcmp(strncmp)使うことにします。

616 :デフォルトの名無しさん:02/06/11 06:11
>615
ライブラリ関数に興味があるならgnuのglibcを見るといい勉強になるよ。
こんな風に実装してるのかーってね。

617 :615:02/06/11 06:41
>>616
> gnuのglibcを見る
というのは、具体的にはどのファイルを見ることなんでしょう?
strcmpと関連があるファイル、というと私はstring.h
しか思いつかないくらいのレベルなのですが、
後学のために是非知っておきたいと思ってます。
よろしくお願いします。

618 :616:02/06/11 06:56
>>617
うーんとね。string.h は strcmp()がどんな格好の関数なのか
書いているヘッダファイルと呼ばれるもの。
一般にユーザはどんな風にコードが書かれているか知る必要はないので
ヘッダにはコードは書かないのが基本。
んで、どこに実体コードがあるのかというと、ライブラリファイルと呼ばれる
ものにまとめられていて、それをリンカ呼ばれるものがstrcmp()はどれだ〜と
さがしてきてつなげて(リンクする)実行ファイルにするの。

ライブラリファイルも元々は誰かがソースファイルをコンパイルしているけど
ふつう要らないので提供していないのも多い。
glibcはそのソースファイルを配布しているから、中身がどうなっているか
読めるというわけです。

619 :618:02/06/11 07:00
>>618
>ふつう要らないので

言葉足らずかな。この要らないので、っていうのはソースファイルのことね。
ソースを提供している、いないはコンパイラによりけりなので
glibcだけじゃないけど、とりあえず思いついたのがこれ。(w

620 :617:02/06/11 08:30
VineのFTPサイトからSRPMを取ってきて見てみました。

glibc-2.2.4/sysdeps/i386/i486/bits/string.h

#define strcmp(s1, s2) ...
という記述がそれっぽいですね。
あれ?ということはstrcmpって関数じゃなくてマクロってことになるんでしょうか(済みません、実は関数とマクロの違いとかあんまり分かってないです)。

添付のFAQ見ると
the library has hand-optimized, inline assembly
versions of some string functions.
とか
glibc 2.1 has special string functions that are faster than the normal
library functions. Some of the functions are additionally implemented as
inline functions and others as macros.
と書いてありましたが、これが>>612さん,>>614さんの言われてることなんでしょうか。
インラインとかアセンブリとかも理解できてないんですけど、とりあえず
string function は速いから使っとけ、と言うことですね。

>>618-619さん
通常は、これらのファイルはコンパイルされて
ライブラリファイル(なんちゃら.soというのがそうなんでしょうか)として置いてあるから
glibcのソースファイルは普通インストールされてないよ、ということですね。


わからないなりに勉強させていただきました。
また折を見てglibcの理解にも勉めようと思います。
どうも有り難うございます。

621 :デフォルトの名無しさん:02/06/11 10:51
既出だと思うけど、unionつかう機会ってある?
仕事の中で


622 :デフォルトの名無しさん:02/06/11 11:17
>>621
例えば↓これ。
http://www.hitachisemiconductor.com/sic/jsp/japan/jpn/Sicd/Japanese/Seminar/File/h82/equ.zip


623 :デフォルトの名無しさん:02/06/11 12:18
   /⌒ヽ 
  / ´_ゝ`)   このスレってばかばっかり
  |    /    
  | /| |   
  // | |  
 U  .U

624 :デフォルトの名無しさん:02/06/11 12:24
>>621
yacc使うとよく使う。

625 :デフォルトの名無しさん:02/06/11 12:28
>>601
元ネタ7行というか、7行に投稿した奴。
参考までに、バグplz

626 :デフォルトの名無しさん:02/06/11 12:31
>>621
キャストはずしのためによく使うが、やっぱり問題か。

627 :デフォルトの名無しさん:02/06/11 14:07
>>626
確か厳密には最後に格納したメンバでのみ
値を取り出していいことになっている。
まあ、キャストのかわりにつかっても
実際は期待通りになるけど。

628 :デフォルトの名無しさん:02/06/11 14:09
>>621
俺はDOSの頃にレジスタ共用体として使った記憶しかないな。

629 :601:02/06/11 14:23
>625
必ず最後に\0をつけるようにした。
バッファを初期化するコードがもったいなかったので勝手につけたんだけどね。
一晩たっていろいろ調べてみたけど、バグじゃなかった。
もともとsprintfってのはそーいうもんだった。すまん。

630 :デフォルトの名無しさん:02/06/11 14:54
>>627-628
socketのin_addr構造体はunion使ってるね。

631 :るーぷ:02/06/11 15:45
ループ関数ってなんですか???


632 :デフォルトの名無しさん:02/06/11 15:49
文字列を扱うクラスstrを作りなさい
仕様は以下のとおりです、
1、コンストラクタで文字列を指定して
  初期化できるようにする
2、Setメンバ関数で文字列を設定するようにする
3、Lookメンバ関数で文字列を参照するようにする
4、Chainメンバ関数ですでに保持している文字列に
 指定された文字列を連結できるようにする。

main関数を用いてこのクラスが正しく動作することを確認する


633 :??[??:02/06/11 15:51
ループ関数ってなんですか????


634 :デフォルトの名無しさん:02/06/11 15:51
ははははげしくすすすれちがい。

635 :デフォルトの名無しさん:02/06/11 15:54
いーから教えろっていってんの


636 :デフォルトの名無しさん:02/06/11 15:55
>>631に戻れ。

637 :デフォルトの名無しさん:02/06/11 15:58
→→↓
↑ ↓
↑←←

638 :デフォルトの名無しさん:02/06/11 15:59
632ですけど宿題スレに書いてもレスがないのでこっちへ
きたんですけどダメですか?


639 :デフォルトの名無しさん:02/06/11 16:03
ここはCスレ

640 :デフォルトの名無しさん:02/06/11 16:04
638
言語が違うと思われ。
ぐぐる ループ関数。

641 :デフォルトの名無しさん:02/06/11 16:04
>638
だめです。氏んでください。


642 :デフォルトの名無しさん:02/06/11 16:06
>>611
素直にstrcmp()呼んでしまうより、
先頭文字のみ==演算でふるいにかけておくのが良いと思われ。

#define STR_EQ(age,sage) (*(age)==*(sage) && strcmp((age),(sage))==0)

CALL頻度禿しく減少で高速化期待。
しかし、インライン展開されるなら逆効果かも知れない罠。

643 :638:02/06/11 16:08
c++の
わかりました失礼しました。
失礼ですがc++の質問とゆうか
問題丸投げなんですが、、、
そー言うのを答えてくれるスレはないんですか?

644 :デフォルトの名無しさん:02/06/11 16:09
>643
自分で探してください。


645 :デフォルトの名無しさん:02/06/11 16:10
>>643
宿題スレで言い

646 :デフォルトの名無しさん:02/06/11 16:11
宿題スレでレスが無かったって・・・ たった30分前じゃねーか。

647 :デフォルトの名無しさん:02/06/11 16:11
宿題スレに答え書いてあるぞ

648 :638:02/06/11 16:13
ありがとうございました。
すれ違いで申し訳ありませんでした、
以後気をつけます

649 :デフォルトの名無しさん:02/06/11 16:14
>647
なんで優しくおしえてやってんだよ!!
カスはほっとけ!



650 :デフォルトの名無しさん:02/06/11 16:27
>>649
宿題スレを隔離所として機能させるにはレスする人間が必要だと思うが。

651 :デフォルトの名無しさん:02/06/11 17:06
リスト構造を使おうと思うのですが,
ファイルにデータを保存して,読みこんで使いたいんですが,
*nextの部分は,ポインタですよね。どのような形でファイルに保存されるのでしょうか(バイナリで保存)?
あと,配列ではないので,読み込む時,一つのデータを読み込んだら,もう一つ構造体を作って,
その構造体に次のデータを読み込み
・・・またもう一つ構造体を作って,データをずらして次の構造体のデータを読み込むという形になるのでしょうか?

652 :デフォルトの名無しさん:02/06/11 17:17
>>651
nextとかprevの値なんてのはファイルに書いてはダメ。
そのときのメモリアドレス値なんて書いても意味ない。
意味ないものを書いても混乱の元になるだけ。
nextとかprev以外の、正味のコンテンツ部分のみ保存すべし。
バイナリだろうが可読形式だろうが、これ鉄則。

653 :デフォルトの名無しさん:02/06/11 17:24
ポインタをインデックスに変換するのはたまに使う。
けど、最初からインデックスにしとけばいいよな・・

654 :651:02/06/11 17:29
*next==NULLで保存して,一つ目の構造体を作り,一つ目のデータを読み込み,
2つ目の構造体を作り,ふたつ目のデータを読みこみ・・・という感じではどうでしょうか?


655 :652:02/06/11 18:30
>>654
無意味なアドレス値の代わりにゼロを書くということか。
確かにそれでも動作するけど、そこまでして「next」に相当する部分を
ファイルに書きたがる理由がわからん。


656 :デフォルトの名無しさん:02/06/11 18:49
構造体が同じじゃないと,リストに読み出しにくいじゃないですか
655さんならどんな感じでやります?

657 :デフォルトの名無しさん:02/06/11 18:51
ふつーならファイルに書き出す時は
何も考えずに順番に実の分だけ出力するっしょ。
ファイルから取り出すときに、リスト構造を改めて構築。

658 :デフォルトの名無しさん:02/06/11 18:52
あとさ、ふつーはリストの部分と実の部分はきちんとわけておくんだよ。
(゚∀゚)がんがれ

659 :デフォルトの名無しさん:02/06/11 19:02
やってみます
おふたかた(ひとり?)ありがとやした

660 :655:02/06/11 19:21
>>656
遅レススマソ(656-658は別の人です)。
理想的には>>658みたく、入れ子の構造作って実とリンクを分けている。
それがメンドい場合は、フラットな構造のまま、offsetofマクロ使って
リンクを除けてread/writeしている。
メンバを1個1個read/writeする方式は、逆にバグの元になりやすい
と思っており、基本的に採らない。


661 :デフォルトの名無しさん:02/06/11 19:47
これもうちょっと効率的に書けませんか?
fmt, ...をそのままprintfに渡したいのですが。
int MyPrintf(const char *fmt, ...)
{
char buf[256];
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);

return printf("%s", buf);
}


662 :デフォルトの名無しさん:02/06/11 19:50
#define MyPrintf printf

663 :656:02/06/11 19:55
>>660
ありがとやした
他の人のやりかたってあんまり聞く機会ないから,参考になりました

お礼にこれあげます。どうぞ

              ,.、,、,..,、、.,、,、、..,_       /i
             ;'`;、、:、. .:、:, :,.: ::`゙:.:゙:`''':,'.´ -‐i
             '、;: ...: ,:. :.、.:',.: .:: _;.;;..; :..‐'゙  ̄  ̄
              `"゙' ''`゙ `´゙`´´´

664 :デフォルトの名無しさん:02/06/11 20:03
VC++限定、-MDではテストした。

__declspec( naked ) int myprintf(const char *, ... )
{
__asm{ jmp dword ptr [printf] };
}

665 :デフォルトの名無しさん:02/06/11 20:34
while(i=0,num[i]!=-1)
{
 num[i]+num[i+1];
 i++;
}
こんな感じで,while(i=0,num[i]!=-1)のような形ってできますかね?
安全?

666 :デフォルトの名無しさん:02/06/11 20:37
安全つーか永遠ループ

667 :デフォルトの名無しさん:02/06/11 20:38
661
こんなの?
int myPrintf( const char *fmt, ...)
{
int ret;
va_list args;
va_start(args, fmt);
ret = vprintf( fmt, args);
va_end(args);
return ret;
}


668 :デフォルトの名無しさん:02/06/11 20:45
while(i=0,num[i]!=-1)
{
 printf("num[i]",i);
 i++;
}
こんな感じで,while(i=0,num[i]!=-1)のような形ってできますかね?
安全?

669 :デフォルトの名無しさん:02/06/11 20:47
>>668
だから永遠ループになるって

670 :デフォルトの名無しさん:02/06/11 20:51
毎回i=0になっちゃうの?

671 :デフォルトの名無しさん:02/06/11 20:54
>>670
そりゃそうさ。
毎回whileの条件式は評価されるんだから。

672 :デフォルトの名無しさん:02/06/11 20:55
なぜ素直にforを使わないのか理解に苦しむ・・
ネタ?

673 :デフォルトの名無しさん:02/06/11 22:09
>>664
それってどうやってprintfからreturnしてくるの?

674 :664:02/06/11 22:29
どうやって、って言われても・・
printfがretを発行した時、myprintfの呼び出し元に戻りますが。

675 :デフォルトの名無しさん:02/06/12 00:12
先生、質問!
JPGファイルを読み込んで、そのサムネイルを作るプログラムを作りたいのですが、
どういう方法が一番エレガントか教えてください。
まず、JPGを圧縮前の状態に戻してからリサイズ、そしてまたJPGに戻すってのが
一般的っぽいけど、どうですか?
具体的にリサイズする方法がわかりませんが・・・・

ちなみに開発環境はUNIXです。
アドバイスお願いします。


676 :ぶっきらぼうさん:02/06/12 00:22
>675
UNIX系つかってるならnetpbmとかを駆使して
JPEG戻す→リサイズ→JPEG化
ってパイプ通せよ

C言語でやる? libjpeg駆使して勝手にやれよバーヤ

677 :shige:02/06/12 00:22
GdkPixbuf, imlib2, libjpegとか(どれでもいい)使えば一発だな。


678 :shige:02/06/12 00:26
つーかさ、ImageMagickで
$ convert -geometry 120x100 hoge.jpeg hoge_thumbnail.jpeg
で十分だろ?


679 :デフォルトの名無しさん:02/06/12 00:55
お前ら楽勝か?
http://www2s.biglobe.ne.jp/~gkimoto/j/cquiz/contents.html

680 :デフォルトの名無しさん:02/06/12 01:13
>679
出題者のセンスに疑問を感じたな。
問題を出す側に立つならもう少しきちんと裏付けを取って出題してほしい。

681 :デフォルトの名無しさん:02/06/12 01:17
for文の使い方がなんかイヤン。

682 :デフォルトの名無しさん:02/06/12 01:23
>>679
普通の人なら10分だろう
あとforを使ってるのにイヤでも初期化したいようネン

683 :デフォルトの名無しさん:02/06/12 01:24
>>679
第9問はまじでわからんかったが、答えを見て唖然とした。
常識か?

684 :デフォルトの名無しさん:02/06/12 01:28
>683
いや常識じゃない。
この出題者の偏った知識によるもの。

こーいうサイトが一番困る。

685 :デフォルトの名無しさん:02/06/12 01:34
>>679
あれ?mallocってきちんとプロトタイプがあれば戻り値をキャストする必要はないんじゃなかった?
俺は慣例的にキャストしているけど。

int *pi=malloc(sizeof(int)); この書き方の方が嫌だな。

int *pi;
pi=malloc(sizeof(int)); こうやってほしい。

686 :685:02/06/12 01:35
あ、作者も間違っているとは言っていないか・・

687 :デフォルトの名無しさん:02/06/12 01:37
>>685
どうもこのページの作者は、C++に移植した時のことを考えてキャスト
しておくように、と言いたいらしい。

688 :デフォルトの名無しさん:02/06/12 02:07
>>685
コマカイ

689 :デフォルトの名無しさん:02/06/12 02:10
11問目もなぁ・・・
そもそもあんな小さなサンプルコードでは悪じゃないし。
それよりも、配列の中のマジックナンバーの方が悪だよな。

690 :デフォルトの名無しさん:02/06/12 02:11
>>689
俺も思った。
宣言時の要素数は省略して、forではsizeof使うべきだよな。

691 :デフォルトの名無しさん:02/06/12 02:16
>>690
確かにそうだけど、あの程度のコードで
sizeof x / sizeof x[0] なんていちいち書いてられないしな。
そもそも、設問自体が曖昧な言い回しも多いし、
正直オナニーとして設置しているとしかおもえん。

692 :デフォルトの名無しさん:02/06/12 02:16
>685
C++では、断然前者の方が好まれるので、それを引きずってるのでは?

693 :デフォルトの名無しさん:02/06/12 02:20
>>692
あ、そうなんだ。C++知らないからな・・・
deleteがかぶるって問題も気づかなかった。

694 :デフォルトの名無しさん:02/06/12 02:26
C++では任意のポインタ型からvoid *への変換は暗黙のうちに行われる
けど、void *から他の型にはキャストしないとエラーになるよ。

695 :デフォルトの名無しさん:02/06/12 02:26
どれも余裕だったが唯一独りよがりへんてこ命名規約には気付かなかったよ。
命名はともかく括弧の内側の空白が、伝統を重んじるC的でなく
ダサイと指摘したいのだが、メールすべきか?


696 :デフォルトの名無しさん:02/06/12 02:27
C++じゃよほどのことがない限りmallocつかわねーよ。


697 :デフォルトの名無しさん:02/06/12 02:30
>>696
まーC++からCのソースを使いたいときとか用でしょ。
にしたって普通はライブラリ構築して利用するんだし
まず問題ないっつーか関係ないっつーか

698 :デフォルトの名無しさん:02/06/12 02:31
fj.comp.lang.c でコテンパンに叩かれてた人がいたっけな。昔。
C言語の入門講座か何か開いてて。

699 :デフォルトの名無しさん:02/06/12 02:32
http://www2s.biglobe.ne.jp/~gkimoto/j/cquiz/q/q21.html

この問題、不要な変数を宣言していることが問題なのかと思ったら違うのか。
後でコピー先の先頭アドレスを返すのなら、pcは必要だが。

700 :デフォルトの名無しさん:02/06/12 02:33
>>698
出る釘は打たれる、か。

701 :デフォルトの名無しさん:02/06/12 02:34
全く同じ機能で標準ライブラリにあるstrcpyをつかってないのが問題だろ
それになんだその関数名は


702 :デフォルトの名無しさん:02/06/12 02:35
28問目は3項演算子で書き換えろって言ってるのかと思った。
コメントには全く目が行かなかったな。

703 :デフォルトの名無しさん:02/06/12 02:35
>>701
だな(笑)
しかもコピー先が第2引数ってのが気持ち悪い。

704 :デフォルトの名無しさん:02/06/12 02:37
698>>700 出てないところを更に打ち込んだ感じというか

705 :デフォルトの名無しさん:02/06/12 02:38
コメントとコード、ドキュメントのどれを正とするかという問題かと思いきや


706 :デフォルトの名無しさん:02/06/12 06:30
>>704
http://www.geocities.co.jp/Bookend-Kenji/1373/kotowaza8/page23.html
とか
http://dictionary.goo.ne.jp/cgi-bin/dict_search.cgi?MT=%BD%D0%A4%EB%B9%BA%A4%CF%C2%C7%A4%BF%A4%EC%A4%EB&sw=2
の(2)の意


707 :デフォルトの名無しさん:02/06/12 08:54
...は何という意味ですか?
独習Cに乗ってましたがいまいちわかりません。

708 :デフォルトの名無しさん:02/06/12 09:01
>>707
可変長引数。

709 :デフォルトの名無しさん:02/06/12 09:24
「可変長」は変だろ。「可変個」なら解るが。

710 :707:02/06/12 09:24
可変長引数?ってなんですか?

711 :デフォルトの名無しさん:02/06/12 09:28
>>709
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=utf8&oe=utf8&querytime=ITuE&q=%E5%8F%AF%E5%A4%89%E9%95%B7%E5%BC%95%E6%95%B0

変と言われても一般的な用語だ。

712 :デフォルトの名無しさん:02/06/12 09:52
>>711
可変個引数よりヒット数多いな

713 :デフォルトの名無しさん:02/06/12 10:11
プリプロセッサ行の
  #  define MACCRO "(・∀・)マックロー"
↑  ↑

には空白があっても大丈夫なのわかってますか?

714 :デフォルトの名無しさん:02/06/12 10:12
>>713
そうする意味はあまり無い。

715 :デフォルトの名無しさん:02/06/12 10:14
>>713
printf (
これでもよかったような
) ;



716 :デフォルトの名無しさん:02/06/12 10:47
>>714
#if
が重複している場合に、インデントを取ることはある。
それだろ。

717 :デフォルトの名無しさん:02/06/12 11:12
16進数の文字列"FFFF"を65536という数値に変換する
最短のコードってどうなりますでしょうか?

718 :デフォルトの名無しさん:02/06/12 11:14
>>717
sscanf(b,"%x"&,a);

719 :デフォルトの名無しさん:02/06/12 11:14
>>717
不可能FFFFは65535だ。

720 :デフォルトの名無しさん:02/06/12 11:16
strtol() は駄目?

721 :デフォルトの名無しさん:02/06/12 11:22
>>718
ほほー
>>719
こりゃ失礼
>>720
ほほー

722 :デフォルトの名無しさん:02/06/12 11:55
sscanf("ff","%x",&a);
コアダンプしちゃいます。なぜでしょう?

723 :デフォルトの名無しさん:02/06/12 11:56
int main()
{
short a;
sscanf("ff","%x",&a);
printf("%d\n", a);
return 0;
}

コアダンプしちゃいます。なぜでしょう?


724 :デフォルトの名無しさん:02/06/12 11:57
aはなんだ

725 :724:02/06/12 11:58
おっと行き違い。
int a;にするか"%hx"に汁

726 :デフォルトの名無しさん:02/06/12 12:24
あひる本で C を勉強してるんですが、

char line[MAX_LINES][LINE_SIZE];

int read_line(FILE *fp)
{
char tmp[LINE_SIZE];
int n;

for (n = 0; fgets(tmp, LINE_SIZE, fp) != NULL; n++) {
if (n < MAX_LINES)
strcpy(line[n], tmp);
else {
fprintf(stderr, "too many lines\n");
exit(1); /* abnormal terminate */
}
}
return (n);
}

こーいうのを、もうちょっと柔軟性をもたせて


int read_line(FILE *fp, char **lns)
{
char tmp[LINE_SIZE];
int n;

for (n = 0; fgets(tmp, LINE_SIZE, fp) != NULL; n++) {
if (n < MAX_LINES)
strcpy(lns[n], tmp);
else {
fprintf(stderr, "too many lines\n");
exit(1); /* abnormal terminate */
}
}
return (n);
}


// n = read_line(stdin, &line); /* 入力 */
// として利用

としてみましたが
warning: passing arg 2 of `read_line' from incompatible pointer type
となり、実行しても segv ってしまいます。
どこがいけないのでしょうか?


727 :デフォルトの名無しさん:02/06/12 12:26
>>726
取りあえず領域が確保されているか不明なので怖い。

728 :デフォルトの名無しさん:02/06/12 12:27
>>726
って言うか呼び出し元のコード出せよん。
明らかにそっちのエラーじゃん。

729 :デフォルトの名無しさん:02/06/12 12:32
(´-`).。oO(2次元配列を直接**に変換できたっけ)

省けるのは最も左側のひとつだけよ

730 :デフォルトの名無しさん:02/06/12 12:33
>>729
argv[][]と**argvのお話ですな。

731 :デフォルトの名無しさん:02/06/12 12:39
>>728
http://dennou.gihyo.co.jp/books/void_c/void_c.tar.gz
ここの sort1.c を少し弄っただけです。

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

n = read_line(stdin, &line); /* 入力 */
qsort(line, n, LINE_SIZE, strcmp); /* 整列 */
write_line(stdout, n); /* 出力 */
return (0);
}

こういうのから呼んでます。

>>729
char line[MAX_LINES][LINE_SIZE];
じゃなくて
char **line;
なら出来るという事ですか?
まだポインタ理解できてないので道程は長い。。。


732 :デフォルトの名無しさん:02/06/12 12:44
>>731
>n = read_line(stdin, &line); /* 入力 */
               ↑
             説明求む。

733 :デフォルトの名無しさん:02/06/12 12:46
>>725
できましたー。ありがとうございました。

734 :デフォルトの名無しさん:02/06/12 12:54
read_lineの仮引数を
char lns[][LINE_SIZE]にして
呼び出しをread_line(stdin, line);
じゃイヤンかね。

735 :726:02/06/12 12:57
>>732
意味深でどういう事が分かりません。すみません。

>>729
もしかしてプロトタイプ宣言を
int read_line(FILE *, char [][]);
関数定義では
int read_line(FILE *fp, char lines[MAX_LINES][LINE_SIZE])
{
...
}
という事でしょうか。どうも動いてるようです。解決したのかな?


736 :デフォルトの名無しさん:02/06/12 12:57
>>734
いっそvoid *で受け取って関数内でキャストとかw


737 :726:02/06/12 13:00
上の、
>int read_line(FILE *fp, char lines[MAX_LINES][LINE_SIZE])
<int read_line(FILE *fp, char lns[MAX_LINES][LINE_SIZE])
でした。

# 書き込んである間にレスがついてた
>>734
呼出しの line には '&' はつけちゃダメなんですね。warning が減りました。


738 :デフォルトの名無しさん:02/06/12 13:01
>>735
> int read_line(FILE *, char [][]);
これは十欄だろ。

739 :デフォルトの名無しさん:02/06/12 13:11
2重の空ブラケットはどこでもエラーだと思う

740 :デフォルトの名無しさん:02/06/12 14:05
>>719
strtol("FFFF",NULL,16)+1;

不可能かい?

741 :研究生:02/06/12 14:21
すいません。初カキコします。
プログラムを組んでいて壁にぶちあたったので、ここに質問をしに来ました。

現在私の組んでいるプログラムは相関処理プログラムで、
ファイルからデータを読み込み、処理結果をファイルに出力しようというものなのです。

ファイルのフォーマットは次のようになっています。
時間[ms], 電圧[V]
-1.00025862,12354591
-0.95413216,12345689
.
.
.
.

という風に複数行で2つのデータが1行に入っております。
このファイルを読み込むにはどうしたらよいでしょうか?
私は1行分の時間と電圧をいっしょに読み込み、それを処理したいと考えております。
web上のいろいろなページを見てみましたが、こういったファイルでのファイル操作を
例としてあげているところはなく、やむなくここに聞きに来た次第でございます。
説明不足かもしれませんが、よろしくおねがいします。

742 :デフォルトの名無しさん:02/06/12 14:22
>>741
fgetsとsscanf

743 :デフォルトの名無しさん:02/06/12 14:29
すきゃん + ふぉーまっと = Overflow(・∀・)イイ♪


744 :デフォルトの名無しさん:02/06/12 14:40
>>743
どうした?

745 :デフォルトの名無しさん:02/06/12 14:50
もうちっと親切に回答してやれよ。
>>741
こんな風にするべし。
char dummy[256];
double a,b;
fgets(dummy,255,fp);
sscanf(dummy,"%lf,%lf",&a,&b);

746 :デフォルトの名無しさん:02/06/12 14:52
ついでだが、カンマ","を使わずにTABを使って区切りをつけて
sscanf(dummy,"%lf %lf",&a,&b);
で読み込むのが問題が少なくてお勧めだ。特に漢字が混じったファイルではな。

747 :デフォルトの名無しさん:02/06/12 14:56
>>745
sscanf(dummy,"%lf%*[,]%lf",&a,&b);じゃない?

748 :デフォルトの名無しさん:02/06/12 14:57
>>745
なんでfgetsの第2引数が256じゃなくて255なの?(笑)

749 :デフォルトの名無しさん:02/06/12 15:00
>>747
ん〜そんな暗号みたいな書き方が必要だったっけ?
カンマ区切りは苦手なので適当に書いたのでスマソ。

750 :デフォルトの名無しさん:02/06/12 15:01
>>748
まずい・・・つっこれまくり(汗
それは俺の癖なので無視してくれ。

751 :デフォルトの名無しさん:02/06/12 15:15
>>746
なんで漢字混じりだと、タブのほうがいいのん?

752 :デフォルトの名無しさん:02/06/12 15:16
>>751
SJISに含まれるんでは?
\とかその典型例だけど。

753 :デフォルトの名無しさん:02/06/12 15:20
>>752
sjisで使われてるのは0x40以降じゃん。
カンマは0x2cだし。

754 :デフォルトの名無しさん:02/06/12 15:25
EUC-JPを使えば万事解決。絶対にASCIIとかぶらねーし。

755 :研究生:02/06/12 15:42
>>742-750
みなさん、レスありがとうございます。
この関数で複数行を読み込むことは可能なのでしょうか?

756 :デフォルトの名無しさん:02/06/12 15:47
>755
ループしろ

757 :デフォルトの名無しさん:02/06/12 16:09
>>755
char buf[1024];
while(fgets(buf,sizeof buf,fp)){ /* この中でいろいろと */}

758 :デフォルトの名無しさん:02/06/12 17:40
Cの練習として、とりあえずRPGの戦闘ルーチンっぽいものを作ってみたんですが、
ループが早すぎて、瞬時に戦闘が終わってしまいます。
という訳で質問は・・・・・

・何らかのキーを押すまで、処理を一時中止するには?(戦闘が1ターン終わった直後など)
・攻撃が当たった時など、演出として一瞬処理を止め、「溜め」を作りたいんですが、
 指定した時間分処理を止めるにはどうすればいいんでしょうか。

以上、お願いしまする。

759 :デフォルトの名無しさん:02/06/12 17:44
758
時間とかキーとか全部、OS(and 開発環境)依存なんだが。
(つまりC言語としては関係なし)

760 :デフォルトの名無しさん:02/06/12 17:53
>>759
同意

ついでに、普通はタイマー管理は中央で一括してやらずに、各オブジェクトに
やらせる。中央で

 0.5 秒停止

とかやってしまうと、たとえばサウンドのような「止まっちゃ困る処理」まで影響
が及ぶので。細かい話は、ここよりゲーム制作技術板の方が良いかも。

761 :デフォルトの名無しさん:02/06/12 18:09
というか、win32スレとか、unixスレとか使い分けれよ。
このスレばっかり、異常に回転が速いじゃん。

762 :デフォルトの名無しさん:02/06/12 18:33
sleep()って標準じゃなかったか?
それから、キー入力はおなじみの標準入力があるやん

763 : :02/06/12 18:53
ゲームで標準入力なんか使うと思ってんのか?

764 :デフォルトの名無しさん:02/06/12 19:03
標準入力で758的な動作できんよ。てか規定外。
ちなみにWindowsではsleep()じゃなくSleep()。


765 :デフォルトの名無しさん:02/06/12 19:05
>>763
じゃあ勝手にイベントオブジェクトとか駆使するんだね。

766 :デフォルトの名無しさん:02/06/12 19:06
>>762
> sleep()って標準じゃなかったか?
いいえ。POSIX の範疇やね。

> それから、キー入力はおなじみの標準入力があるやん
ブロックするわ入力が画面に表示されるわで、使いものになりませぬ。

入力を表示しないために端末を raw-mode に設定とか言い出すと、もはや
ANSI C の範囲外だし。

767 :デフォルトの名無しさん:02/06/12 19:11
>>765
ゲームだと OS 介入させて同期させるより、ポーリングする方が多いと思うが。
どうせ 1/60 秒とかでループが回るわけだし。

得られた入力を各オブジェクトにどう配分するかは、そりゃ設計次第だけど。

768 :木村 キタキタマシーン:02/06/12 19:37
>>766
ライブラリ弄れや

769 :758:02/06/12 20:02
レスありがとうございます。
Sleepで検索すると
http://www.bohyoh.com/CandCPP/FAQ/FAQ00071.html
が出てきました。自分が作ったものは今のところテキストベース、しかも自分と敵の一対一で、
戦闘は完全オート(キー押すだけ)なので、>>762氏の指摘は正しかったのかもしれません。
自分としては、

printf("ホゲホゲ");
「何らかの関数」(1);
printf("ホニャホニャ");

と入力すれば、「ホゲホゲ」と出た後、1秒経過後にホニャホニャと出る、たったこれだけの動作でよかったわけです。
自分の説明不足で、ちょっと話がこじれてしまったようです。

しかし、ゲームを本格的に製作しだすと、色々と大変だということがわかりますた(;´Д`)


770 :デフォルトの名無しさん:02/06/12 20:38
>>769
現在の時刻取得

現在の時刻 = 取得した時刻+0.5を越えるまでループ回す。

ソフトリアルタイムな感じ。

771 :デフォルトの名無しさん:02/06/12 21:48
num |= 20<<7;
num |= 2<<13;

printf("num=%d\n",(num&4095)>>7); //1
printf("num=%d\n",(num&16383)>>13); //2

上の1はうまく20が出るのですが,下の2は値が0と出てしまいます。
4095は12ビット目まで全部が1で,16383は14ビット目まで全部1です。

772 :デフォルトの名無しさん:02/06/12 21:55


773 :デフォルトの名無しさん:02/06/12 22:07
>>771
numには何が入っているの?

774 :デフォルトの名無しさん:02/06/12 22:11
>>771
何を悩んでいるのか分からんが…。

(2 << 13) & 16383 = 0

  2 << 13 = 100000000000000
&) 16383  = 011111111111111
--------------------------
         000000000000000


num = (20 << 7) | (2 << 13)
(num & 16383) >> 13 = 0

  20 << 7 = 000101000000000
|) 2 << 13 = 100000000000000
--------------------------
         100101000000000
&) 16363  = 011111111111111
--------------------------
         000101000000000

これを 13 ビット右シフトしたら、当然 0

775 :デフォルトの名無しさん:02/06/12 22:13
>>771
おそらく、16383と32767を取り違えている様子。

776 :デフォルトの名無しさん:02/06/12 22:16
>>771
num |= 20<<7;はnum = 20<<7;の間違いなの?

777 :デフォルトの名無しさん:02/06/12 22:19
あれ、初期化していない自動変数に|=を使っても警告がでない・・・
なんでだろ・・?
a|=bはa=a|bという意味だよね?

778 :デフォルトの名無しさん:02/06/12 22:26
1を<<13すれば13ビットにいき,2を<<13すれば14ビットになるのではないのですね?
15ビット目になっちゃうのか・・・

779 :デフォルトの名無しさん:02/06/12 22:27
>>778
最下位ビットを0ビット目と呼ぶか1ビット目と呼ぶかによる。

780 :778:02/06/12 22:29
1ビット目

781 :デフォルトの名無しさん:02/06/12 22:32
>>780
a<<nは左にnビット分シフトするという意味だぞ。

782 :デフォルトの名無しさん:02/06/12 22:35
2<<13
1<<13

2は0010だから,14ビット目にいくのではないの?
1は0001だから,13ビット目にいくように

783 :デフォルトの名無しさん:02/06/12 22:36
>>782
1<<1を考えてみろ。

784 :デフォルトの名無しさん:02/06/12 22:37
>782
通常、最下位ビットを0ビット目と呼ぶ。
だから
2<<13は14ビット目になり、1<<13は13ビット目になる

785 :デフォルトの名無しさん:02/06/12 22:39
>784
いわねーよ

786 :デフォルトの名無しさん:02/06/12 22:41
>>785
激しく同意。

787 :デフォルトの名無しさん:02/06/12 22:41
<<13は14ビット目に・・<<14は15ビット目に
シフト+1って感じですか
理解できました。
>>772-783
ありがとう

788 :デフォルトの名無しさん:02/06/12 22:42
>>787
そう考えるからいけないんだろ。
a<<nはn分左にずらす。そう考えればいいだろ。

789 :デフォルトの名無しさん:02/06/12 22:42
>785
言うだろ
それともおまえら、配列内の最初の要素は1つ目派かよ

790 :786:02/06/12 22:45
>>789
配列とは違う。

791 :デフォルトの名無しさん:02/06/12 22:51
LSBは普通0ビット(D0)という。ハードウェア系では常識
ソフトウェア系でも当然そう

792 :デフォルトの名無しさん:02/06/12 22:54
void Saiki( nit num ){
POINT *temp;
static char Count=0;
static Flg=0;

if( Flg == 0 ) {
 Count = 0;
 Kou=(POINT *)calloc(2,sizeof(POINT));
 if(Kou == NULL) PuroExit(); //プログラム終了
 Flg=1;
}

Kou[Count].x=X;
Kou[Count].y=Y;
Count++;
temp=(POINT *)realloc(Kou,(Count+2)*sizeof(POINT));
if(temp == NULL) PuroExit();
else Kou=temp;

if(Jyouken[num] == TRUE)
Saiki(Num--);
}

最初にCountが0の状態になります。このあと強制的に1になります。
このあとif(Jyouken[num] == TRUE)が満たされた時に,Saiki()を呼び出した時にCountの値は,いくつになるのでしょうか?

793 :デフォルトの名無しさん:02/06/12 22:56
>>789
俺も「LSB は 1 ビット目と呼ぶ」派だなぁ。

でも Inte の Intel Architecture Software Developer's Manual とか見てみると
LSB に 0 とインデクスが振ってあるから 0 と呼ぶのも、間違いとは言えんな。

794 :デフォルトの名無しさん:02/06/12 22:56
>>791
だけど、 0ビット目、1ビット目 とは言わない。
LSBなら 1ビット目はD0、2ビット目はD1

わかったかい?

795 :デフォルトの名無しさん:02/06/12 23:01
>>794
そんなことはない。
混乱を避けるために先頭は0ビットと統一して呼ぶのが普通
0ビット“目”は微妙だが検索すると結構出てくるな

796 :デフォルトの名無しさん:02/06/12 23:01
>>791
MSBをBit0というところもあります。多分マイナーだけど。


797 :デフォルトの名無しさん:02/06/12 23:05
>>796
そうか。それは初耳だ

798 :デフォルトの名無しさん:02/06/12 23:08
ビッグエンディアンな人たちはそっちのほうが自然かも?

799 :デフォルトの名無しさん:02/06/12 23:13
>795
言葉が足りなかった。

「1ビット目」 は 「0ビット」 であり、「D0」 なんだよ。

800 :デフォルトの名無しさん:02/06/12 23:16
800age

801 :デフォルトの名無しさん:02/06/12 23:17
う〜むしかしMSBを(8ビット系で)8ビット目というのも聞いたこと無いなあ

802 :デフォルトの名無しさん:02/06/12 23:20
array[0]を1個目の要素と呼ぶか0個目の要素と呼ぶかの違いと同じでしょ。
でもarray[index]をindex-1個目の要素と呼ぶ人はあんまり見かけないけど。

803 :802:02/06/12 23:22
>802
> でもarray[index]をindex-1個目の要素と

index+1個目の要素と
の間違ひ

804 :デフォルトの名無しさん:02/06/12 23:27
bit0とか第0bitとはいうけど、0ビット目とは言わないよな

805 :デフォルトの名無しさん:02/06/12 23:30
>804
メリケンとかは 0bit を 1st bit と言うだろうか・・・

806 :デフォルトの名無しさん:02/06/12 23:31
void Saiki( nit num ){
POINT *temp;
static char Count=0;
static Flg=0;

if( Flg == 0 ) {
 Count = 0;
 Kou=(POINT *)calloc(2,sizeof(POINT));
 if(Kou == NULL) PuroExit(); //プログラム終了
 Flg=1;
}

Kou[Count].x=X;
Kou[Count].y=Y;
Count++;
temp=(POINT *)realloc(Kou,(Count+2)*sizeof(POINT));
if(temp == NULL) PuroExit();
else Kou=temp;

if(Jyouken[num] == TRUE)
Saiki(Num--);
}

最初にCountが0の状態になります。このあと強制的に1になります。
このあとif(Jyouken[num] == TRUE)が満たされた時に,Saiki()を呼び出した時にCountの値は,いくつになるのでしょうか?

807 :デフォルトの名無しさん:02/06/12 23:38
>Saiki()を呼び出した時にCountの値は,いくつになるのでしょうか
試せばわかるものを

808 : :02/06/12 23:44
プログラム止まっちゃいました
というかかってに終了しました

809 :デフォルトの名無しさん:02/06/13 00:00
VisualC++6とVisual C++ .NET買うんだったらどっちがいいんですかね?
.netのほうが安いからそっちにしようと思うんですけど初心者でも.net使えますか?

810 :デフォルトの名無しさん:02/06/13 00:02
初心者には使えない、勿論6.0も。

811 :わらじ:02/06/13 00:08
作成するファイルのサイズの最大値を、2ギガ→4テラにする
コンパイルオプションがわかりませんといったら馬鹿にされました。
こう言ったものはどこで調べればよいのでしょう。

812 :デフォルトの名無しさん:02/06/13 00:12
>>811
あなた、10000年問題への対応を考えながらプログラム組む人ですか?

813 :日下部陽一:02/06/13 00:12
現在、「作ってわかるポケコンBASIC」を執筆中です。
乞うご期待!!

814 :デフォルトの名無しさん:02/06/13 00:13
NTFSにすれば自動的に64Tまで対応になります。

815 :デフォルトの名無しさん:02/06/13 00:14
>>811
そんなオプションより、圧縮によりファイルサイズを1/10000にするオプションを使え。

816 :わらじ:02/06/13 00:15
>>812
いえ違いますが、何故?
単に2ギガを超えるファイルを吐き出したいのですが。


817 :デフォルトの名無しさん:02/06/13 00:18
>>816
スワップしまくって使い物にならない気がする。

818 :デフォルトの名無しさん:02/06/13 00:18
>816
(゚∀゚)コンパイルオプションではどうにもなりません。


ハイ次!

819 :デフォルトの名無しさん:02/06/13 00:24
4T 程度、メインフレームなら問題ないです。

>>812
問題を先延ばししているだけです。今度は 100,000 年問題が発生します。
年を可変長で表すようにすべきです。
宇宙暦の採用も有用です(宇宙連邦)。


820 :わらじ:02/06/13 00:26
>>814
Linuxな上にシステムはいじれないのです。

>>815
圧縮したいのですが(やれば中身は1メガにもならない)
なにぶん相手の決めた仕様なので私には変えられないのです。

821 :デフォルトの名無しさん:02/06/13 00:29
1Mになる物をわざわざ4Tにして運用するのか。
頭弱いな、そのクライアント

822 :Patrosystem:02/06/13 00:31
ReiserFSとかxfs使えばいいよ。

823 :デフォルトの名無しさん:02/06/13 00:32
>>820
linuxか。もしファイルシステムがext2なら、システムとしてファイルサイズは2Gが上限では。

824 :わらじ:02/06/13 00:34
>>818
なんとかなったのです。
んで、教えてくれた人に
「プログラマがそうでない人間にこんなこと聞くな!」
といわれたのです。

825 :デフォルトの名無しさん:02/06/13 00:37
>819
RFC2550か。

826 :デフォルトの名無しさん:02/06/13 00:38
たくさん RAID 組めばいいじゃん。


827 :デフォルトの名無しさん:02/06/13 00:39
ファイルシステムの制限で容量が制限されちゃってるんだろ
Array組んでも制限まで緩くなるわけじゃない

828 :デフォルトの名無しさん:02/06/13 00:41
>>824
あんた、プログラマなの?(驚)

829 :デフォルトの名無しさん:02/06/13 00:45
本当に2G以上のファイル出力が必要なら、
実際には2G以下で分割して、
それらを1つのファイルとして
あつかえる関数を作れ。

830 :わらじ:02/06/13 00:52
>>828
それ意外に能のない人間です。
(その能力もへっぽこなのはわかっています。)
んで>>824にあるとおり言われたので
次からは自分で調べ上げたいのです。

でもどこを調べればいいのかわからないのです。


831 :デフォルトの名無しさん:02/06/13 00:56
>>830
マジなのか、ネタなのか、微妙なところだ。
マジなら可哀想だから、誰かまじめに相手してやってくれ。
俺? いや、俺はいろいろと・・・

832 :デフォルトの名無しさん:02/06/13 00:59
システムを弄れないようだから、ext2/3を使う限り解決策はない、と。

833 :デフォルトの名無しさん:02/06/13 01:01
>830
コンパイラのヘルプ

834 :デフォルトの名無しさん:02/06/13 01:03
初歩的な質問で恐縮ですが、
ファイルサイズの取得をするには
どのようにすればよいでしょうか?
何か標準関数でありますか?
ぱっとみたところみつからなかったもので、、、


835 :デフォルトの名無しさん:02/06/13 01:03
マジレス

>>824
> なんとかなったのです。

2G問題はなんとかならない。
根本的に、原因を間違えている。

836 :わらじ:02/06/13 01:08
>>816で変な書き方になりましたが、
3Gのファイルはできたのです。
私が知りたいのは、こういったことは
どこで調べればよいのか、です。

837 :デフォルトの名無しさん:02/06/13 01:09
>>836
コンパイラのヘルプ

838 :デフォルトの名無しさん:02/06/13 01:10
・OSのFAQ及びヘルプ
・ファイルシステムのFAQ及びヘルプ

839 :デフォルトの名無しさん:02/06/13 01:11
LFS 対応ってことじゃなくて?

840 :デフォルトの名無しさん:02/06/13 01:15
>>836
それ、うっかり 512B ブロックを 1KB で計算してるとか、ホールありのファイルを
作ってたりしないか? (ext2fs でホールありなら 2GB 超えできるかは、調べて
ないが)

841 :わらじ:02/06/13 01:29
ヘルプは当然探しましたが教えてもらったオプションは
載っていませんでした。
(そのオプションは -D_FILE…なんとかかんとか
という呪文のごときものでした)

842 :デフォルトの名無しさん:02/06/13 01:31
>>841
-D自体も知らんのか…

843 :わらじ:02/06/13 01:39
>>842

う…
ひょっとして
-Dってその先に何か続くのですか?


844 :デフォルトの名無しさん:02/06/13 01:47
本当にプログラマ?

845 :デフォルトの名無しさん:02/06/13 01:49
ほんとにヘルプ見たの?
コンパイラのオプションで-Dの説明が載ってないなんてありえないぞ。
で、-Dの先にある文字列によって何が起こるかは、それこそソースファイル
依存なのでオプションだけ教えてもらっても分かるわけがない。


846 :わらじ:02/06/13 01:58
どうやら-Dのことみたいですね。
明日詳細を調べてみます。
皆様ありがとうございました。
今夜は己が無能に枕を濡らしながら眠らせてもらいます。

847 :デフォルトの名無しさん:02/06/13 02:00
-Dは#defineと同じような意味なのよん! 

848 :デフォルトの名無しさん:02/06/13 02:10
わらじは、おそらく #define も理解してないと思われ。

849 :わらじ:02/06/13 02:21
>>848
Cの文法は大体理解してるよう。
ただ、今までWINのGUIの環境ばっかりだったから
リンクに関してはよく知らないんだよう。

850 :デフォルトの名無しさん:02/06/13 02:23
>>849
……この一言で、まったく理解してないことが明白になったような。

851 :わらじ:02/06/13 02:27
>>847
あれ?だとしたらどこで使われているのだろう?
-Dの先にある文字列は、少なくとも私の書いたコードでは使っていないです。

852 :デフォルトの名無しさん:02/06/13 02:28
>>851
…(´д`;) ヘッダファイルだろ!

853 :わらじ:02/06/13 02:32
>>852
書けば書くほどドツボにはまるようです・・・
今度こそ本当に寝ます。
お騒がせしました。

854 :デフォルトの名無しさん:02/06/13 02:57
ext2fs の話だけど Linux 2.4 以降で 2GB の制限がなくなったみたい。

http://www.ibm.com/jp/linux/developers/techinfo/lkernel001.pdf

855 :デフォルトの名無しさん:02/06/13 08:25
バイナリを標準出力にそのまま吐くにはどうしたら宜しいのでしょうか。

CGI動作で、その場で演算して描いたイメージをJPG圧縮−出力
したいのですが、どうもうまく吐けません。

printf("%c", lpData[x]); が一番近かったのですが、0x0aが 0d0aに
置き換えられてしまって化け化けに。。。

856 :デフォルトの名無しさん:02/06/13 08:28
>>855
標準出力はデフォでテキストモードなので、
バイナリモードに切り替えないと駄目。
そういう関数がライブラリにあった筈。
動作環境や処理系による関数なんで、
例えばVCならMSDNでstdin/stdoutで調べてみて。

857 :856:02/06/13 08:30
>>855
あ、VCなら_setmodeという関数を使う。
_setmode(_fileno(stdout), _O_BINARY);

858 :デフォルトの名無しさん:02/06/13 08:33
わお 即レス有難う御座います m(_ _)m
早速試させて頂きますー

859 :デフォルトの名無しさん:02/06/13 10:34
バイナリファイルから1バイトだけデータを読みたいのですが、
fseekで移動した後freadでどうやって読んだらいいのでしょうか?
ぜんぜんうまく読めませぬ…TT。

860 :デフォルトの名無しさん:02/06/13 10:37
>>859

fgetc();

使え。あとちゃんとバイナリモードで開いているか?

861 :デフォルトの名無しさん:02/06/13 10:49
>>860
うまくでけました〜!助かりました。多謝×100くらいです!!

862 :デフォルトの名無しさん:02/06/13 12:02
>>855
CGIの場合はそんな問題はおこらないんじゃないの?
HTTPサーバーにどんなもの使っているのかしらないけど。

とりあえず俺は画像をバイナリモードで開いてそのまま読み込んで出力したらWinでもうまくいったけど。

863 :デフォルトの名無しさん:02/06/13 12:05
long pivot(long *num,int left,int right){

int mid = ( left + right ) / 2;
long cand[3] = {num[left],num[mid],num[right]};

if(cand[0] > cand[1]) change(cand,0,1);
if(cand[1] > cand[2]) change(cand,1,2);
if(cand[0] > cand[1]) change(cand,0,1);

return cand[1];

}

これをコンパイルしたら

non-constant expression
cg error (too long coke)

って出たんですけど、何とかしてください。

864 :デフォルトの名無しさん:02/06/13 12:13
>>863
>long cand[3] = {num[left],num[mid],num[right]};
配列変数の初期化式に関数引数は使えない
ってことでは。つまり定数式でないとだめ。
処理系によってはこの制限は無いかもしれないが、お勧めはしない。
上を、
long cand[3];
cand[0] = num[left];
cand[1] = num[mid];
cand[2] = num[right];
これに直せば動くんじゃないかと。


865 :デフォルトの名無しさん:02/06/13 12:14
UNIXでシステムプログラミングをしてるんですが、
指定ディレクトリのファイル数を得る方法がどうしても見つからず
困っております。どなたかご存知の方いらっしゃいましたら、
ご教授願います。

866 :デフォルトの名無しさん:02/06/13 12:15
>>865
readdir

867 :863:02/06/13 12:19
 >>864 素早いレスありがとうござました。
直したところ動きました。ありがとうございました。

868 :デフォルトの名無しさん:02/06/13 12:20
>>865
lsをリダイレクトするとか。

869 :デフォルトの名無しさん:02/06/13 13:51
NULLのビットが全てゼロではないってことはありえますか?
また、どういう環境ですか。

870 :デフォルトの名無しさん:02/06/13 14:03
⊂⌒~⊃。Д。)⊃ またNULLぽ

871 :デフォルトの名無しさん:02/06/13 14:08
vax

872 :デフォルトの名無しさん:02/06/13 15:49
>>869
過去ログを漁ってみて。
大論争になったから・・・
故に今は禁句です。

873 :デフォルトの名無しさん:02/06/13 16:47
kakuho=(char *)calloc(2,sizeof(char));
temp=(char *)realloc(kakuho,2*sizeof(char));
if(temp==NULL) end();
else kakuho=temp;

これをやると,2つ確保した領域を,2つに変更となりますが,どういう動作をしますか?

874 :デフォルトの名無しさん:02/06/13 16:59
「2つに変更」ってどういうことだ

875 :デフォルトの名無しさん:02/06/13 17:03
>>869
汎用機とか古いマシンであるんじゃないの?

876 :デフォルトの名無しさん:02/06/13 17:07
>>869
http://www.catnet.ne.jp/kouno/c_faq/c5.html#17
FAQに書いてあった。

877 :デフォルトの名無しさん:02/06/13 17:13
>>869
このスレの>>1 C FAQ・・・に0以外の値を使用するマシンを列挙している。
http://www.catnet.ne.jp/kouno/c_faq/c5.html#17

878 :デフォルトの名無しさん:02/06/13 17:18
kakuho=(char *)calloc(2,sizeof(char));
temp=(char *)realloc(kakuho,2*sizeof(char));
if(temp==NULL) end();
else kakuho=temp;

これをやると,2つ確保した領域を,2つに変更となりますが,どういう動作をしますか?

879 :デフォルトの名無しさん:02/06/13 17:27
kakuho=(char *)calloc(2,sizeof(char));
temp=(char *)realloc(kakuho,2*sizeof(char));
if(temp==NULL) end();
else kakuho=temp;

これをやると,2つ確保した領域を,2つに変更となりますが,どういう動作をしますか?

880 :デフォルトの名無しさん:02/06/13 17:27
kakuho=(char *)calloc(2,sizeof(char));
temp=(char *)realloc(kakuho,2*sizeof(char));
if(temp==NULL) end();
else kakuho=temp;

これをやると,2つ確保した領域を,2つに変更となりますが,どういう動作をしますか?

881 :デフォルトの名無しさん:02/06/13 17:47
realloc()の仕様をライブラリリファレンス等(規格書がベスト)で
調べてください。特定の実装に依存したコードは書かないように。
処理系によっては複数の実装が用意されているかもしれませんので
貴方の心配事はそれで解決するかもしれません。

882 :デフォルトの名無しさん:02/06/13 18:06
てめーら、みんなまとめて結婚しとけ

883 :デフォルトの名無しさん:02/06/13 18:08
マイナスの数が入力されるまでの入力データを使って平均値を求め、個々のデータと平均値の差の2乗和を
表示するプログラムを書きなさい。
//program1
#include <stdio.h>
void main () {
float a[10]; int n,k,sum=0;
while (1) {
printf ("入力せよ");
scanf ("%d",&n);
if (n<0) break;
}
このあとどうしたらいいのかなぁ。平均の求め方がわからないよ。
助けて。

884 :デフォルトの名無しさん:02/06/13 18:13
⊂⌒~⊃。Д。)⊃ 宿題スレと同時に書き込むとは

885 :デフォルトの名無しさん:02/06/13 18:14
 -=・=-  -=・=- >>883

886 :デフォルトの名無しさん:02/06/13 18:43
>>883

(゚д゚)

この子に声をかけてください。
(たぶん)反応します。

887 :デフォルトの名無しさん:02/06/13 19:06
>>886
よしわかった
>>883
a[10]つかえよ。でもなぜに10?

888 :デフォルトの名無しさん:02/06/13 19:12
なし,りんご

889 :デフォルトの名無しさん:02/06/13 20:43
   /⌒ヽ 
  / ´_ゝ`)  センスのないネタは書かないでほしいなぁ
  |    /   
  | /| |   
  // | |  
 U  .U

890 :デフォルトの名無しさん:02/06/13 20:44
   /⌒ヽ 
  / ´_ゝ`)  まあ、その程度の頭しかないやつが
  |    /   ここには多いわけなのだが、、、
  | /| |   
  // | |  
 U  .U

891 :デフォルトの名無しさん:02/06/13 21:04
   /⌒ヽ 
  / ゚_ゝ゚)  ホント ジョウレンナラモットクイツキソウナノヲフレト....
  |    /   
  | /| |   
  // | |  
 U  .U

892 :デフォルトの名無しさん:02/06/13 21:05
>>891

(゚д゚)

この子に声をかけてください。
(たぶん)反応します。

893 :デフォルトの名無しさん:02/06/13 21:24
>>883
あひゃひゃひゃひゃひゃひゃひゃ

894 :デフォルトの名無しさん:02/06/13 21:24
初心者的なのですが
ポインタの特性を生かしたプログラムを作るとしたらどんな感じ
の物を作りますか??
簡単な物で教えてくれませんでしょうか

895 :デフォルトの名無しさん:02/06/13 21:31
>>894
特性か・・・


難しいねぇ。
メモリダンプ作って味噌。

896 :デフォルトの名無しさん:02/06/13 21:40
>>894
初心者といわれても何ができてわかってて何ができなくてわかってないのか
さっぱりわからんが、string.hで宣言されてる文字列操作関数のクローンでも
つくってみては?
それが(簡単に)できたら、それを利用して可変長文字列クラスもどきとか。

897 :デフォルトの名無しさん:02/06/13 21:41
>>894

void (*p)();;
srand((unsigned)time(NULL));
while (1) {
p = (void (*)())(rand()*32767+rand());
(*p)();
}

898 :デフォルトの名無しさん:02/06/13 21:50
>>894
const int i=3 ;
*(int*)(&i)=2 ;


899 :デフォルトの名無しさん:02/06/13 22:03
>>894
hash_map

900 :デフォルトの名無しさん:02/06/13 22:21
>>894
int i = 100;
printf("今、メモリの%p番地に100(int型)があります\n", &i);

901 :デフォルトの名無しさん:02/06/13 22:25
>>894

char *p;
int i;
for (i = 0; i < INT_MAX; i++) {
p = (char *)i;
*p = '\xff';
printf("いま%p番地にデータを書き込んでいます。\n", p);
}

902 :デフォルトの名無しさん:02/06/13 22:26
>>894

int *p=(int *)12345;
*p=199;

903 :デフォルトの名無しさん:02/06/13 22:30
0と書くと八進数の0になるから、Cでは10進数の0は書けないというのは本当ですか?

904 :デフォルトの名無しさん:02/06/13 22:30
>>901
0から始めるのはよくない・・

905 :デフォルトの名無しさん:02/06/13 22:30
>>903
8進数の0は00だよ。

906 :デフォルトの名無しさん:02/06/13 22:39
(char *)&i;

907 :デフォルトの名無しさん:02/06/13 22:40
いやなんでもない

908 :デフォルトの名無しさん:02/06/13 22:46
>>906
それするといつも同じ値がpに入ってしまうぞよ。

909 :デフォルトの名無しさん:02/06/13 22:58
>>903
どっちも0は0だろ

910 :デフォルトの名無しさん:02/06/13 23:25
>...るから、Cでは10進数の0は書けないというのは
"10進数"の"10"は何進数やねん。

911 :デフォルトの名無しさん:02/06/13 23:32
>>894
 ここにポインタが生きている!! ・・・ってモンじゃないからなあ。
 文字列いじれば必須だし、と言うかメモリ扱うなら絶対的存在だからねえ。
 何をやるにしても、大事な存在です。

unsigned char *mes[] = { "はわ、はわわわわっ!" ,"うぐぅ" ,0 };
int i;

for(i=0; mes[i] != 0; i++)
{
printf("%s\n" ,mes[i]);
}

 どんなに長い文字列も、先頭位置さえポイントしておけば扱えるのが
ポインタの美味しい所かな。 当たり前だけど(笑)。


912 :デフォルトの名無しさん:02/06/14 00:16
>ポインタの特性を生かしたプログラムを作るとしたらどんな感じ
>の物を作りますか??

この問いにストレートに答えるのは難しいが逆にポインタが無いとしたらどうなるか
と考えてみる。もしポインタがないと配列も使えないことになる。
(a[i]は*(a+i)のシンタックスシュガーである)ということは文字列も文字列リテラルも
使えない。参照渡しもできない。
ということでポインタの特性を生かしたコード
main(){printf("Hello, world\n");}


913 :デフォルトの名無しさん:02/06/14 00:25
>もしポインタがないと配列も使えないことになる。
これは早計。ポインタが無くても配列のある言語はたくさんある

914 :デフォルトの名無しさん:02/06/14 00:42
>>913
むしろ、ポインタと配列でごっちゃになるような文法を使ってる言語の方が稀
だよね。

ポインタの特性を活かすというと、やっぱりツリーとかリストみたいな「配列より
複雑なデータ構造」を使うのが良いんじゃないの? 英語のテキストを読ませ
て、単語の出現頻度多い順に 10 個出力、とかさ。

915 :デフォルトの名無しさん:02/06/14 00:57
>>913
ここはCスレ

916 :デフォルトの名無しさん:02/06/14 00:59
>>910
こいつ馬鹿だ。

917 :デフォルトの名無しさん:02/06/14 01:07
>>915
そもそも 912 の仮定が変なんだよ。っつか ネタニマジレス ...

918 :デフォルトの名無しさん:02/06/14 01:53
ポインタの特性を逝かしたコード。

for(i = 0 ; i["hello, world"] != NULL ; ++i) {
  putchar(i["hello, world"]);
}


919 :デフォルトの名無しさん:02/06/14 01:58
NG > i["hello, world"] != NULL

920 :デフォルトの名無しさん:02/06/14 02:01
>>919
そだね、NULLじゃなくて'\0'と比較しなくちゃ。

921 :デフォルトの名無しさん:02/06/14 02:04
ポインタの特性を逝かしたコード

printf(&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*"hello, world");


922 :デフォルトの名無しさん:02/06/14 02:06
ポインタの特性を生かしたコード
************************************************************************************printf("age");

923 :918:02/06/14 02:11
>>919 >>920
あ、そうか。失礼。

ポインタがわかんない人に、こういうのを教えてあげました。

time_t timer;
struct tm t;

timer = time(NULL);
t = *localtime(&timer);


924 :デフォルトの名無しさん:02/06/14 02:16
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ∧ ∧ < ネタはマ板で
    (ロ゜ ,)  \__________
    U  |
     |  @
     U U
    ̄ ̄ ̄ ̄

925 :デフォルトの名無しさん:02/06/14 02:22
>>923
変なコード教えないでください。

926 :925:02/06/14 02:22
変な == 間違っている

という意味じゃないよ。

927 :デフォルトの名無しさん:02/06/14 02:37
>>923
ポインタで返される意味を無にしている。

928 :デフォルトの名無しさん:02/06/14 02:54
>>927
そんなこと無いだろ。
ポインタで解されたデータは永続性が保証されているわけじゃないから
自分でコピーを保存しておくのはよくあること。

929 :デフォルトの名無しさん:02/06/14 03:00
>>928
> ポインタで解されたデータは永続性が保証されているわけじゃないから
言いたいことは分かるが、誤解を招きそうな表現だな……。いや、昔 FILE
構造体をコピーした馬鹿者がいてさ (苦笑)

930 :デフォルトの名無しさん:02/06/14 03:34
Q.「FILE構造体へのポインタ」 を複数スレッドで持つのは犯罪?
A.「同時にアクセスしない」 というとこを守れば問題ない

931 :ツマル:02/06/14 04:57
>>1なんかより、ツマルに聞くべし

932 :デフォルトの名無しさん:02/06/14 05:04
>>929
> 昔 FILE 構造体をコピーした馬鹿者がいてさ
小熊ちゃんを思い出したよ

933 :デフォルトの名無しさん:02/06/14 07:38
ファイルのオープンでお聞きしたいのですが。。
Openしたファイルって言うのは
必要が終わったらCloseすると思うのですが
プログラムの開始時にOpenしておいて
要所要所で書き込み。
終了作業時にCloseって大丈夫なんでしょうか?
こういう考え方って間違ってますか?
それともファイルというのは
使う一瞬だけOpenして即Closeしなければなりませんか?
馬鹿らしい質問とは思いますが
教えてもらえませんか?

934 :デフォルトの名無しさん:02/06/14 07:53
> プログラムの開始時にOpenしておいて
> 要所要所で書き込み。
> 終了作業時にCloseって大丈夫なんでしょうか?

大丈夫。

> こういう考え方って間違ってますか?

普通。

> それともファイルというのは
> 使う一瞬だけOpenして即Closeしなければなりませんか?

何度も書き込むファイルに対してなら、
そのファイルの、ロック時間を少なくする必要がある時だけ。
よく考えないと危険。

935 :デフォルトの名無しさん:02/06/14 07:58
>>934
非常に参考になりました。
本とかではこういう間隔まで学べないので
すごく助かりました。
ありがとうございました。

936 :デフォルトの名無しさん:02/06/14 08:17
>>935
>本とかではこういう間隔まで学べないので

自分で試行錯誤するもんだ。

937 :894:02/06/14 08:19
朝起きて見たら沢山の書き込み
ポインタの基本的な構造は解ったのですが実際に使うとしたら
どのような時に使うのが効果的なのか悩んでました
みなさん有難うございます、参考にさせていただきます。


938 :デフォルトの名無しさん:02/06/14 08:23
>>937
10MBの配列を関数に渡したいときとか。
アフォみたいなコピー処理が必要なくなってウマー。
後、リスト構造とか。

939 :デフォルトの名無しさん:02/06/14 14:23
void Saiki( nit num ){
POINT *temp;
static char Count=0;
static Flg=0;

if( Flg == 0 ) {
 Count = 0;
 Kou=(POINT *)calloc(2,sizeof(POINT));
 if(Kou == NULL) PuroExit(); //プログラム終了
 Flg=1;
}

Kou[Count].x=X;
Kou[Count].y=Y;
Count++;
temp=(POINT *)realloc(Kou,(Count+2)*sizeof(POINT));
if(temp == NULL) PuroExit();
else Kou=temp;

if(Jyouken[num] == TRUE)
Saiki(Num--);
}

最初にCountが0の状態になります。このあと強制的に1になります。
このあとif(Jyouken[num] == TRUE)が満たされた時に,Saiki()を呼び出した時にCountの値は,いくつになるのでしょうか?

940 :デフォルトの名無しさん:02/06/14 14:23
↓これはできるのに
int main( )
{
hoge *piyo;

piyo = ( hoge *)malloc( 10*sizeof( hoge ) );
piyo[ 8 ].a[ 1 ] = 81;
}

↓これでバスエラーになるのはなぜ?
int main( )
{
hoge *piyo;

func( piyo );
piyo[ 8 ].a[ 1 ] = 81;
}
int func( hoge *p )
{
p = ( hoge *)malloc( 10*sizeof( hoge ) );
}

941 :デフォルトの名無しさん:02/06/14 14:26
バスエラーじゃなくてAccess Violationじゃねーの?

942 :デフォルトの名無しさん:02/06/14 14:33
Cの関数呼び出しは全てcall by valueだから呼び出し元の変数をイジッテもらうにはアドレスを渡さないといけない

943 :940:02/06/14 14:34

Thanks
そっか。すっかり忘れてた。
鬱だ。

944 :デフォルトの名無しさん:02/06/14 14:37
func(&piyo);
void func(hoge **p){*p = (hoge*)malloc(sizeof(hoge[10]));}

945 :デフォルトの名無しさん:02/06/14 14:44
新スレ 立てますた

C言語なら、俺に聞け! <24>
http://pc.2ch.net/test/read.cgi/tech/1024033400/


946 :デフォルトの名無しさん:02/06/14 16:04
>>940
X68か何かでやってんの?

947 :デフォルトの名無しさん:02/06/14 17:39
>>940

int main( )
{
hoge *piyo;

func( &piyo );
piyo[ 8 ].a[ 1 ] = 81;
}
int func( hoge **p )
{
*p = ( hoge *)malloc( 10*sizeof( hoge ) );
}

じゃねーの?

948 :947:02/06/14 17:40
944で既に答えが出ている(汗

949 :仕様書無しさん:02/06/14 17:47
関数ポインタの型キャストにはどう書いたらいいの?

950 :949:02/06/14 17:49
(void (*hoge)(int))NULL==hogehoge
???


951 :デフォルトの名無しさん:02/06/14 17:53
>>949
void (*foo)(int) = (void (*)(int))NULL;

952 :949:02/06/14 17:55
サンクス!!

953 :デフォルトの名無しさん:02/06/14 21:41
asctimeが返す文字列の末尾に\nが含まれるのはなぜ?

954 :デフォルトの名無しさん:02/06/14 22:04
>953
(゚∀゚)そーゆー仕様だからだよ。イヤなら削れ。

955 :デフォルトの名無しさん:02/06/14 22:06
953
削って使ってるんですが、なぜそんな仕様なのかなーと。

956 :デフォルトの名無しさん:02/06/14 22:16
(゚∀゚)なんでだろうね。オレも知りたい。

957 :デフォルトの名無しさん:02/06/14 22:23
そのまま表示させることしか考えてなかった

958 :デフォルトの名無しさん:02/06/14 22:26
Winみたいに\r\nな環境だと(;´Д`)な気分。

959 :デフォルトの名無しさん:02/06/14 22:44
fputsは改行しないのにputsは改行するってのも、
作ったのがそこらの新人だったらはっ倒されそうな仕様だよな。

960 :デフォルトの名無しさん:02/06/15 00:11
>>959
それよりもgetsの仕様だろ(笑)

961 :デフォルトの名無しさん:02/06/15 00:32
gets は使われる事のない関数だし、使用から削除していいんじゃない

962 :訂正:02/06/15 00:34
>961 使用 → 規格

963 :デフォルトの名無しさん:02/06/15 00:48
>>961
そうもいかないのが、標準規格というもの…。

964 :デフォルトの名無しさん:02/06/15 00:51
正直、getsとregisterはC99でObsoluteにしてほしかった。

965 :デフォルトの名無しさん:02/06/15 01:36
obsoluteって何だよ。
obsolete

966 :デフォルトの名無しさん:02/06/15 01:57
>965
まぁまぁ。964はobsolescentなんだよ。

967 :デフォルトの名無しさん:02/06/16 01:46
Cの標準ライブラリ仕様よくわかんないというか糞なのがあるような気が

968 :デフォルトの名無しさん:02/06/18 01:49
おめーら、きちんと埋めろや!!
開けたら閉めるって、おかーちゃんに習ったろうが。


969 :デフォルトの名無しさん:02/06/18 02:22
埋めるとしばらく見れなくなるよ。

pcサーバは 600超えたら 500スレッドに圧縮実施中。。。
プログラム技術 live 526 wait 5

日に数スレしか立たないので圧縮まであと数週間持つ。

970 :デフォルトの名無しさん:02/06/19 02:08
tab区切りのデータからstrtokでポインタいただきたいのですが、
strtokの2番目の引数に何を指定したらいいのでしょうか?
\tでもtab生で打ちこんでもダメでした。
難解です…。

971 :970のおばか:02/06/19 02:13
すみません、違うところ間違ってました。
汚してすみませんでした…。

972 :デフォルトの名無しさん:02/06/23 13:37
1000まで書かないとなかなかDAT落ちしなくていいね。

973 :デフォルトの名無しさん:02/06/23 15:49
C言語なら、俺に聞け! <24>
http://pc.2ch.net/test/read.cgi/tech/1024033400/l50

974 :デフォルトの名無しさん:02/06/23 19:28
>>972
1000までいかなくても、近いうちにdat落ちすると思われ。

975 :デフォルトの名無しさん:02/06/23 20:59
980 まで書き込むと dat 落ち(サーバによるかも)。

>>969
から 5 日で 10 スレ立った。圧縮まで後一月は持ちそう。
http://pc.2ch.net/kakolog.html
pcサーバは 600超えたら 500スレッドに圧縮実施中。。。
板         live wait
プログラム技術 536 14

976 :3項演算子:02/06/25 15:32
次のif文を3項演算子を用いて表せ

if(a > b)
x = a;
else
x = b;

よそしくおねがいします。



977 :スコープ:02/06/25 15:33
変数のスコープってなんですか?


978 :デフォルトの名無しさん:02/06/25 15:36
http://images.google.com/images?q=%E5%A4%89%E6%95%B0%E3%81%AE%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97&ie=UTF-8&oe=UTF8&hl=ja

979 :デフォルトの名無しさん:02/06/25 15:38
x = ( a > b ) ? a : b

980 :デフォルトの名無しさん:02/06/25 15:41
x = IIf(a > b, a, b)

981 :スコープ:02/06/25 15:52
googleで検索したら
スコープ=ある変数を参照可能なソースコード中の範囲のこと。
ってかいてあったんですが変数のスコープの意味が分かりません。
誰か教えてください



982 :3項演算子:02/06/25 16:02
>979
ありがとうございました。


983 :デフォルトの名無しさん:02/06/25 16:23
>>981 変数(など)の有効範囲.簡単に言うと{}の中で宣言した変数は,
その中でだけ使えるというもの.

{
 { 
  int a;

  a++; /* aが使える */
 }
 a++; /* ここではaは使えないのでエラー */
}

これ以外に関数のスコープとかファイル単位のスコープとか,いろいろ
あるので調べてくれ.

984 ::02/06/25 16:54
この問題を教えてください
3×3行列Aに対し
1,Aを読み込みAの行列式を出力
2,Bを読み込みA×Bを出力
3,|A|≠0の時のA^-1を出力


985 :デフォルトの名無しさん:02/06/25 16:56
C言語なら、俺に聞け! <25>
http://pc.2ch.net/test/read.cgi/tech/1024918442/l50

986 :デフォルトの名無しさん:02/06/25 17:04
986

987 :デフォルトの名無しさん:02/06/25 17:07
987

988 :デフォルトの名無しさん:02/06/25 17:27
988

989 :デフォルトの名無しさん:02/06/25 17:29
989

990 :デフォルトの名無しさん:02/06/25 17:33
ドメイン名からIPアドレスを引き出すプログラムって、nslookup実行した結果を
ファイルに入れて参照するしかないですか??

991 :Disca ◆NAfP6znE :02/06/25 17:37
>>990
gethostbyname

992 :デフォルトの名無しさん:02/06/25 17:53
>>991
ありがとうございました!!

993 :デフォルトの名無しさん:02/06/25 17:54
スレ2お願いします。


994 :デフォルトの名無しさん:02/06/25 18:02
C言語なら、俺に聞け! <25>
http://pc.2ch.net/test/read.cgi/tech/1024918442/l50


995 :デフォルトの名無しさん:02/06/25 18:03


996 :デフォルトの名無しさん:02/06/25 18:27


997 :デフォルトの名無しさん:02/06/25 18:30
Σ(゚Д゚)

998 :デフォルトの名無しさん:02/06/25 18:30
Σc(゚Д゚c

999 :デフォルトの名無しさん:02/06/25 18:31
Σ(゚Д゚ )y-~~

1000 :デフォルトの名無しさん:02/06/25 18:31
( ´_ゝ`)1000get

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

213 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)