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

このエントリーをはてなブックマークに追加
1日下部陽一
漏れは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
4デフォルトの名無しさん:02/06/02 22:34

1コンピュータの操作法
2Cの文法の基礎知識
3簡単な各種アルゴリズム
4デバッグ手法(スナップショット、デバッガの使い方)
5さまざまなトラブルの対処法(文法ミス、アルゴリズムのミス、勘違い)
6大きなプログラムの作成法(モジュール化)
7アルゴリズムの最適化
8システム分析法
9データ構造論
10さまざまなトラブルの対処法(メモリの管理(ポインタ)、環境の違い、境界条件)
11オペレーティングシステムの違い(移植性)
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])
のような感じです
実行して計測すれば?
スタンダードだから無理
フリーのコンパイラ使えば?
>>8
スタンダードだから無理?
最適化が効かないからって事?
12デフォルトの名無しさん:02/06/02 22:49
実行して計測ってどうやるの?
>>12
わからなきゃストップウォッチでも持って測れ
14デフォルトの名無しさん:02/06/02 22:50
>>12
ストップウォッチ
15デフォルトの名無しさん:02/06/02 22:50
>>13
同じ0.4秒でした。
1614:02/06/02 22:51
>>13
俺とケコーン汁(・∀・)!!
>>15
じゃあ同じでいいじゃん。
18デフォルトの名無しさん:02/06/02 22:52
いぢわる。
1913:02/06/02 22:53
>>16
私めんくいなの
>>18
で?
2114:02/06/02 22:57
鬱だ...
マヂレス
そのプログラムを100万回ループした実行時間をストップウォッチで計って100万で割れ
23デフォルトの名無しさん:02/06/02 23:02
>>22
実行時間を計るプログラムってあるの?
まずそれから作れ
>>23
ストップウォッチ
>>23
system()で100万回呼び出して、その開始時間と終了時間をclock()で得ればいいだろ。
clockは禁句だったのに…
じゃあgettimeofday
>>27
あれって使っちゃいけない関数だったの?(汗
平気で使っていたんだけど(汗
>>29
clock教えたら面白くないから禁句なんだろ。
31デフォルトの名無しさん:02/06/02 23:15
>>30
そういういぢわるやめてまともにおしえてほすぃ・・・。
32デフォルトの名無しさん:02/06/02 23:19
最適化かけても消えてしまわないビジーループを作るには
ちょっとしたコツがいります。
volatile使うか#pragmaすればいいんでないの?
34デフォルトの名無しさん:02/06/02 23:21
>33
volatileが一番楽。pragmaは素人にはおししめできない
K&RのANSI対応版見たんだけど、
signedだと保証されてるのは整数型の中ではint型だけみたい。
>>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);
}
恐怖!

(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ループにはいる前、例えばその上とかに
書いた場合と違いはあるんですか?
>>38
思わせぶりしないで続きを書いてYO(´д`;
41ネパール弾:02/06/02 23:34
>>39
ない。なんつーか、コード上の表現として
「このループの先頭であーして欲しいこーして欲しい」
というのをすっげー強調したいときに使うやり方。

言葉の通じない外人といっしょのチームになったとき
コードだけで会話してたの・・・。
>>37
何がしたいのかさっぱり分からない。
43デフォルトの名無しさん:02/06/02 23:37
>>41
なるほど、
産休
>>39
ヒント カンマ演算子
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]);
4846:02/06/02 23:54
47
ケコーン。この場合は違うか・・・

45は39への絡みもあるのか。トリツキな感じだ。
4937: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
用途による。
#define 50 (´д`)
>>50
それ通らないでしょ?それともC++ですか?
>>50
書くとしたら typedef を struct の前につけれ。紛らわしくていかん。
#define _50 (´д`)
>>53
C++にそんな昨日はありません
そんな明日もありません
そんな今日も
もっこりますか?
#define >>50 (´д`)
>>60
通りませんよ。
このスレ何日で消費する?
63デフォルトの名無しさん:02/06/03 01:11
@ 一週間
A 3日
B 6日
C 日下部陽ちゃん♥
Cに√2票
せっかくだから、本日8:00までに使い切らないか?
66デフォルトの名無しさん:02/06/03 02:05
基本的な質問していい?

++i と i++ってどう違うんだっけ?
>>66
実行してみそ。

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

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

のそれぞれの j の値を見れば意味がわかる。
68デフォルトの名無しさん:02/06/03 02:17
>>67
0と1になったよ
なんでか全然わからん・・
>>68
その結果見てもわからんか・・・・
++iは、iを先にインクリメントしてからの値を返す。
i++は、iの値を先に評価してから返し、その後インクリメントする。
i++はインクリメントを行う前のiの値(左辺値になれない)を返す。
++iはインクリメント後のi(左辺値になれる)を返す。
>>69-70
副作用と式の値の区別がつかないといくら説明しても無駄。
>>70
いいこと聞いた。
++i = 0; とかできるんだね。あまり意味ないけど。
>>68
j=++i;
これは
i=i+1;
j=i;
と同じ。

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


厳密に言うと少し違うんだが。
>>72
できません。
7568:02/06/03 02:35
>>All
非常によくわかった。
さんきゅ〜
>>74
ん?BCC5.5.1だと通ったぞ。
>>76
ん?悪名高いVC++6.0Proだと通らなかったぞ。
>>76>>77
どっちが正しいんだ?
int main()
{
int i=44;
++i=0;
return 0;
}

cl test.c

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


VC++6.0Proでこう出た。
>>79
こちらでは、gcc3.1でコンパイルしてみたら通った。
LSI-C86試食版では「左辺値が必要」と出た。
処理系依存なのだろうか?
うちのBCCは通らない
>>81
変ですね。なぜ同じBCCなのに結果が違うのか。
ちなみにTurbo Debuggerで中身を見てみたら、ご丁寧にも
一度incrementしてから0を転送していたよ。
++ と = の優先順位の差異かと思ったけど
これって環境依存関係なく規定されてたよな?
あれか? 例によって未定義とかそーゆーの?
>>82 CPPファイルをコンパイルしていないだろうか。(CPPは通る)
そーゆーのだ。

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

できたとしたら、コンパイラのバグか、規格外の拡張機能だ。
86デフォルトの名無しさん:02/06/03 03:00
>>84
拡張子を.cppにして、C++のソースファイルとしてコンパイルしたらVC++6.0でも通った。
>>83
私にはわからないです。専門家の登場を待つとしますか。
Cは駄目、C++ならOKか。
>>84
その通りです。CPPをコンパイルしていました。
>>88
そうなんでしょうか?もう一度C++第3版を穴が開くほど
読み直してみるとします。
うぉ C++としてコンパイルすると確かに通る。
Cの場合は>>85のとおり、値に値を代入する形になるのでエラーになるが・・・
9168: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); って感じか?・・・ワカラン

適当にコンパイルしてみた結果なので理論とか定義とかは無視してます。
うそついてたらゴメンヨ
>>91
間違っていません。ただし、*bの意味は、pointer to array[k] なので、
(*b)[x]のように使う必要があります。*b[x]やb[x]と書くと、意味が違って
しまうので注意です。

bが1増えると、b[j][k]のjが1増えたのと同じ意味になります。
>>91
もちろん、b[j][k]のような書き方もOKです。このb[j]の部分が*bに
化けていると思っていただいて差し支えありません。
>>92
C++は演算子の多重定義機能があるので、Cとは演算子の解釈の
仕方が異なるのでしょうね。
9668:02/06/03 03:56
>>93
レスありがとう。
なんか凄く重要そうなこと言ってる気がするけど
よくわかりません。
a ではそのままポインタをさすのにbではなぜささないのでしょうか?
あと(*b)[x]とかの意味が全然わからないっす。。
9768: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] だよもん。

ここを乗り越えればポインタ博士へ一歩前進だ。がんがれ
9968:02/06/03 04:02
>>94
じっくり考えたらなんとなくわかってきました。

a[i]というのはaがポインタでa[0]のアドレスを指し、
例えばa[2]とかがa[0]の場所から2つめの場所にある値ってことですか?
10068:02/06/03 04:05
>>98
a[i]と宣言した場合
a==&a[0]ではないのですか?

すいません。今日からはじめてC言語を勉強し始めたので。
一日ずっとやってこのざまです。
>>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]へのポインタとなります。
>>100
そうですね。a == &a[0]です。&a != &a[0]です。
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をインクリメントしたり
デクリメントしたりできます。
10468:02/06/03 04:28
>>102
今いろいろためしていたら
&a != &a[0]
となったのですが、これはなぜでしょう??
例題が悪かったのでしょうか?
こうなる場合もあるということでしょうか?
10568:02/06/03 04:29
間違えました
&a == &a[0]
です
申し訳ない。間違いがありました。
sizeof b[k] -> sizeof(type[k])
sizeof c[j][k] -> sizeof(type[j][k])
10768:02/06/03 04:32
>>106
typeってなんですか?
ええと、&a == &a[0] となるのは、値が同じになるということですが、
Cの文法上から言えば、意味が違います。
aはaddress of array[0]で、a[0]はvalue of array[0]です。偶然に
値が同じになることがあるかもしれませんが、何の意味もありません。
例えば、aが0x1000で、a[0]に0x1000が入っていたら、&a = &a[0] と
なることでしょう。これが同じでも意味がないことはわかりますね?
>108
意味は違うが値はいっしょ
値がいっしょになるのは保証されてる
>>108
間違いでした。スマソ。&aと&a[0]の値はいつも同じになりますが、
&aはaddress of array[i]、&a[0]はaddress of typeとなり、意味が
違います。
typeとは、intとかdoubleとか、あるいはstructなどの型のことです。
>>108は、*aと*a[0]を比較してました。ごめんなさい。
112デフォルトの名無しさん:02/06/03 04:39
\ │ ハァ? .| ./ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/
___ ___ .\ | |/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
|ハァ?| |ハァ?| \.└――──―──/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
 ̄∩( ゚Д゚ ) 〃 ̄∩( ゚Д゚ )\ ヽ(゚Д゚ )ノ ./ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
ヾ. ) ヾ. ) \∧∧∧∧∧/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
| | | │ │ | .< 激 >.| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| /
(__)_) (__)_) < ハ し >.| (゚Д゚)ハァ? 最 中 .| ./
────────────< な ァ く >────────────────
|o ゝ○ノ| ::/^'ヽヽ:::::::< 予 ? > / ○ _ ○\ /
.ヽ( )_,,ノ |ゝ○_ノ o|:::::< 感 >( ││ )< / \ ア ?
^'' `‐' ヽ..,,_( )ノ ::l< !! > \ 丿 | / \
~~ ( / ̄ ̄ヽ -‐‐‐--l-∨∨∨∨∨. /  ̄ ̄ \ \____
,,,, | |||!|||i|||!| | ~^'‐..,,_/ /. ____.\( )
(:::::}| :| |ll ll !! !.| | ,,,, イ ~''/ Ю)__) \ /
. ~~ | :|!! || ll|| !!:| | {:::::) ::l ./ | ゚Д゚.| ハァ? . \ | |(゚Д゚) ハァ?
. | | ! | l ~~ l / ^^^^^ \. \ \⊂)
`ー--― 'ノ / \. ) ) |
\ │ ハァ? .| ./ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/
___ ___ .\ | |/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
|ハァ?| |ハァ?| \.└――──―──/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
 ̄∩( ゚Д゚ ) 〃 ̄∩( ゚Д゚ )\ ヽ(゚Д゚ )ノ ./ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
ヾ. ) ヾ. ) \∧∧∧∧∧/ /(゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?/ /
| | | │ │ | .< 激 >.| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| /
(__)_) (__)_) < ハ し >.| (゚Д゚)ハァ? 最 中 .| ./
────────────< な ァ く >────────────────
|o ゝ○ノ| ::/^'ヽヽ:::::::< 予 ? > / ○ _ ○\ /
.ヽ( )_,,ノ |ゝ○_ノ o|:::::< 感 >( ││ )< / \ ア ?
^'' `‐' ヽ..,,_( )ノ ::l< !! > \ 丿 | / \
~~ ( / ̄ ̄ヽ -‐‐‐--l-∨∨∨∨∨. /  ̄ ̄ \ \____
,,,, | |||!|||i|||!| | ~^'‐..,,_/ /. ____.\( )
(:::::}| :| |ll ll !! !.| | ,,,, イ ~''/ Ю)__) \ /
. ~~ | :|!! || ll|| !!:| | {:::::) ::l ./ | ゚Д゚.| ハァ? . \ | |(゚Д゚) ハァ?
. | | ! | l ~~ l / ^^^^^ \. \ \⊂)
`ー--― 'ノ / \. ) ) |
>>112
そう非難しないでくれよ。2chは間違えに気づいても、削除できない
んだから。
11568:02/06/03 04:41
>>108
確かにa[0]を参照するならそのとおりだと思います。

aがaddress of array[0]なら
&aはいったい何を示しているのでしょう?
プログラムでは&aもまたaddress of array[0]となったのですが。。
>>115
Cの文法上、この場合は、ただのaも&aも、同じ意味になります。
aが定数だからです。
11768:02/06/03 04:43
>>111
なるほど。
11868:02/06/03 04:45
>>116
なるほど、わかってきました。
ではb[i][j]の場合はどうなるのですか?

(*b)[x] ←この表記が理解できないです
>>118
配列演算子はすべて優先順位が等しいので、左から右に解釈されます。
つまり、b[i][j]は、(b[i])[j]と同じです。
b[0]と*bは等しいので、b[0][j] == (*b)[j]となります。
*b[j]と書いたら、*(b[j])となり、b[j][0]になってしまいます。
これは、*演算子が[]演算子より優先順位が低いためです。
12068:02/06/03 04:52
>>119
なるほど。非常に良く分かりました。
これを踏まえて今までのログをもう一度読んで見ます
>>120
途中間違いがあって非常にすみませんでした。もう少しよく考えて
書けばよかったのですが、チャット形式になると、どうしても間違い
が顔を覗かせます。
ちなみに、int **a; なんて形式もすぐに出てきますので、わからな
くなったらまた書き込みしてみて下さい。誰かが答えてくれるはず
です(他力本願)。
12268: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");
ということは出来ないのでしょうか?
文字列に変更すれば良いじゃん
>>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]
となるのはなぜなんだろう?
>>125

char buf[128];
sprintf(buf, "%d", rand() % X);
fopen(buf, "r");
>>128
b[0]はポインタ(b[0][0]のアドレス)。b[0][0]は値。
b[0] == &b[0][0]
132デフォルトの名無しさん:02/06/03 15:06
>>130
そうだけどさ

b==b[0] となってるから両辺の右側に
[0]をつけるとおかしくなるって変じゃない?
b が値を持つことが変だと思うんだけど
133125:02/06/03 15:08
ありがとうございました。
無事、解決しました。
134デフォルトの名無しさん:02/06/03 15:13
for文で ++i とする場合は
どんな用途で使われるのですか?
135デフォルトの名無しさん:02/06/03 15:21
printfのfって何の意味ですか??
ファイルとかフィールドとか?
>>135
format
137デフォルトの名無しさん:02/06/03 15:29
好きなMusicianは誰ですか?
加藤茶
>>132
あんたの頭がおかしいだけ。
型の勉強をした後>>131をみれ 
140デフォルトの名無しさん:02/06/03 16:03
>>139
>あんたの頭がおかしいだけ。

一言多いアフォだな
>>140
まぁ、値を持たない変数とか言ってる時点である程度の寝たレスは覚悟した方がいいと思われ。
142デフォルトの名無しさん:02/06/03 16:07
ある値を持つb 自体はどういう意味があるの?
>>131は理解できるけど
143デフォルトの名無しさん:02/06/03 16:10
>>141
int i;
printf("%d ",i);

するとなんか大きい数が表示されるけど
これはなんか意味あるの?
とりあえずはiを格納するメモリ領域が
決まって、iに値を入れる前はその領域に
以前に書かれたデータがそのまま表示されてるだけだと思うけど
>>143
そらそうだね。
>>143
それとあれとの関係は?
わからなかったっす。
146デフォルトの名無しさん:02/06/03 16:14
141==144==145

( ´,_ゝ`) プッ
>>146
オチがこれか。
ファイト!
>>147
オマエモナ
>>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のような配列を作りたいんですけど

 だれか 教えて
意味側下欄
>>150
mc = ma * mbでしょ。
>配列を作りたいんですけど
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[]とはどういうこととなのか教えていただきたいですわ。
>>154
char型へのポインタの配列a。
もう逝ってよし!
char *とintを引数に取りchar *を返す関数へのポインタを返す関数funcのプロトタイプを書け。(15点)
char* iya_n(char *cp, int *ip);
158157:02/06/03 21:29
Σ(゚Д゚;)しまった罠か
>>156
funcの引数は?
>>159
任意。
つーか俺もわからん。
>>156
char *(*func())(char *, int);
162160:02/06/03 21:37
char (*)(char *,int)
これを返す関数か・・・わからん
>>161
それだとfuncの引数がchar *とintにならない?
とすると、char *(*func(char *, int))(void);
こうなるんだろうか。
>>163
それだとfuncの引数がchar *, intになってしまうよ。
>>163
ならないよ。
typedef char* iya_n(char *cp, int *ip);
iya_n func( ... );
>>163はchar *型を返す関数へのポインタを返す、char *, intを引数に取る関数func。
iya_n *func( ... ); ダナ
169163:02/06/03 21:45
そうなのか・・・
じゃあfuncがintを引数に取るとすると、>>161はどんな感じになるの?
>>169
char *(*func(int))(char *, int);
>>169
char *(*func(int))(char *, int);
>>170-171
そこにfuncの引数リストが来るのかー!!
ありがとう。
配列を宣言する時
n=5;
a[n]としたいんですがどうすればいいでしょう??
defineはなしで。
nが変数なので
>>173
C99対応コンパイラでそのままコンパイルできる。
175デフォルトの名無しさん:02/06/03 21:59
>>173
できません。
C99ではできるらしいけど。
おお!ケコーン>>174-175
>>173
配列定義は整数定数式じゃなきゃ無理
1781: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 でファイナルロリータ
>>180
マジレス。C99未対応ならBです。
俺はロリコン
psは二次元配列とちゃいまっせ。
int float_to_int_cast(float n)
{
 const int bias = 1258291200;
 n += *(float*)&bias;
 return *(int*)&n - bias;
}

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

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

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

>>186
ダメダメ。アドレスをキャストしても、肝心の値のキャストがされていない。
>>179
何をするプログラムなの?
>>186
おいおい、なんでそんなtrick code使うんだね?
ってのはともかく。

biasの値の意味を正確に説明してみ? それができたら答えも分かるっしょ。
>>186
IEEEの定義を読まないと答えられない問題だわね。
191186:02/06/03 22:37
bias の値は ((23 + 127) << 23) らしいっす。
んでもって、何かの本に書いてある高速キャストのテクニックだとか。
192186:02/06/03 22:38
>>187
レスどもです。
アドレスをキャストして、int値を(int値のメモリイメージのまま)floatとして使うらしいです。
>>191
その23, 127, 23はどこからきているのか、だよ。
>>193
IEEE754の定義によると、floatは、

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

正規化バイアスは0x7f(127)である。
>>194
正規化バイアスは、指数部の正規化のためのものです。
196186:02/06/03 22:49
>>193
わかんないです。
分かれば自分で結論が出せるんでしょうが…
負数に対応していそうなんだけど、実際どうなんだろう?
って事です。

ソースコピペで自前のライブラリに組み込む時に、
unsignedに直すべきか否かで迷っていたりするので。
>>196
たとえunsignedにしても、nが負だったときにはやっぱりおかしくなるっしょ。意味ない。
>>196
先頭の1ビットを見て、0と1の時で処理を分けたら?
>>197
それでも、戻り値がunsignedだったら負数には対応してない
という主張が多少でも読みとれるんじゃないかと。

>>198
それじゃ高速変換の意味が無いと思います
そこまでするならFLD、FISTを使ったほうがいい
この場合、単なるキャストのほうがマシでない?
fld/fistpを使った方が微妙に遅かったけど、負数も正確にキャストでけた。
1000万回のキャストループで
>>186 85ms
fld&fistp 123ms
(int) 931ms
となった
>>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文などで、一個一個いれなければならないのかな..と思って質問した次第です。
>>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   :
↓□□□□‥□□
  □□□□‥□□
>>207
問題の要点がよくわかった。
そしたら、
double (*ps)[1]; として、
double (*ps)[1] = (double (*)[1])ps_dammy; とすれば、
ps[0][0]〜ps[29][0]まで使える。
>>207
ただし、ps[i][1]〜ps[i][29]までは使えない。
もしワークエリアとして上の変数を使いたいなら、やはりループで
代入するしかない。
210こまった君:02/06/04 01:07
>>208
ありがとうございます。
..二行目がよくわかりませんが、
代入の仕方をキャストして代入してるってとこでしょうか.
この方法について、まずは調べて見ます。
ありがとうございました。これでやってみます!

>>209の意味は、ようするに、
こんどはps[0][〜]のほうがいっきに代入したりできなくなる。
諸刃の・・ってことで合ってますよね?
つまり、ps[0][〜]のほうに入れたければ、ループで入れろと。
ま、こちらのほうは、5列くらいしかないものですので、ループで回すなりなんなりします。
>>210
>>208は、違う表現のポインタに変換するためにキャストは必須です。
ないと、エラーが出ます。

>>209については、その認識であってます。無理矢理列が1の二次元
配列として認識させているためにこのようなことが起こります。
>>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;
}
このようなことをすると、アドレスがかぶって上書きみたいになる(ようするにできない)ってことかな??
>>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 セジウィック著の完全日本語略はないですか??
>>216
第1巻〜3巻まで持ってるよ。
近代科学社刊。
今ではAlgorithm in C++の方しか書店で見かけなくなったけど、
注文すれば手に入るはず。
>>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
ありがとうございます。探してみます。
a<i<b
の条件を論理的に表したらどうなるのでしょう??
221220:02/06/04 06:32
間違えました
(a<i<b)の範囲ではないi 
はどのように表現すればいいのでしょう?
a<=i || i>=b
223220:02/06/04 07:31
>>222
ありがとうございます
(i<=a)||(b<=i)
225220:02/06/04 07:34
>>224
ありがとうございました。。

って222は俺がやってたミスと同じだ。
>>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しかできません。
MFCとかWin32APIの前にもう少しCを勉強汁。
>>227
3年で1週間レベルだから、100年ぐらいは頑張ってね。
>>229
HelloWorldなら1時間レベルでは
>>230
環境を整えたり、Cの概要を調べるだけで1時間以上かかると思われ。
じゃぁ中とって1日レベル。
3年で1日レベルか・・・・憐れだ。
233デフォルトの名無しさん:02/06/04 12:34
227は今までgccとか使ってて、
Windows上だとHello Worldしかだせないと言ってるのでは?
だろうな
>>227
>WINDOWSでVC++を使っているのですがMFCやWIN32APIは理解したほうがよいのですか
理解しないと何もできません。
プログラムってやりたいことない人は上達するのですか?
教科書とか参考書って見ていてあまり面白くないですし…
>>236
コンピューターを自分の思うがままに操ることに快感を覚える
人は、プログラムの上達が人一倍早いです。
興味が沸かないなら、他の興味がある事を探した方が得策で
しょう。
>>237
ほかにない場合は…
ぜんぜん伸びないなぁ、と思う今日この頃。
本に頼るからだめなのでしょうか?
言語と全然関係ないじゃん。
本は頼るものじゃなくて利用するもの、と言ってみたり。

プログラム書いてて面白いと思えてればそのうち伸びるでしょ、思えていないなら早めにやめたほうがいいし。
参考書なんてどれもつまらないもの。
さっさと卒業して他のものに手だそう。
キタ━━━━(゚∀゚)━━━━!!と思える本に出会おう。
>>239
キタ━━━━(゚∀゚)━━━━!!
と思える本とは何ですか。
お勧め本見てもぱっとしない
Cマガ、Interface、or 洋書
>>240
スレ違いだけどModern C++ Designとか
C言語(結局VC++)使っているとしてPGから見るOSというのはAPIですよね。
WinならWin32API(MFCやATLはひとまず置いておいて)ですよね。
WinでのProgramを理解するならWin32を理解しろということですよね。
それを使ってC言語の予約語を使ってWindowsでプログラムするのがWindowsプログラムだと。

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


当たり前すぎて馬鹿らしいでしょうが、
これであってますよね。
もう15年前だが、俺も文法なんて1週間かからずに覚えたな。
勉強したって感じより、ゲーム感覚でのめり込んで遊んでるうちに
覚えてしまったって感じ。本なんてなんでもよかったよ。
でも、K&Rだけは読んでもわけわからんかったが(笑)。
245デフォルトの名無しさん:02/06/04 16:45
getchar()などで入力を待っている状態に
difftime( now,start )などで待ち時間を表示したいのですが
どうすればいいのでしょうか?
selectするとか、thread使うとか。
>>241
洋書なら何でも良いのか?
Cマガと書いてるあたりネタとしか思えないが
248デフォルトの名無しさん:02/06/04 17:06
float型の配列を0クリアするのにmemset()を使ってよいですか?
他に初期化するのに使える関数はありますか?
>>248
良い
250245:02/06/04 17:16
>>246

select case()を使えってことでしょうか?
後、threadとは何でしょうか?
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
この関数は GNU の拡張である。
っていう文字が見えませんでしたか?
255デフォルトの名無しさん:02/06/04 19:58
>>254
それってどういう意味ですか?
>>255
その関数がGNUの拡張だってこと
ワラタ
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);
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
ただのCなんぞK&R1冊あれば十分。
C++なら色々買え。
262shige:02/06/04 21:15
CはK&RとエキスパートCプログラミングで十分。
それ以外は不要。
263260:02/06/04 21:19
>>261-262
ってことはなくてもいいってことですね。
264shige:02/06/04 21:25
info/man
調べものはこれで十分
ふっふっふ
266デフォルトの名無しさん:02/06/04 23:23
C/C++を独習し始めて何ヶ月くらいでVectorにフリーソフトを出せるくらいに
なりますか?ソフトにもよると思いますがいちばん簡単なもので。
1日。Hello Worldプログラム(ソース付属)
>>266
何でそんなこと訊くの?
packがほしいとか。
ってか、今もpackあるの?
pack最近(というかここ数年)届かねーぞゴルァ。
もう作ってないんだろうけど。
Vectorなんて自分で登録するんだからソフトの出来なんて関係ないよ
vectorに登録されるソフトって増える一方なんだろうか。
>>271
え、あれって自分で登録するもんだったの?
漏れんとこは登録させてくれって向こうから来たよ。
もうかなり昔だけど。
まだ登録ソフト数が少なくて数を増やしたかったんだろ
275デフォルトの名無しさん:02/06/05 13:40
makefileで教えてください。
プログラム中の#defineを、代わりにmakefile中に記述できますか?
>>275
コンパイラオプション熟読。
>>275 多分-D。
>>276 も言ってるように、makefileじゃなくコンパイラの問題だと思うがどうか。
278デフォルトの名無しさん:02/06/05 13:57
>>276
>>277
べりーさんくす。-Dでできました。感謝age
279デフォルトの名無しさん:02/06/05 15:16
Sun のCコンパイラなんですけど「機能」などの文字列定数がコンパイル時に
警告: 不適切なエスケープ: \<0xba>
を出します。
どうしたものでしょう?
>>279
0xba->ASCIIじゃないっす。
>>279
>\<0xba>
漢字コードじゃないの?
282素人ですみません:02/06/05 15:22
C言語をこれから学びたいと考えてますが、何分お金がないのでタダで学ぼうと
図書館に行ったんですが、どの本に付属しているCDROMがいいのかっていうのが
判りません。

cygwinを使えって言われたんですが、これはどこで手に入るんですか、また
これと本を借りれば学べるんですかね?
>>279
[ュ],5cba,FAAD,3F

>>282
検索してからでも良いんじゃない?せっかくのインターネット。
>>282
マルチしまくりですね。
286>285:02/06/05 15:26
いや、すみません。
早く知りたいもので。

以後気をつけます。
早く知りたきゃさっさと検索すれ。
288279:02/06/05 15:35
ヽ(`Д´)ノウワァァァン!!
どうすればいいのー?
printf("機能:%s", ss);

とかやってますか?
>>288
ソースをshift jisで書いてるんじゃないの?
EUCとかで書けってことかと。
291279:02/06/05 15:40
やってます。
292279:02/06/05 15:40
マシンはShiftJISみたいなんです。あまりUNIX詳しくないんです。
0x5cがエスケープシーケンスとして見なされてるんじゃないの?
"機能"→"機能\"にしてみれ
printf("%s%s", "機能:", ss);

なんつって。
コンパイラがsjisのエスケープをしてなくて平気な環境ってことは
sjisでは書くなという意思表示だと思うが。
それに「マシンがsjis」って何だよ(笑)文字コードはマシンには依存しないし。
エディタ次第でしょ。
296279:02/06/05 15:52
>>293
Pro*Cかますんでそれだとまずいみたいなんです。

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

>>295
んだば、秀丸で書いてFFFTPでEUCに変換してアップしてコンパイルすれば
いけるのかなー
やってみよう
>>295
>それに「マシンがsjis」って何だよ(笑)文字コードはマシンには依存しないし。

PC98x1
>>297
PC98x1のVRAMはJISで、SJISではないよな。
299デフォルトの名無しさん:02/06/05 16:14
ストリームの概念がいまいち掴めません、教えて
279
コンパイラだますだけなら。
printf( "\x8B\x40\x94\x5c %s", s );
printf( "\x8B\x40能 %s", s );
>>299
ファイル開いて。
>>299
よんで
>>299
とじる。
staticな関数のプロトタイプをヘッダーファイルに書いているやつがいるんですが。
許してあげなさい。
生成されるバイナリが膨れるだけで実害はないから
306279:02/06/05 17:14
うーん。こまった。
サイズは河原んだろ。意味ないだけで。
>>307
その代わり、同名で引数が違うstatic関数を別ファイルで定義できなく
なる。百害あって一利なし。
>>279
適当なところに\を挿入
>>308
それが目的とか。メリットが想像もつかんけど(笑)
>>306
まだ困ってるの?
EUCに変換やってみようってのはどうなった?
312279:02/06/05 18:21
EUCに変換したら表示される文字が化け化けになりました。
しかたないので機能という文字はすべて消しました。めでたしめでたしです。
"機能\"でもだめなのか
>>313
>>296
うーん。
"機能\\"はどうか。
315デフォルトの名無しさん:02/06/05 18:36
printf("unkounko")でコンソールにunkounkoと出力されますが、
コンソールじゃなくてファイルにunkounkoと出力する関数ってありますか?
fprintf();
>>316
速レスサンクスです。
調べてみます。
318名無し募集中。。。:02/06/05 18:42
printf("うんこうんこ");
main()
{
 freopen("test.txt", "w", stdout);
 printf("unkounko");
}
320デフォルトの名無しさん:02/06/05 18:59
Void氏ね
>>312
SJISに設定したtelnetで化けたとかか。
sscanf(str,"%[^,],%[^,]",buf01, buf02);
で、文字列strをカンマ区切りでbuf01/buf02に読み込めると
どこかのスレで読んだのですが、
%[^,]の部分て、どのような規約によって決まっているのでしょうか?
MSDN(VC++6付属)で「書式指定」で探してみたんですが
いま一歩理解できなかったです。

何をキーワードにして検索すればよいでしょうか?
それとも、自分みたいなアフォにもわかりやすく
説明しているようなページはありますでしょうか?
>>323
ここなんか明快でよくないか?
http://homepage1.nifty.com/hujitako/yapt/SmartScanf2.htm
325The 中村:02/06/06 11:39
C言語で
ファイルの削除の仕方を教えてください
シェルでchmod→rmを行いsystemでそのシェルを呼び出す方法をしてますが
これ以外で関数一発でファイル削除が出来るようなのってないでしょうか?
サーチしても見つからず困ってます
どうかご教授お願いします
remove
unlink
327The 中村:02/06/06 11:53
326さん
どうもありがとうございました
削除にchmodはイランだろ。それともディレクトリに対してchmodしてんのか。
329デフォルトの名無しさん:02/06/07 04:19
コンソールから入力した10進数値の各桁の値を
配列に格納するにはどうしたらよいでしょうか?
文字列から数値変換するのはなしです。

-'0'
>>330
よくわかんないです(´д`;)
>>329
int i;
char str[20];
scanf("%d", &i);
sprintf(str, "%d", i);
>>329

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

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

捕捉。「数字」と「数値」の違いを調べてみて下さい。
3351 :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]の配列へ・・・
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 の動作は未定義です。

こう書いてるけど実際、どうやるのかがわからない。
int p[20][30];
int w[20][30];

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

(キャストはいらないかもしれない。)
>>339
memcpyなら知ってます。
342デフォルトの名無しさん:02/06/07 13:23
C言語でこの意味がわかりません、教えてください

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
Cの2次元配列って隙間なくびっちりだっけ?
>340
憶測でものを言うな!
345344:02/06/07 13:25
>343
多分。
>341 ヴォイドレス イラネ
>>342
おまじないです。
>>343
もし隙間があったとしても、このばあい問題ないんじゃねーの?
>>343
配列の要素のアドレスを調べて確認しる。
350343: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は一回もでない

誰か教えてください!
>>351が何を言ってるのかわかりません。

誰か教えてください!
>>351 教えて欲しいのはこっちだ。
354351:02/06/07 13:34
このプログラムを作らなくてはいけません
            ρ(´-`ρ)
      ★ゆんゆん★
(σ´ー`)σ
>>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"
);
>>356
そういうの飽きた
358351:02/06/07 13:37
>>356
プログラム中にlittle、indianは一回
>>351
プログラミングを勉強する前に日本語を勉強してください。
>>358
何をするプログラムなの。
361351:02/06/07 13:42
>>359
波平
362351:02/06/07 13:43
歌詞を表示するプログラムです
宿題なら宿題スレに。
しかし >>359 に同意
364351:02/06/07 13:49
早く教えて
365デフォルトの名無しさん:02/06/07 13:52
失せろ。
366351:02/06/07 13:58
>>363
宿題スレに書きました
367デフォルトの名無しさん:02/06/07 14:28
memcpy教えてくれてありがとう!!
cpyって何の略? capacity?
>>368
copy.......
wavファイルを読み込んで音量を調節したものを出力するソフトを作っています
波形データを配列に格納するところまでは成功したので,とりあえず音量を半分にしてみようと思って
for(DWORD i = 0; i < nSamples; i++)
{
lChannel[i] /= 2;
rChannel[i] /= 2;
}
とやってみたのですが,どうにも上手くいきません.出力された波形を見ると,
真ん中で二つにパックリ割れてしまっているような感じになっています.
正しい処理の方法を教えてください
波形処理とか全然詳しくないが、音量を半分にするのは
単に値を1/2すればいいってもんじゃなかったぞ、確か。
詳しいことは↓で聞いてみるとよいかも。

サウンドプログラミング
http://pc.2ch.net/test/read.cgi/tech/996171508/l50
最強の言語はやっぱCですか
373デフォルトの名無しさん:02/06/08 00:59
>>372
いや、オヤジギャグでしょう。
どんなにまじめな気分のときでも、どんなにやる気がみなぎっているときも、
一瞬にして皆を脱力させてしまう。
暴漢に襲われそうになったときは、まずオヤジギャグで相手の攻撃意欲を
打ち砕き、脱力しているすきに逃げ去る。
戦わずして勝つ方法。「孫子の兵法」にもこの手は載っていない。
最強の言語。
>>370
DBからAMPに変換した後1/2にして、その後またDBに変換
370
無圧縮PCM formatのデータはDWORD(unsigned long)はかったと思う。
たしか8bit符号なしか16bit符号つきのどちらかだったと思う。
376デフォルトの名無しさん:02/06/08 01:10
ウィンドウに線を表示するにはどうしたらいいでしょうか
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
ついでにヘッダーも教えてください
#include <windows>
>>376
> ウィンドウに線を表示するにはどうしたらいいでしょうか
OSくらい示せよ・・・それ以前にスレ違いだが。
383323:02/06/08 07:24
>>324
おそレスすまんです。
かなり参考になりそうな気がしますです。
少なくとも、ただの文法書よりは100倍読む気になります。
1回読んでもわからないと思うので、がむばつてみます。
windowsプログラムですが(スレ違いかな?)、
const char型の戻り値を返す関数の戻り値を配列に格納したいのですが
うまくいきません。配列中身が全て同じになってしまいます。
>>384
コード晒せ
いまさらだけど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++
}
388384:02/06/08 21:26
const char *str[128];

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

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

str = xxx();

ならポインタ変数strに文字列の先頭アドレスが入るとは思うが。
>>388
str[i] = xxx();
は、xxx()が既存のどこか別の場所に文字列を書き込み、その先頭アドレスを返すわけだな。
実行するごとに変わるのはその文字列の内容であって、アドレスは変わらない。

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

アドレスじゃなく内容をコピーしる!
>>388
単にxxxが同じバッファ再利用してるだけじゃねぇの?
適当なこと書くんじゃねーYO!
394384:02/06/08 21:47
確かに>>388さんがおっしゃるように、内容を参照すると
最後に実行結果の文字列しか表示されません。
アドレスじゃなくて内容をコピーするのはどうすれば良いでしょう?
395384:02/06/08 21:48
間違えました、>>391さんですね。
>>394
それくらい自分で(以下略
>387
君はまずデータ型と実データの関係をもっと勉強するべき。
「double data[100]」と宣言してるのに、
実データのイメージを「data[0] = 230 231 229」と書いている時点でかなりヤバイよ。
>>394
memcpy使え。
その前にxxxが返す文字列分のメモリをstr[i]に割り当てる必要はあるが
>>398
文字列なら strdup() かね。非標準だが、大抵の処理系にはあるし、なければ
簡単に自作できる。
400384:02/06/08 23:30
>>399
strdup()でうまくいきました。ありがとうございますー。
文字列のコピーを考えたとき、strcpyとlstrcpyが頭に浮かんできたので
試してみたけどダメでした。コピーと言っても方法がいろいろあるのでしょうか。
良ければstrdup関数の自作方法を教えていただきたいのですが。
>>400
メモリ管理(malloc, free)について勉強しましょう。
402384:02/06/08 23:49
>>401
了解しました。もう少しCの勉強をしておきます。
>>370
そんな感じのやり方で良いと思うが…。
処理後の波形でplayすると歪んだ音になるのか?
>真ん中で二つにパックリ割れてしまっているような感じ
どうゆう波形なのか今いち想像つかん(w
404_:02/06/09 01:22
ファイルのサイズを、取得する方法をおしえて。
>>404
二種類ある。
1. ディレクトリ検索結果から得る方法。
2. ファイルを開き、末尾にseekして現在位置を得る方法。
あとは自分で調べて。
WindowsならGetFileAttributesExがいい
>>370
音量を半分にするなら
信号の振幅をdbmで半分にしないと
変わり種で、_stat
>403
unsignedとsignedを間違えて扱ったんじゃないか?
>>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;
}
>>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」というのは
何ですか?
>>412
0xがわからないのに、ffは何か知ってるの?
何故本を読まないのですか|o|
415デフォルトの名無しさん:02/06/09 08:50
>>413
アングラかぶれだからです。

>>414
2ちゃんねらーだからです。
>>412
Cの仕様でしょう。
変数名と区別するために、先頭に0をつけ次のxで(以下略
417デフォルトの名無しさん:02/06/09 10:30
まだC++でもかんぜんにCを凌駕出来ないといわれますが
C言語に出来てC++に出来ないことは何ですか?
はぢめて聞いた・・・まぢで?
419417:02/06/09 11:09
C++はまだ完全にCを超えてないといいませんか?
確かそう聞いた。
2chでも見たような気がする。
それで何が違うのだろうと思ったのです。
>>419
> C++はまだ完全にCを超えてないといいませんか?
はつみみです。
>>419
使える人の数とかじゃないの?
422デフォルトの名無しさん:02/06/09 12:56
配列を値で返すことはできるでしょうか。
できたら、どうすればいいか教えて下さい。お願いします。
423御茶目菜子:02/06/09 13:04
バカか
いまごろCかよ。ふるいんだよ。おまえら死ね。
いまどきの言語はよ〜
ポケコンBASICだぜ!!
424デフォルトの名無しさん:02/06/09 13:05
>配列を値で返す
どういう意味?
>>422
配列自体はできないが、構造体は返せる。
これを利用して、構造体の中に配列を入れて返せばいいんでない?
426デフォルトの名無しさん:02/06/09 13:59
配列の先頭へのポインタを返すんじゃないの?
>>426
値を返すこと、といってるし
> C言語に出来てC++に出来ないことは何ですか?

void*から他のポインタ型への暗黙のキャスト
プロトタイプ宣言なしの未知関数呼び出し
>>411

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

o  i < 100 && fgets(char[i], 256, data) != NULL
逆にC++にできてCに出来ないことの1つに
ブロック中のどこでも変数が宣言できるってのがあるけど、
これってプログラムが見にくくならない?

俺はC++でも新しい変数使うときはブロックにしてるけど
>>431
当たり前。どうしても仕方ない時だけに使う。
あと演算子関数以外でリファレンスを使いまくって読みづらくするのはDQN
constじゃない&ね
434 :02/06/09 15:28
構造体で,
typedef struct{
 int a;
 int b[30][30];//ここ
}c;

というふうにしてはいけないんですか?
>>434
いけなくないよ。
誰かがいけないなんていったのなら、そいつに問いただせ。
>>434
いけないんですか?
437434:02/06/09 15:39
前々スレでいわれました
気になったんで聞きました
>>434
ここで聞かなくてもコンパイラが教えてくれると思うが・・・
439monosiri:02/06/09 15:41
コンパイラは,だめでもそのままってことあるっしょ
じゃなきゃおちないじゃん
>>439
シンタックスエラーで落ちるってのは初耳
442デフォルトの名無しさん:02/06/09 15:54
>>439 「コンパイルは通っても・・・」って意味か?
>>434の質問(あのような構造体を定義していいかどうか)とは関係ないと思うが。

>>441
>>442 ?
猫でも分かるプログラミングという有名ページがありますが
あそこには長初心者用と書いてあります。
あれが理解できても初心者ですか?
Windowsプログラミングに関してはかなりのものになると思うのですが
実際はまだまだなのでしょうか…
確かにあそこだけでは自分でオリジナルなものを作るのには
厳しいと思いますけどWindowsの仕組みを理解するには十分すぎる気もします。
>>432
程度問題だが、俺の判断基準だと

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

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

ぐらいかな。もっとも C++ だとループも algorithm 使うことが多いけど。
(これ以上は C++ スレで聞いた方が良いと思うぞ)
>>444
初心者という言葉は知識をまったく規定しない。本人の意識の問題。
あのページを便利なリファレンス(あるいはコピペ元)として使ってる奴は
たくさんいると思われ。
>>444
Win32 スレで聞け。
>>443

>>439 = シンタックスエラーとバグを混同
>>440 = 突っ込み
>>441 = 実は439はネタでした(藁
>>442 = そうでも言わないとやってられないね(憐
>>449
ああ、何でDelphiのスレ指してるのかと思った。そういうことね。
451444: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

アドバイスお願いします。
>>452
-lm
UNIX関係だね。

#include <math.h>で解決するのはコンパイル。
そのエラーはリンクエラーね。
gcc(cc)の引数に -lm を付けろってこと。-lはライブラリ指定で、mがmath用の名前。
455452: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;
}
457456:02/06/09 19:48
456のプログラムで1〜4までの順列を辞書順に列挙できると思うんですが、これを改良して
たとえば4個から2個を選んでその順列を辞書順に列挙するようにはできないでしょうか・・・
>>432
何でリファレンス使ったら読みづらくなんのよ?
>>458
奴がDQNだから。
>>458
使ったらじゃ無くて使いまくってだろ






                DQN的質問、定期的に出るよなぁ。
>>461
それが普通だと思われ。
463ERROR:スレッド立てすぎです。。。:02/06/09 22:56
みんなで力をあわせて、軽くてオープンソースなprintfを作りませんか?
スタック消費量は とりあえずの目標値として100バイト以下って感じで。

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

464C言語永久不明:02/06/09 23:00
学生時代から現在にかけてC言語はいまだに分からん。全く理解できていない。
初心者と思ってくれて良い。この永久不明君に教えてくれ1よ。
社内でも、外注先でも、C言語が分かる人=Cマガ読者なんだよね。
そんないい加減な言語に対処するため、ANSI C言語辞典をかたわらに
今日も独学で頑張る俺。さて、俺がにらんだからには
一人で沢山カキコします。お付き合いください。
>>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;
}
>465
ソースの汚さは別にして、オレはあんたを尊敬する。
確かに汚いソース(笑)
468465: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;
}
>>463
作るのはおもしろい、というか俺も昔作ったけど、当時は狭苦しいDOSとか用だったしなあ。
今はそういう要求は思いつかん。なんでスタック消費にこだわるの? それによるメリットは何?
組み込み系で使うのかな?
470C言語永久不明:02/06/09 23:41
C言語は動作が仕様で決まってないなど、不明点が多いこと、
入門書しかない点だ。腹立つことが多いね。
例えば、>>452の質問だ。これあきらかに452の指導者がバカなわけでしょ。
452はどうせ高校か大学の情報処理の授業の宿題程度だろ。教官がバカだね。

あきらかにコンパイル、リンク、ヘッダファイル、ライブラリ、アーカイブ、
そういった基本的なことを理解してないことが集約されている質問。
ansi cとして提供(実装)されている関数の基本的な利用方法を教えていない。
cc,ar,nm(あるか?)とかの使いかたも当然、教えていないと思う。
*.o,*.so,*.aの違いを知らんと。
分割コンパイルをやったことも無いだろうし、makefileも作ったことないと思う。
推論規則、拡張子ルール、依存関係そんなものも分かっていないはず。
当然構文解析や、字句解析、コンパイラがどう実装されているかも知らんわな。
最適化だのインライナーだのアセンブラだの、処理系で違うだろうが、ccのオプション
でいろいろできることもしらんわな。
471C言語永久不明:02/06/09 23:49
>>431,432も何いってんの。
変数使用する直前に変数宣言できるからいいんでしょ。
それで公共システム何個も動かしてて問題起きないよ。
C言語でやるときはしょうがないから、{}でブロック作るんでしょ。
>>461
それは誰に対して?
>>470
あなたは釣り師デスカ?
>>471
変数宣言がまとまってるのが嫌い?
>>474
カウンターなどの変数なら、関数の先頭で宣言を強制してもよいと
思うが、クラス変数や反復子までもが先頭での宣言を強要されると
ウザイよ。というか困るよ。

C++でのクラス変数の宣言は、文と同じくらいの意味を持っているか
らね。
470が超弩級のアフォだということはわかった
(´_ゝ`)ふーん
>>471
そうだね。
そして使わなくなった直後にスコープ外に出すことは出来ない(藁
これをするには結局{}で囲まなきゃ
479465:02/06/10 00:17
>>475
「リソースの獲得は初期化」イディオムだな。
この場合、クラスのコンストラクト時にリソースの獲得を行うのが普通、と。
479
消し忘れ
481デフォルトの名無しさん:02/06/10 01:03
>>470
> 例えば、>>452の質問だ。これあきらかに452の指導者がバカなわけでしょ。

独学だろ。
質問です。
関数で複数の返り値を返したい時はどうすればいいのでしょうか?
>>482
1)同じ型の値なら配列を返すことはできる。
2)異なる型のセットなら構造体で返すことができる。
3)自由に構成が変わるタプルの構成なら文法レベルでは無理。ライブラリを作って擬似的に対処する。
>482
4)とりあえずグローバル変数経由で返すのはやめとけ。
>>482
>>483の3)に相当するのなら、unionで定義しておき、void *を返して
戻り先でキャスト汁!
5)返すわけではないが返してほしい値をセットするための変数を引数として渡す。一般的にはこれかな。scanf等がいい例。
>>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;
}
>>484
errnoならいいよね?
489486:02/06/10 02:57
> 変数を引数として

変数のアドレスを引数として
と言うべきだったな。
490482:02/06/10 03:05
レスありがとうございます。
構造体はまだ使った事が無く分からないので
487さんの方法を試してみます
491デフォルトの名無しさん:02/06/10 09:48
質問なのですが。。
構造体を関数に渡す場合、値で渡しちゃってもプログラムに悪影響は無いのでしょうか?
>>491
無いです。
でも、サイズが32ビット以上(ポインタのサイズ以上)の物を渡す場合は参照渡しよりメモリを食って処理時間も増えます。
493491:02/06/10 10:01
そうですか、ありがとうございます。
あと一つ
前に
#define LENGTH 255
char str[LENGTH];
str[LENGTH-1] = NULL;
こんな感じのコードを見ました
間違った書き方ですよね?
>>493
エラーは出ないね。NULLが整数型なら(最近は全部(void *)か)。
どっちにしろその配列を何に使うかは激しく謎だけど。
>>493
間違ってはいないけど、NULLは'\0'にすべきだな(笑)
>>494
char str[LENGTH];とstr[LENGTH-1] = NULL;の間の処理は>>493が省略したんだろ。
>>496
もしかしたら、

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

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

まぁ、変だけど。

でも、文字列操作失敗しても確保したメモリ以上の参照が行われにくくなるという点では評価できないこともない。
498463:02/06/10 10:27
>468
すぅばらしい。ムスカ君、キミは英雄だ!

というわけでこれから検証してみます。
497は何か勘違いをしている
500デフォルトの名無しさん:02/06/10 11:59
NULL == '\0' == 0
>>500
(゚Д゚)ハァ??
int* p = '\0';
VC++でコンパイル通った・・・(゜д゜;)
C++では'\0'はchar型のはずなのに・・・
最小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);
}
>>503
charはintに暗黙変換するので通る。
>>505
じゃなくて 値0 は pointerとも暗黙変換するので、だった。見間違いすまん
507504:02/06/10 12:23
504です。
すみません。
なんか括弧 { の位置が
めちゃくちゃになって、
見にくくなっちゃいました。。
>>505
int *p = (char)0; // 通らない
>>504
×if (x = 0 && y = 0)
○if (x == 0 && y == 0)
510504:02/06/10 12:30
509さん。
ありがとうございます。
全く、基本的なとこで間違ってました。
はずかしっ。。。
>>508
Cでは通るがC++では通らない
復活
513デフォルトの名無しさん:02/06/10 15:48
dj?
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)を使ってソートする内容を変えたいのですが.
>>514
不可能です
if(i=1)...のあたり
ソート関数の引数に「構造体を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);
・・・
などと呼び出す。

517516:02/06/10 19:59
>struct *n
strcut Hoge *n
だった。
518516:02/06/10 20:00
>strcut
structね・・・欝。
>>516-518
何を焦ってるんだい?
520516:02/06/10 20:04
>>514
あ、「構造体の配列をソート」じゃないのね。
私の書き込みは忘れてください・・・。
>>514
なんか激しく不自然なデータ構造のような。
とりあえずKouの定義と、どういう風にデータを入れるつもりなのかを説明してみ。

おそらく結局は>>516-518のようなことをやりたいんじゃないかと思うが。
522初心者家労:02/06/10 20:27
Cでアドレス帳が作れますか?
>>522
出来ます。
524初心者家労:02/06/10 20:29
やはり構造体を使ったほうが便利ですかな?
>>524
そらね。
526初心者家労:02/06/10 20:33
ソート機能を作りたいのですが、2次元配列で比較することはできるかな
配列をなら #t
配列でなら #f
528初心者家労:02/06/10 20:42
漢字はソートしてくれますかな
529初心者家労:02/06/10 20:43
やっぱり#include <stdio.h>っていうのが何を意味しているのか
ちゃんと知っておいたほうがいいのかな?
530初心者家労:02/06/10 20:44
ライブラリ関数を定義してるもの?
>>529
しっとくべき。

>>530
ライブラリ関数の名前と引数と返値の型を定義してるもの。
ライブラリ関数を宣言してるもの。
533初心者家労:02/06/10 20:48
文字列は文字列のまま比較しちゃっていいの?
   /⌒ヽ 
  / ´_ゝ`)   2ちゃんねるで聞いて損した。
  |    /    かえろ!
  | /| |   
  // | |  
 U  .U
>>533
== で比較しては行けない。strcmp() 使え。
536初心者家労:02/06/10 20:57
ファイル処理関数は何を使えばいいですか?
C言語の入門書をなんか読んでくれ(´д`;) > 初心者家労
538初心者家労:02/06/10 20:58
5/2を計算しても2.5にならないのはなんで?C言語壊れてるのかな?
>>538
浮動小数点数についてお勉強。
>>538
5.0/2
541初心者家労:02/06/10 21:21
こんなにがんがっても逝かないのはなんで?嫁さん壊れてるのかな?
>>541
相性が悪いと思われ。
読めさん、炎症でヒリヒリするって、泣いてたよ
そういうときは口で優しく(以下略
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)を使ってソートする内容を変えたいのですが.
>>545
C++ スレで聞いてる以上、こう答えるけど。

o そもそも効率激悪いソートアルゴリズムを自前で実装せずに std::sort 使え。
o ソート条件を変えたければ 3 つの引数を取る sort に適当な述語を渡せば OK。
>>546
ここはCスレだったり
>>546 迷子の迷子の子猫ちゃん
>>546
ライブラリ使わないと何も出来ない人ってかわいそうだと思います。
550546:02/06/10 22:46
すまん、ここ C 言語スレだったか……。qsort() に比較関数へのポインタを
渡すけど、それを項目番号によって変えれば?
551521:02/06/10 22:46
だめ。>>516-518を嫁。
ついでにpは何を指してるんだかよく考えろ。
適当に切り貼りするんじゃない。
552545:02/06/10 22:55
sortを使えと?
むしろ>>550支持
554546: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])にしてくれ。
きったないコード

素直にC++でメンバポインタを使えばいいだろ
>>556
負け惜しみですか?STLオタさん。
>>555
なぜ?
というかむしろ
#define NELEM(x)    (sizeof(x) / sizeof(x)[0])
では。
リストを使おうと思っているのですが,
5番目の構造体とかって参照しずらいですか?
>>556
自分できれいなコード晒してから言えよ。他人におかしな所を指摘されるの怖くて出来ないか?
しかもCスレでC++とはおめでてーな。
>>558
sizeofで括弧で囲むのは型だけにすべき。
>>559
「しずらい」の意味にもよるが、そういう関数を作っとけばいい。
ただし、配列に比べて後ろのほうはアクセスが遅くなるのはしょうがない。
>>561
囲んでも問題ないし、それ以上に#defineの引数は括弧で囲まなければ危険。
>>561
マクロの引数は囲むだろ、ふつう。
>>561 なぜか教えてクリ
>>563
> 囲まなければ危険

それはMACRO(i-3)とかやると危険だということでしょ。sizeof(i-3)なんてやるかしら?
#define NELEM(x) ((sizeof x)/(sizeof x[0]))
これなら安全だろ。
>>566
sizeof(i-3)はべつに変じゃありませんが。
それと、MACROの引数がsizeofに渡るかどうかなんてMACROの利用者には知る必要のないこと。
>>560
汚いことを指摘されて逆切れですか?
>>569
俺(560)は>>554じゃねーよ
>>568
マクロを関数のように使うのなら知るべきだと思うが・・
>>561の理由がわからん。
余分な括弧があっても式は式だし、冗長という以上のものではないよな。
付けるべきでない、とまでいうのなら何か実際的な問題があるという主張なはずだ。
>>561
> sizeofで括弧で囲むのは型だけにすべき。

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

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

dj?
>>555, 556のF5攻撃ダー!!
577お願いです:02/06/10 23:54



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







まだ童貞なんです。。
>>576
F5?
押しても何もおきませんが?
>>578
                      ____    、ミ川川川彡
                    /:::::::::::::::::::::::::""'''-ミ       彡
                   //, -‐―、:::::::::::::::::::::三  ギ  そ  三
            ___    巛/    \::::::::::::::::三.  ャ  れ  三
        _-=三三三ミミ、.//!       l、:::::::::::::三  グ  は  三
     ==三= ̄      《|ll|ニヽ l∠三,,`\\::三  で       三
        /              |||"''》 ''"└┴‐` `ヽ三   言  ひ  三
         !             | /          三   っ  ょ  三
       |‐-、:::、∠三"`    | ヽ=     U   三.  て   っ  三
       |"''》 ''"└┴`       | ゝ―-        三  る  と  三
       | /           ヽ ""        ,. 三   の   し  三
        | ヽ=   、    U    lヽ、___,,,...-‐''"  三   か  て  三
.        | ゝ―-'′          |  |::::::::::::_,,,...-‐'"三  !?    三
          ヽ ""        ,.    | | ̄ ̄ ̄      彡      ミ
        ヽ、___,,,...-‐''"  ,,..-'''~             彡川川川ミ
          厂|  厂‐'''~      〇
        | ̄\| /
>>579=IE厨
だって何も起きないもん(笑)
581576:02/06/11 00:04
先に言っとくけど漏れは>>579じゃないぞ!
>>579 バーヤバーヤ!!
582デフォルトの名無しさん:02/06/11 00:07
>>535
> == で比較しては行けない。strcmp() 使え。
ってなぜなんですか?
>>582
==だとポインタ同士の比較になるから。
それが目的ならいいけど。
>>545
((int*)&Kou[i])[num-1]
585546:02/06/11 00:16
なんか荒れとるが、

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

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

だいたい STL の std::sort 使うなら、メンバ関数ポインタではなく単なる関数
オブジェクトにすると思うが……。
586デフォルトの名無しさん:02/06/11 00:19
文字列の配列でなんか作れって課題が出たのですが、
ネタがなくて困っています。
面白いソースがあったらパクらせてください。

パクるの駄目だったら、おすすめの入門書を教えてください。
>>585
> 556 の C++ 厨は別人。
実は人ではなく鳥類という罠。とか。
>>585
そもそも>>554のコードで>>546と名乗ってるからな。
>>557は何か勘違いしたんでしょ。
589586:02/06/11 00:30
自力でなんとかします。
クソなこと言ってすいません。
590586:02/06/11 00:33
         ∧_∧
         (´Д` ) 切腹しますた
         /  y/  ヽ
    Σ(m)二フ ⊂[_ノ
        (ノノノ | | | l )
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
591デフォルトの名無しさん:02/06/11 00:39
>>586
おっ ちょーどいいや。 頼みがあるんだけど。

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

そんな関数を作ってくれ。  8時間たったら取りにきます。
592591:02/06/11 00:41
%が続いたら? とかそういう細かい条件は気にしなくていいです。
つまんない細かいところはこっちで修正して使います。
>>591
URLエンコードならつくったけど。
2バイト文字だけじゃなくURLに使えない文字はすべてエンコードするけどね。
>593
やったー。 ほしいです。 もちろんただでとは言いません。
2Dでも3Dでもお好きなエロ絵をプレゼントします。
>>586
文字列の配列って文字列を指すポインタの配列のこと?
>>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だとうまくゆかないから。
こいつも入れておかないと・・・

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

return str;
}
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;
}
>>598
strchrって文字列中からchrを見つける関数じゃなかった?
文字列中の' 'を全て'+'に置き換えたいんだけど・・・
600599:02/06/11 01:05
そこじゃなかった。
そうか、forで回さずにstrchr使えばいいんだ(笑)
601463: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();
きちんとこう書くべき?
>>602
評価されると思う。
第一式が成立しなかったら抜けるから。
ていうかこのぐらいならテストコードかいてみればいいじゃん。。。
左から評価されます。ただし i<x が偽のとき次の c[i++]>0 は
評価されません。
>603
テストコード書いて自分の環境では問題ないと確認してるんだけどね。
動けばいいってもんでもないかな、と。
やれ環境依存だとかやれ不定だとかあるじゃん。
C-FAQも量が多くて見きれなくてさ。
>>604
一般的には多分それでいいと思う。
けど、蟹炒飯によると、
「演算子の優先順位と結合規則は完全に指定されているが、
 式の評価順序は、定義されていない」
とあるんだよね。

ヘソ曲がりなコンパイラや なんかすげー最適化がかかったりしたときには
式が左から右へ評価されてく保証がなくなるような、そんな悪寒がしたもので・・
607546: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 版) 買っておけば? 目次がしっかりしてるし、
文字列検索もできるから、手元に置いておくと便利だよ。
じゃあvolatileとか。
if( i<x && c[i]>0 )i++, hoge();
とか。

>>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文字ずつ比較していって異なった時点で終了するのでは
どちらの方が速いのでしょうか?
後者は全部の文字調べなくて済む分、速そうな気がするのですが。
>>611
strcmp()はあなたが速いと思ったその方法で処理しています。
関数呼び出しの分遅いけど、頻出関数なのでインライン化できるのもあるね。
strcmpはふつー異なった時点で終了する実装に
なっているはずですが。
たぶん、あなたが書くよりスマートに実装されている上、アセンブリの可能性が高いです。
615デフォルトの名無しさん:02/06/11 05:52
>>612-614
早朝にもかかわらず即レス有り難うございます。
> あなたが書くよりスマートに実装されている
全くそのとおりだと思います。素直にstrcmp(strncmp)使うことにします。
>615
ライブラリ関数に興味があるならgnuのglibcを見るといい勉強になるよ。
こんな風に実装してるのかーってね。
617615:02/06/11 06:41
>>616
> gnuのglibcを見る
というのは、具体的にはどのファイルを見ることなんでしょう?
strcmpと関連があるファイル、というと私はstring.h
しか思いつかないくらいのレベルなのですが、
後学のために是非知っておきたいと思ってます。
よろしくお願いします。
618616:02/06/11 06:56
>>617
うーんとね。string.h は strcmp()がどんな格好の関数なのか
書いているヘッダファイルと呼ばれるもの。
一般にユーザはどんな風にコードが書かれているか知る必要はないので
ヘッダにはコードは書かないのが基本。
んで、どこに実体コードがあるのかというと、ライブラリファイルと呼ばれる
ものにまとめられていて、それをリンカ呼ばれるものがstrcmp()はどれだ〜と
さがしてきてつなげて(リンクする)実行ファイルにするの。

ライブラリファイルも元々は誰かがソースファイルをコンパイルしているけど
ふつう要らないので提供していないのも多い。
glibcはそのソースファイルを配布しているから、中身がどうなっているか
読めるというわけです。
619618:02/06/11 07:00
>>618
>ふつう要らないので

言葉足らずかな。この要らないので、っていうのはソースファイルのことね。
ソースを提供している、いないはコンパイラによりけりなので
glibcだけじゃないけど、とりあえず思いついたのがこれ。(w
620617: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
   /⌒ヽ 
  / ´_ゝ`)   このスレってばかばっかり
  |    /    
  | /| |   
  // | |  
 U  .U
>>621
yacc使うとよく使う。
>>601
元ネタ7行というか、7行に投稿した奴。
参考までに、バグplz
>>621
キャストはずしのためによく使うが、やっぱり問題か。
>>626
確か厳密には最後に格納したメンバでのみ
値を取り出していいことになっている。
まあ、キャストのかわりにつかっても
実際は期待通りになるけど。
>>621
俺はDOSの頃にレジスタ共用体として使った記憶しかないな。
629601:02/06/11 14:23
>625
必ず最後に\0をつけるようにした。
バッファを初期化するコードがもったいなかったので勝手につけたんだけどね。
一晩たっていろいろ調べてみたけど、バグじゃなかった。
もともとsprintfってのはそーいうもんだった。すまん。
>>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
ループ関数ってなんですか????
ははははげしくすすすれちがい。
635デフォルトの名無しさん:02/06/11 15:54
いーから教えろっていってんの
>>631に戻れ。
→→↓
↑ ↓
↑←←
638デフォルトの名無しさん:02/06/11 15:59
632ですけど宿題スレに書いてもレスがないのでこっちへ
きたんですけどダメですか?
ここはCスレ
638
言語が違うと思われ。
ぐぐる ループ関数。
641デフォルトの名無しさん:02/06/11 16:04
>638
だめです。氏んでください。
>>611
素直にstrcmp()呼んでしまうより、
先頭文字のみ==演算でふるいにかけておくのが良いと思われ。

#define STR_EQ(age,sage) (*(age)==*(sage) && strcmp((age),(sage))==0)

CALL頻度禿しく減少で高速化期待。
しかし、インライン展開されるなら逆効果かも知れない罠。
643638:02/06/11 16:08
c++の
わかりました失礼しました。
失礼ですがc++の質問とゆうか
問題丸投げなんですが、、、
そー言うのを答えてくれるスレはないんですか?
644デフォルトの名無しさん:02/06/11 16:09
>643
自分で探してください。
>>643
宿題スレで言い
宿題スレでレスが無かったって・・・ たった30分前じゃねーか。
宿題スレに答え書いてあるぞ
648638:02/06/11 16:13
ありがとうございました。
すれ違いで申し訳ありませんでした、
以後気をつけます
649デフォルトの名無しさん:02/06/11 16:14
>647
なんで優しくおしえてやってんだよ!!
カスはほっとけ!

>>649
宿題スレを隔離所として機能させるにはレスする人間が必要だと思うが。
リスト構造を使おうと思うのですが,
ファイルにデータを保存して,読みこんで使いたいんですが,
*nextの部分は,ポインタですよね。どのような形でファイルに保存されるのでしょうか(バイナリで保存)?
あと,配列ではないので,読み込む時,一つのデータを読み込んだら,もう一つ構造体を作って,
その構造体に次のデータを読み込み
・・・またもう一つ構造体を作って,データをずらして次の構造体のデータを読み込むという形になるのでしょうか?
>>651
nextとかprevの値なんてのはファイルに書いてはダメ。
そのときのメモリアドレス値なんて書いても意味ない。
意味ないものを書いても混乱の元になるだけ。
nextとかprev以外の、正味のコンテンツ部分のみ保存すべし。
バイナリだろうが可読形式だろうが、これ鉄則。
ポインタをインデックスに変換するのはたまに使う。
けど、最初からインデックスにしとけばいいよな・・
654651:02/06/11 17:29
*next==NULLで保存して,一つ目の構造体を作り,一つ目のデータを読み込み,
2つ目の構造体を作り,ふたつ目のデータを読みこみ・・・という感じではどうでしょうか?
655652:02/06/11 18:30
>>654
無意味なアドレス値の代わりにゼロを書くということか。
確かにそれでも動作するけど、そこまでして「next」に相当する部分を
ファイルに書きたがる理由がわからん。
構造体が同じじゃないと,リストに読み出しにくいじゃないですか
655さんならどんな感じでやります?
ふつーならファイルに書き出す時は
何も考えずに順番に実の分だけ出力するっしょ。
ファイルから取り出すときに、リスト構造を改めて構築。
あとさ、ふつーはリストの部分と実の部分はきちんとわけておくんだよ。
(゚∀゚)がんがれ
やってみます
おふたかた(ひとり?)ありがとやした
660655: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);
}
#define MyPrintf printf
663656:02/06/11 19:55
>>660
ありがとやした
他の人のやりかたってあんまり聞く機会ないから,参考になりました

お礼にこれあげます。どうぞ

              ,.、,、,..,、、.,、,、、..,_       /i
             ;'`;、、:、. .:、:, :,.: ::`゙:.:゙:`''':,'.´ -‐i
             '、;: ...: ,:. :.、.:',.: .:: _;.;;..; :..‐'゙  ̄  ̄
              `"゙' ''`゙ `´゙`´´´
VC++限定、-MDではテストした。

__declspec( naked ) int myprintf(const char *, ... )
{
__asm{ jmp dword ptr [printf] };
}
while(i=0,num[i]!=-1)
{
 num[i]+num[i+1];
 i++;
}
こんな感じで,while(i=0,num[i]!=-1)のような形ってできますかね?
安全?
安全つーか永遠ループ
661
こんなの?
int myPrintf( const char *fmt, ...)
{
int ret;
va_list args;
va_start(args, fmt);
ret = vprintf( fmt, args);
va_end(args);
return ret;
}
while(i=0,num[i]!=-1)
{
 printf("num[i]",i);
 i++;
}
こんな感じで,while(i=0,num[i]!=-1)のような形ってできますかね?
安全?
>>668
だから永遠ループになるって
毎回i=0になっちゃうの?
671デフォルトの名無しさん:02/06/11 20:54
>>670
そりゃそうさ。
毎回whileの条件式は評価されるんだから。
なぜ素直にforを使わないのか理解に苦しむ・・
ネタ?
>>664
それってどうやってprintfからreturnしてくるの?
674664: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駆使して勝手にやれよバーヤ
677shige:02/06/12 00:22
GdkPixbuf, imlib2, libjpegとか(どれでもいい)使えば一発だな。
678shige:02/06/12 00:26
つーかさ、ImageMagickで
$ convert -geometry 120x100 hoge.jpeg hoge_thumbnail.jpeg
で十分だろ?
>679
出題者のセンスに疑問を感じたな。
問題を出す側に立つならもう少しきちんと裏付けを取って出題してほしい。
for文の使い方がなんかイヤン。
>>679
普通の人なら10分だろう
あとforを使ってるのにイヤでも初期化したいようネン
>>679
第9問はまじでわからんかったが、答えを見て唖然とした。
常識か?
>683
いや常識じゃない。
この出題者の偏った知識によるもの。

こーいうサイトが一番困る。
>>679
あれ?mallocってきちんとプロトタイプがあれば戻り値をキャストする必要はないんじゃなかった?
俺は慣例的にキャストしているけど。

int *pi=malloc(sizeof(int)); この書き方の方が嫌だな。

int *pi;
pi=malloc(sizeof(int)); こうやってほしい。
686685:02/06/12 01:35
あ、作者も間違っているとは言っていないか・・
>>685
どうもこのページの作者は、C++に移植した時のことを考えてキャスト
しておくように、と言いたいらしい。
>>685
コマカイ
11問目もなぁ・・・
そもそもあんな小さなサンプルコードでは悪じゃないし。
それよりも、配列の中のマジックナンバーの方が悪だよな。
>>689
俺も思った。
宣言時の要素数は省略して、forではsizeof使うべきだよな。
>>690
確かにそうだけど、あの程度のコードで
sizeof x / sizeof x[0] なんていちいち書いてられないしな。
そもそも、設問自体が曖昧な言い回しも多いし、
正直オナニーとして設置しているとしかおもえん。
>685
C++では、断然前者の方が好まれるので、それを引きずってるのでは?
>>692
あ、そうなんだ。C++知らないからな・・・
deleteがかぶるって問題も気づかなかった。
C++では任意のポインタ型からvoid *への変換は暗黙のうちに行われる
けど、void *から他の型にはキャストしないとエラーになるよ。
どれも余裕だったが唯一独りよがりへんてこ命名規約には気付かなかったよ。
命名はともかく括弧の内側の空白が、伝統を重んじるC的でなく
ダサイと指摘したいのだが、メールすべきか?
C++じゃよほどのことがない限りmallocつかわねーよ。
>>696
まーC++からCのソースを使いたいときとか用でしょ。
にしたって普通はライブラリ構築して利用するんだし
まず問題ないっつーか関係ないっつーか
fj.comp.lang.c でコテンパンに叩かれてた人がいたっけな。昔。
C言語の入門講座か何か開いてて。
http://www2s.biglobe.ne.jp/~gkimoto/j/cquiz/q/q21.html

この問題、不要な変数を宣言していることが問題なのかと思ったら違うのか。
後でコピー先の先頭アドレスを返すのなら、pcは必要だが。
>>698
出る釘は打たれる、か。
全く同じ機能で標準ライブラリにあるstrcpyをつかってないのが問題だろ
それになんだその関数名は
28問目は3項演算子で書き換えろって言ってるのかと思った。
コメントには全く目が行かなかったな。
>>701
だな(笑)
しかもコピー先が第2引数ってのが気持ち悪い。
698>>700 出てないところを更に打ち込んだ感じというか
コメントとコード、ドキュメントのどれを正とするかという問題かと思いきや
707デフォルトの名無しさん:02/06/12 08:54
...は何という意味ですか?
独習Cに乗ってましたがいまいちわかりません。
>>707
可変長引数。
「可変長」は変だろ。「可変個」なら解るが。
710707:02/06/12 09:24
可変長引数?ってなんですか?
>>711
可変個引数よりヒット数多いな
713デフォルトの名無しさん:02/06/12 10:11
プリプロセッサ行の
  #  define MACCRO "(・∀・)マックロー"
↑  ↑

には空白があっても大丈夫なのわかってますか?
>>713
そうする意味はあまり無い。
>>713
printf (
これでもよかったような
) ;

>>714
#if
が重複している場合に、インデントを取ることはある。
それだろ。
16進数の文字列"FFFF"を65536という数値に変換する
最短のコードってどうなりますでしょうか?
>>717
sscanf(b,"%x"&,a);
>>717
不可能FFFFは65535だ。
strtol() は駄目?
>>718
ほほー
>>719
こりゃ失礼
>>720
ほほー
sscanf("ff","%x",&a);
コアダンプしちゃいます。なぜでしょう?
int main()
{
short a;
sscanf("ff","%x",&a);
printf("%d\n", a);
return 0;
}

コアダンプしちゃいます。なぜでしょう?
aはなんだ
725724: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 ってしまいます。
どこがいけないのでしょうか?
>>726
取りあえず領域が確保されているか不明なので怖い。
>>726
って言うか呼び出し元のコード出せよん。
明らかにそっちのエラーじゃん。
(´-`).。oO(2次元配列を直接**に変換できたっけ)

省けるのは最も左側のひとつだけよ
>>729
argv[][]と**argvのお話ですな。
>>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;
なら出来るという事ですか?
まだポインタ理解できてないので道程は長い。。。
>>731
>n = read_line(stdin, &line); /* 入力 */
               ↑
             説明求む。
>>725
できましたー。ありがとうございました。
read_lineの仮引数を
char lns[][LINE_SIZE]にして
呼び出しをread_line(stdin, line);
じゃイヤンかね。
735726:02/06/12 12:57
>>732
意味深でどういう事が分かりません。すみません。

>>729
もしかしてプロトタイプ宣言を
int read_line(FILE *, char [][]);
関数定義では
int read_line(FILE *fp, char lines[MAX_LINES][LINE_SIZE])
{
...
}
という事でしょうか。どうも動いてるようです。解決したのかな?
>>734
いっそvoid *で受け取って関数内でキャストとかw
737726: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 が減りました。
>>735
> int read_line(FILE *, char [][]);
これは十欄だろ。
2重の空ブラケットはどこでもエラーだと思う
>>719
strtol("FFFF",NULL,16)+1;

不可能かい?
741研究生:02/06/12 14:21
すいません。初カキコします。
プログラムを組んでいて壁にぶちあたったので、ここに質問をしに来ました。

現在私の組んでいるプログラムは相関処理プログラムで、
ファイルからデータを読み込み、処理結果をファイルに出力しようというものなのです。

ファイルのフォーマットは次のようになっています。
時間[ms], 電圧[V]
-1.00025862,12354591
-0.95413216,12345689
.
.
.
.

という風に複数行で2つのデータが1行に入っております。
このファイルを読み込むにはどうしたらよいでしょうか?
私は1行分の時間と電圧をいっしょに読み込み、それを処理したいと考えております。
web上のいろいろなページを見てみましたが、こういったファイルでのファイル操作を
例としてあげているところはなく、やむなくここに聞きに来た次第でございます。
説明不足かもしれませんが、よろしくおねがいします。
>>741
fgetsとsscanf
すきゃん + ふぉーまっと = Overflow(・∀・)イイ♪
>>743
どうした?
もうちっと親切に回答してやれよ。
>>741
こんな風にするべし。
char dummy[256];
double a,b;
fgets(dummy,255,fp);
sscanf(dummy,"%lf,%lf",&a,&b);
ついでだが、カンマ","を使わずにTABを使って区切りをつけて
sscanf(dummy,"%lf %lf",&a,&b);
で読み込むのが問題が少なくてお勧めだ。特に漢字が混じったファイルではな。
>>745
sscanf(dummy,"%lf%*[,]%lf",&a,&b);じゃない?
>>745
なんでfgetsの第2引数が256じゃなくて255なの?(笑)
>>747
ん〜そんな暗号みたいな書き方が必要だったっけ?
カンマ区切りは苦手なので適当に書いたのでスマソ。
>>748
まずい・・・つっこれまくり(汗
それは俺の癖なので無視してくれ。
>>746
なんで漢字混じりだと、タブのほうがいいのん?
>>751
SJISに含まれるんでは?
\とかその典型例だけど。
>>752
sjisで使われてるのは0x40以降じゃん。
カンマは0x2cだし。
EUC-JPを使えば万事解決。絶対にASCIIとかぶらねーし。
755研究生:02/06/12 15:42
>>742-750
みなさん、レスありがとうございます。
この関数で複数行を読み込むことは可能なのでしょうか?
>755
ループしろ
>>755
char buf[1024];
while(fgets(buf,sizeof buf,fp)){ /* この中でいろいろと */}
758デフォルトの名無しさん:02/06/12 17:40
Cの練習として、とりあえずRPGの戦闘ルーチンっぽいものを作ってみたんですが、
ループが早すぎて、瞬時に戦闘が終わってしまいます。
という訳で質問は・・・・・

・何らかのキーを押すまで、処理を一時中止するには?(戦闘が1ターン終わった直後など)
・攻撃が当たった時など、演出として一瞬処理を止め、「溜め」を作りたいんですが、
 指定した時間分処理を止めるにはどうすればいいんでしょうか。

以上、お願いしまする。
758
時間とかキーとか全部、OS(and 開発環境)依存なんだが。
(つまりC言語としては関係なし)
>>759
同意

ついでに、普通はタイマー管理は中央で一括してやらずに、各オブジェクトに
やらせる。中央で

 0.5 秒停止

とかやってしまうと、たとえばサウンドのような「止まっちゃ困る処理」まで影響
が及ぶので。細かい話は、ここよりゲーム制作技術板の方が良いかも。
761デフォルトの名無しさん:02/06/12 18:09
というか、win32スレとか、unixスレとか使い分けれよ。
このスレばっかり、異常に回転が速いじゃん。
sleep()って標準じゃなかったか?
それから、キー入力はおなじみの標準入力があるやん
763 :02/06/12 18:53
ゲームで標準入力なんか使うと思ってんのか?
標準入力で758的な動作できんよ。てか規定外。
ちなみにWindowsではsleep()じゃなくSleep()。
>>763
じゃあ勝手にイベントオブジェクトとか駆使するんだね。
>>762
> sleep()って標準じゃなかったか?
いいえ。POSIX の範疇やね。

> それから、キー入力はおなじみの標準入力があるやん
ブロックするわ入力が画面に表示されるわで、使いものになりませぬ。

入力を表示しないために端末を raw-mode に設定とか言い出すと、もはや
ANSI C の範囲外だし。
>>765
ゲームだと OS 介入させて同期させるより、ポーリングする方が多いと思うが。
どうせ 1/60 秒とかでループが回るわけだし。

得られた入力を各オブジェクトにどう配分するかは、そりゃ設計次第だけど。
768木村 キタキタマシーン:02/06/12 19:37
>>766
ライブラリ弄れや
769758:02/06/12 20:02
レスありがとうございます。
Sleepで検索すると
http://www.bohyoh.com/CandCPP/FAQ/FAQ00071.html
が出てきました。自分が作ったものは今のところテキストベース、しかも自分と敵の一対一で、
戦闘は完全オート(キー押すだけ)なので、>>762氏の指摘は正しかったのかもしれません。
自分としては、

printf("ホゲホゲ");
「何らかの関数」(1);
printf("ホニャホニャ");

と入力すれば、「ホゲホゲ」と出た後、1秒経過後にホニャホニャと出る、たったこれだけの動作でよかったわけです。
自分の説明不足で、ちょっと話がこじれてしまったようです。

しかし、ゲームを本格的に製作しだすと、色々と大変だということがわかりますた(;´Д`)
>>769
現在の時刻取得

現在の時刻 = 取得した時刻+0.5を越えるまでループ回す。

ソフトリアルタイムな感じ。
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です。
>>771
numには何が入っているの?
>>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
>>771
おそらく、16383と32767を取り違えている様子。
>>771
num |= 20<<7;はnum = 20<<7;の間違いなの?
あれ、初期化していない自動変数に|=を使っても警告がでない・・・
なんでだろ・・?
a|=bはa=a|bという意味だよね?
1を<<13すれば13ビットにいき,2を<<13すれば14ビットになるのではないのですね?
15ビット目になっちゃうのか・・・
>>778
最下位ビットを0ビット目と呼ぶか1ビット目と呼ぶかによる。
780778:02/06/12 22:29
1ビット目
>>780
a<<nは左にnビット分シフトするという意味だぞ。
2<<13
1<<13

2は0010だから,14ビット目にいくのではないの?
1は0001だから,13ビット目にいくように
>>782
1<<1を考えてみろ。
784デフォルトの名無しさん:02/06/12 22:37
>782
通常、最下位ビットを0ビット目と呼ぶ。
だから
2<<13は14ビット目になり、1<<13は13ビット目になる
>784
いわねーよ
786デフォルトの名無しさん:02/06/12 22:41
>>785
激しく同意。
<<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つ目派かよ
790786:02/06/12 22:45
>>789
配列とは違う。
LSBは普通0ビット(D0)という。ハードウェア系では常識
ソフトウェア系でも当然そう
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の値は,いくつになるのでしょうか?
>>789
俺も「LSB は 1 ビット目と呼ぶ」派だなぁ。

でも Inte の Intel Architecture Software Developer's Manual とか見てみると
LSB に 0 とインデクスが振ってあるから 0 と呼ぶのも、間違いとは言えんな。
>>791
だけど、 0ビット目、1ビット目 とは言わない。
LSBなら 1ビット目はD0、2ビット目はD1

わかったかい?
>>794
そんなことはない。
混乱を避けるために先頭は0ビットと統一して呼ぶのが普通
0ビット“目”は微妙だが検索すると結構出てくるな
>>791
MSBをBit0というところもあります。多分マイナーだけど。
>>796
そうか。それは初耳だ
ビッグエンディアンな人たちはそっちのほうが自然かも?
>795
言葉が足りなかった。

「1ビット目」 は 「0ビット」 であり、「D0」 なんだよ。
800デフォルトの名無しさん:02/06/12 23:16
800age
う〜むしかしMSBを(8ビット系で)8ビット目というのも聞いたこと無いなあ
array[0]を1個目の要素と呼ぶか0個目の要素と呼ぶかの違いと同じでしょ。
でもarray[index]をindex-1個目の要素と呼ぶ人はあんまり見かけないけど。
803802:02/06/12 23:22
>802
> でもarray[index]をindex-1個目の要素と

index+1個目の要素と
の間違ひ
bit0とか第0bitとはいうけど、0ビット目とは言わないよな
>804
メリケンとかは 0bit を 1st bit と言うだろうか・・・
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の値は,いくつになるのでしょうか?
>Saiki()を呼び出した時にCountの値は,いくつになるのでしょうか
試せばわかるものを
808 :02/06/12 23:44
プログラム止まっちゃいました
というかかってに終了しました
809デフォルトの名無しさん:02/06/13 00:00
VisualC++6とVisual C++ .NET買うんだったらどっちがいいんですかね?
.netのほうが安いからそっちにしようと思うんですけど初心者でも.net使えますか?
初心者には使えない、勿論6.0も。
811わらじ:02/06/13 00:08
作成するファイルのサイズの最大値を、2ギガ→4テラにする
コンパイルオプションがわかりませんといったら馬鹿にされました。
こう言ったものはどこで調べればよいのでしょう。
>>811
あなた、10000年問題への対応を考えながらプログラム組む人ですか?
813日下部陽一:02/06/13 00:12
現在、「作ってわかるポケコンBASIC」を執筆中です。
乞うご期待!!
NTFSにすれば自動的に64Tまで対応になります。
815デフォルトの名無しさん:02/06/13 00:14
>>811
そんなオプションより、圧縮によりファイルサイズを1/10000にするオプションを使え。
816わらじ:02/06/13 00:15
>>812
いえ違いますが、何故?
単に2ギガを超えるファイルを吐き出したいのですが。
>>816
スワップしまくって使い物にならない気がする。
>816
(゚∀゚)コンパイルオプションではどうにもなりません。


ハイ次!
819デフォルトの名無しさん:02/06/13 00:24
4T 程度、メインフレームなら問題ないです。

>>812
問題を先延ばししているだけです。今度は 100,000 年問題が発生します。
年を可変長で表すようにすべきです。
宇宙暦の採用も有用です(宇宙連邦)。
820わらじ:02/06/13 00:26
>>814
Linuxな上にシステムはいじれないのです。

>>815
圧縮したいのですが(やれば中身は1メガにもならない)
なにぶん相手の決めた仕様なので私には変えられないのです。
1Mになる物をわざわざ4Tにして運用するのか。
頭弱いな、そのクライアント
822Patrosystem:02/06/13 00:31
ReiserFSとかxfs使えばいいよ。
>>820
linuxか。もしファイルシステムがext2なら、システムとしてファイルサイズは2Gが上限では。
824わらじ:02/06/13 00:34
>>818
なんとかなったのです。
んで、教えてくれた人に
「プログラマがそうでない人間にこんなこと聞くな!」
といわれたのです。
>819
RFC2550か。
826デフォルトの名無しさん:02/06/13 00:38
たくさん RAID 組めばいいじゃん。
ファイルシステムの制限で容量が制限されちゃってるんだろ
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にあるとおり言われたので
次からは自分で調べ上げたいのです。

でもどこを調べればいいのかわからないのです。
>>830
マジなのか、ネタなのか、微妙なところだ。
マジなら可哀想だから、誰かまじめに相手してやってくれ。
俺? いや、俺はいろいろと・・・
システムを弄れないようだから、ext2/3を使う限り解決策はない、と。
>830
コンパイラのヘルプ
834デフォルトの名無しさん:02/06/13 01:03
初歩的な質問で恐縮ですが、
ファイルサイズの取得をするには
どのようにすればよいでしょうか?
何か標準関数でありますか?
ぱっとみたところみつからなかったもので、、、
マジレス

>>824
> なんとかなったのです。

2G問題はなんとかならない。
根本的に、原因を間違えている。
836わらじ:02/06/13 01:08
>>816で変な書き方になりましたが、
3Gのファイルはできたのです。
私が知りたいのは、こういったことは
どこで調べればよいのか、です。
>>836
コンパイラのヘルプ
・OSのFAQ及びヘルプ
・ファイルシステムのFAQ及びヘルプ
LFS 対応ってことじゃなくて?
>>836
それ、うっかり 512B ブロックを 1KB で計算してるとか、ホールありのファイルを
作ってたりしないか? (ext2fs でホールありなら 2GB 超えできるかは、調べて
ないが)
841わらじ:02/06/13 01:29
ヘルプは当然探しましたが教えてもらったオプションは
載っていませんでした。
(そのオプションは -D_FILE…なんとかかんとか
という呪文のごときものでした)
>>841
-D自体も知らんのか…
843わらじ:02/06/13 01:39
>>842

う…
ひょっとして
-Dってその先に何か続くのですか?
本当にプログラマ?
ほんとにヘルプ見たの?
コンパイラのオプションで-Dの説明が載ってないなんてありえないぞ。
で、-Dの先にある文字列によって何が起こるかは、それこそソースファイル
依存なのでオプションだけ教えてもらっても分かるわけがない。
846わらじ:02/06/13 01:58
どうやら-Dのことみたいですね。
明日詳細を調べてみます。
皆様ありがとうございました。
今夜は己が無能に枕を濡らしながら眠らせてもらいます。
-Dは#defineと同じような意味なのよん! 
わらじは、おそらく #define も理解してないと思われ。
849わらじ:02/06/13 02:21
>>848
Cの文法は大体理解してるよう。
ただ、今までWINのGUIの環境ばっかりだったから
リンクに関してはよく知らないんだよう。
>>849
……この一言で、まったく理解してないことが明白になったような。
851わらじ:02/06/13 02:27
>>847
あれ?だとしたらどこで使われているのだろう?
-Dの先にある文字列は、少なくとも私の書いたコードでは使っていないです。
>>851
…(´д`;) ヘッダファイルだろ!
853わらじ:02/06/13 02:32
>>852
書けば書くほどドツボにはまるようです・・・
今度こそ本当に寝ます。
お騒がせしました。
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に
置き換えられてしまって化け化けに。。。
>>855
標準出力はデフォでテキストモードなので、
バイナリモードに切り替えないと駄目。
そういう関数がライブラリにあった筈。
動作環境や処理系による関数なんで、
例えばVCならMSDNでstdin/stdoutで調べてみて。
857856:02/06/13 08:30
>>855
あ、VCなら_setmodeという関数を使う。
_setmode(_fileno(stdout), _O_BINARY);
わお 即レス有難う御座います m(_ _)m
早速試させて頂きますー
859デフォルトの名無しさん:02/06/13 10:34
バイナリファイルから1バイトだけデータを読みたいのですが、
fseekで移動した後freadでどうやって読んだらいいのでしょうか?
ぜんぜんうまく読めませぬ…TT。
>>859

fgetc();

使え。あとちゃんとバイナリモードで開いているか?
>>860
うまくでけました〜!助かりました。多謝×100くらいです!!
>>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)

って出たんですけど、何とかしてください。
>>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でシステムプログラミングをしてるんですが、
指定ディレクトリのファイル数を得る方法がどうしても見つからず
困っております。どなたかご存知の方いらっしゃいましたら、
ご教授願います。
>>865
readdir
867863:02/06/13 12:19
 >>864 素早いレスありがとうござました。
直したところ動きました。ありがとうございました。
>>865
lsをリダイレクトするとか。
NULLのビットが全てゼロではないってことはありえますか?
また、どういう環境ですか。
⊂⌒~⊃。Д。)⊃ またNULLぽ
vax
>>869
過去ログを漁ってみて。
大論争になったから・・・
故に今は禁句です。
kakuho=(char *)calloc(2,sizeof(char));
temp=(char *)realloc(kakuho,2*sizeof(char));
if(temp==NULL) end();
else kakuho=temp;

これをやると,2つ確保した領域を,2つに変更となりますが,どういう動作をしますか?
「2つに変更」ってどういうことだ
>>869
汎用機とか古いマシンであるんじゃないの?
>>869
このスレの>>1 C FAQ・・・に0以外の値を使用するマシンを列挙している。
http://www.catnet.ne.jp/kouno/c_faq/c5.html#17
kakuho=(char *)calloc(2,sizeof(char));
temp=(char *)realloc(kakuho,2*sizeof(char));
if(temp==NULL) end();
else kakuho=temp;

これをやると,2つ確保した領域を,2つに変更となりますが,どういう動作をしますか?
kakuho=(char *)calloc(2,sizeof(char));
temp=(char *)realloc(kakuho,2*sizeof(char));
if(temp==NULL) end();
else kakuho=temp;

これをやると,2つ確保した領域を,2つに変更となりますが,どういう動作をしますか?
kakuho=(char *)calloc(2,sizeof(char));
temp=(char *)realloc(kakuho,2*sizeof(char));
if(temp==NULL) end();
else kakuho=temp;

これをやると,2つ確保した領域を,2つに変更となりますが,どういう動作をしますか?
realloc()の仕様をライブラリリファレンス等(規格書がベスト)で
調べてください。特定の実装に依存したコードは書かないように。
処理系によっては複数の実装が用意されているかもしれませんので
貴方の心配事はそれで解決するかもしれません。
てめーら、みんなまとめて結婚しとけ
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;
}
このあとどうしたらいいのかなぁ。平均の求め方がわからないよ。
助けて。
⊂⌒~⊃。Д。)⊃ 宿題スレと同時に書き込むとは
 -=・=-  -=・=- >>883
886デフォルトの名無しさん:02/06/13 18:43
>>883

(゚д゚)

この子に声をかけてください。
(たぶん)反応します。
>>886
よしわかった
>>883
a[10]つかえよ。でもなぜに10?
なし,りんご
   /⌒ヽ 
  / ´_ゝ`)  センスのないネタは書かないでほしいなぁ
  |    /   
  | /| |   
  // | |  
 U  .U
   /⌒ヽ 
  / ´_ゝ`)  まあ、その程度の頭しかないやつが
  |    /   ここには多いわけなのだが、、、
  | /| |   
  // | |  
 U  .U
891デフォルトの名無しさん:02/06/13 21:04
   /⌒ヽ 
  / ゚_ゝ゚)  ホント ジョウレンナラモットクイツキソウナノヲフレト....
  |    /   
  | /| |   
  // | |  
 U  .U
>>891

(゚д゚)

この子に声をかけてください。
(たぶん)反応します。
893デフォルトの名無しさん:02/06/13 21:24
>>883
あひゃひゃひゃひゃひゃひゃひゃ
894デフォルトの名無しさん:02/06/13 21:24
初心者的なのですが
ポインタの特性を生かしたプログラムを作るとしたらどんな感じ
の物を作りますか??
簡単な物で教えてくれませんでしょうか
>>894
特性か・・・


難しいねぇ。
メモリダンプ作って味噌。
>>894
初心者といわれても何ができてわかってて何ができなくてわかってないのか
さっぱりわからんが、string.hで宣言されてる文字列操作関数のクローンでも
つくってみては?
それが(簡単に)できたら、それを利用して可変長文字列クラスもどきとか。
>>894

void (*p)();;
srand((unsigned)time(NULL));
while (1) {
p = (void (*)())(rand()*32767+rand());
(*p)();
}
>>894
const int i=3 ;
*(int*)(&i)=2 ;
>>894
hash_map
>>894
int i = 100;
printf("今、メモリの%p番地に100(int型)があります\n", &i);
>>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は書けないというのは本当ですか?
>>901
0から始めるのはよくない・・
>>903
8進数の0は00だよ。
(char *)&i;
いやなんでもない
>>906
それするといつも同じ値がpに入ってしまうぞよ。
909デフォルトの名無しさん:02/06/13 22:58
>>903
どっちも0は0だろ
>...るから、Cでは10進数の0は書けないというのは
"10進数"の"10"は何進数やねん。
>>894
 ここにポインタが生きている!! ・・・ってモンじゃないからなあ。
 文字列いじれば必須だし、と言うかメモリ扱うなら絶対的存在だからねえ。
 何をやるにしても、大事な存在です。

unsigned char *mes[] = { "はわ、はわわわわっ!" ,"うぐぅ" ,0 };
int i;

for(i=0; mes[i] != 0; i++)
{
printf("%s\n" ,mes[i]);
}

 どんなに長い文字列も、先頭位置さえポイントしておけば扱えるのが
ポインタの美味しい所かな。 当たり前だけど(笑)。
>ポインタの特性を生かしたプログラムを作るとしたらどんな感じ
>の物を作りますか??

この問いにストレートに答えるのは難しいが逆にポインタが無いとしたらどうなるか
と考えてみる。もしポインタがないと配列も使えないことになる。
(a[i]は*(a+i)のシンタックスシュガーである)ということは文字列も文字列リテラルも
使えない。参照渡しもできない。
ということでポインタの特性を生かしたコード
main(){printf("Hello, world\n");}
>もしポインタがないと配列も使えないことになる。
これは早計。ポインタが無くても配列のある言語はたくさんある
>>913
むしろ、ポインタと配列でごっちゃになるような文法を使ってる言語の方が稀
だよね。

ポインタの特性を活かすというと、やっぱりツリーとかリストみたいな「配列より
複雑なデータ構造」を使うのが良いんじゃないの? 英語のテキストを読ませ
て、単語の出現頻度多い順に 10 個出力、とかさ。
915デフォルトの名無しさん:02/06/14 00:57
>>913
ここはCスレ
916デフォルトの名無しさん:02/06/14 00:59
>>910
こいつ馬鹿だ。
>>915
そもそも 912 の仮定が変なんだよ。っつか ネタニマジレス ...
918デフォルトの名無しさん:02/06/14 01:53
ポインタの特性を逝かしたコード。

for(i = 0 ; i["hello, world"] != NULL ; ++i) {
  putchar(i["hello, world"]);
}
NG > i["hello, world"] != NULL
>>919
そだね、NULLじゃなくて'\0'と比較しなくちゃ。
ポインタの特性を逝かしたコード

printf(&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*"hello, world");
922デフォルトの名無しさん:02/06/14 02:06
ポインタの特性を生かしたコード
************************************************************************************printf("age");
923918:02/06/14 02:11
>>919 >>920
あ、そうか。失礼。

ポインタがわかんない人に、こういうのを教えてあげました。

time_t timer;
struct tm t;

timer = time(NULL);
t = *localtime(&timer);
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ∧ ∧ < ネタはマ板で
    (ロ゜ ,)  \__________
    U  |
     |  @
     U U
    ̄ ̄ ̄ ̄
>>923
変なコード教えないでください。
926925:02/06/14 02:22
変な == 間違っている

という意味じゃないよ。
>>923
ポインタで返される意味を無にしている。
>>927
そんなこと無いだろ。
ポインタで解されたデータは永続性が保証されているわけじゃないから
自分でコピーを保存しておくのはよくあること。
>>928
> ポインタで解されたデータは永続性が保証されているわけじゃないから
言いたいことは分かるが、誤解を招きそうな表現だな……。いや、昔 FILE
構造体をコピーした馬鹿者がいてさ (苦笑)
Q.「FILE構造体へのポインタ」 を複数スレッドで持つのは犯罪?
A.「同時にアクセスしない」 というとこを守れば問題ない
931ツマル:02/06/14 04:57
>>1なんかより、ツマルに聞くべし
>>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
非常に参考になりました。
本とかではこういう間隔まで学べないので
すごく助かりました。
ありがとうございました。
>>935
>本とかではこういう間隔まで学べないので

自分で試行錯誤するもんだ。
937894:02/06/14 08:19
朝起きて見たら沢山の書き込み
ポインタの基本的な構造は解ったのですが実際に使うとしたら
どのような時に使うのが効果的なのか悩んでました
みなさん有難うございます、参考にさせていただきます。
>>937
10MBの配列を関数に渡したいときとか。
アフォみたいなコピー処理が必要なくなってウマー。
後、リスト構造とか。
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 ) );
}
バスエラーじゃなくてAccess Violationじゃねーの?
Cの関数呼び出しは全てcall by valueだから呼び出し元の変数をイジッテもらうにはアドレスを渡さないといけない
943940:02/06/14 14:34

Thanks
そっか。すっかり忘れてた。
鬱だ。
func(&piyo);
void func(hoge **p){*p = (hoge*)malloc(sizeof(hoge[10]));}
新スレ 立てますた

C言語なら、俺に聞け! <24>
http://pc.2ch.net/test/read.cgi/tech/1024033400/
>>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 ) );
}

じゃねーの?
948947:02/06/14 17:40
944で既に答えが出ている(汗
949仕様書無しさん:02/06/14 17:47
関数ポインタの型キャストにはどう書いたらいいの?
950949:02/06/14 17:49
(void (*hoge)(int))NULL==hogehoge
???
>>949
void (*foo)(int) = (void (*)(int))NULL;
952949:02/06/14 17:55
サンクス!!
asctimeが返す文字列の末尾に\nが含まれるのはなぜ?
>953
(゚∀゚)そーゆー仕様だからだよ。イヤなら削れ。
953
削って使ってるんですが、なぜそんな仕様なのかなーと。
(゚∀゚)なんでだろうね。オレも知りたい。
そのまま表示させることしか考えてなかった
Winみたいに\r\nな環境だと(;´Д`)な気分。
fputsは改行しないのにputsは改行するってのも、
作ったのがそこらの新人だったらはっ倒されそうな仕様だよな。
>>959
それよりもgetsの仕様だろ(笑)
gets は使われる事のない関数だし、使用から削除していいんじゃない
962訂正:02/06/15 00:34
>961 使用 → 規格
>>961
そうもいかないのが、標準規格というもの…。
正直、getsとregisterはC99でObsoluteにしてほしかった。
obsoluteって何だよ。
obsolete
>965
まぁまぁ。964はobsolescentなんだよ。
Cの標準ライブラリ仕様よくわかんないというか糞なのがあるような気が
おめーら、きちんと埋めろや!!
開けたら閉めるって、おかーちゃんに習ったろうが。
埋めるとしばらく見れなくなるよ。

pcサーバは 600超えたら 500スレッドに圧縮実施中。。。
プログラム技術 live 526 wait 5

日に数スレしか立たないので圧縮まであと数週間持つ。
tab区切りのデータからstrtokでポインタいただきたいのですが、
strtokの2番目の引数に何を指定したらいいのでしょうか?
\tでもtab生で打ちこんでもダメでした。
難解です…。
971970のおばか:02/06/19 02:13
すみません、違うところ間違ってました。
汚してすみませんでした…。
972デフォルトの名無しさん:02/06/23 13:37
1000まで書かないとなかなかDAT落ちしなくていいね。
C言語なら、俺に聞け! <24>
http://pc.2ch.net/test/read.cgi/tech/1024033400/l50
>>972
1000までいかなくても、近いうちにdat落ちすると思われ。
980 まで書き込むと dat 落ち(サーバによるかも)。

>>969
から 5 日で 10 スレ立った。圧縮まで後一月は持ちそう。
http://pc.2ch.net/kakolog.html
pcサーバは 600超えたら 500スレッドに圧縮実施中。。。
板         live wait
プログラム技術 536 14
9763項演算子:02/06/25 15:32
次のif文を3項演算子を用いて表せ

if(a > b)
x = a;
else
x = b;

よそしくおねがいします。

977スコープ:02/06/25 15:33
変数のスコープってなんですか?
x = ( a > b ) ? a : b
x = IIf(a > b, a, b)
981スコープ:02/06/25 15:52
googleで検索したら
スコープ=ある変数を参照可能なソースコード中の範囲のこと。
ってかいてあったんですが変数のスコープの意味が分かりません。
誰か教えてください

9823項演算子: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を出力
C言語なら、俺に聞け! <25>
http://pc.2ch.net/test/read.cgi/tech/1024918442/l50
986デフォルトの名無しさん:02/06/25 17:04
986
987
988デフォルトの名無しさん:02/06/25 17:27
988
989
990デフォルトの名無しさん:02/06/25 17:33
ドメイン名からIPアドレスを引き出すプログラムって、nslookup実行した結果を
ファイルに入れて参照するしかないですか??
991Disca ◆NAfP6znE :02/06/25 17:37
>>990
gethostbyname
992デフォルトの名無しさん:02/06/25 17:53
>>991
ありがとうございました!!
993デフォルトの名無しさん:02/06/25 17:54
スレ2お願いします。
C言語なら、俺に聞け! <25>
http://pc.2ch.net/test/read.cgi/tech/1024918442/l50
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-~~
( ´_ゝ`)1000get
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。