- PR -

C言語で初心者本を読んだ次の一手は?

投票結果総投票数:55
ポインタを徹底的に 47 85.45%
コンパイル周辺を理解しろ 3 5.45%
関数群を叩き込め 2 3.64%
初心者本もう一冊? 3 5.45%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-08-17 01:42
よく、 a += 1; という表現でインクリメントしていました。
しかし、C言語でのプログラミングを始めて数年も経た後、ある「捻くれた本」、、
「XXを256倍使う・・」シリーズ辺りか何か(本の名前は忘れてしまいました。)で、インクリ
メントでないにせよ、 a =+ 1; という表現に出くわし、これでコンパイルエラーが出ない
のか、と己の勝手な先入観を叩き潰されてショックを受けました。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-08-17 13:30
 まぁ、捻くれていたのは私の方だったようですな(プ
勝手に「できない」と思い込んで。。。

a = +1; こうかけばまだ直感的に理解し易かったかも知れませんな。

 ここ、面白ろおまっせ。

http://www.kouno.jp/home/c_faq/
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-08-18 14:21
引用:

はにまるさんの書き込み (2004-08-16 23:00) より:
○AllocBuffer( &pBuffer, 20 );
○*pBuffer = malloc( size );


ご理解されたようですね。ただ、これでも動くでしょうが、AllocBufferの仮引数と実引数
の型をちゃんと合わせておきましょう。
#Cだと型チェックが甘いのでコンパイル通るでしょうが

引用:

多分、 Windows98だから(メモリ保護が弱いから)すんなり動いたのかな?


初期化しないローカル変数の値は不定なので、偶然アクセス可能な領域を指している場合も
あります。アクセス違反で落ちるよりも、下手に動いてしまってメモリ破壊をしてしまう方が
やっかいなバグの原因になります。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-08-18 21:32
引用:

ukさんの書き込み (2004-08-18 14:21) より:
初期化しないローカル変数の値は不定なので、


自動変数を使う場合の注意点ですね。
あと、自動変数はふつうスタックを利用して実現されていることを
知っていると、ひょっとしたら役に立つことがあるかも。
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-08-19 14:16
はにまるです。
引用:

コブラさんの書き込み (2004-08-17 13:30) より:
 まぁ、捻くれていたのは私の方だったようですな(プ
 勝手に「できない」と思い込んで。。。


いやぁ案外、素直だから思い込んでいたのかもしれませんよ!
今の私は、「己の勝手な先入観」を叩き潰れまくっています。

引用:

ukさんの書き込み (2004-08-18 14:21) より:


課題の提供ありがとうございます。「己の勝手な先入観」が1つ叩き潰れました。
「己の勝手な先入観」と言うのは、
標準関数の受取引数がchar型ポインタ時に文字列を渡す場合、
「&」演算子の指定をしないですよね。
だから、関数側の引数がポインタ変数なのか普通の変数なのかによって
呼出側の処理で勝手に変数の値若しくはアドレスを渡しているものだと勘違いしていました。

そうです、文字列なので文字の配列だったんですね...

おかげ様で、変数のアドレスと値をprintfする癖が付きました。

引用:

ぽんすさんの書き込み (2004-08-18 21:32) より:
あと、自動変数はふつうスタックを利用して実現されていることを
知っていると、ひょっとしたら役に立つことがあるかも。


スタックって push & popの奴ですか?
うんんん、どうやって利用するか想像出来ない...
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-08-19 15:07
引用:

はにまるさんの書き込み (2004-08-19 14:16) より:
スタックって push & popの奴ですか?
うんんん、どうやって利用するか想像出来ない...


セキュリティホールをつくのにとっても重要です。
# 冗談です、信用しないように。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-08-20 01:08
引用:

はにまるさんの書き込み (2004-08-19 14:16) より:
スタックって push & popの奴ですか?


そうです。ここでは、アセンブラで push、pop するものを指しています。
詳しくは、なにか解説記事とか解説書とかを読んで頂くとして...
# 「自動変数 スタック」で検索すればいろいろヒットすると思います。

このスタックは利用できる数に制限があるので、自動変数は無尽蔵に
使えるわけではありません。
・・・というのが第一点で。

第二点は、なちゃさんが書かれていることですね。
セキュリティホールになってしまうので gets は絶対に使っちゃダメ、
とかの話です。

[ メッセージ編集済み 編集者: ぽんす 編集日時 2004-08-20 01:09 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-08-20 14:01
引用:

スタックって push & popの奴ですか?
うんんん、どうやって利用するか想像出来ない...


一般的なデータ管理の手法としてのスタックではなく、処理系(通常はOS)が用意するスタック
領域の話です。たとえば関数呼び出しの場合は、そのスタック領域に関数からの戻り先の
アドレスや引数の値を積んで(push)呼び出し、呼び出された関数は引数の値や戻り先の
アドレスをスタックから取得(pop)して処理をおこないます。よくあるバッファオーバーラン
によるセキュリティホールは、スタックに積まれた戻り先のアドレスを書き換えてしまうこと
によって実行されます。

スキルアップ/キャリアアップ(JOB@IT)