トップページ⇒tech
909コメント312KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001C言語ハッカー Kusakabe YouichiNGNG
おれは21才、9年間プログラムを一生懸命作ってきた。
あちこちの言語に手を出したが結局極めたのはC言語だけだった。
大体のことなら分かるからオレに聞け。

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

・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html

・前スレ C言語なら、オレに聞け! <8>
http://pc.2ch.net/test/read.cgi/tech/1005811510/l50
0232206NGNG
>>231の発言に私は答えるべきでしょうか? それとも無視するべきでしょうか?
>>229さん、教えて下さい!
0233デフォルトの名無しさんNGNG
自分の発言くらい自分で判断しろ!
0234Kusakabe Youichi NGNG
あ、俺どうしようもなくキチガイだから。
0235デフォルトの名無しさんNGNG
>>232
痛い/痛くないは技術的な話から逸れそうだから、続きはこっちでやれば?

日下部 陽一先生の隔離スレッド void ***
http://pc.2ch.net/test/read.cgi/prog/1006918877/
0236デフォルトの名無しさん NGNG
くだらない事ですが、、文字配列の添え字アクセスについてです

main()
{
  FILE *fp = NULL;
  char *buf = NULL;  /* 行バッファです */
  size_t size = 10240;/* バッファのサイズです */

  /* ファイルをオープンします */
  buf=(char *)malloc(size);
  memset(buf,'\0',size);/* 塗りつぶしておきます */
  while(fgets(buf,size,fp)){
    if(buf[size-3] != '\0')/* ←←ここです! *//* 行の最後まで読めなかった */
      /* 領域を拡張して読み直します */
    else
      printf("%s",buf);
  } 
}
この[size-3]の添え字計算はマズイと言うか最適化されませんか?
char *chkptr = size - 3;として
buf[size-3] の変わりに *chkptr とした方が良いでしょうか
reallocしてアドレスが変わる可能性が有るから、最適化出来ないのかなぁ・・・
とか勝手に思ってるんですが、
と言うかこのやり方馬鹿ですか? (汗
0237デフォルトの名無しさんNGNG
うわっ間違えました!!
char *chkptr;
chkptr = buf + sizeof(char)*(size - 3);
です 、、
0238デフォルトの名無しさんNGNG
>>236
どういう書き方をすると、速くなるかは実際にコンパイルするまで
分かりません。
工夫した書き方で、逆に遅くなることもあります。

その例だと、どちらが速くなっても、わずかな差しかないと
思うので、自分が「素直」だと思う書き方が良いと思いますよ。

スピード重要で少しでも早くしたいときは、ソースで判断せずに、
実際に実行させて、計測してください。
0239デフォルトの名無しさんNGNG
>>237
>chkptr = buf + sizeof(char)*(size - 3);

この sizeof はいりません。
charだから動いているけど、それ以外の型だと、このコードは
正常にうごきませんね。
0240デフォルトの名無しさんNGNG
まず判定方法を改めろ。fgetsの返値を使うとかな。
最適化を語るのは、それからの話だ。
0241236 NGNG
間違えてるじゃん、、ううっ、皆さん有難う御座います。
>>238
気にする程でも無いですか、そう言われると気にならなくなって来ました
当分は-O3様にお任せしますです。
>>239
ぎゃっ、すいません。キャストか良く分かっていないです。。。
>>240
戻り値はこの場合だとbufですよね、、でもif(buf=fgets(buf,size,fp))とか
すると開放する時に if(buf);free(buf); って出来なくなるし。。。
取り合えず変なやり方と言う事ですよね。うーん
0242236NGNG
もう間違えまくり(鬱
キャストか → キャストとか
if(buf=fgets(buf,size,fp)) → if((buf=fgets(buf,size,fp))!=NULL)
逝ってきます
0243Kusakabe YouichiNGNG
In article >>236, 236 デフォルトの名無しさん wrote:
>   FILE *fp = NULL;
>   char *buf = NULL;  /* 行バッファです */

意味のない初期化ですね。

>   size_t size = 10240;/* バッファのサイズです */

変数に入れなくてもいいのでは?

>   buf=(char *)malloc(size);

エラーチェックぐらいしておけば?

>   memset(buf,'\0',size);/* 塗りつぶしておきます */

何の意味があるの? (末尾だけじゃだめなの?)

>     if(buf[size-3] != '\0')/* ←←ここです! *//* 行の最後まで読めなかった */
>       /* 領域を拡張して読み直します */

じゃあ1行が数ギガバイトあったらそこまで拡張するのでしょうか?

> この[size-3]の添え字計算はマズイと言うか最適化されませんか?
> char *chkptr = size - 3;として

なぜ-3なの? -1 じゃなくて?
0244Kusakabe YouichiNGNG
In article >>240, 240 デフォルトの名無しさん wrote:

> まず判定方法を改めろ。fgetsの返値を使うとかな。

どう使うのでしょうか? :)
0245Kusakabe YouichiNGNG
In article >>243, 243 Kusakabe Youichi <[email protected]> wrote:
> >   memset(buf,'\0',size);/* 塗りつぶしておきます */
> 何の意味があるの? (末尾だけじゃだめなの?)

っていうか末尾の1つ前か

> > この[size-3]の添え字計算はマズイと言うか最適化されませんか?
> > char *chkptr = size - 3;として
>
> なぜ-3なの? -1 じゃなくて?

-2かな。
0246236NGNG
>>Kusakabe Youichiさん 有難う御座います。
>意味のない初期化ですね。
はい、厨房です、bufに付いては後でfreeする時に怖いので(勘違い?)(鬱
>変数に入れなくてもいいのでは?
/* 領域を拡張して読み直します */ の部分が
bufExpansion(&buf,&size,fp);とかになっとります(鬱
>じゃあ1行が数ギガバイトあったらそこまで拡張するのでしょうか?
力の限り(鬱
>なぜ-3なの? -1 じゃなくて?
end of string\n\0というパターンを考えました(鬱

何かスレのレベル下げまくりみたいなんで山に帰ります。
謝謝了。
0247Kusakabe YouichiNGNG
In article >>246, 246 236 wrote:
> > 意味のない初期化ですね。
> はい、厨房です、bufに付いては後でfreeする時に怖いので(勘違い?)

はい勘違いですね。逆に言えばNULLをfreeしたときの挙動は
標準規格では未定義だったように記憶しています。
(少なくとも標準規格以前のBSD(VAXとか)ではfree(NULL)したときには
何も起きませんでしたが、SystemV系のではfree(NULL)するとSegmantation Fault
でコアダンプするものがほとんどでしたよ)

> > 変数に入れなくてもいいのでは?
> /* 領域を拡張して読み直します */ の部分が
> bufExpansion(&buf,&size,fp);とかになっとります

なるほど。だったら変数にすることはかまわないですが、
最初に変数に与える数値は#defineしておきましょうね。
あと、そのbufExpansionですが、reallocとか使っているのでしょうか?
fpを渡しているのはなぜでしょう?
もしかして中でfgets()を呼んでいる?
だとしたら「関数のまとめる」ために切る部分を誤っているような。

# 一般に言って、やたらと引数が多くなったり、アドレスを渡す引数が多くなる
# ような関数分けはどこか間違っていることが多いです。

> > じゃあ1行が数ギガバイトあったらそこまで拡張するのでしょうか?
> 力の限り(鬱

> > なぜ-3なの? -1 じゃなくて?
> end of string\n\0というパターンを考えました(鬱

え? でも「\n」だったら「\0ではない」のだからいいのでは?
0248デフォルトの名無しさん NGNG
if(baz)
free(baz);
で破棄した時にbazにゴミが入ってたらヤバイっつってんだろ
魔板でレスするなって怒られてるんだけどな B -)
0249Kusakabe YouichiNGNG
In article >>248, 248 デフォルトの名無しさん wrote:

> if(baz)
> free(baz);
> で破棄した時にbazにゴミが入ってたらヤバイっつってんだろ

この馬鹿理解してないみたい(^^;

つまり、ifでNULLだけどけてみたり、freeでゴミが入ってるかもしれない
なんていうコードの書き方ってのは「場当たり的すぎ」だという意味です。
(「予防的プログラミング」に似ているがその実が違う)
0250デフォルトの名無しさんNGNG
実の無い会話だね
0251デフォルトの名無しさんNGNG
つくづくこのオッサンは口だけだと思ってしまう
アホが書いたランダム爆撃コードを良く退治させてもらったもんだが
多分アンタの本読んだんだろね p
素人には難しいかもしれないが、コーダーってのは色んなレベルの寄せ集め
なんだよ、もし話が理解出来なくて気を悪くしたならすまないね。
0252Kusakabe YouichiNGNG
In article >>251, 251 デフォルトの名無しさん wrote:

> つくづくこのオッサンは口だけだと思ってしまう

「思ってしまう」->「思いたい」ですかね。

> アホが書いたランダム爆撃コードを良く退治させてもらったもんだが
> 多分アンタの本読んだんだろね p

11月12日発売でした。

> 素人には難しいかもしれないが、コーダーってのは色んなレベルの

とか偉そうに言うやつにかぎってしょーもないコード書くのよね:)
0253デフォルトの名無しさんNGNG
少なくともANSIの規格上ではfree(NULL)は何も起きないことが
保証されているはず。
どっかのタコな実装は知らん。
0254デフォルトの名無しさんNGNG
>11月12日発売でした。
そりゃ良かったよ、色んな意味でね
>とか偉そうに言うやつにかぎってしょーもないコード書くのよね:)
俺やお前を含めてね。
0255Kusakabe YouichiNGNG
In article >>253, 253 デフォルトの名無しさん wrote:

> 少なくともANSIの規格上ではfree(NULL)は何も起きないことが保証されているはず。

あれ? そうでしたっけ。
調べてみます。

> どっかのタコな実装は知らん。

ベル研に言ってください :) > どっかの
0256Kusakabe YouichiNGNG
In article >>254, 254 デフォルトの名無しさん wrote:

> > 11月12日発売でした。
> そりゃ良かったよ、色んな意味でね

時系列的因果関係は合ってますか?


> > とか偉そうに言うやつにかぎってしょーもないコード書くのよね
> 俺やお前を含めてね。

無理に私までいっしょにしなくてもいいですよ :)
0257デフォルトの名無しさんNGNG
Kusakabeは無視。定説です。
0258ヒツキー@プロゴルァミングNGNG
Kusakabeの偽者多いなぁ。
騙されてる>>257みたいなのも多いなぁ。
0259Kusakabe YouichiNGNG
In article >>257, 257 デフォルトの名無しさん wrote:

> Kusakabeは無視。

とかいちいち書くやつ :)
0260通りすがりですけどNGNG
>>259 Kusakabe Youichiさん wrote:
>> Kusakabeは無視。
>とかいちいち書くやつ :)
とかいちいち書く偽者 :)
0261Kusakabe YouichiNGNG
In article >>255, 255 Kusakabe Youichi <[email protected]> wrote:
> > 少なくともANSIの規格上ではfree(NULL)は何も起きないことが保証されているはず。
>
> あれ? そうでしたっけ。
> 調べてみます。

調べてみました。C89以降は保証されているようですね > free(NULL)は何も起きない

でも、やはりmallocが返す値を入れる変数を
「あらかじめNULLにしておく」のを薦めるのはやはり変だと思います。
(たとえばこの人も薦めてる > http://www.google.com/search?q=free+%88%F8%90%94+NULL&hl=ja&lr=)

つまりその変数が最初のmallocの値を受け取るよりも前に
「free」が呼ばれた場合のことを考えた処置ですよね。
それはつまり、変数を宣言したあと「そのfreeが絶対にmallocからの値を代入する
よりも前に出てこない」ことが保証できないぐらいの複雑さの場合は意味を持ちますが
逆にいえば、そんな汚いコードを書くことのほうをどうにかするべきです。

同様のことは、たとえばif ((fp = fopen( ...で使う変数fpを
FILE *fp = NULL; のように初期化しておくことにも言えます。
0262デフォルトの名無しさんNGNG
まぁ char *buf = (char*)malloc( size ); と
書ければすむ話なんですがね。better C としてのC++利用。

初期化は、こういうことを為かもしれませんね。
char *a = NULL; char *b = NULL;

if( !a = malloc( size ) ) goto error;
if( !b = malloc( size ) ) goto error;
--snip--
error:
free(a); free(b)
0263Kusakabe YouichiNGNG
In article >>262, 262 デフォルトの名無しさん wrote:
> まぁ char *buf = (char*)malloc( size ); と
> 書ければすむ話なんですがね。

っていうか、その表記が許されたとしても、
「宣言と代入が離れすぎていて、freeが先におこなわないことを保証できない」
コードって問題でしょ?

たとえば宣言をmallocからの代入の「すぐ近く」に置くことで、
freeがそれより前の行になってしまうようなものはコンパイル時にエラーに
できちゃうわけで。

> better C としてのC++利用。

Cでもできますね > ブロックの先頭以外に変数宣言を書く。

> 初期化は、こういうことを為かもしれませんね。
> char *a = NULL; char *b = NULL;
>
> if( !a = malloc( size ) ) goto error;
> if( !b = malloc( size ) ) goto error;
> --snip--
> error:
> free(a); free(b)

はい。たぶんそういうことをやりたいんでしょうね。
でもそれはずいぶん汚い書き方ですよね。そっちのほほうを何とかすべきで
あって、「NULLを入れておかないと危険」なような書き方自体に問題がある
わけです。
0264デフォルトの名無しさんNGNG
if(hoge)free(hoge); と言うより
free(hoge)hoge=NULL; なんだけどなあ・・・
つまりhogeにはまともなポインタかNULL以外入って欲しく無いし
それでバグ取りがやり易かったり超実用的なんだけど・・・
こんな事言うと「そんなヘボい構造自体が」とか言われそうだけど
私が書いたんじゃないんだよなあ
って言うと「そもそもそう言う設計自体が」って来るんだろねえ (^∀^)アハハッ
0265Kusakabe YouichiNGNG
In article >>264, 264 デフォルトの名無しさん wrote:

> if(hoge)free(hoge); と言うより
> free(hoge)hoge=NULL; なんだけどなあ

なるほどfreeしたあとですか?
だったら、宣言時だけじゃあだめですね。
(freeしたたびに代入ですかー)

> つまりhogeにはまともなポインタかNULL以外入って欲しく無いし

でもそれはfreeに渡す変数だけじゃなく、すべてのポインターに関して
言えるのでは?
(ある時点でその指しているものが無意味に成ってしまうポインター変数なんて
いくらでもありそうですし)

> それでバグ取りがやり易かったり超実用的なんだけど

ですからそれは「本末転倒」ってやつですね。
「わかりにくいプログラム」を「わかりやすく直す」ことをせずに、
デバッグしやすくする方法って感じですね。
0266デフォルトの名無しさんNGNG
とにかくこの人は言ってる事がかなりヤバイです、いやホント。
構造体ポインタはちょっと、、とか平気で言っちゃう人もプロジェクトには居る訳ですね
嫌あなたが超絶天才的C言語完全体なのはわかりますがね。
実際そう言う人とやってくのが仕事な訳ですよ、ええ。
そう言う人相手に「for使うならカウンタの初期化は無駄です」なんて
教えると会社潰れる位のつけ払う事になりますわ、多分
0267デフォルトの名無しさんNGNG
糞壁はその存在自体が壮大なネタだからね(と思いたいです。)
0268Kusakabe YouichiNGNG
In article >>266, 266 デフォルトの名無しさん wrote:

> とにかくこの人は言ってる事がかなりヤバイです、いやホント。

「ということにしたい」のですね? :)

> 構造体ポインタはちょっと、、とか平気で言っちゃう人もプロジェクトには居る訳ですね

意味がわからないですが...
「構造体ポインタは使わないほうがいい」という人がプロジェクトにいたりする
っていう意味ですか?

っていうか、そんな人が平気で存在できるようなプロジェクトや会社に
自分がいるっていう事実はどう認識しているのですか? :)



> 実際そう言う人とやってくのが仕事な訳ですよ、

自分のあまりにも情けない環境を「世の中のごくふつう」だと
思い込みたいからといって、事実をねじまげるには無理がありますね :)
0269Kusakabe YouichiNGNG
In article >>267, 267 デフォルトの名無しさん wrote:

> 糞壁はその存在自体が壮大なネタだからね

こういうのがいっぱい暴れて会話の邪魔をするところなんですね。
2chって。
0270デフォルトの名無しさんNGNG
Kusakabe Youichi先生は4徹でデバッグとかした事有りますか?
0271デフォルトの名無しさんNGNG
OpenDivX のコード読んだです (´ー`)
氏んだです (´ー`)
0272Kusakabe YouichiNGNG
In article >>270, 270 デフォルトの名無しさん wrote:

> Kusakabe Youichi先生は4徹でデバッグとかした事有りますか?

それって何ですか? > 4徹
0273デフォルトの名無しさんNGNG
>>269
えっネタじゃ無いんですか? (^^;
0274ikuNGNG
こんにちは。ikuと言います。
あ い うのデータを
CSVにあ,い,うという形で出力する方法を知りたいのですが,
教えて頂けないでしょうか?
それともう一つ,
もしその出力するCSV1にデータが存在していた場合,
初期化してからデータ出力をしたいのですが,
どうすれば初期化できるのでしょうか?
よろしくお願いします。m(_ _)m
0275Kusakabe YouichiNGNG
In article >>274, 274 iku <[email protected]> wrote:

> こんにちは。ikuと言います。
> あ い うのデータを
> CSVにあ,い,うという形で出力する方法を知りたいのですが,
> 教えて頂けないでしょうか?

ふつうに書けばいいのでは?
でも文字列は全部「"」で括ってたような > ふつうのCSV

> それともう一つ,
> もしその出力するCSV1にデータが存在していた場合,
> 初期化してからデータ出力をしたいのですが,

man fopen
0276お胸おっぱいNGNG
>>274
意味判らん…
空白で区切った "あ い う" を、カンマ区切りにしたいってこと?
0277デフォルトの名無しさんNGNG
なんで、こいつは、fjでほとんど発言しなかったfree()問題を
ここでしつこく語ってるかと言うと、fjでは突っ込まれるのが怖くて
発言できなかったから。
0278デフォルトの名無しさんNGNG
>>274

要するに、日本語を含んだスペース区切りのCSVを
コンマ区切りにCSVに直した言ってことか?

普通にスペースをコンマにReplaceすりゃいいじゃん。
C言語でやると漢字の2バイト目にスペースと同じ文字コードが
含まれてる可能性があって、分岐がめんどくさくなるような。
0279Kusakabe YouichiNGNG
In article >>277, 277 デフォルトの名無しさん wrote:

> なんで、こいつは、fjでほとんど発言しなかったfree()問題を
> ここでしつこく語ってるかと言うと、

はつみみですね。fjで何度か話題になったのは、
「exitするときにいちいちfreeコードは意味があるか?」という
話題なので、全然ちがう話題ですね。


> fjでは突っ込まれるのが怖くて発言できなかったから。

ということにしたいわけですね? :)
(それで私の発言は見なかったことにしてるのですね^^)
0280デフォルトの名無しさんNGNG
>>265
CODE COMPLETE 読みましょう。

私は dangling pointer 嫌いです。ただ C だと全面的に dangling pointer
を追放するのは難しい(いちいち NULL を自分で代入しないとならなず、現実
的ではない)から、諦めてますけど。

C++ を使う場合には「所有する」オブジェクトに関しては std::auto_ptr な
どのスマートポインタを多用しますし、また関連を張るために使うポインタに
ついては NULL or 意味のあるポインタ値が常に保たれるように注意します。
0281名無しNGNG
誰かさんの作ったexeファイルを
visualC++でそのプログラムを
見るにはどうしたらいいのんですか?
0282デフォルトの名無しさんNGNG
visualC++にドラッグしてドロップしろ
0283デフォルトの名無しさんNGNG
>>263
> Cでもできますね > ブロックの先頭以外に変数宣言を書く。

できませんよ。途中にブロックを作ってその先頭に変数宣言を
書くことはできますが。
0284Kusakabe YouichiNGNG
In article >>283, 283 デフォルトの名無しさん wrote:
> >>263
> > Cでもできますね > ブロックの先頭以外に変数宣言を書く。
>
> できませんよ。

いえできますよ。

> 途中にブロックを作ってその先頭に変数宣言を書くことはできますが。

そりゃもちろんできますね。でもそれは「ブロックの先頭」ですね。
0285  NGNG
>>281
逆アセンブルすればいい。MSDNをよく調べろ。
つーか、コンパイルがなんであるか良く分かってないだろ。
0286デフォルトの名無しさんNGNG
>>284
C99からはブロックの途中から変数宣言できるようになったんですか?
ANSI X3.159 の古い規格しか知らない物で。
0287  NGNG
ここはニュースグループじゃないんだから、無駄な引用はするなボケ。
しかも、articleじゃ無くてただのレス。
0288デフォルトの名無しさんNGNG
>>286
C99からできるようになったのよ。
http://std.dkuug.dk/JTC1/SC22/WG14/ 参照のこと。
厳密じゃなくてもいいなら http://seclan.dll.jp/ あたりもお手軽かも。

# 単にCと言った場合は混乱するなあ。規格の趣旨から言うと現行規格は
# ISO/IEC 9899:1999のみなんだけどさ。
0289Kusakabe YouichiNGNG
In article >>286, 286 デフォルトの名無しさん wrote:
> C99からはブロックの途中から変数宣言できるようになったんですか?

なってますよ。

for (int i = 0; ... みたいなのもできるし。

複合定数も、指定付き初期化も。
0290デフォルトの名無しさんNGNG
>>289
C99サポートしたコンパイラなんてまだ一般的ではないんだから、一言
「C99では」と前置きしとけ。
0291Kusakabe YouichiNGNG
In article >>287, 287    wrote:

> ここはニュースグループじゃないんだから(Iyぢ無駄な引用はするなボケ。

また「ニュースグループ」とかわけのわからないこと言うやつがいた :)
0292Kusakabe YouichiNGNG
In article >>288, 288 デフォルトの名無しさん wrote:
> # 単にCと言った場合は混乱するなあ。

混乱しないでしょ? override...じゃないや、えっとようするに
新しいのが古いのを上書きしてるんだし。
0293デフォルトの名無しさんNGNG
そろそろ荒らし対策にお願いでもだしとくか?
0294デフォルトの名無しさんNGNG
>>288
JIS があるやん。
0295288NGNG
>>292
> override...じゃないや、えっとようするに
outdate

> 新しいのが古いのを上書きしてるんだし。
288でもそのように書いたつもりですが。
ANSI X3.159-1989、ISO/IEC 9899:1990、ISO/IEC 9899:1999のそれぞれで仕様が
異なる場合はC89、C90、C99と明記することが多くありません? (いまだにC9Xと
呼んでる人もいるけど)
念の為、これはISO/IEC JTC1/SC22/WG14のmailing archiveやcomp.lang.cを読んだ感想です。
0296 ◆RubyOmS2 NGNG
>>295
C99に対応していないgcc2.95.3を使っている俺としては、
C99でしか使えないことは明記して貰うとありがたい。
0297Kusakabe YouichiNGNG
In article >>295, 295 288 wrote:
> > 新しいのが古いのを上書きしてるんだし。
> 288でもそのように書いたつもりですが。
> ANSI X3.159-1989、ISO/IEC 9899:1990、ISO/IEC 9899:1999のそれぞれで仕様が
> 異なる場合はC89、C90、C99と明記することが多くありません?

うーん、C90っていう言い方はあまり聞かないですね。
C89でまとめちゃってる気がする。

> (いまだにC9Xと呼んでる人もいるけど)

C99をそう呼ぶひとってのは、確実にC90とはいいそうにないですね。
0298288NGNG
>>297
> うーん、C90っていう言い方はあまり聞かないですね。
ほとんど一緒ですから。

> C99をそう呼ぶひとってのは、確実にC90とはいいそうにないですね。
そんなことないですよ。C99がdraftのころは自分のことをC9Xと呼びつつ、
ANSIを参照するときはC89、ISOを参照するとき(めったにないけど)はC90
と書いてました。その時のくせがまだ抜けない人もいるみたいです。
0299デフォルトの名無しさん NGNG
>>298
ネタにマジレスですか?
0300デフォルトの名無しさんNGNG
日下部さん御歳はいくつですか?
0301デフォルトの名無しさんNGNG
>>300
それがC言語と関係あるのか? 荒らしたいならプログラマー板の隔離スレに
いけ、ヴァカ。
0302namberNGNG
C言語の初心者ですが次のことがどうしてもわかりません。助言おねがいします。
int **a;
としたときの動的変数のメモリ確保の方法がわかりません。
例えば、
int a[3][3];
と同じ大きさのメモリを確保する場合どうしたらよいでしょう。
どうぞよろしくおねがいします。
0303デフォルトの名無しさんNGNG
>>302
int a[3][3] の置き換えならば、
int **a; ではなくて、
int (*a)[3]; であろう。
0304デフォルトの名無しさんNGNG
>>302
C FAQ見れ。
0305288NGNG
>>299
カコワルイがしょうがない。
0306デフォルトの名無しさんNGNG
char *s;
printf("%s", s);
printf(s);
これって実行結果同じ?
0307デフォルトの名無しさんNGNG
>>306

文字列に代入文字があると変わる。
だからprintf(s)は危険。
0308デフォルトの名無しさんNGNG
だれかC99について盛大に語って。
もう
「K&R読め」
の時代でなくて
「C99の規格書読め」
という時代なの?
0309307NGNG
>>306

とりあえず、printf関数の第一引数は文字列定数にするべき。
0310 ◆RubyOmS2 NGNG
>>306
#include <stdio.h>
main()
{
char *s;
s = "%%";
printf("%s", s);
printf("\n");
printf(s);
printf("\n");
}
--------------
%%
%

こんなふうに、、、
0311デフォルトの名無しさんNGNG
>>310

それはまだいいよ。

#include <stdio.h>
main()
{
char *s;
s="%d";/* %sとでもよい */
printf(s);
}

----------------------
こういうことをすると、必要な引数が足りなくて、無いものを参照しようとして実行時にエラーになると思う。
0312311NGNG
× /* %sとでもよい */
○ /* %sとかでもよい */
0313デフォルトの名無しさんNGNG
>>308
よし、盛大に騙ってやろう。
まず、C99では以下のような関数定義が可能になった。
もちろん今までのようなold styleも許される。

int
main(argc, argv)
  int argc;
  char **argv;
{ return 0; }
0314デフォルトの名無しさんNGNG
>>313
変数宣言をカーリーブランケットの外に出せるってこと?
0315デフォルトの名無しさんNGNG
>>313
              ∩
             | |
             | |
             | |
             | |
       ∧_∧  | |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ( ´Д`)//  <  先生!その場合プロトタイプ宣言はどうなりますか!
      /     /    \___________
     / /|    /
  __| | .|    | __
  \   ̄ ̄ ̄ ̄ ̄   \
  ||\            \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
0316C99ならここを読めNGNG
プログラミング言語 C の新機能
http://seclan.s5.xrea.com/c99d/
デニス・リッチー氏インタビュー――CとUNIXの開発者が見る未来
http://www.idg.co.jp/lwonline/backnumber/200101/20010112_01_report.html
0317デフォルトの名無しさんNGNG
>>313
・・・

一応突っ込んどくね。
0318デフォルトの名無しさんNGNG
>314-315
これが2chでいう
「ネタニマジレスカコワルイ」
という奴なのか・・・?
0319デフォルトの名無しさんNGNG
それは新しいっ!
0320デフォルトの名無しさんNGNG
>>315
プロトタイプ宣言など必要ない。
型の正当性はプログラマが保証すればよい。

あと、予約語にはentryというのが追加された。
これはエントリポイントを生成し、関数の途中から処理を実行できる。
例えば
int neta(int a)
{
  a++;
entry dayo:
  a++:
  return a;
}

gomen = neta(2);の場合、gomen:4となるが、
gomen = neta.dayo(2)の場合、gomen:3となる。
0321デフォルトの名無しさんNGNG
>>320
      .          ∩
                 |::|
                 |::|
        ∧_∧   |::| ./ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       (:∵´Α`)/:/< 先生!僕は先生しんじてます!
      /:∵:∵:∵:/   \____________
     /::/|:∵:∵:∵/
  __|::| .|:∵:∵:∵|
  \   ̄ ̄ ̄ ̄ ̄ ̄ ̄\
  ||\             \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||
0322デフォルトの名無しさんNGNG
722 :Kusakabe Youichi :01/12/04 18:06
In article >>710, 710 仕様書無しさん wrote:
> > そんな変なことを言うひともいるんですね。
> そうですよね、ふつー上京は東京に行くことだし、

はつみみです。

730 :仕様書無しさん :01/12/04 18:13
>>722
じょうきょう【上京】
地方から都へ行くこと。現在は,東京へ行くこと。
(新辞林 by 三省堂 @Yahoo! DICTIONARIES)
とありますよ。

「地方から都へ行くこと。」「東京へ行くこと。」のどちらが「普通」かと言
えば現在では後者といっておかしくないでしょう?

744 :スバリ回答 :01/12/04 18:20
民明書房国語辞典
じょうきょう【上京】 [名][自サ]地方から都に出ること。京都へ出ること。

やはり、日下部氏は正しかった。

752 :Kusakabe Youichi :01/12/04 18:27
In article >>741, 741 困った wrote:

> 清水国語辞典
> じょうきょう【上京】 ジヤウキヤウ[名][自サ]地方から都に出ること‥豕・惱个襪海函
>
> 誤植ですね。

民明書房国語辞典 じょうきょう【上京】 [名][自サ]地方から都に出ること。京都へ出ること。
0323デフォルトの名無しさんNGNG
HTML 上がりの 厨房です。
  printf("%s",str);
と書きますが、HTML的には
  printf("%s%",str);
と前と後ろと囲ってもらわないと気持ち悪いです。
0324デフォルトの名無しさんNGNG
>>322
その辞書そのものが捏造かもしらんじゃん。
コンパイラー トロジャンという言葉を知らんのか。
0325デフォルトの名無しさん NGNG
>>324
厨房相手に反応すんのやめようよ(・∀・)
0326デフォルトの名無しさんNGNG

  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ・∀・)< 辞典はやっぱり民明書房だね♪
 (    )  \_______
 | | |
 (__)_)
0327デフォルトの名無しさんNGNG
日下部先生尊敬してます
0328デフォルトの名無しさんNGNG
>>327
どうしようもないレスで age るな、バカ。日下部先生を鑑賞するスレはプログラマー板
にあるから、こっちに来るように。
0329デフォルトの名無しさんNGNG
todayを25置き換える場合、
#define Today 25
と
const int today=25;
と書くのとは、どちらがいいのでしょうかね?
みなさんはどちらを書くんですか?教えてください。(出来れば理由などもあればお願いします)
よろしくお願いします。
0330デフォルトの名無しさんNGNG
>>329
enum のほうがよいんじゃない?
理由:gdbで25がtodayに読める
0331名無しさん@お腹いっぱい。NGNG
#include <stdio.h>
#include <math.h>
int N;
double M=10.0+h,h,pi=M_PI;      ←ここのhと
void integ();
double f(double);
main()
{
h=1.5;
integ();
h=0.5;
integ();
void integ()       ←ここが
{
double daikei=0.,simpson=0.;
int i;
N=M/h;
for(i=-N;i<=N;i++){daikei +=f(i*h);}
daikei *=h;
for(i=-N;i<=N;i+=2){simpson +=4.*f(i*h);}
for(i=-N;i<=N-1;i+=2){simpson +=2.*f(i*h);}
simpson *=h/3.0;
printf("\n h=%lf\n",h);
printf("sqrt(pi)=%15.10e\n",sqrt(pi));
printf("daikei =%15.10e\n",daikei);
printf("simpson =%15.10e\n",simpson);
}
}
double f(double x)
{
return exp(-x*x);
}

コンパイルしてもうまくいかないんですけど、どうしてでしょうか?
よろしかったら教えてください。
■ このスレッドは過去ログ倉庫に格納されています