char *c[43] = {"C言語のことは漏れに聞け!"};

このエントリーをはてなブックマークに追加
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しろ。
むしろ質問する前にWEBで検索するのが常識だ。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行け。
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行け。
コンパイラを探しているなら >>2 を見よ。
また、このスレは論争スレへのポインタでもある。

上記を逸した場合の結果は激しく未定義とする。

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

前スレ
c[42] = "http://pc3.2ch.net/test/read.cgi/tech/1037101156/";
【コンパイラ】
gcc
http://gcc.gnu.org/

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

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
死ねよてめー・・・
6デフォルトの名無しさん:02/11/14 22:44
              ヽ \
             / \ \
       ∧_∧/
      (;´Д`)     i i i
      /    ヽ _   i i i--、
     ./| |   | |   ̄ ̄ ̄ |:::::|.
    / \ヽ/| |       ノ__ノ..
   /   \\| |
   / /⌒\ し(メ    .i i i . .
 / /    > ) \  ノノノ
/ /     / /    .\_  ザックザック
し'     (_つ   /:::::/::...   /ヽ
          ; "ノ・ ./∴: / )i iヽ-、_へ    ,ヘ
          '',, : :―― / / i i i iヽ . ̄ ゙― ノ /
    n_    _/;    i  .ノ / /ノ-' ̄ ゙ ― 、__ノ
  _ノ 二二二、_( _Д_ ;)-ヽ_ノ-'>>1
  ゙ー ''~      ∨ ̄∨
キタ━━━━━━━(゚∀゚)━━━━━━━ !!!!!

>>1
8デフォルトの名無しさん:02/11/14 22:46
 ある日突然他人のPIDが見れるようになった。
 
                   PID 1192
     ∧_∧           ∧_∧
   Σ( ´∀`)          (´∀` )
     (    )           ( >>1 )
     |  |  |            | |  |
    (____)__)           (__(___)
 
 
    ドキドキ・・・         PID 1192
     ∧_∧           ∧_∧
    (; ´∀`)KILL 1192    (´∀` )
     (    つ          ( >>1 )
     |  |  |            | |  |
    (____)__)           (__(___)
 
 
     ヤター!
     ∧_∧
   Σ( ´∀`)           フッ・・・
    ⊂    つ           ...::::...
     |  |  |            :::::::::::::::
    (____)__)           (__(___::
>>1
乙カレー。
10デフォルトの名無しさん:02/11/14 22:46
まもなくここは 乂1000取り合戦場乂 となります。
 
    \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!      ,,、,、,,,
    /三√ ゚Д゚) /   \______________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,,U (:::::::::::)  ,,、,、,,,         \ ぶーぶーぶー /
      //三/|三|\              タリー
      ∪  ∪     (\_/)タリー    タリー   
                (  ´Д)    タリー  タリー
                /   つ  (\_/)   (\_/)ノ⌒ヽ、
               (_(__つ⊂(´Д`⊂⌒`つ(´Д` )_人__) ))
111:02/11/14 22:46
こっちが正統派だな。
C言語質問所 <43>はあきらかな荒らしだ
1 に賛同。
>>3 >>6 >>8 >>10
          ,. -───-: 、
          /::::::::::::::::::::::::::::::::\
          / '':::::::::::::::::::::::::::::::''''' ヽ
         !::::::::::ィ::ハ:::;::::::::::::::::::::::::::!
       i::|:::i::/l/  i;::ト、:、:::i:::::::::::::::i
       |::i/レ'-i''  'ヽi-ヾ,ヽ!:::::::::::::l
       |::ハ -‐-   -─- i::::::::::::::l
       |::::::l|  |     |  | |::::::::::::::!
       |::::::ヽ | r---、! l,.!::::::::::::::l
       l::::::::::::`;'-'=,‐,='r''i~!:::::::::::::::|
         !:::::::l、::r'"´'. ' l ' i::::::::iヽ:::l
       i:l、:::|./、_____,l::::;l:/‐'ヽ!
        '!ヽ;i'>l____,.//-‐'''"ヽ
            !/ |.VVVVVVVV.lV\!. i
         |  |        |    l
#include <stdio.h>

int main(void)
{
  int i;
  for(i=0; i<43; i++)
    printf("%s\n", c[i]);

  return 0;
}
>>14
1 を 100 回読んで出直してこい
>>15
なんで?
>>1に注目

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行け。
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行け。
コンパイラを探しているなら >>2 を見よ。
また、このスレは論争スレへのポインタでもある。 ←キタ━(・∀・)━!
>>4-5
の過去ログリスト、カンマ演算子で区切るってのはどうだろう?
その方がほんの少しすっきりする気がする。
              ヽ \ 
             / \ \
       ∧_∧/
      (;´Д`)     i i i
      /    ヽ _   i i i--、
     ./| |   | |   ̄ ̄ ̄ |:::::|.
    / \ヽ/| |       ノ__ノ..
   /   \\| |
   / /⌒\ し(メ    .i i i . .
 / /    > ) \  ノノノ
/ /     / /    .\_  ザックザック
し'     (_つ   /:::::/::...   /ヽ
          ; "ノ・ ./∴: / )i iヽ-、_へ    ,ヘ
          '',, : :―― / / i i i iヽ . ̄ ゙― ノ /
    n_    _/;    i  .ノ / /ノ-' ̄ ゙ ― 、__ノ
  _ノ 二二二、_( _Д_ ;)-ヽ_ノ-'>>1
  ゙ー ''~      ∨ ̄∨
>>18
どれがどの番号だか数えないと分からんから却下却下却下却下却下。
コマンド引数ってキャラ型ですよね?
数字をソース中で使う時はatoiしないとだめですか?
>>14=Cスレの歴史一覧プログラム
2318:02/11/14 23:00
>>20
行末のセミコロンをカンマに変えるだけ(それ以外は変更なし)
という意味で言ってるんだが。
もう>>1は引っ込みがつかなくなっているな。
わざとネタふりしそうだ。
引っ込む必要がどこにあるのかと問いたい
>>21
その通り。
別に、自作した関数で変換しても構わないが。
>>14
for(i=0; i<43; i++){
    if(i > 0)
        printf("%3d ", i);
    printf("%s\n", c[i]);
}
の方がよさげ
糞スレは





























                                                              落ちろ
29デフォルトの名無しさん:02/11/14 23:13


C言語質問所 <43>
http://pc3.2ch.net/test/read.cgi/tech/1037134356/

char *c[43] = {"C言語のことは漏れに聞け!"};
http://pc3.2ch.net/test/read.cgi/tech/1037281411/
30デフォルトの名無しさん:02/11/14 23:11
み、みんな!
 お、落ち着け!

     /∧_/∧      /∧_/∧    オロオロ
   ((´´ДД``;;))    ((;;´´ДД``))    オロオロ
   //    \\     //   \\ オロオロ
  ⊂⊂((  ヽノヽノつつ ⊂⊂ヽ// )) つつ  オロオロ
   しし((_))       ((_))JJ

反応しちゃダメだ!
31デフォルトの名無しさん:02/11/14 23:14
唐揚げ
>>30
落ち着けよ
33名無し言語:02/11/14 23:14
はじめて、使います。今Cを勉強しようと思ってるんですが、
言語が全然読めなくてふりがなが付いている本を探しているのですが無いですか
教えて下さい。お願いします。
>>33
書籍スレに逝ってください。
>>33
ネタは「スレ立てるまでもない〜」でやってください
C言語を俺に聞け 第48回ぐらいか?
http://pc3.2ch.net/test/read.cgi/tech/1037279828/l50
>>33
書籍スレとマルチネタだろ。消えろ。
リンク貼っとこう。
お勉強ページ 勝手にリンク 第2版
http://pc3.2ch.net/test/read.cgi/tech/967778156/-100
39言語名無し:02/11/14 23:20
わかりました
>>36
荒らし認定。
           ☆ シャットダウン中・・・ ☆
┌──────────────────────―─┐
│                                    |
│                                    |
│                /■\                    |
│               (´∀`∩)                   |
│               (つ  丿                |
│                ( ヽノ                    |
│                し(_)                |
│                                    |
│             Now Onigiring. ...               |
│                                    |
│                                    |
│         スレッドを終了しています。.          |
│         しばらくおにぎりでお待ちください。        |
│                                    |
└───────────────────────―┘
    シャットダウンの途中でエラーが発生した場合は、
      「無視(I)」 を選択して続行してください。



      「無視(I)」 を選択して続行してください。
           ☆ シャットダウン中・・・ ☆
┌──────────────────────―─┐
│                                    |
│                                    |
│                /■\                    |
│               (´∀`∩)                   |
│               (つ  丿                |
│                ( ヽノ                    |
│                し(_)                |
│                                    |
│             Now Onigiring. ...               |
│                                    |
│                                    |
│         スレッドを終了しています。.          |
│         しばらくおにぎりでお待ちください。        |
│                                    |
└───────────────────────―┘
    シャットダウンの途中でエラーが発生した場合は、
      「無視(I)」 を選択して続行してください。



      「無視(I)」 を選択して続行してください。
41=36 頃せ
>>27
> for(i=0; i<43; i++){
43が気持ち悪いので

#define CMAX ((int)(sizeof(c)/sizeof(c[0])))
for(i=0; i<CMAX; i++)
4543:02/11/14 23:23
           ☆ シャットダウン中・・・ ☆
┌──────────────────────―─┐
│                                    |
│                                    |
│                /■\                    |
│               (´∀`∩)                   |
│               (つ  丿                |
│                ( ヽノ                    |
│                し(_)                |
│                                    |
│             Now Onigiring. ...               |
│                                    |
│                                    |
│         スレッドを終了しています。.          |
│         しばらくおにぎりでお待ちください。        |
│                                    |
└───────────────────────―┘
    シャットダウンの途中でエラーが発生した場合は、
      「無視(I)」 を選択して続行してください。



      「無視(I)」 を選択して続行してください。
4643:02/11/14 23:26
      ∧_∧      ∧_∧
     _( ´∀`)    (´∀` )
  三(⌒),    ノ⊃    ( >>1 .)   おまいは
     ̄/ /)  )      | |  |
    . 〈_)\_)      (__(___)
         ∧_∧  .∧_∧
         (  ´∀) (´∀` )
       ≡≡三 三ニ⌒) >>1 .)    何考えて
        /  /)  )  ̄.| |  |
        〈__)__)  (__(___)
           ∧_∧  ,__ ∧_∧
          (    ´)ノ ):;:;)∀`)
          /    ̄,ノ'' >>1 . )   このスレ立てたんだよ
         C   /~ / /   /
         /   / 〉 (__(__./
         \__)\)
                      ヽ l //
            ∧_∧(⌒) ―― ☆ ―――
            (    ) /|l  // | ヽ   ヴォケがーー!
           (/     ノl|ll / / |  ヽ
            (O  ノ 彡''   /  .|
            /  ./ 〉
            \__)_)
4743:02/11/14 23:26
  ヽ、.三 ミニ、_ ___ _,. ‐'´//-─=====-、ヾ       /ヽ
        ,.‐'´ `''‐- 、._ヽ   /.i ∠,. -─;==:- 、ゝ‐;----// ヾ.、
       [ |、!  /' ̄r'bゝ}二. {`´ '´__ (_Y_),. |.r-'‐┬‐l l⌒ | }
        ゙l |`} ..:ヽ--゙‐´リ ̄ヽd、 ''''   ̄ ̄  |l   !ニ! !⌒ //
.         i.! l .:::::     ソ;;:..  ヽ、._     _,ノ'     ゞ)ノ./
         ` ー==--‐'´(__,.   ..、  ̄ ̄ ̄      i/‐'/
          i       .:::ト、  ̄ ´            l、_/::|
          !                           |:    |
             ヽ     ー‐==:ニニニ⊃          !::   ト、
おれたちはとんでもない思い違いをしていたようだ。これを見てみろ。
まず「クソスレ」を英字で表記する
『KUSOSURE』
これを逆にすると、
『ERUSOSUK』
そしてこれを更に日本語に直すと
『エルソサク』
スレを立てたのが>>1と言う事を考えれば末尾に『真性DQN』を加えるのが当然だ。
すると導き出される解は
『エルソサク真性DQN』
そして最後の仕上げに意味不明な文字『エルソサク』
これはノイズと考えられるので削除し残りの文字を取り出す。
するとできあがる言葉は・・・・・・『真性DQN』。

つまり!『真性DQN』とは『まさに>>1』を表す言葉だったのだ!!
4843:02/11/14 23:27
 \もうね、アボガド/   \ 馬 /     \ 鹿 かと/
                            ∩   ∩
                            | つ  ⊂|
                   ∧ノ~        ! ,'っ _c,!
      ヽ           ミ| ・  \     ⊂/  ・  \
     γ⌒^ヽ        ミ|  ... '_)     | __,,▼
     /:::::::::::::ヽ.       ミ|. (,,゚Д゚)        |・ (,,゚Д゚)
     /.::::::::(,,゚Д゚)         | (ノ  |)      | (ノ  |)
    i:::::(ノDole|)         |   馬 |         |・・ .鹿 |
     ゙、::::::::::::ノ         人.._,,,ノ      ι.・,,_,ノ
      U"U           U"U         U"U
4943:02/11/14 23:28
    /|| ミ
   / ::::|| ミ
 /:::::::::::||
 |:::::::::::::::|| ̄ ̄ ̄ ̄||
 |:::::::::::::::||│ /  ||
 |:::::::::::::::|| ̄\   ガチャッ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 |:::::::::::::::||゚ ∀゚)─ ||  < クソスレ停止スイッチオン!をやっていいですか?
 |:::::::::::::::||_/    ||    \______________________
 |:::::::::::::::||│ \   ||
 |:::::::::::::::||∧ ∧∩ ||
 |:::::::::::::::|| ゚∀゚)/  .||
 |:::::::::::::::||∧ ∧∩ ||
 |:::::::::::::::|| ゚∀゚)/ .||
 |:::::::::::::::||    〈  .||
 |:::::::::::::::||,,/\」  .||
 \:::::::::::|| ̄ ̄ ̄ ̄
   \ ::::|| 彡
    \|| 彡        \ │ /
                 / ̄\  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< 停止スイッチ
                 \_/  \_______
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< オン!
. クソスレ〜〜〜! >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /
                    "






























                                                                               
Kitty が2匹ほどいるな
52デフォルトの名無しさん:02/11/14 23:29
もうええかげんにせえよ。
アクセス禁止くらいたい奴が 1 人いるらしい
>>1
もうええかげんに糞スレ乱立するのはやめろよ
アクセス禁止くらいたい奴がいるらしいな
>>52
そういいながらあげんなよ。
あっちのスレの荒らしは正当化して、こっちを荒らしているやつには悪金か(ワラ
>>53 >>55
やれるもんならやってみろよ(藁
だれか望みを適えてやれよ。
削除理由は・・・
あっちのスレは立てるタイミングからして糞だろ。
既に次スレがあるのに新たに立てた>>1が糞
「あっちのスレ」はそもそも板荒らし。
>>1はよほど自分でスレッドを立ててみたかったんだろうか・・・
main関数を他から呼ぶ場合ってあるんですか?

void hoge(void)
{
int n;
n = main();
}

みたく。
>>61を言いたいがために早くスレを立てたあっちの>>1
>>64
ない。
もし呼んだら何か手を打たないと終わらないかスタックがあふれるぞ。
>>64
呼ぶことを許しているコンパイラは多いが、規格では禁止されている。
           ☆ シャットダウン中・・・ ☆
┌──────────────────────―─┐
│                                    |
│                                    |
│                /■\                    |
│               (´∀`∩)                   |
│               (つ  丿                |
│                ( ヽノ                    |
│                し(_)                |
│                                    |
│             Now Onigiring. ...               |
│                                    |
│                                    |
│         スレッドを終了しています。.          |
│         しばらくおにぎりでお待ちください。        |
│                                    |
└───────────────────────―┘
    シャットダウンの途中でエラーが発生した場合は、
      「無視(I)」 を選択して続行してください。



      「無視(I)」 を選択して続行してください。
>>67
禁止しているのはC++じゃない?
>>67
たしか禁止してるのはC++だったような・・・
だとしたらmainがint型を返す意味ってあるんでしょうか?
いつも0しか返したことないんですけど…
>>71
エラーのときは 0 以外を返したほうがよいね
>>71
OSが受け取るから、意味があるかどうかは環境によるんじゃないかな。よくわからんが。
でもmainの型はintと決まっているからintを返すべき。
>>61
だからあっちは次スレじゃないって。
いつできてんのよ。みてみろヴぉけ
>>72
int n = main();
とかできるんだったらエラーの種類によって違う値を返すのはわかるんですけど
そうじゃないのに値を返す意味があるのかなーと
>>74
なんて気にしてるのはお前だけ。
>>75
システムに返すから。
>>75
規格で決まってるから。それが全てだ。
0は正常終了、1は異常終了を意味する。
これだけ覚えとけば十分。
void main()なんて書き方は絶対間違ってる
似たような質問で、exit(0)の引数はエラーが重大になるほど大きな値を入れるように
聞いたんですけど、やっぱりこれも自分じゃその引数の値によって処理を変えられるわけじゃ
ないですよね。
だからexitの引数自体もあんまり必要性がわからないです。
8067:02/11/14 23:48
>>69-70
確認したらそうだった。スマソ。

・・・C++ 知ってる人は回答しない方がいいのかなあ。
>>80
CとC++の違いを把握してる人は回答してもいいのでは
>>79
だ・か・ら。
main() のリターンコードや exit() の引数は、そのプログラムが使うんじゃなくて、
そのプログラムを呼び出したシェルが使うんだよ。
プログラムが正常終了したのかどうかとか。
>>79
バッチファイルとかシェルスクリプトとかメイクファイルとか書く人が値によって処理を
かえるの!
オレも訊きたいけど、緊急脱出するとき
return(1);と
exit(1)だったらどっちがいい?
>>82
てことはmainもexitも0かそれ以外を返せばいいだけで、エラーの重大度によって
exitの引数を変えても意味は無いんですか?
>>84
exit
>>84
とりあえずreturn 1;に括弧はいらないと思う。
>>84
時と場合によるだろ。
main以外ではreturnとexitじゃ効果が変わるし。
>>87
オレはつけるよ。癖でさ。
なんか見やすい。ってかかわんねーか
>>88
どういうふうに?
>>84
ただちにプログラムが終了するなら return でもいいけど、exit() が望ましい。

>>85
意味あるかどうか無いかはプログラムによる。
外側に、単に正常終了か異常終了かを伝えたいだけならそれでもいいし。
もっといろいろな場合分けをしたい場合はそれに応じたコードを返す必要がある。
普通に関数を作って、エラーコードを返すような場合と同じ。
>>90
main以外でreturnしてもexitのようにプログラムが終了したりしないだろ。
>>89
もれはむしろ見にくいなぁ
まあコーディングスタイルの話はやめとこ
>>92
そりゃそうだw
逝ってきます
return(1)ってやる奴ってint i=(1);って書いてるのか?
>>93

俺的にはあとからソースをGrepかけるときとかに
正規表現で引っ掛けやすいからかっこ付ける派。
>>89
漏れも、昔は付けてた。
でも一旦裸にしたら、それが快感になった。
>>90
おいおいmain以外の関数書いたことないのか・・・
>>95
=のあとの括弧は、オレは後で必要になったときつける。
でもreturnみたいに関数っぽいと、癖で()ってやっちゃって
消すのめんどいから「←」をポチッっとな
100デフォルトの名無しさん:02/11/15 00:00
>>98
そういう人もいる。
なんせ質問すれだから・・・

上級スレってないんかああ
100
return のどこが関数っぽいのやら。
>>102
関数っぽいじゃん
文字数もprintfとかと同じくらいだし。
どんなソースでも使うから。変数っぽくはねーだろ
>>103
あなたの辞書に、変数と関数の他にキーワードという単語を追加してください。
>>91
その「場合分け」は自分がするのわけじゃないんですよね?
そのうち、continueとかbreakにも()つけそうな予感。
return(0);
return(hoge());
return(foo ? 0 : 1);

↑すべて無駄・アホ。どこが見やすいのやら。
というか付けようが付けまいがたいしてかわんねーよ
いちいち突っ込んだりするからこんな事なるんだろ
お前ら大人になれよ
>>108
そういう君は、
a=(b+c);とかを見ても何も言わないんだ。
偉いね。
>>108
美意識を持て。
>>105
「自分」 が 「プログラム」 という意味ならそれで正しい。
ただし、そのプログラムを呼び出すシェルスクリプトもあなたが書くなら
間違っている。
つまり、シェルスクリプトは (必要であれば) プログラムのエラーコードを
受け取り、解釈して動作を変えなければいけない。
>>108
わざわざあげるなんてよっぽど必死なんですね(ワラ
てめぇらC FAQ 17章 スタイルの1を読んでください。
>>105
「自分」 が 「プログラム」 という意味ならそれで正しい。
ただし、そのプログラムを呼び出すシェルスクリプトもあなたが書くなら
間違っている。
つまり、シェルスクリプトは (必要であれば) プログラムのエラーコードを
受け取り、解釈して動作を変えなければいけない。


つーか、うまく書き込みできねーYO・・・
>>108
自分の意見が通らないからって勝手に人を子供扱いして自分を保ったりしないで、
もっと大人になれよ。
なんか今日おかしいね。>>111の時間がずれてる
そろそろ関数適用の()と優先順位を変える()が一緒なのが悪い論争だろうか。
>>117
キャストも加えてくれ。
時が逆流してるな
>>111
おー、なるほど。ありがとうございます。
てこたぁ俺が今までexitの引数をいろいろ変えてたのは無意味だったわけか・・・
>>121
受け側が全然無視してる場合はそうだね。
特に Windows でプログラムを書く場合においては、デバッグ時に終了理由を
確認する以外に用途が無い。
シェルスクリプトやバッチ書いてみりゃありがたみがわかるってもんよ
文字列の終端文字が\0であることは保証されていますか?
終端文字が\0でないのってあったっけ?
>>124
されてます。
>>126
strncpy()
>>127
そういう意味で言ってるんじゃないんだが...
129デフォルトの名無しさん:02/11/15 00:56
いや、保証するしないの話じゃないと思うが。
保証はされてないだろ。
>>130
されてるよ。
定義の問題かな。\0終端されてないものは文字列とは言わない。
文字列「定数」なら終端は'\0'だし、
文字列を扱うライブラリ関数は終端に'\0'を入れる慣習を前提としているが、
たんなる文字配列のどこかに'\0'が入っているという保証はない。
文字列の管理方法によってどうしでも変わるだろ。
例えば先頭 2 bytes に長さを格納して、終端文字なんかつけないやり方だってある。
あとこれは稀だが、終端文字が全 bit On ってな場合もある。
そもそも、<string.h> のライブラリを使うにしたって、文字列の終端文字が '\0'
であることが保証されている、じゃなくて、使う側が保証しなくちゃいけない。
124の質問があいまいだな。
>>133が正しい
C言語には「文字列」はない。
charの配列を\0で区切ることで、
それっぽいことを実現しようと
している。

んじゃなかったですか?
だから、文字列の終端を表す文字が '\0'であることが
規格で保証されているか? っていう話だろ。
だったら保証されてる。
どこにそんな事が書いてある?

文字列リテラルの終端文字が\0であることは保証されている、なら正しいが。
だから「文字列」という言葉の捉え方次第だろ。
一般的な意味合いにとるか、Cの標準文字列操作関数がサポートしている
データ形式に限定するか。
>>137
文字列といえば文字列リテラルのことだと思ってる?

>>138
その通り。
>>139
つまりこう言いたいのか?
「 '\0'で終端された文字の列を文字列と呼ぶ。
したがって、定義より文字列の終端は常に'\0'である。」

それを「保証されてる」と言ったら誤解しまくるだろー。
>>139
>>134 の下 2 行を嫁さんにしろ。
今後このスレでは「文字列」という言葉は使わずに、文字列リテラルか文字配列を使うこと。
144136:02/11/15 01:17
うーむ、やはりC言語は難しいですね。
137のような認識だと、バッファオーバーフローとか
頻発するかも。

>>141
>文字の列
ダサい表現ですね (w
>>143
#include <string.h>
にプロトタイプが入ってるのは「文字列リテラルを扱う関数」ですか、
「文字配列を扱う関数」ですか?

俺は「文字列を扱う関数」だと思ってたよ。

>>144
ハァ?
列(sequence)ってのは普通の計算機用語で、
ダサいも何もないが…

まあ、厨は見たことないかもな。
>>141,142
そりゃどんなものでも保証する側は存在するでしょ。
でもそういうのを保証されてるというんじゃないのかな。
ま、水掛け論にしかならないのでもうやめるけど。
>>145
文字列リテラルと文字配列を扱う関数
149デフォルトの名無しさん:02/11/15 01:21
>>145
文字ポインタを扱う関数
>>144
VB厨は黙る!
規格にはstrcpyやstrcmpは文字列(string)を受け取るとかいてあるよ。
もちろん文字列リテラルに限った話じゃない。
152144:02/11/15 01:27
えー、「文字の列」って言葉として不自然な
感じを受けませんか?
計算機用語としてどうかは知りませんけど。
いや話がかみ合わなくなるから便宜的に明確に区別しようという話であって・・・
どっちでもいい話題なら区別しなくていい。
つーか、'\0' で終端がつけられたデータ列を文字列と呼ぶなら、やっぱり
保証するしないの話じゃないと思われ。
ペンキで赤く塗ったものは赤い事が保証されていますかと訊ねるようなものだ。
あー、つまりこういうので合意できるんでないか。

Cの標準では、文字列をあらわすとき、終端に'\0'を入れる約束になっている。
文字列リテラルは必ずそうなっているし、文字列を扱う関数は
入力がその約束を守っていることを前提としている。

しかし、もちろん文字列を扱っているつもりなのに'\0'で正しく終端されて
いない場合もありうる。
自分で文字列をいじるプログラマは、自分でその約束を守らなければならない。

したがって元々の質問 >>124 は曖昧だ。
「文字列を受け取る関数では、'\0'で終端されていると思ってよいですか?」なら答えはYes。
「文字列リテラルの終端は'\0'と保証されていますか?」もYes。
「文字列(ということになっている)配列は、必ず終端に'\0'が入っていますか」なら、
それを保証するのはプログラマの責任。
さあ!集まった!集まったああ!
Cスレ名物の論争だよ!!
ほらそこの兄ちゃん!
黙ってみてるだけじゃなくて、あんたも参加していってよ!
さあ、さあ本日のメインイベント!
「文字列ってなんだ( ゚Д゚)ゴルァ!」
の始まりだよおおお
>>152
計算機用語としてはまったく不自然でない。
計算機用語がそもそも不自然だというならそうかも知れんが、
ここで使うのはまったく問題ない。
158135:02/11/15 01:36
つまりオレが正しかったのか・・・

知ったかなオレ(・∀・)イイ!
159137:02/11/15 01:37
だから、文字列リテラルでもライブラリでもいいよ別に。

論点はそこじゃなくて、俺が言ったことを別の言い方で
表現すると、そのCの規格内で定義されている「ナル文字」
が '\0'以外の場合があり得るかって聞いてんだろ?
って言ってるんだよ。

お前ら意味を厳密に考えすぎなんだよ。
質問者の意図とレベルをちったあ考えて合わせてやれよ。
>>154
あんたは変数を「既約分数」と名づけたら、
プログラマが何もしなくても誰かがずっと既約分数であることを
保証してくれるとでも思ってるのか?
ハァ?
160 の逝っている事をどう受けとっていいかわかんねー
>>154
たとえが悪いな。ペンキにしろよ。

おまえが赤く塗った壁が風化して色が落ちていっても、お前は赤だといい続ける
他人が見ればどうみても黒いのに・・・
>>137
曖昧な質問を君がそう解釈したのは分った。
なら、「こういう解釈だとすればこうだ」と答えればよい。
単に「保証されてる」じゃ誤解するに決まってるだろ。
>>159
質問者は論争を呼ぶためにわざと曖昧な質問にしてるんだから、
乗ってやらなきゃ悪いだろ(藁
166154:02/11/15 01:42
   ||
 ∧||∧
(  ⌒ ヽ トゥトゥトゥマシェーリー
 ∪ 。ノ    トゥトゥトゥマシェーリー
  ∪∪

漏れそんなに変な事言ったかなあ・・・??
お前らが目覚ますような名言があるんだよ。

なせばなる!

ナル文字がどうとかじゃねーんだよ。
気合でなんとかなるんだよ。
それが男気ってもんだよ。
オレはそう思うよ。
168137:02/11/15 01:43
>>164
確かにあんたのいう通りだな。
169152:02/11/15 01:42
>>157
そうですか。
「配列」なら違和感なく受け入れられるんですが・・・。
まあ、「配列」ってのも知らない人には変な言葉でしょうしね。
141さん、すいませんでした。


てか、ネタのつもりだったんですが。
叩かれまくりたい 167 (COBOLer) の登場
せっかく155でまとまったと思ったら、また話が拡散して
きましたか?
>>162
char string[] = "foo";
今後、書き換えていっても、stringが常に'\0'で終端されていることが
「保証」されてるのか?
結局誰が一番的をえてるの?
vectorもsequenceもlistもstringも
「一列に並んだもの」という意味だね。
…いや、ただそれだけ。
>>165
反論できないでその言い訳カコワルイ
>>172
書きかえれないですが何か?
>>176
ププ)
ネタ?
>>173
俺は的は要らない。
>>176
え?constついていないよ?
>>171
いや、あとは論争好きのやつらが楽しんでるだけ。
まあ、俺は >>155 で特に不満はないよ。みんなそうじゃない?
>>176
・・・・・・えぇ?!
>>176 へ怒涛の突っ込み
>>176
ポインタじゃないから書き換えられる。
stringがポインタの場合は未定義
184デフォルトの名無しさん:02/11/15 01:49
データa,bをファイルから入力し、
四則演算の結果s,d,p,qをa,bと共にファイルに出力する
のって・・どうするの?
185デフォルトの名無しさん:02/11/15 01:49
>>176
え?
186デフォルトの名無しさん:02/11/15 01:49
文字列の終わりは$だろ。
わざわざ「何か?」などと書かなくてもつっこみ放題
なんだよ、収束しちまうよ。
もっと煽ろうぜ(w
質問 キターーー!!
>>184
読み込んだものをsscanfやstrto*系関数を使って数値にしたら?
191デフォルトの名無しさん:02/11/15 01:49
char *string = "foo";
>>184
どうするのってどこからわかんねーのよ。
ファイル操作か?四則演算か!?
ファイル操作がなきゃできるのか?
   ||
 ∧||∧
(  ⌒ ヽ トゥトゥトゥマシェーリー
 ∪ 。ノ    トゥトゥトゥマシェーリー
  ∪∪

>>172
「'\0' で終端がつけられたデータ列を文字列と呼ぶ」 という前提がある限り、
それを壊すような操作をしたらそれは 「文字列ではなくなる」 という事だと
思うんだけど・・・。
そういう話じゃないなら、いいです。
宿題丸投げの予感
195デフォルトの名無しさん:02/11/15 01:52
>>192
ぜんぶデス
すみません
おいみんな!>>184が質問だってよ!
本領はっきだぜ!
>>184
カコイイ
また曖昧な質問だな…
誰かちゃんと仕様をお客さんにインタビューしてくれ(w
>>195
もしかしてファイル入出力の方法がわからない?
それは自分で勉強して・・・
>>192はネタだという事が判明しますた。
また曖昧な質問がきた。
これで飯3杯は食える。
202200:02/11/15 01:54
間違った>>184
203デフォルトの名無しさん:02/11/15 01:54
面白いように釣れる(w
つまんないなー。やっぱ論争にかぎるぜ!
っていうかたぶん質問系は宿題スレにいってるYO!
本質の議論が終わって、水掛け論になってもう進まなくなったときには、
次の話題を振るのが一番だね。
>>203
そうですか。面白いようにですか。
>>203
ハァ?釣れる?バカかおまえ。漏れたちはいつでも何事にも全力投球だ。
宿題丸投げOKにしようぜ。
>>176えぇっと…、バカ?
>>203
よーし、じゃあまずファイルに入っているデータの
フォーマットを詳細に教えれ。
>>208
( ゚д゚) ポカーン
>>178
ニホンゴガンバテクダサイ。
213デフォルトの名無しさん:02/11/15 01:58
>>210
俺はもう寝るから勝手にやってくれよ(w
>>182
バカ2号ハケーン!
215デフォルトの名無しさん:02/11/15 01:59
     ___
    /     \
   /   ∧ ∧ \  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |     ・ ・   | < おまいら ひま だな
  |     )●(  |  \__________
  \     ー   ノ
    \____/
  >>215
     ___
    /     \
   /   ∧ ∧ \  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |     ・ ・   | < おまえも ひま だな
  |     )●(  |  \__________
  \     ー   ノ
    \____/
論争厨を黙らせるには怒濤の質問が一番
じゃあCスレのキャッチコピーは

  「漏れたちはいつでも何事にも全力投球!
                    論争もありまっせ!」
  >>216
     ___
    /     \
   /   ∧ ∧ \  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |     ・ ・   | < おれも ひま だぞ
  |     )●(  |  \__________
  \     ー   ノ
    \____/
>>215
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< オマエモナー
  (    )  \_____
  | | |
  (__)_)
>>216 
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< オマエモナー
  (    )  \_____
  | | |
  (__)_)
>>183
ネタはもう結構。
223182:02/11/15 02:03
データa,bをファイルから入力し、
四則演算の結果s,d,p,qをa,bと共にファイルに出力する
のって・・どうするの?

マジネタです!教えてください。おながいします!
>>217
そうやって論争に負けたからって論争自体を潰そうとしてるの見え見え。

     ___
    /     \
   /   ∧ ∧ \  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |     ・ ・   | < 来週またロボトミー手術をうけるんだ
  |     )●(  |  \__________
  \     ー   ノ
    \____/


お前ら!そんなヒマあったら感動しろ!

#include <stdio.h>
int p,t,a,d,c,v,i,m[90]={0},s,r[]={-10,-9,-8,-1,1,8,9,10};void k(){if(m[p]==0)
for(i=0;i<8;i++){for(c=0,v=p+r[i];m[v]==3-t;v+=r[i])c++;if(c&&m[v]==t){a+=c;v=
p;if(d)do m[v]=t,v+=r[i];while(m[v]!=t);}}}char*h="・○●\n";int main(){for(i=
1,m[41]=m[49]=2;i<10;m[i++*9]=3)m[40]=m[50]=t=s=1;for(;;a=d=0){for(p=9;p<82;++
p)k(),printf("%.2s",&h[m[p]*2]);if(a)for(d=a=s=p=8;a==8;k())t-2?(scanf("%d %d"
,&p,&i),p+=i*9):++p;else if(s)s=0,printf("pass");else break;t=3-t;}return 0;}

>>223
よくわからんのじゃ・・・
ダミーすれのレス数超えたYO!
みんなおめでどー
229182:02/11/15 02:05
>>227
ネタはほっとけよ
  ∧_∧   
 ( ´∀`)< ぬるぽ
231227:02/11/15 02:05
何がわからんのかわからん。
>>223
答えは >>1 に書いてある。
>>224勝ち負けでしか判断できないのは少年漫画の読み過ぎです。厨房板に行って下さい。
>>226
うげ。すごいでつね
235デフォルトの名無しさん:02/11/15 02:08
流れ的には、
1,ファイルに保存された数値a,bを文字列として読む
2,文字列を数値に変換してa,bに代入
3,変数s,d,p,qに演算して代入
4,ファイルに出力
でいいよな?
>>235
ファイルのフォーマットがわからないとダメなんだよな。
>>223
…ほんとにネタじゃないんだろうな。
じゃ聞くが、
・入力ファイルと出力ファイルは別のファイルでよいんだな?
・ファイル名は決まっているのか、実行時に与えられるのか?
与えられるとしたらどうやって?
・入力ファイルに入っている数値は整数か、実数か?
文字列として入っているのか、バイナリで入っているのか?
・出力の形式も同じか?
>>233
ただの煽りはほっとけよ。さっきの論争では別に勝ちも負けもなかったし。
おじちゃんもう待ちきれないよ。
#include <stdio.h>
int main(void)
{
int a,b,s,d,p,q;
FILE *fp = fopen("釣り","rb");
a = fgetc(fp); b = fgetc(fp);
fclose(fp);
s=a+b; d=a-b; p=a*b; q=a/b;
fp = fopen("釣られ","wb");
fputc(fp,a); fputc(fp,b);
fputc(fp,s); fputc(fp,d); fputc(fp,p); fputc(fp,q);
fclose(fp);
return 0;
}
バイナリ符号無し1バイト単位。エラーチェックなし。
これで上等だろ。
細かいことにこだわるのは、
プログラマーに必要なことでしょう。
みなさん頑張って下さい。
>>233
論争に勝ち負けというのは存在します。少年漫画とは関係ありません。
少年漫画という例えが出るほうがガキです。厨房板に逝って下さい。
>>235
fscanfじゃだめなの?
アフォ煽り放置
>>241
>>233
どっちもガキ。こだわりすぎ。さっさと寝ろハゲ
漏れが風呂入ってる間に100レスですか
>>226
今試しましたが、漏れが勝ちますた。
>ファイルに保存された数値a,bを文字列として読む
これもちょっと微妙な表現・・・。
#include <stdio.h>
int main(void)
{
int a,b,s,d,p,q;
scanf("%d %d", &a, &b);
s=a+b; d=a-b; p=a*b; q=a/b;
printf("%d %d %d %d %d %d", a, b, c, d, e, f);
return 0;
}
お前等いいからコードで話せ。
>>244
ああそうだよ。14歳のガキだよ。
まだ禿てねーよ馬鹿
>>248
それをシェルでリダイレクトしろってか?
>>250
いや、寝ろって。
>>250
俺が14のころはちんぽズル剥けだったが。
どうでもいいけど、ネタでageんな
age
249 名前:デフォルトの名無しさん :02/11/15 02:13 ←ここ
お前等いいからコードで話せ。

250 名前:デフォルトの名無しさん :02/11/15 02:12 ←ここ


重いもんな
>>248
コンパイルエラーが出ますた!
257184:02/11/15 02:17
>>248
直接入力ですよね、、それ。ファイル入出力です。

>>237
整数でその飯は言っているファイルが存在していてプログラム中に
ファイル名指定してあるものでOKです
おまえら一番使うソートってなんですか?
>>258
qsort使うからしらん(どう実装されているかなんてわからん)
>>250
まだ剥けてねーよの間違いだろ。
261デフォルトの名無しさん:02/11/15 02:17
>>248
それじゃファイル入出力がない
>>257
お前、見ただけで直接入力ってわかってんじゃねーか!
ホントは自分で書けるんだろが。
263184:02/11/15 02:20
>>239
ありがとうございますた。参考にさせていただきます。
qsortってどうなってんの?
ソースきぼんぬ
265184:02/11/15 02:21
>>239
ありがとうございますた。参考にさせていただきます。
>>262
scanf()が標準入力から位は
初心者でもわかるのかも。
>>264
確かVC++6.0だと最初はクイックソートでやって、要素数が少なくなると他の方法に変えていたと思う。
標準出力と標準エラーってどう違うんですか?
fprintfでstdoutとstderrを使ってもどちらも単にDOS窓に表示されるだけなんですけど。
マジレス。
ヘッダファイルってどうやってみんの?
stdio.hとか開いてみても、
関数の中身がぜんぜんないよ!
>>268
/* test.c */
#include <stdio.h>
int main()
{
printf("stdout\n");
fprintf(stderr,"stterr\n");
return 0;
}

これをコンパイルしてtest >test.txtとやってみな。
hoge > foo
>>268
実行結果をリダイレクトすればわかるかもね。
>>264
サーチすればわらわら出てくる。
>>269
ヘッダーファイルに関数は普通かかないから・・・
ライブラリのソースをもっているならそれを見て。
>>241論争に勝ち負けが存在すると考える方がガキです。少年漫画に例えられてわざわざ反論する方がガキです。厨房板に行って下さい。
>>269
関数の中身はライブラリにあるのでは?
277269:02/11/15 02:31
じゃあコンパイラはどうやって関数を認識してんの!?
>>275
早く寝なさい。
>>277
どうって?
ライブラリなら.oとか.objとか.libいうファイルでどこかにおいてあると思うけど。
あとはリンクするだけ。いちいちコンパイルしていたら効率が悪いからね。
280269:02/11/15 02:33
ライブラリ・・・
BCCだとある!?
>>277
関数の「何」を認識するときの話?
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ ←>>230
 (_フ彡        /
>>280
もちろんある。
>>270-272
268じゃないけど、勉強になりますた!

ここに厚く御礼申し上げます。
>>280
おいおい
せめて>>279で挙げられてる拡張子のファイルを検索してみろよ
>>280
BCCってフリーの奴?
もちろんあるけど、ソースはないと思う。
287269:02/11/15 02:35
見つからない・・・
あきらめますた
誰か269に「コンパイル」「リンク」について
説明してあげてね。
オブジェクトファイル。
290269:02/11/15 02:36
いや、なんかいろいろあったんですがね。
stdioとかの名前がついたものがないもんでね。
ちょっと怖くなってやまました
>>278
眠れないので添い寝して下ちい。
292269:02/11/15 02:37
コンパイルとリンクはわかるYO!
コンパイルってソースを機械語に代えるもんでしょ?
リンクはコンパイルしたソースを集めて一つにするんでしょ?
何割あってる?
>>290
libc.objかな?
VC++なら確かそうだったから。
>>292
それがわかってて、どうして 277 のような疑問が出てくる?
>>290
stdio.hはあるだロー
stdio.libなんてのは普通ないよ。
>>287
bccならbccをインストールしたフォルダの下にLibフォルダがあると思うが
>>292
イチローの出塁率よりは高い
glibcでも見ろ。
299300:02/11/15 02:40
300げっと!
>>292
おまえJPSだろ。
>>292
んとね、漏れは直接ヘッダを参照してると思ったの。
実際はリンクする時に見てるってこと?よくわかんないけど。

>>295
stdio.hはあったけど、ソースなっしんぐ
>>294
いや、詳細はわかってないんでしょう。
303293:02/11/15 02:40
BCC32にはねーな・・・
まあどのオブジェクトファイルにあるか分からなくてもあまり問題ない気もするけど。

見てもコンパイル済みじゃ俺にはわからん・・・
304JPS ◆M0LaMzf5rY :02/11/15 02:41
>>300
( ̄□ ̄;)!!
ばれてる・・・
でもマジレスです。
>>301
だから、
***なぜソースが入ってると思ったんだ?***
>>301
ヘッダファイルは多くのファイルで共有する部分(関数のプロトタイプとかマクロとか構造体定義とか)を集めたもの。
>>304
やっぱりそうか…
そのDQNぶり、まちがいないとオモタYO!
ソースの味がしたから
309JPS ◆M0LaMzf5rY :02/11/15 02:43
ちなみにこのスレの1もオレです。
ていうかね、qsortがあるんだったら、自分で実装するよりも
絶対効率いいよね!?それを考えるとアルゴリズム勉強する気がなくなる・・・
>>305
いちいちソース参照してコンパイルしてリンクしてると思ったんじゃねーの。
>>307
ワラタ
>ちなみにこのスレの1もオレです。

…なんだか複雑な気分だ。
DQNの手下になったみたいな。
>>1
>また、このスレは論争スレへのポインタでもある。
こんなくだらんコメント追加してあるからJPSだと思った。
>>309
だからライブラリなんてものが存在するんだろうが。
それを自分で書こうとすることは勉強としてはよいことだと思う。
>>309
ソートの効率は、必ずしも良くないことがある。
プログラム作る効率はいいんでしょうが・・・。
>>314
うん。そうだ。えらいぞJPS。
317JPS ◆M0LaMzf5rY :02/11/15 02:45
オレはまだ始めて2ヶ月くらいでさー
ひたすらプログラム書いてきたけど
中身がどうなってるとかわかんないんだYO!

>>306
ヘッダファイルには関数のソースはないの?
たぶんドキュンな質問だろうけど、ヘッダファイルから直接includeしたほうが
効率いいきがする・・・
>>290
$ locate stdio.hかファイル検索
コンパイルの過程でヘッダがインクルードされ関数のプロトタイプを参照できる様に
なる。
関数の実体は別のオブジェクトファイルに存在。
リンク時に個々のオブジェクトファイルのアドレスの解決が行なわれる。
ロードは実行ファイルをメモリに移して実行する。
なるほど。
>>17 もこいつの仕業か。
このスレは「厨房JPSを一人前のCプログラマに育てるスレ」になりますた。
>>317
>279
322JPS ◆M0LaMzf5rY :02/11/15 02:47
>>318
むずかしくてわからんけど、リンクする時にはじめて
関数の中身がわかるってこと?
>>317
だから、いちいちコンパイルしていたら効率が悪いでしょ。
それに、関数そのものをincludeしたらひとつのプロジェクト内に複数の同じ関数(の実体)が現れる可能性がでてくるでしょ。それって大丈夫なのか?
JPS氏はCOBOLやってました?
COBOLのINCLUDEって、そんな感じだったような。
326JPS ◆M0LaMzf5rY :02/11/15 02:50
>>324
それはちがうw

>>323
またよくわからんけど、コンパイルするのは大変なのか!?
リンクの方が高速なのか!?
>>322
Cは関数単位でコンパイルすることは知っているよね?
同じ関数は一度コンパイルすれば修正したり環境を変えないかぎりはコンパイルし直さなくていいの。
328JPS ◆M0LaMzf5rY :02/11/15 02:51
>>325
オレは中学校くらいにおやじのBASICをちょっとやって、
それから5年間、プログラムから離れていました。
現在19さいでつ。
>>326
リンクはどのみちやらなきゃならないだろ。
>>327
関数単位?ソースファイル単位じゃなくて?
>>326
コンパイル→リンク

リンク
じゃどう考えてもコンパイルの分前者が効率悪いだろ。
>>330
ああそうだ。ごめん。
最小単位が関数だ。
333JPS ◆M0LaMzf5rY :02/11/15 02:53
>>327
うんと、その一度のコンパイルは、オブジェクトファイルの方でするの?
で、あとはまとめてリンク?
>>333
コンパイルしてオブジェクトファイルを作成するの。
つーかこの話、Cと直接関係あるのかね
>>330
最小単位?
JPSのスレになってしまったようなのでJPSが成長したころにまた来ます。
>>336
ひとつの関数は複数のファイルに渡って書けないから。

表現が悪いかな・・・
339JPS ◆M0LaMzf5rY :02/11/15 02:55
>>334
(゚Д゚;)ハッ!
そういやtest.objとかできてるよね。
あれを他のprintfとか入ってるobjとリンクしてtest.exeをつくってるの!?
JPS氏には
「エキスパートCプログラミング - 知られざるCの深層」
アスキー出版社
をお勧めします。
>>339
そう。
>>340
つーかここの住人はみんなそれ読むべき。
ほとんどの話題はその本の内容で解決するし。
343JPS ◆M0LaMzf5rY :02/11/15 02:59
キタ━(・∀・)━!!!!!
ちょっと分かった気がする。なるほどね。
そりゃ確かにいちいちコンパイルするはずないよねー。
なるほどー。
一応訊くけど、stdio.hってヘッダをあらかじめコンパイルしてxxx.objを作って
リンクの時に合わせるだけって感じ?
>>340
その本を参照して来る奴を最近よく見かけるが同一人物?
>>337
つまり二度と来るかボケ!ってこと?
>>343
ヘッダーはコンパイルしないよ。
関数ごとにソースファイルをつくってコンパイルして、できあがった多数のオブジェクトファイルをアーカイブにしているものもある。
347JPS ◆M0LaMzf5rY :02/11/15 03:02
>>340
アマゾンいったけど、取り扱いしてないYO!
しかも確かそれは上級者むけじゃ・・・
オレはまだ前橋の「C言語ポインタ完全性は」も半分くらいだよ・・・
348340:02/11/15 03:03
>>344
いや、150にVB厨認定されたものですが・・・。
349JPS ◆M0LaMzf5rY :02/11/15 03:03
>>346
ん・・・。
じゃさ、xxx.objに関数の実態があるの?
そうだとしたらそれはどうやってつくったの?
>>340
奴なら「プログラムはなぜ動くのか」程度でいいかも
ヘッダファイル(インクルードファイル)に書いてあるものはいろいろあるが、
関数だけに話を絞るとだな、

たとえばmainから何かライブラリ関数を呼ぶとするだろ?
コンパイラは、関数の引数の型や返り値がわからないと
エラーチェックが出来ない。

それに、引数や返り値の型によって、どうやって受け渡すかが
違うこともある。(メモリに入れて渡すか、レジスタか、レジスタ
の種類など。)

それをコンパイラに教えるための宣言(プロトタイプ宣言)が
ヘッダに書いてある。
>>343
微妙に違う。
ソースをコンパイルする時、コンパイラはどの関数が使えるのかを知らない。
それをコンパイラに教えるのがヘッダファイル。
>>349
コンパイルだっつーの。
ソースで配られているものなら自分でインストール時にコンパイルするし、
VC++やBCCなら出荷前にコンパイルしてある。
>>349
その質問の答えは>>346に書いてある
>>349
stdio.hには関数の情報を書いて、stdio.c(ってファイル名じゃないだろうけど仮名)には
関数の実体を書いてコンパイルしてstdio.objみたいなファイルを作っておく。
リンクするときはstdio.hの関数情報を元にstdio.objをリンクする。
なんかJPS氏を見てると、昔の自分を思い出すね。
自習派の人は、結構最初はこんな感じじゃなかった?

あと、ポインタは
「秘伝C言語問答 - ポインタ編」
SOFTBANK BOOKS
がわかりやすいかも。
コンパイラがデフォルトで知らないライブラリはリンク時に指定する必要があるね。
gccはなぜか標準の数学関連の関数をリンクしようとしない・・・
>>356
ずううっと昔にこのスレで似たような質問をして馬鹿にされたことがあります。
>>355に追記。
だからユーザーはstdio.hとstdio.objがあればリンクできる。
stdio.cはいらない。コンパイラによっては親切にstdio.cも添付してくれてるだけ。
>>359
VC++の場合、ソースもインストールすればデバッグ時に使ってくれるね。
>>357
たいていのUnixのコンパイラの伝統。
浮動小数点ライブラリをめったに使わなかった
(システムプログラムばっかり書いてた)
16ビットミニコン時代のなごり。
>>360
そうそう。
実は俺も以前、ソースが添付されてる意味を履き違えてたのよ。
コンパイルするときにソースを参照してるんだろうと思ってた。
実際はデバッグ時に使うだけなんだよな。
>>361
そういうことなのか・・・
364JPS ◆M0LaMzf5rY :02/11/15 03:12
>>351
コンパイルしてる時は、プロトタイプ宣言だけを見てるの?
で、とりあえず形だけ作って、xxx.objにして
リンクする?その時はじめてどんな関数かわかる?
365JPS ◆M0LaMzf5rY :02/11/15 03:13
>>359
なるほど!それ分かりやすい!!さんくす!
>>356
こんなあれこれ人に聞いたりしないだろ、普通。
考える力が無くなる。

アマゾンのレビュー見る限りではエキスパートCプログラミングは良さそうだ。
これを除くと中上級者Cプログラマ向けの本と言うのは皆無らしい。
プロトタイプって言葉は知ってたのか。
なるべく用語使わないで簡単に説明しようとして「関数の情報」とか書いちゃったよ。
>>365
そうだ、自分でやってみなよ。
main.cにはmain関数を、sub.cにはmain関数から呼び出される関数を、sub.hにはsub.cにある関数のプロトタイプを書く。
まずはsub.cをコンパイルして、sub.cをどこかに移す(削除してもいい)
次にmain.cを書いて(sub.hをインクルード、sub.cにある関数を呼ぶ)bcc32 main.c sub.objとしてコンパイル&リンクする。
これでなんとなく分かると思うよ。
おまえら今日はやけに親切だな
370368:02/11/15 03:19
ちなみに分割コンパイルという手法
VC++だとリビルドしないかぎりビルドし直しても修正していないファイルはコンパイルしなおさないね。
ひまだからな!
372356:02/11/15 03:19
>>366
いや、理解できない部分が、ということで・・・。

>中上級者Cプログラマ向けの本
K&Rはどうですか (w
論争みたいに殺伐としていないからな!
>>372
K&Rは最後の付録を除けば特に初心者でも問題無いと思うけど、どうだろう。
bcc32も-cオプションでコンパイルのみをやってくれるのか。
その辺は統一しているのかな。
K&Rはなんといってもあの大きさがイイ!!
C++とかPerlの作者が書いた本といったら・・・
いや、ま、なんつーか書籍はスレ違いってことでひとつ。
378372:02/11/15 03:26
>>374
C言語初心者には問題ないかもしれませんが、
プログラムも初心者だときついような・・・。

JPS氏の疑問も解決したみたいなので、
もう寝ます。
スレ分割の効果か
>>376
それは単に学ぶ事の多さの違いでは?
381JPS ◆M0LaMzf5rY :02/11/15 03:29
>>368
やってみる!今日は寝ます。みんなさんくす!
とりあえず明日は10時ころおきて、やってみます。
>>381
sub.cをコンパイルするときは-cをつけろよ。
文字列論争あり、初心者質問に普通に答えるもあり、つまりいつものCスレだ。
>>378
俺は2冊目によんだCの本がK&Rだった

K&R読んだとき初めにこの本を読めばよかったと思ったよ
技術評論社のすぐわかるC/C++じゃぁさっぱりだった
なんか、JPSでもってる感じになってきたな。

また無駄、いや有意義な時間を過ごさせてもらいました。
>>385
他人に説明するってのは自分の理解度を確認する良い指標になる
同じようなことを何度も説明しても意味は無い。
>>387
ワラタ
389デフォルトの名無しさん:02/11/15 07:57
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)(*^o^*)
(゚Д゚)ハァ?
お前ら、5時間で388レスでつか…。
392ポインタ房&rlo;ポインタ房:02/11/15 10:14
式の中での添え字は、ポインタとは無関係。
このことは、ポインタ配列についても同じことが言えるんでしょうか?
>>392どう言った点で同じ事が言えるかどうかを聞いているのかが曖昧。だが恐らく答えは「yes」
394房タインポ:02/11/15 10:58
房タインポってどうやってやるの?
No43スレが2つある中で、一発でこちら側を引き当てました。
そんなオレは心理テストで言うとどのように判断すればよいでつか?
1・真のプログラマ
2・偽のプログラマ

boolでおながい。
>>395
> 1・真のプログラマ
あと以下のスレッドをデフォルトでフィルタリングしているのもポイントが高い。

C言語を俺に聞け 第48回ぐらいか?
http://pc3.2ch.net/test/read.cgi/tech/1037279828/
397デフォルトの名無しさん:02/11/15 11:33
for文を使って最大値最小値を求めて
for (;;) {
puts("最大値最小値");
break;
}
for文を使って最大値最小値を求めてさまよい歩く羊たちの沈黙。
今度から 1 のテンプレで 「依頼」 も原則禁止にして欲しいな。
自助努力しなさそうな人には教える気になれん。
>>400
> 今度から 1 のテンプレで 「依頼」 も原則禁止にして欲しいな。
え?このスレはCと同じで禁止事項なんてないよ。
未定義の動作を規定しているだけだよ。
で俺の解釈は>>397は未定義動作と思ってるけど?
なんかさ、スレッド一覧でこのスレのタイトル見たら逆向いてるだけど、オレのブラウザが変なのか?

(004) ;}"!け聞にれ漏はとこの語言C"{ = ]34[c* rahc :21

なんでなんで!?
403400:02/11/15 12:50
>>401
そうか。了解。納得した。
>>402
ビクーリした。
調べたら、http://pc3.2ch.net/test/read.cgi/tech/1037327839/l50 のスレタイのせいだった。
これ、荒らしていいかい?
つーか削除依頼出してこよう。
削除依頼完了
でもしくじった・・・
ageればいい
407デフォルトの名無しさん:02/11/15 13:10
データファイルが

A B C D
E F G H
・・・・

とあって、1行目を飛ばして、2行目のEから読み込みたいときは
どうすればいいですか?
>>407fseek,fgetposかfgetsを2回,後は自分で調べて下さい。
>>407
fgets() で 1 行づつ読める。
だから、fgets() で 1 回空読みすれば次は 2 行目を読み込む事になる。
char buf[BUFSIZ];
fgets(buf, BUFSIZ, fp); /* 1行目読み飛ばし */
fgets(buf, BUFSIZ, fp); /* 2行目読み込み */

あるいは
int c;
while ((c = getc(fp)) != EOF && c != '\n'); /* 1行目読み飛ばし */
>>408
「何バイト目」 じゃなくて 「何行目」 の時は fseek() + fgetpos() は
不適じゃないか
412デフォルトの名無しさん:02/11/15 13:21
では、n行目を読み込みたいときは
n-1回空読みしないとダメですか?
>>412
そうでつ。
読み出すべきバイト位置がわかっていない場合は、カセットテープと同じように
扱うしかない。
>>414
本当は'\n'が読まれるまで繰り返すべきだがサンプルだから手抜き。
それにそれなら二番目のほうがシンプルだし。

# setvbuf()とは関係なかろう。
>>415
BUFSIZはstdio.hで定義されている
>>416
stdio.hでは、getc()も定義されててfgets()も宣言されてますがなにか?
>>417
もしかしてstdio.hで定義されている値を使うつもりか?(^_^;)
てっきり上の方で自分で定義するのかと・・・
まあ、410 は、BUFSIZ が正しく #define されているなら何ら問題は無い。
あるとすれば、時々 「2 重定義だ」 と怒るプリプロセッサがいるから、
#ifdef 〜 #undef 〜 #endif を使わなければいけない事があるかも知れない
事ぐらいだ。
「サンプルだから手抜き」だと小一時間。
手抜きといえどもまさかそれを使うとはおもわんかった。
つーか 417 が何を訴えたいのかわからん。
普通手抜きなら数字を直に書くよな。
そりゃそうだ。
ついでに言えば、fgets() では可能な限り、定数マクロじゃなくて sizeof 使うよな。
age
>>422
>415が何を訴えたいのかわからんかったので。

>>423
fgets(buf, sizeof(buf), fp);ってのも長いじゃん。
>>426
> fgets(buf, sizeof(buf), fp);ってのも長いじゃん。
将来bufがbuf[SUFSIZ * 2]などに変更されたときに
全ての箇所を変更しなくてはならなくなるよりもまし。

 そ れ で は 定 数 の 意 味 が な い だ ろ
>>426
ハァ?
直にと言っているんだからfgets(buf,256,fp)のように書くということにきまってんだろ。
一体誰が長い短いの話をしてるんだ・・・
>>426
わからなかったら当てずっぽうの適当逝ってないで質問しろよ。
まあ、415 の 2 行目の意味がはっきりしない事には同意する。
>>430
> まあ、415 の 2 行目の意味がはっきりしない事には同意する。
415じゃなくて416ダターヨ。416の2行目をいってると思っていい?
>>431
あ、納得。
415 を指して言っているのかと思った。
でも結局、
> わからなかったら当てずっぽうの適当逝ってないで質問しろよ。
433432:02/11/15 14:30
あ、いや。
つまり 415 は、BUFSIZ は stdio.h で定義されているから、バッティングするぞ
と言いたかったわけか。
的外れだけど。
うーん、stdio関連の関数を使ってる場合にBUFSIZを自分で定義すると取られ
るとは、ちょっと意外だったな。気をつけることにしよう。
まあ、規格にないマクロに頼るのは止めた方がいいよ。
#define BUFSIZ sizeof(int)
とかやられている可能性も無きにしもあらず。
いくらサンプルでもバッファサイズくらい責任持とう。
>>435
> 規格にないマクロに頼るのは止めた方がいいよ。
ダウト
JIS X3010-1993 7.9.1
 BUFSIZはsetbuf関数によって使われるバッファの大きさを表す汎整数定数式に展開する。
と規格で定められている。
# まぁsetbuf関数によって使われるマクロをsetbuf関数以外の場所で
# 勝手に使用するのはあまりお勧めできないのには同意。
437435:02/11/15 14:57
失礼。436 フォローありがと。
>>427
> 将来bufがbuf[SUFSIZ * 2]などに変更されたときに
> 全ての箇所を変更しなくてはならなくなるよりもまし。

将来bufが
char *buf = malloc(BUFSIZ); などに変更されたときに
全ての箇所を変更しなくてはならなくなるよりもまし。

と言ってみる。
>>438
> 将来bufが
> char *buf = malloc(BUFSIZ); などに変更されたとき
配列とポインタは別物です。
たまたまCでは同一視できる箇所が多いので誤解を生みやすいけど
別物にしたら、それ相応のリファクタリングをするべき。

> と言ってみる。
なんて自信なさげに逃げ道作る労力をかける暇があったら、
素直にsizeofの方が良かったって認める労力に使っとけよ。
440438:02/11/15 15:59
プ。 1匹だけか。
見苦しい罠。
442JPS ◆M0LaMzf5rY :02/11/15 16:30
関数の内部での*hoge[5]と(*hoge)[5]の違いは分かっYO!
可変長配列とか使う時、使い分けるんだよね?
でさ、関数のプロトタイプ宣言で「配列の配列」を渡したいときに
int kansu(int (*data)[5])みたくするよね?
この仮引数を、int *data[5]ってしても
関数の仮引数の宣言の時は、配列の宣言はポインタに読みかえられるんだから、
結局同じことのような機がするけど・・・
443438!=440:02/11/15 16:35
>>439
> 別物にしたら、それ相応のリファクタリングをするべき。
別物に変更してもリファクタリングしなくてよい手段が
あるのに、それすらせずに「リファクタリングすべき」
とか言われても説得力ゼロですな。

とは言っても 410のようなケースならsizeofで十分だと思うが。

> 素直にsizeofの方が良かったって認める労力に使っとけよ。
はあ?素直にって...誰かと間違えてんの?
もっと視野を広く持つようにしようね。
> 別物に変更してもリファクタリングしなくてよい
(゚Д゚)ハァ?

一長一短という方向に話を持っていくなら分かるが・・・。
>>443
> 別物に変更してもリファクタリングしなくてよい手段が
> あるのに、
> とは言っても 410のようなケースならsizeofで十分だと思うが。
具体的な手段も出せずに逃げ回るのだけは得意ですね、説得力ゼロです。

> はあ?素直にって...誰かと間違えてんの?
間違ってないよ。ちゃんとあなたは逃げ回るのが得意で
暗いとこが好きなゴキブリ君だと思ってます。
# まぁインスタンスは違うだろうがクラスは一緒
JPS がナチュラルに流されてるのが笑えるな。

>>442
*hoge[5] は int*[]、つまり int** 型。
(*hoge)[5] は int(*)[5] 型。
447438:02/11/15 16:53
>>445
はあ?じゃ勝手にそう思ってろ。
ここまでアホとは...

以後放置ね。
448JPS ◆M0LaMzf5rY :02/11/15 16:56
>>446
(*hoge)[5] はint**型でないんだ・・・。
えーと、ホゲはintの配列へのポインタだよね?
どうして      ↑
    この部分がポインタに読み返られないの?
449JPS ◆M0LaMzf5rY :02/11/15 17:00
あ!そういえばさ、配列は最外周の要素以外省略できないんだよね?
それって>>446のとかん計ある?
>>448
言われてみれば、どういう方式でそう認識されるのか考えた事無いな。
こう書くとこうなる、と丸暗記しかしていない。
ところで、int** と int(*)[5] では、メモリの確保のされ方が違うのはわかってるね?

>>449
配列は最外周の要素以外省略できない、ってどないな意味?
438は自分がゴキブリではないことを否定しませんでした。
>>448
C-FAQ 6.18:を読め。一部引用
  配列がポインターに成り下がるという規則は(質問6.3参照)、
  再帰的 には成り立たない。配列の配列(例えばC言語における
  2次元配列)は、 配列へのポインターに成り下がるのであって、
  ポインターへのポイン ターに成り下がるわけではない。
>>449
> 配列は最外周の要素以外省略できない

ああ、配列を仮引数に指定した時に、一番左の添字しか省略できない、って意味ね。
もうちょっと分かりやすく書いてくれ。
関係あると言えば関係あるかも知れない。
もともと仮引数を配列のように書けるのはシンタックスシュガーで、ポインタと同じ
意味。
だから中身の数字は指定してもしなくてもどうせ無視されると言う話。

>>451
もうそれはいいよ

>>452
今してるのはその話じゃない。
454453:02/11/15 17:18
>>452
ああ、2 次元配列をどう渡すんだ、という意味でなら、関係無くも無いね。すまそ。
>>450
> ところで、int** と int(*)[5] では、メモリの確保のされ方が違うのはわかってるね?
わからん。インクリメントやデクリメントされたときの
ポインタの移動量は違うと思うが、確保のされ方に変わりはあるのか?
456JPS ◆M0LaMzf5rY :02/11/15 17:19
>>450
たとえばint data[][2]={{1,2},{1,2}}っておkでしょ?
でもint data[][]={{1,2},{1,2}}はだめでない?
これは宣言で初期化する場合の話だけど、関数の仮引数でも同じだとしたら

*hoge[5] は int*[]、つまり int** 型。
(*hoge)[5] は int(*)[5] 型。

っていう>>446のは
*hoge[5] は int*[]、つまりint [][]となって
最外周の要素が省略されているため、配列からポインタによみかえられる。
(*hoge)[5] は int(*)[5]つまりint [][5]となって、最外周の要素が省略された
配列となる。
みたいに考えられないかなって。
>>455
見ての通りだよ。
片や int **pp、ポインタ変数へのポインタ。
片や int (*pa)[5]、配列へのポインタ。

pa[0] と pa[1] は、必ず連続している。
pp[0] と pp[1] は、必ず連続しているとは限らないし、多くの場合は連続していない。

・・・っての書いてたら、どうも 456 見る限り JPS の方が理解があるみたいだな。
>>456
多分、その解釈で困る事無いと思うよ。
459JPS ◆M0LaMzf5rY :02/11/15 17:27
>>450
メモリの確保のされかた・・・
int**は正真正銘ポインタのポインタだから、たとえば可変長配列を使う時とか
mallocしたり、アドレスを渡さない限り、どうにもなんない・・・あら。
int(*)[5] は配列へのポインタだから、配列の要素数5は確実に確保されてる
って感じでつか?
460457:02/11/15 17:28
すまん、訂正。

*pa[0] と *pa[1] は、必ず連続している。
*pp[0] と *pp[1] は、必ず連続しているとは限らないし、そもそも指す先が
領域確保されているかどうかも分からない。
>>459
大当たり。
462JPS ◆M0LaMzf5rY :02/11/15 17:30
おおお!!!すげーぞオレ!!
これもあれも2chのみんなのおかげだYO!サンクス!
とりあえずやっとC FAQが読めるようになってきたから
配列とポインタのあたり呼んで見ます。
まじさんくす!!
正確には、pa[0][0] 〜 pa[0][4] は必ず確保されている。
pa[1][0] が確保されているかどうかは分からない。
464デフォルトの名無しさん:02/11/15 17:33
なんかlevel高いね.うちの会社がlevel低すぎるだけか?(W
ちょっと語弊があるな。
「必ず確保されている、と見なしていい」 だ。
一方 int** は、pp[0] だけは確保されていると見なしていいが、pp[0][0] だとか
があるかどうかは極めてグレー。

まだ何か穴があるかも知れないけどその時は誰かフォローよろしく。
漏れは眠くなったので寝ます。
と言いつつ訂正。
int** は、pp[0][0] だけは確保されていると見なしていいが、pp[0][1] だとか
pp[1][0] があるかどうかは極めてグレー。
int*は何も確保しないし、
int**も何も確保しませんが、何か?
468JPS ◆M0LaMzf5rY :02/11/15 18:10
>>467
int*が何も確保しないって事はどこを指しているの?
466とかは、すくなくとも一点だけは指していて
その後がどの位連続して確保されているかはわからない
ってことを言ってるんじゃないの?
int (*)[5] だって何も確保しない
>>469
マジで!?メモリ上のどこにあるかはしらんって意味?
それともどこにもまったくないの?
んなこたーないよね
471デフォルトの名無しさん:02/11/15 18:27
 本人刚刚学习VC++,对于“#pragma once”语句不太理解,哪位能说明一下。

  先谢了!
>>470
int (*a)[5];
とやって確保されるのは(int [5] を差す)ポインタの領域だけ
ポインタの先までは確保しない
よって >>463 みたいなことを言うのはナンセンスでしかない
473JPS ◆M0LaMzf5rY :02/11/15 19:02
>>472
ポインタの領域は確保されるの分かるけど、
int5個分は確保されないってこと?
でも初期化できるしょ?その宣言だと。
初期化してるとしたら、初期化子はどこに確保されてんの?
>>473
なんで初期化されると思ったの?
「電話番号100人分書けるメモ用意しといて」といわれて
「友達役を100人雇っておきました」というくらい余計なお世話じゃないか?
475デフォルトの名無しさん:02/11/15 19:09
a[0]□→未定義
a[1]□→未定義
a[2]□→未定義
a[3]□→未定義
a[4]□→未定義
よく読んでなくて恐縮ですが

ポインタ配列->行固定列可変
ダブルポインタ->行可変列可変
*可変=アロック汁*

って認識は間違ってる?
477JPS ◆M0LaMzf5rY :02/11/15 19:19
>>474
仮の話。初期化したとしたらさ、5このポインタ変数は
メモリ上のどこにあるの?
478476:02/11/15 19:25
ポインタ配列を初期化するってことはポインタにアドレスを入れるって事でしょ
int a,b,c,d,e;
int *p[5]={&a,&b,&c,&d,&e};
じゃないの?
>>478
int a[5], b[5], c[5], d[5];
int (*p)[5] = { a, b, c, d };
じゃないのか?
480JPS ◆M0LaMzf5rY :02/11/15 19:29
>>478
そりゃそうだね。勘違いしてた。
でも469は間違いだよね。つまり確保しる領域のサイズは
(sizeof(int*))*5ってこと?
481JPS ◆M0LaMzf5rY :02/11/15 19:30
>>479
478でもいいんでないの?
482476:02/11/15 19:30
>>479
e抜けてるのは?

5*5の2次元配列ならね>>478の場合5*1の2次元配列
483476:02/11/15 19:34
ポインタ配列を使う利点は列が可変になるって事
int *a[5];
for(int i=0;i<5;i++) a[i]=malloc(i);
って事ができるのよ
ダブルポインタのばやい行も可変
484476:02/11/15 19:35
malloc(i+1);だ
ふ〜ん。みんな頑張ってるね〜。
486476:02/11/15 19:41
>>480
「実体」は何も確保しませんが
487JPS ◆M0LaMzf5rY :02/11/15 19:42
>>484
malloc(sizeof(int))でないの?
488JPS ◆M0LaMzf5rY :02/11/15 19:44
>>486
実態ってポインタの本体の事?
ポインタ変数を5こ格納する領域は?
489476:02/11/15 19:46
そうだね
malloc(sizeof(int)*(i+1));だね
*a[0]はint1個
*a[1]はint2個
*a[2]はint3個
...
と確保されるよ
490JPS ◆M0LaMzf5rY :02/11/15 19:46
やばい。勘違いしまくりだった。
ポインタ一個分だけ確保するのか?
491476:02/11/15 19:48
>>488
実体=確保された(安全に使用できる)メモリ領域
492JPS ◆M0LaMzf5rY :02/11/15 19:49
>>489
あ、可変だよってことを言ってくれてたんだね。
単純に整数いれてるだけかと思ったら違った。
malloc(sizeof(int)*(i+1));

a[0][0]
a[1][0] a[1][1]
a[2][0] a[2][1] a[2][3]
確保されるんだよね。
493JPS ◆M0LaMzf5rY :02/11/15 19:50
>>491
??どういう意味?
「実体」は何も確保しませんが は
「確保された(安全に使用できる)メモリ領域 」は何も確保しませんが
ってことではないべ?
494476:02/11/15 19:50
int *a[5];
ならint型ポインタ5個確保するよ
実体は未定義
ここはC言語初心者スレですか?
496476:02/11/15 19:53
>「確保された(安全に使用できる)メモリ領域 」は何も確保しませんが
そのとうり
int *p;
ポインタ1個宣言して「実体」を確保したといえますか?
497JPS ◆M0LaMzf5rY :02/11/15 20:00
>>496
(安全に使用できる)メモリ領域は確保しませんがって事?
それならわかった。ていうか今まで長いレス、勘違いしてたから。
476の言うとおりだし、俺もわかったんで。

>>495
そのとおりですが何か?
498476:02/11/15 20:04
>>497
mallocってメモリ確保でしょそれで
「確保された(安全に使用できる)メモリ領域 」って言ったのだが
日本ゴムずい
>>497
初心者スレなら上級者の俺は書くのがためらうなあと思っただけ。
気に触ったらごめん。上級者スレでも立てるか。
500JPS ◆M0LaMzf5rY :02/11/15 20:14
>>498
なるほど。そういう言い方知らないもので。覚えておきます。

>>499
まあ、ちょっとムカってきたけど、「〜ですが何か?」って言いたかった。
476が言ってたから。てか上級者スレならこれ使ってYO!

お前ら!Cの論争はここでしてください。
http://pc3.2ch.net/test/read.cgi/tech/1037105440/l50
廃れまくってる・・・
>>500
あっムカってきちゃったの? そりゃそりゃ、俺のねらいどおりでヤッタって感じ。
502JPS ◆M0LaMzf5rY :02/11/15 20:24
>>501
( ̄□ ̄;)!!

まあ、オレは怒ったりしないよ。良かったでつね。
>>502
釣られんなよ。アフォはほっとけ。
Cだけで書かれたブロック崩しのソースがほしいんでURLしっているかた
教えてください。お願いします
>>504
いくら出す?
>>505
マネーかよ!!

しってる方お願いします。google検索しても出てくるのはポケコンばっかりで…
>>506
移植すればいいだろ。
>>506
マネーじゃありませんいくらです。
>>508
そっちの「いくら」かよ!!!
回転寿司屋で呑むか?
int i, a1[10], a2[10][5];

int へのポインター
*(&i) = 1;
*(&a1[0]) = 1;
*(&a2[0][0]) = 1;

int[] へのポインター
*(&a1) = 1; → NG:配列に整数は代入できない
*(&a2[0]) = 1; → NG:配列に整数は代入できない

int[][5] へのポインター
*(&a2) = 1; → NG:5つの要素を持つ配列の配列に整数は代入できない

関数呼び出しの引数に現れた場合
a2 == &a2[0][0] 
a1 == &a1[0]
atoiってなんて読むの?
あすきぃとぅいんてじゃ
>>512
阿藤(ヵ)イ
>>513
ああ、インテってintでしょ?
じゃあ「えーとぅーあい」くらい?
>>515
>>ああ、インテってintでしょ?
ガ━━(゚Д゚;)━━ソ!
517デフォルトの名無しさん:02/11/16 01:19
「あとい」
あと一歩、あと一歩なんだ!
519デフォルトの名無しさん:02/11/16 01:22
あとーいだな
520JPS ◆M0LaMzf5rY :02/11/16 01:26
>>516
atoiって ASCI to Integer でないの?
521デフォルトの名無しさん:02/11/16 01:26
えーてぃーおい
>>520
ASCII
523>>511:02/11/16 01:33
さて、どこから突っ込もうか。
524JPS ◆M0LaMzf5rY :02/11/16 01:35
>>511
意味がわかんない・・・
” null ”は "ヌル"ですか?それとも”ナル”ですか?
あなる
527JPS ◆M0LaMzf5rY :02/11/16 02:06
>>525
オレはヌルっていうけど、ナルでもいいらしい。
言語によって言い方が違うんだって!
「ニル」って変な発音で話してる人がいた。
ヌルヌル・・・・・ハァハァ
俺の周囲だと、NULLを表すときはヌル、
'\0'を表すときはナルと言う奴が多く俺も伝染した。
NULLはヌルポインタ、'\0'はヌル文字って言っちゃ・・・ダメ?
ヌルと呼びなれてたときに転職したら、
その職場ではナル派が圧倒的に多かった。

別にどう呼んでも構わないと思うんですけど、
昔モービルと呼んでいた物がモバイルに変わった位に違和感がありました。
>>528
その人はLisp信者かも。nil。
nilって?
>>534
LispでFALSEを表すアトムだよ。
>>527
ああ。
でも言語と言ってもプログラミング言語じゃないぞ。
確かドイツ語がヌルで英語がナルだったかな。英語ではノーに聞こえるけど・・・
537JPS ◆M0LaMzf5rY :02/11/16 02:36
>>536
そうだ!「ヌル」はドイツ語だったYO!
英語だと「ノル」に近い「ナル」だと思う。
int i,j;int** pp;int** qq;
pp=(int**)malloc(sizeof(int)*3);
for(i=0;i<3;i++){
 pp[i]=(int*)malloc(sizeof(int)*5);
 for(j=0;j<5;j++) pp[i][j]=i*5+j;
}
memcpy(qq,pp,sizeof(int)*3*5);
for(i=0;i<3;i++){
 for(j=0;j<5;j++) printf("%d ",qq[i][j]);
 printf("\n");
}
メモリエラー出ちゃいます???
>>sizeof(int)
ハァ?
>pp=(int**)malloc(sizeof(int)*3);
pp=(int**)malloc(sizeof(int*)*3);
間違え
プ。
542デフォルトの名無しさん:02/11/16 03:01
カキコのテスト
543デフォルトの名無しさん:02/11/16 03:02
mallocに頼るなよ。
マジックナンバーをコードの中に書いてmallocとはそいつのレベルが分かるな。たとえネタだとしても。
ネタと簡単な例はマジックナンバー可。
10行サンプルにマジックナンバー云々言う奴のレベルはそれ以下。
>>538=546頑張れよ、糞コーダー(w
>>545-546
じゃあ何行ならいいんですか?ってw。複数人の目に触れるんだから、
読みやすいコードに越したことはないだろ。 #define ぐらい使ってもいいと思うがな。
549デフォルトの名無しさん:02/11/16 08:22
スマン void main(void) とか言う時の、void ってなんっすか?
色々読んでるけど、なんかイマイチしっくり来ない。。。。
キター?
>>549
/* エキスパートCプログラマーが書くコードの例 */
#define Kusakabe_Youichi void

Kusakabe_Youichi main(Kusakabe_Youichi){
 return 0;
}
これならシックリきますね :)
しっぽりこない。。。
いいから int を返せよ・・・。
つーか、void 型の関数内で return 0; とか書くなよ・・・。
#define 整数型インテジャー int

整数型インテジャー main(){
 return 0;
}
>>整数型インテジャー
狂ったか?
整数型でないインテジャーが存在するのか。
目から鱗が落ちたよ。
555 ありがとう!!
typedef long int 長整数型インテジャー;
>>559
C:\Work\Test.c(12) : error C2018: 文字 '0x92' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0xb7' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x90' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0xae' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x90' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x94' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x8c' は認識できません。
C:\Work\Test.c(12) : warning C4091: 空白の宣言が見つかりました。
C:\Work\Test.c(12) : error C2143: 構文エラー : ';' が '^' の前に必要です。
C:\Work\Test.c(12) : error C2143: 構文エラー : ';' が '^' の前に必要です。
C:\Work\Test.c(12) : error C2018: 文字 '0x83' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x83' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x93' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x83' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x83' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x83' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x83' は認識できません。
C:\Work\Test.c(12) : error C2018: 文字 '0x81' は認識できません。
C:\Work\Test.c(12) : error C9999: つーかネタはもういいよ。
>>560
複数行でネタにレスウザイ。
561=559=555
つーか誰も答えてないな。

>>549
void はが無効な (値が無い) 型であること、無指定である事を表す。以上。
int *p;
p = malloc(sizeof(*p));

初期化してないポインタを使ってますが
これってありなんですか?
>>564
> 初期化してないポインタを使ってますが

そのように見えるが、実際は使っていない。
sizeof(*p) はコンパイル時に評価されて、数値に置き換えられる。
566565:02/11/16 16:02
ただし、564 のコードが何をやりたいのかは分からない。
この場合、sizeof(*p) は sizeof(int) と一緒だ。
>>564
sizeof 演算子は引数を評価せず結果の静的型だけを見るので問題ない。
>>564
変な書き方をするやつがいるものだな・・・
こういうのはありか?って例なんだからいいじゃん。
>>569
例にしたって、564 が質問してきたからには書いた香具師がいるんだろう。
564 が書いたわけじゃないよな。
すみません、ひとつ質問させてください。
構造体のディープコピーをしたい場合、
memste(元構造体ポインタ,先構造体ポインタ,構造体サイズ)
で可能でしょうか?
それとも、やっぱり一つ一つのフィールドごとコピーするのでしょうか?
教えてください、お願いします。
572571:02/11/16 18:24
上はmemsteではなくmemcpyです。すみません。
構造体は普通の代入でコピーできる。
構造体代入の実体は大抵 memcpy() だったりして。

>>571
memcpy() でできます。
572 の通り、普通に = 演算子でも代入できます。
ただし、単に構造体の内容がコピーされるだけで、その中のポインタが指す先
までは複製されません。
malloc() 等でメモリの動的割り当てをしている時は気をつけてください。
575571:02/11/16 18:47
>>573

やってみました。たしかに動作しました。
論外君で申し訳ありませんでした。

ところで連続質問になってしまうのですが、
構造体同士を普通の代入でコピーした場合って、

1.memcpyでサイズ分全部コピーする
2.各フィールドをそれぞれ自動でコピーする

のどちらの動作になるのでしょうか?
それとも処理系依存でしょうか?
連続で申し訳ありませんが、教えてください。お願いします。
576574:02/11/16 18:48
573 の通り、でした。
>>575
処理系依存です。

なお、大抵のコンパイラの実装は memcpy() です。
ただし最適化されなくても転送処理がインライン展開されるので、コード上で
memcpy() を呼ぶよりも速いはずです。
578571:02/11/16 18:53
>>577
なるほど、そうなのですか。

皆さん、自分のような論外君に優しく教えていただきまして、
皆さんありがとうございました。
これからも精進します。
>>578
むしろ気が萎えるから、論外君とか教えてクンとか、自分からそう名乗るのは止めてくれ。
VC++とCbuilderってどっちがいいですか?
どっちも1万くらいなんで、詳しい事はわからず決めかねてるんですが。
アマゾンいってみたら、ボーランドの方が売れてるみたいなんですよね。
>>580
VC++.NET>C++Builder>VC++6.0
>>580
VCよりBuilderのほうがいいんですか?
作りやすさはBuilderだろうけど、ちょっとマイナーかな。
C++Builderは多重継承が出来んからクソ
.NETってなんなの?初心者用の.NETスレたててYO!
Javaつぶし。
VC++6.0の後継がVC++.NET?
そう。
VC++は6.0まではVisual Studioの中心的存在だったはずなんだが・・・
>>589
今は中心はなんなの?
C#?
>>588
じゃあVC++.NETはVC++7.0って考えていいのかな?
>>590
そんな気がする。
>>591
うん。
IEも次はIE.NETにするらしいし、、、
.NETについて勉強してこよう!
ふと思ったんだけどさ、今C言語はじめたばっかで
C++とかC#の役に絶つかな?
>>595
プログラミングについての感覚は、他の言語でも役に立つ。
言語固有のテクニック等で言えば、C++ にはある程度役に立つが
C# にはほとんど役に立たないし逆に害になる事もある。
C++ は C のスーパーセットだが、C# は全く別の言語だ。
>>596
なんでC#なんかつくったんだYO!ビルゲイツのあふぉが。
じゃあ学校で教える言語もC#にしろYO!
ところでね、実際、PGの人とかはC言語とか使ってるの?
それとももうC#?
>>597

俺んところはC#の仕事なんて絶対無いどころかC++さえない。
バッチ処理とかはいまだCで書いてるし、
WebアプリはJavaばかり。
結構そんなもんだと思う。
>>597
> じゃあ学校で教える言語もC#にしろYO!
もちろん、ビルゲイツ様はしっかりそのつもりですぞ。
http://www.hotwired.co.jp/news/news/culture/story/20020822204.html
>>597
板違い。マ板に逝け。
>>599
さすがゲイツ。すまそ。
でも日本でそうなるには何万年もかかりそう
ところで質問が無いから雑談タイムだけどw

やっと日本にも[脱Windows]の波がやってきたね。
でも、役人に[改造linux]が使えるかどうか。
そもそもちゃんと ソースをいじれるのかw?
ソースハ?
>>602
べつに役人がいじる必要はないべ。
>>603
http://slashdot.jp/article.pl?sid=02/11/15/2337225&mode=thread

ニュース板とマ板でもスレが立ってたよ。
ゲイツがなんだYO
手に馴染んだ道具が一番だろ
Macが(・∀・)イイ!
>>602
どういう事でつか?
>>602-606
すれ違い。ネタがないなら書かなくていいよ。
なんか最近、ここのレベルが下がってきたな。
コピー先バッファのサイズよりも大きく書き込んだら
メモリ壊すとはよく言うけど、
コピー元バッファのサイズよりも大きく読み込んでも
絶対大丈夫なもんなの?
>>609
ここは初心者スレです。
レベルの高い話がしたいなら上級者スレでもたててください。

>>610
絶対とはいえないが、たぶんうまくいくでしょう。
でも絶対とは言えない限り、やるべきではありません。
>>610 そうでもない。オーバーしたアドレスによっては
リードアクセスだけでもページフォルト起こす可能性があるよ。
613610:02/11/17 00:47
>611 >612

レスThx!!
さて、この目の前にある現行ソースをどーするか……
こっからはマ板の領域だな、ではさらば。
>>611
いつからレベルの高い低いに、純度の高い低いをごっちゃにしていい事になったの?

あとバッファの話、やっちゃいけないのはアクセスできるできないの問題じゃ
ないでしょう。
>>612
Windows2000でいえば「メモリーが"read"になることはできませんでした。」ってやつでしょ?
結構おきるよね。

scanfの%uにchar *を与えていたためにこのエラーが出て、最初はどうしてもわからなかった・・・・
616611:02/11/17 00:58
>>614
609については前半は同意しますが
後半は余計だと思われたんですが。
ここにいるのは初心者のかたも多いと思うので
失礼では?
617Not 614:02/11/17 01:00
>>616
ん?余計なのは前半じゃない?
確保したバッファ外にアクセスするのは絶対に許されないと思うんだけど・・・
>>615
(゚Д゚)フアァ?
>>618
なんかプログラムの終了時にそういうエラーが出て、理由がさっぱりわからなかったの・・・・
まさかscanfが原因だったとはね・・・
620614:02/11/17 01:02
ああ、精神レベルの高い低いか。納得。
>>609の前半と後半、と言いたいんだろうな。
622619:02/11/17 01:03
scanfじゃなくてsscanfだ。
>>622
やっと意味が分かった
ん?やっぱり分からん。どういうこと?
625619:02/11/17 01:16
>>624
私?
int *を与えるべきところchar *を与えていたら、その時は問題ないんだけど、mainからreturnするとそういうエラーが出たの。
なぜかexitで抜けると出ないし、linux+gccでは最適化オプションをつけないとセグメンテーション違反にならなかった(つけてもexitで抜けるとならなかった)。

これにはまいった・・・もちろんきちんとsscanfの仕組みを理解していなかった私が悪いんだけど。
626619:02/11/17 01:21
ちなみにドット区切りのIPアドレスを4つの数値に変換してcharの配列にいれるというプログラムです。
原因が分かったあとはsscanfでintの配列にいれて、そのあとにcharの配列にコピーするようにしました。
それはようするに
コピー先バッファのサイズよりも大きく書き込んだら
にあたるのではなくって?
628619:02/11/17 01:23
>>627
でもそれなら書き込んだときにエラーが出るはず(もちろんバッファを越えて書き込んだんですが)。
それに確かWin2000ではreadに・・・と出たはず・・・
629609:02/11/17 01:25
609だがたしかに、言い方が悪かった。
レベルの高い低いは、つまらない煽りやあまりにもスレとかけ離れたレスが
見受けられるという意味で書いた。多少なら、息抜きになっていいんだけどね。

Cの技術レベルは関係ない。俺も技術があるわけでもない。
毛嫌いする人がいるがスタイル論争も俺は好きだし、意見の交換になっていいと思う。
ただ、それがエスカレートしてきて全くたわいのないレスが続くとね。
>>628
別に範囲外に書き込んだからって即座にエラーになるとは限らないよ
リターンアドレスでも書き換えちゃったんじゃないの?
>>626
inet_addr() 使えよ・・・。
632619:02/11/17 01:30
>>630
> リターンアドレスでも書き換えちゃったんじゃないの?

なるほど! そういうことでしたか・・・

>>631
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/inet_addr.3.html

こんな関数があったんですね・・・・
勉強になりました。ありがとうございます。
memory cannot be read
「メモリーはreadになれませんでした」か。
すごい訳だな(w
「メモリーは読まれる事ができません」、だよなあ。
これでも日本語的にはまだアレだけど、意味はずっと通じやすい。

誰も Microsoft に 「バグ」 として報告してないのか。
・・・「仕様です」 とか返されたらどうしよう (;´Д`)
>>633
たぶん
"memory cannot be %s" (←ここに"read"とか"write"とかが入る)
こんな感じのを無理矢理訳して
"メモリーは%sになれませんでした"
にしたのではないか
と推測してみる
636635:02/11/17 01:45
write じゃなくて written か
>>636
ずっとreadをリードと読んでいたけど、レッドが正解か。
char キャーって呼べ。チャーっていったらブッコろス。
チャルがかわいくていいと思うのですがいかがでしょうか?
640デフォルトの名無しさん:02/11/17 02:21
チャーだろ。
シャー
チャースレに(・∀・)カエレ!
http://pc.2ch.net/test/read.cgi/prog/1027164278/l50
char キャーって呼べ。チャーっていったらブッコろス。
644デフォルトの名無しさん:02/11/17 02:41
char:t∫a:r
と、書いてある。
正確に書けない。鬱
大学講師がチャーっていいやがってよ。加藤チャーかよ。ぶっころそうかとおもったぜ。
enumはイニュム?
チャーでいいよ。
エナム
イーナム
エニュムが正しいんだろうけど・・
enumがそんななら、charがチャーでも問題ないね。
LPCSTR
エルピーシーストロァー
stdioは?
intは「インテ」ですよね!
ストゥドゥアイオー
>>653
イントもあるよ。
656デフォルトの名無しさん:02/11/17 03:49
>>653
そして、インテグラTypeR だとかほざく奴が




すんません 僕です。
回線斬ってクビくくってきます。
657JPS ◆M0LaMzf5rY :02/11/17 04:04
>>649
イニュームだYO!
enumeration列挙
オレはイーナムって言う。
てかあんま使わない・・・
まだ起きてんのかJPS。
早く寝ないと夜型プログラマになっちゃうぞ。
659お願い:02/11/17 05:47
皆さんおはようございます。 イマ中学校一年生で、C言語に興味を持ち始めて
いろいろやろうとしています。でも borland C++ compiler 5.5でコンパイル
しようとすると( インクルードファイル ’stdio.h'をオープンできない )という
エラーが一つ出ます。WIN2000(サービスパック入れてない)の環境変数設定はしました。
先輩たちの助けが必要です。お願い申し上げます。
660デフォルトの名無しさん:02/11/17 05:51
bcc32のあるディレクトリに設定用ファイルがあるんで、
bcc32.cfgに
-I"c:\bcc55\include"
とかいれる。
661デフォルトの名無しさん:02/11/17 05:54
C:\Program Files\bcc55\bin 以下に bcc32.cfg と ilink32.cfg 置いた?
C:\Program Files\bcc55\readme.txt 参照
662お願い:02/11/17 06:05
朝から本当に申し訳ありません。イマC:\borland\bcc55\Binのなか
を覗いたらbcc32.cfg ファイルはないようです。あとilink32.cfg
ファイルもないようです。この二つは自分で作らなければならない
でしょうか?(メモ帳でしょうか?)
>>662
メモ帳でいいよ。
664お願い:02/11/17 06:19
できました!! 先輩のみなさん朝から優しく教えていただいて
本当にこころから感謝します。これからもがんばりますので、お願いします。
>>664
ガンガレ(・∀・)!
>>657
http://dictionary2.goo.ne.jp/ej/voice/E/01011190.wav
イじゃなくてエに聞こえるけど。
>>666
カタカナでは正確に表せない。イとエの中間。
中学で習っただろ?
666 はリア消
ちなみに give の i と同じ発音
日本人は give をギヴと発音する多いがそれだと通じにくい
どっちかというとゲヴに近い発音
>>667
だったらつっこんできた>>657にもいってやれよ。
waterた
672549:02/11/17 09:24
563よ有難う!voidとは型式無指定だったのね。。。。

アメリカに行った時、書き間違えた個人小切手の上に銀行窓口の
おばちゃんが「VOID」ってでっかく手書きしたから、?っておもてた。。
>>672
void = 無効の
674デフォルトの名無しさん:02/11/17 10:02
引数の数がわからない関数を呼び出すにはどうしたらよいでしょう?

int call(int (*func)(), int num_args, void *args[])
{
// return func(args[0], ..., args[num_args-1]); としたい!
}
VOIDDD
stdarg.h
int (*func)(...)
でできるんかいな。
>>674
int apply( int (*fun)(), int argc, void **argv ) {
switch( argc ) {
case 0:
return fun();
case 1:
return fun( argv[0] );
case 2:
return fun( argv[0], argv[1] );
...
679デフォルトの名無しさん:02/11/17 11:26
Java、VBをやっているものです。
一応C/C++の文法覚えまして、ポインタもなんとなく理解できました。

そこで質問なんですけど、ポインタを使わずにStaticで宣言した
変数を使っても同じことだなぁと思うんですがいかがでしょうか?
どう考えてもポインタって意味がないような気がするんですが。。。
>>679
Java ではクラス変数だけしか使わなかったのか?
DOS時代のヒープ恐怖症のプログラマじゃあるまいし…
たとえば、sprintfをstatic変数でどう代替するん?
>>679
Java をやってる割には global 変数なんか使うのか
どーせ VB しかまともにやったことないんだろ?
>>682
ああ、グローバル変数のことか・・・
>>679のポインタを使わずにstaticってのがわからんかった。
ポインタをどう使うかが腕の見せ所なんだが…。
>>683
staticも知らんのに答えてるのってなんだか・・・・(ゲフゲフッ
>>685
staticってグローバルにするものじゃないんだが・・・
>>679
どう考えてもポインタって意味がないような気がするんですが。。。
(゚Д゚)ハァ?
ポインタがないとメモリを動的に確保することはできませんが何か?
688晒しあげ:02/11/17 12:40
686=688
必死だな(藁
>>686
今はスコープの話よりも、記憶域の話でしょ?
ポインタなんていらないっていうばかな考えは
staticをつければメモリ上同一アドレスにいるってことで
値渡しが行われないから、思ってるんでないか。
日本語へんだな
>>690
グローバル変数を使えばアドレス渡さなくても(ポインタを使わなくても)変数に値をセットできるってことじゃないの?
692デフォルトの名無しさん:02/11/17 12:45
このすれレベル低すぎだ
693691:02/11/17 12:45
他の関数で変数に・・・という意味ね
694JPS ◆M0LaMzf5rY :02/11/17 12:47
>>691
それはグローバル変数だからじゃなくて
静的記憶域をもつからでない?
オレも確実には言えないけど・・・
グローバル変数と、ファイル内static変数と、staticついたローカル変数は
たとえば関数内でオブジェクトそのものを操作して、関数を抜けたあとでも
ちゃんと値が保持されてるってことでないか?
>>692
そんなレスしか書けないレベルの低いお前(藁
晒しage
>>694
値が保持されていてもローカルじゃ他の関数から変数は見えないぞ。
それにアクセスするにはやっぱりポインタ使うしかないだろ。
>>696
値が保持されていてもローカルじゃ他の関数から変数は見えないぞ。
あ、そうか。
しかしポインタが必要ないってのはすごい考えでつね。
698691:02/11/17 12:50
>>694
scanfみたいなものを言っているんだが・・・
んじゃstaticでかつクラス変数と言うことで話を進めてください。
クラスって何?
>>700
バカ???
>>699
クラスってなんだ?C++?
>>701
スレタイ見ろ
704JPS ◆M0LaMzf5rY :02/11/17 12:53
>>698
すまそ。調子にのりました
いつからCでクラスを使えるようになったんだろ。
なんだ、ここはクラスの概念がないスレか・・・・・
707JPS ◆M0LaMzf5rY :02/11/17 12:56
ポインタが必要なのはわかるし、グローバル変数も必要だよね。
分割コンパイルとかするとき。
でもファイル内のstatic変数と、staticついたローカル変数は
どんなとき使うの?
>>706
チョソですか?スレタイ読めよ
ここはクラスの概念がないCのスレです
リアル厨房はC++スレに行ってください
>>707
> ファイル内のstatic変数
staticのついたグローバル変数?
そのファイルでしか使わないグローバル変数を定義するとき

> staticついたローカル変数
strtokみたいなものを作るとき。
710デフォルトの名無しさん:02/11/17 12:58
>>ポインタが必要なのはわかるし、グローバル変数も必要だよね。
>>分割コンパイルとかするとき。

この時点で意味不明で理解できてないことがよくわかる。入門書からやり直すことを進めます。
すいません。今殺伐モードですか?
712JPS ◆M0LaMzf5rY :02/11/17 12:59
>>709
strtokはよくわからんけど・・・

>そのファイルでしか使わないグローバル変数を定義するとき
そのままだけど、よく考えたらさ、ポインタ使っても変わらないよね?
ただ、ソース全体に共通するような変数で、他のファイルに既に名前がある場合とか
使うってこと?
713JPS ◆M0LaMzf5rY :02/11/17 13:00
>>710
今入門書よんでますが?
どこが違うの?
>>712
お前の言うポインタは何を指すんだ?
>>713
一行目はうなづけるけど、二行目がどうしてその理由になるのかわからない。
ハッシュつくるときはそれに関する関数をひとつのファイルにまとめて、
ハッシュテーブルはstaticなグローバル変数(配列というべきか)にした方がよくない?
717JPS ◆M0LaMzf5rY :02/11/17 13:03
>>714
ポインタにある一定のアドレスをずっと保持させておけば

ファイル内のstatic変数と同じような事になるんでない?
718JPS ◆M0LaMzf5rY :02/11/17 13:04
>>715
だからどこが違うのか教えてYO!
719デフォルトの名無しさん:02/11/17 13:06
>>717
おまえの言うファイル内のstatic変数はなにをさすんだ?
>>717
そのポインタ変数は消えないでずっと残っているの?
>>718
どこって・・・全然理由になっていないから・・・・・
722JPS ◆M0LaMzf5rY :02/11/17 13:08
>>717
そのファイルからしか見えないグローバル変数

>>720
もち、関数に渡す
723JPS ◆M0LaMzf5rY :02/11/17 13:09
>>721
理由になってない?
グローバル変数があるのは、分割コンパイルのときに必要だからでしょ?
これが理由になってないの?
>>723
そのグローバル変数はextern?static?

> グローバル変数があるのは、分割コンパイルのときに必要だからでしょ?
でもどうしてこう思うんだろう・・・
725デフォルトの名無しさん:02/11/17 13:11
ペインタとポインタって違うものなのでしょうか?
エラー番号設定したり。
727JPS ◆M0LaMzf5rY :02/11/17 13:13
>>724
は?なにも付けないよ。記憶域クラス指定子はつけないで宣言すんの。
だって他のソースファイルでも同じ変数使いたい時に
グローバル変数がないと不可能ジャン。
>>727
その通りだが、分割コンパイルのためなのか?(^_^;)
729JPS ◆M0LaMzf5rY :02/11/17 13:15
>>728
そうでしょ?じゃあ何のためにグローバル変数があんの?
>>729
「様々な関数で同じ変数使いたい時」だよ。
731JPS ◆M0LaMzf5rY :02/11/17 13:18
>>730
じゃあ複数のソースファイルにわけて分割コンパイルするときは?
グローバル変数じゃん
おいおいお前らJPSに負けんなよ
733デフォルトの名無しさん:02/11/17 13:22
>>731
意味がとおってないぞ。グローバル変数が無くても分割コンパイルはできる。
理由にぜんぜんなっていない。
むしろグローバル変数を出来る限り使わなくするの方がいい、ってのが最近の傾向なのに。
>>731
> 様々な
>>733
そんな傾向があるの?
>>731
( ̄□ ̄;)!!
オレの持ってる本にはグローバル変数は分割コンパイルするときに必要って
書いてあるぞ!
でもグローバル変数なしで、他のソースファイルの変数を参照できんの?
それともただ単に、分けるなって話?
737733:02/11/17 13:24
>>735
ここは10年前で時間が止まっているスレですか?
738JPS ◆M0LaMzf5rY :02/11/17 13:25
>>734
つまりオレと一緒ってことでしょ?
様々なって他のソースファイルのもって事だべ?
srand,randはグローバル変数を使っているのかな。
740JPS ◆M0LaMzf5rY :02/11/17 13:26
>>737
そういう事どこに書いてあんの?
最近の言語やってたらそりゃポインタが必要ないかもと思うだろ
C言語でもはじめのうちはライブラリの都合で使うことになるが
基本的には無くても困らないからな

まぁ後で必要になるから少なくともそこまでは勉学に励め
>>738
わけようがわけまいが関係ないから分割コンパイルのためということにはならないと思う。
743733:02/11/17 13:27
>>736
グローバル変数でなきゃ参照できないようなPGを作る時点で問題だろーが。
何のために引数と戻り値があるんだ?

そういえば昔関数の引数と戻り値を一切使わずに全てグローバル変数で受け渡しを行っていたPGがあってぞっとした。
自分がメンテ担当じゃなくて本当にうれしかった。
744JPS ◆M0LaMzf5rY :02/11/17 13:28
>>742
そりゃそうだね。すまそ。
>>743
グローバル変数を使った方がうまくかけることもあるだろう。
externなグローバル変数はなるべく使わない方がいいとは思うが。
>>744
むしろstaticの方が分割コンパイルで効果を発揮するだろう。
できるだけ通用範囲を狭められるんだから。
747JPS ◆M0LaMzf5rY :02/11/17 13:30
>>743
でもさ、俺の持ってる本には
実際のプログラムは何人もの人が集まってやるので、
グローバル変数を使って、他人の書いたソースファイルとの関連性を持つ
みたいに書いてあるYO!
グローバル変数を使ったほうが良い場合なんてあるのか?
制御とかゲームなどの容量が制限される環境ならわかるが
>>748
>>716みたいな時は?ダメ?
classがあればそんな必要はないんだけど。
750JPS ◆M0LaMzf5rY :02/11/17 13:31
>>746
staticついたファイル内変数はよく使う?
グローバル変数は使うなって事?
まあ、使うことはないけどさ・・・
構造体を戻り値にすれば良いだろ。
>>751
呼び出し元で指定(ヘッダーファイルで定義しておく)の構造体をつくって、そのアドレスを関数に渡すということ?
>>749
元データを引数に、ハッシュを戻り値にすればいいのでは
754752:02/11/17 13:42
>>753
うーんと、、よくわからない。
構造体の中にハッシュテーブルを持って、その構造体のアドレスをハッシュ追加やサーチを行う関数に渡したらいいんじゃないかなと思ったんだけど、どう?
>>754
OK
>>750
Cプログラミング診断室を一回よんだ方がいい。
http://www.pro.or.jp/~fuji/mybooks/cdiag/index.html
いまどきグローバル変数を勧めてる本って何なのか気になる
しかもグループ作業に必要ってどういった状況を想定してんだろ
分散作業かな?
プログラムの部分部分を手分けして作る時。を想定?
別にグローバル変数使ってもいいと思うけどな。
760デフォルトの名無しさん:02/11/17 14:10
>>758
んなこたーない。部分部分を作るときこそ機能単位で処理を分けて必要なものは構造体あたりで渡すはず。
作者がなんちゃってプログラマーなだけだろ。
双方向リストの交換について悩んでいます。

struct node {
int key;
struct node *prev;
struct node *next;
};

という構造で、双方向リストを記述しているのですが、問題は、ノード同士の
交換です。

ノードが隣り合っている時に交換すると、ポインタの付け替えでつじつまが
合わなくなってしまうのです。具体的には、node->next->prevとかnode->prev->next
が自分自身を指しているので、それを変更するとおかしくなるのです。隣合って
いなければ大丈夫なのですが。

スマートな交換方法はないものでしょうか?
>>761
swap(x,y){
x=y;y=x;
}
と、しているようなもんだろ。
>>761
std::list 使え
>>762
そうだったのですか。ということは、Node tmpとか用意して、
tmp = x; x = y; y = tmp;
とする必要があるのでしょうか?
>>763
STLは敢えて使わずに、Cだけで記述してみたいのです。
>>764
それって、常識・・・
767 :02/11/17 14:17
>>761
スワップ時に一時退避するnodeを用意してやればよいのでは。
>>766
そうなのですが、リンクリストで隣り合っていなければ、一時変数を用意
しなくてもうまくいくので悩んでいたのです。

>>767
やはりそうしないとだめなようですね。
便所でいろいろ考えてみたのですが、こんな案はどうでしょう?

A-Bとなっている時にAとBを交換する時

1.A−C−Bという風にダミーノードを挟む
2.B−C−A、交換する
3.B−A、つまりダミーノードを削除する

なんかすっきりしない方法ですが、これしかないのかなあ。
>>769
すなおに tmp node 使ったほうが速いんでないの?
>>770
そうしてみます。ありがとうございます。
外部変数ってのがよくわからないんですけど
わざわざ使う意味っていうのはあるんですか?
>>772
使わないとかけないかというと、不可能ではない。
参照する可能性のあるすべてのデータを引数として持ってまわればよい。
でも、そうすると引数がやたら増えて面倒なこともある。あまり極端だと
効率も落ちる。たとえば、I/Oエラーのときにlongjmpする場所とか、メモリ
が足りないときにlongjmpする場所とかのjmpbufがあるとき、それら
をすべて引数で渡すこともできるが、io_error_handlerとかmemory_error_handler
とかの外部変数にしとくほうが良いだろう。

あとはerrnoとか。(これも最近は変数と限らないけど、変数で済むなら
そのほうが効率が良い。)

極端なことを言えば、ファイルに1つ外部名を持つ関数さえあれば、あとは
外部名がいらないとも言えるわけだが(呼び出すと、データや関数へのポインタが
たくさん入った構造体を返す)。
>>773
ありがとうございます。
えーと、つまり引数が減らせるというメリットがあるわけですか?

なにやら、知り合いのPGさんがいうには組み込み系(?よくわかりませんが)
のプログラミングだと外部変数を多用することが多いということだったんですが
これはどういう意味なんでしょうか?
775デフォルトの名無しさん:02/11/17 17:11
ココみたいに、
ttp://www5e.biglobe.ne.jp/~liquor/raytrace/
BASICからC言語に変換するには
どうやればいいのですか?
776デフォルトの名無しさん:02/11/17 17:12
% bs2c.exe filename -o a.out
>>774
モジュール間の独立性を高くするには外部変数を使わないほうが良いが、
あまり大きくないプログラムで効率を重視する場合には、外部変数で
データを受け渡したほうがよいこともある。

引数を積むコードが不要になるから。
>>777
あと、スタック領域の節約にもなるね。組み込みだと重要。
#include <stdio.h>

typedef int (* fc)();
fc func(int);

int main(){
fc myfunc;
myfunc = func(3);

printf("%d\n", (* myfunc)(20));
return 0;
}

fc func(int n){
int fff(int a){
return n + a;
}

return fff;
}

23を表示して欲しいのですが、40と表示されます。教えて下さい。
>>779
closure かw
その前にコンパイルできるの?
>>774
速さやコード効率を追求すると外部変数の使用にぶがある。
ただ、そればっかだとコードの管理が面倒。
>>774
動的に確保するとフラグメンテーションが起きる
783779:02/11/17 17:55
>>780
できますよ。でもaもnもmyfuncの引数になってしまうみたいです。
>>783
うん。うちの gcc でもコンパイルできた
でも関数内で関数定義するのは規格外じゃなかった?

うちの環境では結果は
-1995389801
最適化コンパイルすると Segmentation fault で落ちる

とりあえず、あなたのやろうとしてることは 779 のコードではできない
785779:02/11/17 18:05
>>784
関数内で関数定義できないんですか。ありがとうございました。
関数内で関数定義できるといい事あったっけ?スコープとか、関数ポインタとか?
Pascalならできるけど・・・・
>>785
#include <stdio.h>
int f(int n) {
  int ff(int a) {
    return n + a;
  }
  return ff(3);
}
int main(){
  printf("%d\n", (*f)(20));
  return 0;
}
こうなら23と表示された。
788779:02/11/17 18:18
>>787
なるほど。でもそれだとクロージャじゃないですよね。
789774:02/11/17 18:22
>>777
>>778
>>781
>>782
なるほど。参考になりました、ありがとうございます。
790787:02/11/17 18:31
>>788
クロージャについてはよくは知らん。

gcc -ansi -pedantic test.c
test.c: In function `f':
test.c:3: warning: ANSI C forbids nested functions

オプションをいじったらwarningがでた。
ANSI Cの規格外らしい。
クロージャが作れると、たとえばqsortに渡す比較関数を
その場で作れたりして便利だが、Cにはないね。
C++の局所クラスを使えば似たことは出来る。

Cで、さらにclosureを関数から返したいなんて時はtrampoline使うんだな。
http://web.mit.edu/afs/sipb/project/clisp/new/clisp-1999-01-08/ffcall/trampoline/
792デフォルトの名無しさん:02/11/17 23:37
ヒープソートを実装するときに、アップヒープって使いますか?
793デフォルトの名無しさん:02/11/17 23:40
ヒップアップは使いません
>>792
使わないね
>>793
使わないね
796デフォルトの名無しさん:02/11/17 23:48
?:って使う事ある?
絶対ifの方が見やすいと思うんだけど
k=k+(n%2?n:n+1);
>>796
max = a > b ? a: b;

if ( a > b )
max = a;
else
max = b;
なら、もれは前者の方が見やすいと思う
if(n) veryverylongfunc(a,b,c,d,e);
else veryverylongfunc(a,b,c,d,f);
みたいな時には使うよ
800デフォルトの名無しさん:02/11/17 23:53
>>798
まじか。オレはif使っちゃう。?:を使うようにしよっと。コソコソ
ガーン、ぼくのアニーがキスしちゃったよー
enum
{
 enum_a,
 enum_b,
 enum_c,
}

// デバッグ用。いちいち関数用意しなくても使えるのが利点
#define enum2str(e) (\
 (e)==enum_a?"enum_a": \
 (e)==enum_b?"enum_b": \
 (e)==enum_c?"enum_c": \
 "enum_unknown" )
>>802
残念だがそりゃ if 使った方が見やすい(てか分かりやすい)と思う
804802:02/11/18 00:11
>>803
別に見やすいとはいってないよ。
enumの宣言の真下に書けてメンテしやすくて
テーブルと違って値が範囲外でもちゃんと動作して
リリース時にはリンクされないので
デバッグ時にこう使うこともあるってだけ。
805デフォルトの名無しさん:02/11/18 00:13
voidを返す関数は、intを返してreturnしたほうがいいと思うのは
オレだけでつか?
>>805
それって1ステップくらい遅くなるんじゃない?
>>805
戻り値は何を意味するんだ?
なにも意味しないんなら無意味どころか害になるよ。
>>804
796 へのレスじゃなかったの?

>>805
言ってることがよく分からんけど、君だけだと思う
809804:02/11/18 00:22
>>808
見易さ以外にも三項演算子を使うケースがあることを示しちゃまずかったかな?
戻り値ありの関数でreturnしないってのはどうよ。
クロージャーってのが良く分かんから調べてみたらこんな言葉があった。オブジェクトとは、処理が付加されたデータの事です。クロージャーとは、データが付加された処理の事です。
クロージャって要するにデリゲートのことだよ。
デリゲートってなんですか?
こんな感じか?
オブジェクト:クロージャ
メンバ関数:関数
メンバ変数:環境

cはクロージャとの方が親和性が高い気がするがどうだろう。
(゚Д゚)ハァ?親和性が高い?
>>810
それはただのアフォ

>>813
簡単に言えば関数のように使えるオブジェクトの事。
C しかやらないなら知らなくていい。

>>814
C で使えないものを 「親和性が高い」 と言って満足ですか?
>>816
> 簡単に言えば関数のように使えるオブジェクトの事。
え?delegateって「委譲」だと思ってますが何か?
Cでの関数へのポインタ、C++で言う関数オブジェクトを
C#ではdelegateという用語を使ってると思ってますが何か?
818デフォルトの名無しさん:02/11/18 12:42
ネタスレより下がっているのは納得できないage
819デフォルトの名無しさん:02/11/18 12:50
C#なんて知らないのでsage
ここはネタスレだったと思うが
821デフォルトの名無しさん:02/11/18 12:55
Cってprintfできたら終わりでしょ?
>821
( ´д)ヒソ(´д`)ヒソ(д` )
delegate っていうのは関数ポインタを複数個格納して、
まとめてガリガリって呼び出すだけのモンです。
もちろん一個格納するときにも使えます。
あと、メンバ関数に関しては、呼び出し元オブジェクトへの
ポインタ(C#では参照という)セットで格納できるため、
メンバも呼び出せるように拡張された、関数ポインタです。

つーか、ここにいるC#キチガイ全員死ね。
おれC#好きだけどこいつら嫌い。
Cしかできないやつ
825デフォルトの名無しさん:02/11/18 14:08
whileの中にカンマがついて条件が二個書いてあるの初めて見ました
これってどういう事ですか?

while(printf("]"),(c=getchar())!=EOF)
{
処理部
}
プロンプトを表示して入力町ってつもりと思われ。
>>825
カンマ演算子は、左右のステートメントを 1 つのステートメントとして扱う
以外は ; と一緒です。
なお、カンマ演算子は左側の評価値を捨てます。
828825:02/11/18 14:22
>>826
>>827
ありがとう
理解できました
Bまでしか経験ないんですけど。
>>829
何事も経験です。
まずはやってみなさい。
831デフォルトの名無しさん:02/11/18 16:36
スレのタイトルをみて吐き気を催し、スレを一通り読んで
実際に吐いたのは私だけですか?
>>831
病院へ逝ってください。
>>832
おめでたでつた。
>>833
おめでとうございまつ。
835デフォルトの名無しさん:02/11/19 04:34
標準ライブラリのヘッダを見ていて思ったのですが
memmoveの第2パラメータは何でconstなんでしょうか?
知ってる方は教えて下さい。
>>835
渡したデータを勝手に書き換えたりしない
ってことを明示するため
837835:02/11/19 05:07
>>836
memmoveで書き換えされなかったら意味無いんですけど…
838デフォルトの名無しさん:02/11/19 05:12
第一パラメータは書き換えされるけど
第二パラメータは書き換えされんでしょが。
839835:02/11/19 05:22
それだったらmemcpyで十分でしょう?
memmoveは領域が重なっててもコピー出来るので
第2パラメータの中身も書き換えられる可能性もあるんだから
constでは無いと思ったのですが、間違ってますか?
840デフォルトの名無しさん:02/11/19 05:27
>>839
たとえ重なっていたとしても、第二引数が指すものは(ソース上では)書き換えないから。
標準的な関数でsrc,dst引数がある関数はほぼsrcはconstだな。
インターフェースの統一と言った方が良いかもしれない。
それにsrc=dest=sだとしても書き換えられるのはsrcとしてのsではなくて
destとしてのs。
842835:02/11/19 05:36
constって、そう言う意味なの?
それ言ったら
char *strchr(const char *s, int c);
の戻値はどうしてchar*なんだ
844835:02/11/19 05:40
そう言う意味
 ↓
書き換わる事があっても、直接は書き換えない事を明示する事
   ∧_∧    / ̄ ̄ ̄ ̄ ̄
    (ω・ )ゝ < なんだって?>>843
.  ノ/  /     \_____
  ノ ̄ゝ
const char *strchr(const char *s, int c);
にしろってこと?
hoge(char *s, char *t);と
hoge(char *s, const char *ct);で中身が同じだったら
アセンブラ出力は変わらないと思う。
単に *ct = 0; とかあったらコンパイル時にエラーだすだけで。
実行時にチェックするコードは吐かない。
>>847
変わらないよ。だからどうしたんだ?ん?
変えないことを保証するようなインテリジェントなコードは吐かないってだけ。
8501:02/11/19 06:40
INPUT FORMAT:
* 1行目:2つのスペースに分離された整数NおよびL
* 2行 N+1:NのNラインは数字をスペース分離しました。
SAMPLE INPUT (file palpath.in):
3 3
1 2 3
1 2 3
1 2 3
OUTPUT FORMAT:
単一の整数:回文のパスの総数。
この問題のテスト・データのための答えはすべて署名された32ビットの実体に入ります。
SAMPLE OUTPUT (file palpath.out):
86
8511:02/11/19 06:43
>>850
Palindromic Tax Paths = 回文税パス

回文は同じことを前方へ後ろに読んだ数です、例えば1234321(しかし1231ではない).
回文は、長さで1つの数字と同じくらい短くなりえます。
(゚Д゚)ハァ?何言ってんの?こいつ
age
854ポンキッキだっけ?:02/11/19 13:00
たけやぶやけた
いかたべたかい
たしかにかした
なつまでまつな

回文二十一面相
いよいよこのスレも焉わりか・・・。
あのさ、初期化されていない配列の要素が0である保障ってあるの?
>>856
staticがついているものやグローバルなら。
>>857
じゃあさ、配列の内容を0で初期化したいためだけに、
staticつけるのって定石?
全然ちがう。
違うよねー。やっぱうちの教授まちがってるよー
あのハゲになんとか言ってクレー
ansiだとstaticなくても0になるんじゃなかったっけ?
autoなら、ならない。

char t[10] = {'c'};
の後半部分が0になるのと混同しているものと思われる
char t[10] = {'\0'}; とするとか。
/* ランダムな配列(効率の悪い方法) */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define NUMBER 20
int main(void)
{
int i,j,flag=0,data[NUMBER];
srand((unsigned)time(NULL));
for(i=0;i <= NUMBER;i++)
{
do
{
data[i] = (rand()%(NUMBER))+1;
for(j=0;j<i;j++)
if(data[i] == data[j])
{
flag = 1;
break;
}
}while(flag == 1);
flag = 0;
}
for(i=0;i<NUMBER;i++)
printf("%d ",data[i]);
return 0;
}
865863:02/11/19 20:32
これってどこ間違ってる?
>>865
flag = 0l;を入れる場所が違ってた。

int main(void)
{
int i,j,flag=0,data[NUMBER] = {0};

srand((unsigned)time(NULL));
for(i=0;i <= NUMBER;i++) {
do {
data[i] = (rand()%(NUMBER))+1;
for(j=0;j<i;j++)
if(data[i] == data[j]) {
flag = 1;
break;
}
flag = 0;
} while (flag == 1);
}
for(i=0;i<NUMBER;i++)
printf("%d ",data[i]);
return 0;
}
i <= NUMBERということは、 i == NUMBERな時に
data[i] =... が実行されるので、buffer overrun.

そもそも、1〜Nの順列を、乱数で交換していくほうがいいとおもう
スマソ。バグってたので直した。goto文はマナー違反だが
動くことは動く。

int main(void)
{
int i,j,flag=0,data[NUMBER] = {0};

srand((unsigned)time(NULL));
for(i=0;i < NUMBER;i++) {
do {
data[i] = (rand()%(NUMBER))+1;
for(j=0;j<i;j++)
if(data[i] == data[j]) {
flag = 1;
goto label;
}
flag = 0;
label:;
} while (flag == 1);
}
for(i=0;i<NUMBER;i++)
printf("%d ",data[i]);
return 0;
}
869863:02/11/19 20:46
>>866
禿蟻
はげしくありがとう
870863:02/11/19 20:48
ん?
最初のソースのflag=0を場所変えるだけじゃだめ?
>>870
だめですた。同じ値が2回以上出てしまいます。
>>870
goto文を取り去ってみたよ。

int main(void)
{
int i,j,flag=0,data[NUMBER] = {0};

srand((unsigned)time(NULL));
for(i=0;i < NUMBER;i++) {
do {
data[i] = (rand()%(NUMBER))+1;
for(j=0;j<i;j++)
if(data[i] == data[j]) {
flag = 1;
break;
} else
flag = 0;
} while (flag == 1);
}
for(i=0;i<NUMBER;i++)
printf("%d ",data[i]);
return 0;
}
goto見たの初めてだからちょっと感動した
Cはいくつかのループを一度に抜ける構文がないので、gotoを使った
方がすっきりする場合がある。もしくはループを別関数にしてreturn
するとか。
875863:02/11/19 21:59
ちなみにこれは最悪のアルゴリズムなんだってね。
オレにはよくわからんけど。
876デフォルトの名無しさん:02/11/19 22:01
int (*fns[])(struct gmstat*) = {gmmain, gmrank, gment, };
これってどういう意味ですか?
>>876
fnsはstruct gmstatへのポインタを引数に取りint型を返す関数の配列
へのポインタです。
じゃなかった、
fnsはstruct gmstatへのポインタを引数に取りint型を返す関数への
ポインタ配列です。
>>877-878
ありがとうございます。
たぶん理解できそうな気がします。
880デフォルトの名無しさん:02/11/19 22:29
char (*next)[10]

char *next[10]
はなにが違うのでせうか?
881bloom:02/11/19 22:30
>>880
括弧の有無。
つーか優先順位で調べろ
883880:02/11/19 22:41
>>881
ありがとうございます。

>>882
本気ですか?
884bloom :02/11/19 22:43
>>883
どういたしまして。
885880:02/11/19 22:44
>>882
ありがとうございます。
>>885
どういたしまして。
887880:02/11/19 23:05
やっぱりCのスレのレベルが下がってきている。
こんなのにもスカッと答えられる奴がいないのか。
888JPS ◆M0LaMzf5rY :02/11/19 23:09
オレがいるYO!

char (*next)[10]は
char型の配列(要素数10)へのポインタで

char *next[10]は
charへのポインタの配列(要素数10)だYO!
演算子の結合規則と優先順位の表を見ると解る、はずなんだが・・・
890880:02/11/19 23:13
>>888
すばらしい。ついでに教えてください。

int * const (*next[10])(char **pStr)

これはなんでしょうか。
891JPS ◆M0LaMzf5rY :02/11/19 23:13
>>889
結合規則は関係ないでつ
892JPS ◆M0LaMzf5rY :02/11/19 23:16
>>890
えーとね
neztはcharへのポインタのポインタを引数として、intへの変更不可のポインタを
返す関数へのポインタの配列?
なんか違う気がするが?
>>890
すいません。それってどういうときに使われるものなんですか?
894880:02/11/19 23:23
>>892
すばらしい

>>893
はい、文字列のポインタへのポインタを引数に持ち、ポインタの先の値を変更禁止のint型のポインタを返す関数へのポインタを配列に10個ほど入れておきたいときに使います。
880は新手の荒らしなのか・・・
896JPS ◆M0LaMzf5rY :02/11/19 23:27
>>894
文字列のポインタじゃないと思われ。
あと変更禁止なのは、ポインタ自体だと思われ。
うーん、なんかJPSが成長してる気がする。
皆、みたか。俺たちの息子はこんなに立派になったよ!
>>897
そうか?何だか頓珍漢なことを言っているような気がするが。
899JPS ◆M0LaMzf5rY :02/11/20 01:04
>>898
間違ってまつか?
900JPS ◆M0LaMzf5rY :02/11/20 01:05
>>890のは自信がないでつ・・・
>>899-900
そういうレスでスレ消費すんな。ウザイよ。
>>891
nextが[]に先にくっついたとして、*の結合規則によってcharに先に
くっつくか、nextにくっつくかが変わるから、関係あるよ。
903JPS ◆M0LaMzf5rY :02/11/20 01:14
>>902
そうでつね。すまそ
>>901
そういうレスでスレ消費すんな。ウザイよ。

以下このスレは煽りのみで1000を目指すスレになりました。
次スレどうすんの?
一応age
906デフォルトの名無しさん:02/11/20 01:56
foo.h
extern int ( *r[2] ) ( int, int ) ;

foo.c
#include "foo.h"
int ( *r[2] ) ( int, int ) ;

hoge.h
static int r ( int, int ) ;

hoge1.c
#include "foo.h"
#include "hoge.h"
int r ( int x, int y ) {
return x + y ;
}

hoge2.c
#include "foo.h"
#include "hoge.h"
int r ( int x, int y ) {
return x - y ;
}

上のようなファイルを分割コンパイルする時に
関数の名前や修飾子を変えずに*r[2]の初期値を
r[0]=r(hoge1.c),r[1]=r(hoge2.c);
にする方法はありますか
907デフォルトの名無しさん:02/11/20 03:04
>>906 gccでいいのなら、

==> foo.c <==
#include "foo.h"
extern int r1(int,int);
extern int r2(int,int);
int ( *r[2] ) ( int, int ) = { r1,r2 };

==> foo.h <==
extern int ( *r[2] ) ( int, int ) ;

==> hoge.h <==
static int r ( int, int ) ;

==> hoge1.c <==
#include "hoge.h"
int r ( int x, int y ) {
return x + y ;
}
int r1(int,int) __attribute__ ((weak, alias ("r")));

==> hoge2.c <==
#include "hoge.h"
int r ( int x, int y ) {
return x - y ;
}
int r2(int,int) __attribute__ ((weak, alias ("r")));
ありがとうございます。
でも、やっぱり通常の方法では無理のようなので、
staticをexternに変えマクロで対応する事にします。
DOS窓に♥を表示する方法を教えてください
DWORD written;
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),
&L"&heart;", 1, &written,0):
>>910
何も表示されませんですた。
WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),
&L"\x2661", 1, &written,0);

あ、Win9Xじゃ無理だから。
>>912
WINDOWS98ででき方法はありませんか
まず無い。
外字にパターン定義して出力ならできるかもね。
そういえば前、DOS 窓にスライム表示してた香具師がいたな。
どうやるんだっけ?

・・・スレ違いっぽいけど、過去ログ dat 落ちしてるしナー。
917デフォルトの名無しさん:02/11/20 17:56
printf("あいうえお");のように日本語をそのまま渡しても大丈夫なのでしょうか?
もし日本語の中に%を含む文字があったらまずいと思うのですが。
Cのみで図形とか線とか書けますか?
>>917
SJIS/EUCなら%(0x25)を含む文字セットは存在しませんが何か?
920デフォルトの名無しさん:02/11/20 18:03
>>919
JISは?
>>918
描ける。
但し環境依存。
\が含まれていたら?
923デフォルトの名無しさん:02/11/20 18:05
"が含まれていたら?
結局printfにそのまま日本語を渡すのはまずいということですか?
printf("%s", "あいうえお");みたくすれということでしょうか?
926デフォルトの名無しさん:02/11/20 18:20
?は\?とかかなければならないんだっけ?
>>920
存在しますが何か?

>>922
その場合、printfだけでなく、コメント中や文字列リテラルに
\を含む文字列「ソ(0x835C)」などが入ってるとコンパイルエラーに
なって嵌ったことがありますが何か?

>>923
SJIS/EUCなら"(0x22)を含む文字セットは存在しませんが何か?
>>927
コメントでも問題あるの?
プロジェクト内の一人がフォルダのパス作るために
sprintf(buf, "%s\\表計算\\", path);
とやって大変なことになったとかいう話なかったっけ。
おまえらprintfで日本語表示するときどうやってるのか問いたいです。
>>930
ごく普通にprintf("日本語");
問題あるようなら他の表現を使う。
おとなしく日本語対応のコンパイラ使えよ・・・。
printf("日本語漢字\x95\x5c示");
としてますがなにか?
>>932
・・・・・・・・あぁ?
>>933
そうすると何かいいことあるの?(^o^*)
936デフォルトの名無しさん:02/11/20 19:08
mallocの使用は御法度なんですか?
>>936
環境によっては。
通常は問題無い。

コメントや文字列リテラルで使える文字セットは
(基本的な英数字や記号以外)処理系定義だから、
コンパイラのマニュアル読め

としか…
>>938
コメントは*/以外なんでもOKじゃないの?
>>939
ダメでつ。
>>921
一本の線を表示する簡単なソース書いてほしい。
printf("──────────");
>>942
すごく簡単ですねありがとうございます!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
>>921
縦の線を一本表示するソースを書いてくれませんか?

printf("|");    とかは無しね
printf("┃");
>>944=ロリ
>>945=熟女マニア
printf("P1\n# test.pbm\n5 5\n")
for( i=0; i<5; i++ )
printf("0 0 1 0 0\n");
>>921
斜めで黄色い色が付いている線を一本表示するソースを書いてくれませんか?
目に黄色いセロファンをあてて、なんとかプログラムつくって見ましょう。
printf("$E[33;1m/$E[0m");
printf("\x1B[33;1m/\x1B[0m");
<FONT color="yellow">/</FONT>
ANSI.SYSがありません。
>>1
| GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行け。
-- 中略 --
| 上記を逸した場合の結果は激しく未定義とする。

というわけで、ANSI.SYS が無くても漏れは気にしません。
>>948
斜めで黄色い色が付いている線を一本表示するソース


書いたよ (・∀・)
ということは、セロファンが一番正解という事か・・・
957948:02/11/20 20:30
ポケコン買います。


>>956
むりぽ
ポケコンだと表示されてない部分が黄色くなりそうだな
959948:02/11/20 20:52
>>958
セロファンでつか?
ポケコンの場合、セロファンなんか貼らなくてもデフォルトでそうだったりしますが何か?
char *c[44] = {"C言語のことは漏れに聞け!"};
http://pc3.2ch.net/test/read.cgi/tech/1037796472/
乙華麗ー
立てちゃったのか・・・。
>>953
ansi.sys
>>964 のつっこみの意味がよくわからないのですが、誰か知りません?
ansiだけに安心しろ!
なんちゃって(^^)
これは言葉のあやだけど、

966 氏ね。
>>967
(^_^;)
969デフォルトの名無しさん:02/11/21 00:56
日本語と英語の配列のとりかたの違いは?
>>969
新スレあるんだからageるな。
charでシフトJISでしょうか?
wchar
char チャー
wchar ワチャー!!
チャースレに(・∀・)カエレ!
975デフォルトの名無しさん:02/11/21 19:38
      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ <  1098取り合戦、いくぞゴルァ!!    ,,、,、,,,
    /三√´д`) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,     \エーーーーーーーッ!?/
      //三/|三|\     
      ∪  ∪       (´д`)´д`(´д`)´д`(´д`)´д`(´д`)´д`(´д`)
 ,,、,、,,,       ,,、,、,,,      ,,、,、,,,     ,,、,、,,,        ,,、,、,,,
      ,,、,、,,,      (´д`)´д`(´д`)´д`(´д`)´д`(´д`)´д`(´д`)´д`(´д`)

http://big.freett.com/scheme_a/num1000.swf
よしぁぁ!! 1000とったぁぁぁぁ!!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ∩)    (´´
     ∧∧ノ  つ  (´⌒(´
  ⊂(゚Д゚⊂ ノ≡≡(´⌒;;;≡≡≡
         ̄ ̄   (´⌒(´⌒;;
     ズザーーッ
・・・・・・・・・
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
     ∧∧        (´;;
  ⊂(゚Д゚⊂⌒`つ (´⌒(´
早すぎたか・・・・・・・・・
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
     ∧∧
  ⊂(  ゚Д゚⊂⌒`つ; (´⌒(´
ドッコイショと、・・・・・・・・・
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
     ∧∧
    (゚Д゚ ,)⌒ヽ
     U‐U^(,,⊃'〜... (´⌒;;
何見てんだゴルァ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄
  ポ  ∧∧  ポ
  ン  (゚Д゚ ,) . ン
   (´;) U,U )〜 (;;).
(´)〜(⌒;;UU (´ )...〜⌒(`)
ドボルザークが
レ・ミゼラブルの
ミュージカルを書いて
ファクスで送る
ソプラノ歌手の
ラップがウケて
シングル出せば
堂々一位
印税ガッポリ
1000
       ,. -‐-、__
       ,'´/,','二ヽヽ、
       r'^Y´, -‐-,`ヽ}
       ;ヽ、Yム__ハ、`{_
      ,'゙ヽ._!= , =Y } i    キン♪キン♪
      ∧  .ト、"ワ".イ/j !     キングゲイナ♪
     { `ー'ト、`゙´/イく
      `、__,/\>'</ ∧
       ,'  〈 () / / |
       ,'  ,/`ー./ (__,, |
    ((  / /∧   {ニニニ二|、 ))
     / (_, ∧ ヽ__j⌒7-ーヘヽ.
      〈`ー / ヽ  `~´∧  )ノ〉
     ヽ./` ー-ニニニニ-‐へ´/
       `iー┬r‐r┬┬ ''"
.        レ' ⌒Y⌒ヽ.!
         `ー─'`‐─'