トップページ⇒tech
1001コメント295KB

C の超カンタンなことなら漏れに聞け

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
漏れは27才、、、今まで1ヶ月一生懸命Cを勉強してきた、、、
他の言語はHTMLしかできないが、例のスレがウイルスに犯されているのをみかねて、立ち上がった。
変数宣言、入力、出力、演算、条件文、繰り返し文、関数、ファイル処理、ポインタ、構造体、と入門レベルなら一通りできる。
あと構造体のチェイン、関数のポインタ、ビットシフト、共用体がわからんが、これもあと一ヶ月くらい勉強すればわかるだろう。
このスレでは、漏れが基礎レベルの質問に答える。しかし、俺様が5分以上考え込む難問は禁止だ。
0002デフォルトの名無しさんNGNG
v(^・^)v
0003デフォルトの名無しさんNGNG
コンソールでの文字入力、どうしてますか?
0004デフォルトの名無しさんNGNG
voidってなんですか?
0005デフォルトの名無しさんNGNG
>>3
まず、Cでは、「文字」と「文字列」は別の物として扱われる。
「文字」は一文字、「文字列」は配列を用意して、
そのなかにちまちま文字をはめ込んだものだ。
また、まぎらわしいことに、「文字列定数」とかいうものもある。が、いまはとりあえず、文字の入力についてだけ説明する。

とりあえず、次のコードをコンパイルして実行する。
#include <stdio.h>
int main(void)
{
 int ch; // int 型の ch を宣言。
 ch=getchar(); // getchar で一文字読み込み、ch に代入する。
 putchar(ch); // putchar で、ch に読み込んだ文字を出力する。
}

上のコードを実行すると、プロンプトが出て、文字を入力するように待機しているので、たとえば A と入力しEnterを押せば
A
と出力される。
見た目はこれだけだが、
 (1)なぜ ch をint で宣言したのか(なぜgetcharをintで受けるのか)
 (2)もしAAと2文字入力してからEnterを押すとどうなるのか(バッファリングの問題)
 (3)ch の中身は本当は何が入っているのか
など細かく見ていくとおもしろいのだが、入門スレなので大胆に省略する。
00061はNGNG
天才?
0007Kusakabe YouichiNGNG
In article >>5, デフォルトの名無しさん/5 wrote:
> また、まぎらわしいことに、「文字列定数」とかいうものもある。

「リテラル」は「定数」って訳すと混乱する場合も多いので、
そう訳さない場合もけっこうありますよ。


> {
>  int ch; // int 型の ch を宣言。
>  ch=getchar(); // getchar で一文字読み込み、ch に代入する。
>  putchar(ch); // putchar で、ch に読み込んだ文字を出力する。
> }
>
> 上のコードを実行すると、プロンプトが出て、文字を入力するように待機しているで、

プロンプトがでるってどんな環境の場合だろう?

たとえば A と入力しEnterを押せば
> A
> と出力される。

Enterはどこ行っちゃったの?

>  (1)なぜ ch をint で宣言したのか(なぜgetcharをintで受けるのか)

なぜ変数名が「ch」なのか? てのも気になりますね。
0008デフォルトの名無しさんNGNG
>>1
糞壁は気にしないで、続けてね。
0009デフォルトの名無しさんNGNG
クソスレ立てる1はウザイが、
嬉々としてしゃしゃり出てくる7には、
ウザイを通り越してむしろ愛すら感じる(;´Д`)ハァハァ
0010デフォルトの名無しさんNGNG
「C の超カンタンなことなら漏れに聞け」
うむ、Kusakabeが嬉々として食いつくタイトルだな。
ご苦労 >>1
0011>なぜ変数名が「ch」なのか? NGNG
わかんないの?

>1
才能を感じる♪
0012Kusakabe YouichiNGNG
In article >>7, Kusakabe Youichi/[email protected]/7 wrote:
>「リテラル」は「定数」って訳すと混乱する場合も多いので、
>そう訳さない場合もけっこうありますよ。

わたしならこんなめんどうな回答はしませんね。
こう答えます。

13ペイジを見ればわかりますよ?:)
0013Kusakabe YouichiNGNG
In article >>9, デフォルトの名無しさん/sage/9 wrote:

> クソスレ立てる1はウザイが、
> 嬉々としてしゃしゃり出てくる7には、

「ききとしてしゃしゃりでて」きたことにすると、うれしいのですね? :)
0014デフォルトの名無しさんNGNG
Kusakabeって何人いるんだ?
0015デフォルトの名無しさんNGNG
>>1
はい、うざいけど気にせず続けてね。
0016Kusakabe YouichiNGNG
In article >>12, Kusakabe Youichi/12 <[email protected]> wrote:
> 13ペイジを見ればわかりますよ?:)

「よ」の後ろがだめですね。(まるでMS-IMEユーザー)
0017デフォルトの名無しさんNGNG
>>4
void というのは「何も無い」という状態を、積極的に宣言するものだ。たとえば
 int main() // () の中が空白
でも、引数無し、というのは見てわかるが、
 int main(void) // () の中に void がある
とかいたほうが、
「引数はありませんよ」
と明らかに示しているのでわかりやすい。
また、もし間違えて、この関数を引数つきで呼んでしまったときは、コンパイラーで判断して、エラーを出せる。

また、関数の返り値が何も無い、ということを示すときにも使う。

(1)void foo (void) //foo という関数は、引数が無くて、返り値も無い
(2)int bar(void) // bar という関数は、引数が無くて、int 型の返り値を返す

このように使う。また、void 型の変数宣言というのもあるらしいが、そこまでよく読んでいないので省略。

ちなみに、ネットでvoidというハンドルを使う者もまれにいるらしい。これは「void」という名前ではない。
「名前」欄を空白にせずに、わざわざvoidと書き込むということは、
「名乗るほどの名前じゃありやせん」
という意味、つまり、2ちゃんでの「名無しさん」とかと同じ意味である。
0018Kusakabe YouichiNGNG
In article >>16, Kusakabe Youichi/9 <[email protected]> wrote:
> 「よ」の後ろがだめですね。(まるでMS-IMEユーザー)

わたしがバカにするのはATOKだけですね。
0019デフォルトの名無しさんNGNG
Kusakabe Youichiネタはウザイので、
他でやってください。
0020Kusakabe YouichiNGNG
In article >>17, Kusakabe Youichi/17 <[email protected]> wrote:
> ちなみに、ネットでvoidというハンドルを使う者もまれにいるらしい。これは「void」という名前ではない。

そんなにこわがらなくてもー :)
0021デフォルトの名無しさん NGNG
不定と処理系依存ってどう違うの?
0022デフォルトの名無しさんNGNG
>>21
不定は文字どおり、定まってない。決まっていない。
処理系依存は、(実装が)処理系によって違ってる。
ってことじゃないの?
0023仕様書無しさんNGNG
>>21
不定は処理系にかかわらずどんな処理が行われるか、どんな結果が返ってくるか決められていない。
処理系依存はOSとかCPUとかで動きが違う。
0024デフォルトの名無しさんNGNG
NULLと'\0'ってどう違うんですか?
0025デフォルトの名無しさんNGNG
>>21
不定というのは、本当に何がはいるかまったくわからない、ということ。
処理系依存は、ある特定の処理系だけつかうなら、その動作が予想できるけど、別の処理系に持っていったとき、どういう動作になるかわからないもの。
0026デフォルトの名無しさんNGNG
ナァルッ
0027デフォルトの名無しさんNGNG
ヒープってなんですか?
0028デフォルトの名無しさんNGNG
スタックってなんですか?
0029デフォルトの名無しさんNGNG
>>24
同じ。しかし、「0」と書くより
「\0」
と書いたほうが「文字としての0」という雰囲気をもっている。文字列の終端を見つけたいときなど
「0まできたらループ終了」
とかいうコードを書くと
「この0はいったいなんだ?」
と一瞬迷う。「\0」にしておけば、文字としての0、つまり、文字列の終端がきたらループを抜けるんだな、とすぐわかる。
0030デフォルトの名無しさんNGNG
>>27
知らないので省略

>>28
ここ↓わかりやすいぞ
http://www2.airnet.ne.jp/sardine/complang/Forth.html
0031デフォルトの名無しさんNGNG
>>30
ポーランド人じゃないので
そんな記法受け付けません。
0032デフォルトの名無しさんNGNG
ポインタにNULLを代入した場合
「何もさしていない」って意味っしょ?
0033デフォルトの名無しさんNGNG
>>32
http://www.catnet.ne.jp/kouno/c_faq/c5.html#0

とりあえずFAQ読め。
0034デフォルトの名無しさんNGNG
malloc関数の仕組みを教えてください。
ヒープのを知らないのでは答えられないと思いますが。
0035デフォルトの名無しさんNGNG
Cの開発に携わったのはリッチーだけで、カーニハンは「プログラミングC」の執筆に携わっただけというのは本当ですか?
0036デフォルトの名無しさんNGNG
>>34
>答えられないと思いますが。

なら、聞くなよ。
0037>33のリンクNGNG
変な日本語だ。内容もちょっとヘンなかんじだ。
0038デフォルトの名無しさんNGNG
>>37

ナルをヌルとか言っているし。
0039デフォルトの名無しさんNGNG
>>34
動的に必要なメモリを確保する関数だ。
それ以上は知らん。

>>35
知らないので省略。
0040デフォルトの名無しさんNGNG
>>37
じゃ、原文で読めよ。
http://www.eskimo.com/~scs/C-faq/top.html
0041デフォルトの名無しさんNGNG
>>40

sageるのなら書き込むなよ。
0042デフォルトの名無しさんNGNG
ナルとニルとヌルの違いを教えてください。
0043デフォルトの名無しさんNGNG
>>41

sageをなんか勘違いしてないか?
0044デフォルトの名無しさんNGNG
>>43

sage == ネタ

これもな(w
0045デフォルトの名無しさんNGNG
>sage == ネタ

君の脳内ルールを、ここで語られても困りますが。
0046デフォルトの名無しさんNGNG
>>45

君にはネタという言葉が通じないのかな?
0047デフォルトの名無しさんNGNG
>>42
ナル null ほとんどの場合、0 と等価
ニル nil Lisp用語 なにも無いという意味
ヌル null ナルの日本人用読み方
0048デフォルトの名無しさんNGNG
これはネタスレだよね?
0049デフォルトの名無しさんNGNG
>>45

間抜けなことを書いてしまったからネタということにしたいのでしょう。
追求しないのが大人の態度。
005042NGNG
>>47
>ナル null ほとんどの場合、0 と等価

ほとんどじゃない場合は?
0051デフォルトの名無しさんNGNG
>>49

無視

>>50

不定
0052デフォルトの名無しさんNGNG
>ナル null ほとんどの場合、0 と等価

100点満点で10点
005342NGNG
>>51
ヌルの値じゃなくて、定義は何ですか?
どういうときに使えばいいの?
0054デフォルトの名無しさんNGNG
>>53

空(から)
0055Kusakabe YouichiNGNG
In article >>17, デフォルトの名無しさん/17 wrote:
> このように使う。また、void 型の変数宣言というのもあるらしいが、

はつみみです。
0056Kusakabe YouichiNGNG
In article >>18, Kusakabe Youichi/18 <[email protected]> wrote:

> In article >>16, Kusakabe Youichi/9 <[email protected]> wrote:
> > 「よ」の後ろがだめですね。(まるでMS-IMEユーザー)
>
> わたしがバカにするのはATOKだけですね。

わたしはATOKを馬鹿にしたりしたことはいちどもないですよ。
(使うやつは馬鹿だろうけど)
005742NGNG
>>54
空(から)と0は等価ですか?
0058Kusakabe YouichiNGNG
In article >>20, Kusakabe Youichi/20 <[email protected]> wrote:

> In article >>17, Kusakabe Youichi/17 <[email protected]> wrote:
> > ちなみに、ネットでvoidというハンドルを使う者もまれにいるらしい。これは「void」という名前ではない。
>
> そんなにこわがらなくてもー :)

「てもー」なのに「:)」が付いてるんですか?
0059デフォルトの名無しさんNGNG
>>57

ほとんどの場合等価です。
006042NGNG
>>59
ほとんどじゃない場合は?
0061Kusakabe YouichiNGNG
In article >>24, デフォルトの名無しさん/sage/24 wrote:

> NULLと'\0'ってどう違うんですか?

全然ちがうものですよ。

125ペイジ 「5.1.3 NULLと'\0'と0」 を読みましょう。
0062デフォルトの名無しさんNGNG
>>60

不定
006342NGNG
>>60
不定と0は等価ですか?
0064デフォルトの名無しさんNGNG
>>63

不定なので比べようがありません。
006542NGNG
>>63

間違えた
× >>60
○ >>62
0066デフォルトの名無しさんNGNG
>>65

http://dictionary2.goo.ne.jp/ej/voice/N/02060587.wav
これを何度も聞いてください。そのうち悟りを開けます。
0067デフォルトの名無しさんNGNG
>61
本もってたらここで
わざわざ聞かないって。
0068デフォルトの名無しさんNGNG
whileもforも関数の再帰呼び出しも使わないで繰り返し処理を行う方法を教えてください。
006942NGNG
>>64
nullと不定は等価ですか?
0070デフォルトの名無しさんNGNG
>>69

ということにしたいのですね? :)
007142NGNG
>>70

そういうことにはしたくないです。
0072デフォルトの名無しさんNGNG
これは無限ループなのか
0073デフォルトの名無しさんNGNG
>>68
ifとgotoを使う。
0074デフォルトの名無しさんNGNG
>>71

ではnullと不定は等価ではないということになります。
0075デフォルトの名無しさんNGNG
>>73

あ、そっか。Cにもgotoってあったんだったな。
それさえ使わない方法は無理だよね?
0076デフォルトの名無しさんNGNG
>>68
知らない。
007742NGNG
>>74
nullは不定ではないということですか?
0078デフォルトの名無しさんNGNG
setjmp,longjmp
0079デフォルトの名無しさんNGNG
>>77

その辺は曖昧です。あなたが不定ではないと思えば不定ではないし、不定であると思えば不定だということになります。
008042NGNG
>>79
わかりました。C言語って曖昧なんですね。
0081デフォルトの名無しさんNGNG
>>80

いえ、コンピュータ自体が曖昧なのです。人間が作った物ですから。
0082Kusakabe YouichiNGNG
In article >>67, デフォルトの名無しさん/sage/67 wrote:
> 本もってたらここで
> わざわざ聞かないって。

買えばいいのに。
0083Kusakabe YouichiNGNG
In article >>68, デフォルトの名無しさん/68 wrote:

> whileもforも関数の再帰呼び出しも使わないで繰り返し処理を行う方法を教えてください。

回数分書く。
0084デフォルトの名無しさんNGNG
>>83

あほか。
008542NGNG
>>81
なるほど。
これで、僕の作ったプログラムが動かない原因がやっとわかりました。
僕のせいじゃないってことですね。
0086デフォルトの名無しさんNGNG
>>85

はいそうです。コンピュータの機嫌を損ねないよう、くれぐれも気をつけてください。
0087デフォルトの名無しさんNGNG
>>79
ようは、気の持ち様ということで。
0088デフォルトの名無しさんNGNG
>83
いわれてみれば
それもあるな
0089デフォルトの名無しさんNGNG
>>84
ループのアンロール。
先生にしてはまともな回答。
0090デフォルトの名無しさんNGNG
>>86
わかりました。ありがとうございました。
0091デフォルトの名無しさんNGNG
ループ処理を・・・・なら>>83みたいな答えは不正解になりますよね?
0092デフォルトの名無しさんNGNG
日下部ネタはよそでお願いします。うざい。
0093デフォルトの名無しさんNGNG
>>91
繰り返し処理…
って質問してるからなぁ。
つーか、難癖付けるにしてももう少しエレガントにやっとくれ。
0094デフォルトの名無しさんNGNG
>>91
それを言ったら、再帰もループと言えるのか?
0095デフォルトの名無しさんNGNG
>>94

まあそうだけど・・・・>>83があまりにもくだらなかったので・・・・
0096デフォルトの名無しさんNGNG
あ、いえ、糞壁を相手にしたのがそもそもの間違いでした。ごめんなさい。
0097Kusakabe YouichiNGNG
In article >>93, デフォルトの名無しさん/sage/93 wrote:
> 繰り返し処理…
> って質問してるからなぁ。

回数分繰り返してかくんだから「繰り返し処理」ですよ。
0098デフォルトの名無しさんNGNG
>>97

無限ループにしたい場合はどうするの?
0099デフォルトの名無しさんNGNG
みなさん、反応しなくていいですからね。
0100デフォルトの名無しさんNGNG
>>91
インラインアセンブラでジャンプすればー
0101デフォルトの名無しさんNGNG
>>97
日本語書けとは言わないから、理解はしてくれ、偽カベさん。
91が「ループ処理を…なら不正解」と書いたのに対して、
「繰り返し処理…って質問してるからなぁ」と答えたんだが?
ついでに「難癖付けるにしてももう少しエレガントに」とも書いたな。
0102デフォルトの名無しさんNGNG
>>98
普通に書くしかないでしょうね。
0103Kusakabe YouichiNGNG
In article >>98, デフォルトの名無しさん/98 wrote:

> >>97
>
> 無限ループにしたい場合はどうするの?

無限にかくのよ。
0104デフォルトの名無しさんNGNG
ループ命令は使わずにループ処理するにはどうしたらいいですか、ってか?
アホカ
0105デフォルトの名無しさんNGNG
>>101
繰り返し処理を…の質問に対しての回答だから
先生は日本語読み違ってないよ。

先生に栄養を与えるようなことは書かないほうがいいよ。
0106デフォルトの名無しさんNGNG
(;;)
0107デフォルトの名無しさんNGNG
>>106

泣いているの?クリスマスイブに一人だから?
0108デフォルトの名無しさんNGNG
C言語使わずにC言語勉強するにはどうしたらいいですか?
0109デフォルトの名無しさんNGNG

      人 
   。。∧ ∧Å。ノ。,,,
   _(⊂(゚Д゚*)⌒ヽつ_
  |=======∪======|
  |yyyyyyyyyyyyyyy|
 |~~~~~~~~~~~~~~~~~~~~~|
======================
0110デフォルトの名無しさんNGNG
>>108

C言語を使うとはどういうことでしょう?Cでソースコードを書くということでしょうか?
それなら頭の中でコンパイル&リンクすればよいです。
0111Kusakabe YouichiNGNG
>>106
(^^;)
0112デフォルトの名無しさんNGNG
(←これを表す三文字はなんだったっけ?
0113デフォルトの名無しさんNGNG
>>112
パーレンはそのまま書けばいいよ。
0114デフォルトの名無しさんNGNG
トライグラフ使う奴なんていねーよ!
0115デフォルトの名無しさんNGNG
>>112

左括弧

何か?
0116デフォルトの名無しさんNGNG
>>112
3文字表記があるのは次の9通り
??=  #
??(  [
??/  \
??)  ]
??'  ^
??<  {
??!  |
??>  }
??-  ~

従って

>>115
正解
0117デフォルトの名無しさんNGNG
a[i++]=b[i++]
不定と思ってたけど、処理系依存だった
0118デフォルトの名無しさんNGNG
??=include <stdio.h>
int main(int argc,char* argv??(??))??<
  if(argc==2??!argc==3)
    printf("%s??/n",argv??(1??));
??>

とかでOK??
0119デフォルトの名無しさんNGNG
>>112 「かっこ」だろ。
0120デフォルトの名無しさんNGNG
>>118
>   if(argc==2??!argc==3)
どうでもいいが
  if(argc==2??!??!argc==3)
と思われ
0121板違いNGNG
いやいや
<は<で&は&で
その他は&#文字コード;だろ?
0122デフォルトの名無しさんNGNG
> <は<で&は&;で
エスケープできてないな。
<lt; &amp;ということか。
0123デフォルトの名無しさんNGNG
じゃねーよ。&lt;だろーが。
0124デフォルトの名無しさんNGNG
ネタスレなのに質問すみません。
char型の文字(10進数の数字)をint型に変えることはatoi関数で出来ますが、
char型の文字(16進数の数字)をint型に変えるにはどうすれば良いですか?
0125124NGNG
あげます
0126デフォルトの名無しさんNGNG
sscanf("BEFF", "%x", &i);
printf("%x:%d\n", i, i);
0127デフォルトの名無しさんNGNG
>>124
charはそのままintになるが、16進数文字列からの変換なら
int i = (int)strtol(str, 0, 16);
unsigned u = (unsigned)strtoul(str, 0, 16);
0128デフォルトの名無しさんNGNG
>>1
ビットフィールドについて騙ってください
0129ビットフィールドNGNG
↑ビットフィールドを騙ってみた。

くそレススマソ。
まあ、どうせくそスレだからいいよな。
0130デフォルトの名無しさんNGNG
よくコメント内に、omajinaiとか書いてる人がいるんですが、
「omajinai」ってなんですか?
宗教?
0131デフォルトの名無しさんNGNG
こちらへどーぞ。
☆ Webサイト制作初心者用スレッドver14 ☆
http://pc.2ch.net/test/read.cgi/hp/1009190196/
0132デフォルトの名無しさんNGNG
単なる自分の無能さのいいわけです。
0133デフォルトの名無しさんNGNG
最近次のような記述をみました。
struct data{
int a:1;
int b:7;
}
この:1や:2はいったい何物ですか?
0134 NGNG
>>133
ビットです。
0135デフォルトの名無しさんNGNG
>>134
もうちょっと詳しく教えてください。
私が見た本には載ってなかったんです。
0136デフォルトの名無しさんNGNG
>133 aに1ビット bに7ビット割り当てる でも aを読み出す時は intだよという意味です

そいや
int a:1 ; は 0か-1 になるのか 0か1になるのか どっちだったかな?
0137デフォルトの名無しさんNGNG
たしかbccだと
struct data{
char a:1;
char b:7;
・・・
と沢山
}
とかやるとビット並びが連続しない所が出来てイヤーンな感じだった記憶もある
0138デフォルトの名無しさんNGNG
>>136
なるほど。これって入門書とかではあんまり取り上げてないですよね。
結構一般的なテクニックなんでしょうか。
0139デフォルトの名無しさんNGNG
>138
 うんにゃ 少なくともおいらは コンパイラによって動作違うからキライ

(1<<n) とかシフト演算とか使うなやっぱり
0140Kusakabe YouichiNGNG
In article >>133, デフォルトの名無しさん/sage/133 wrote:

> 最近次のような記述をみました。
> struct data{
> int a:1;
> int b:7;
> }
> この:1や:2はいったい何物ですか?

K&Rでも見たら?
0141デフォルトの名無しさんNGNG
>>140
お、K&Rに載ってるのですか。ちょうど今読んでるところなのです。
しかし、当方のセルヴェルは低級なため、構造体のところまで
読み進むにはもう少し時間がかかりそうです。
0142デフォルトの名無しさんNGNG
ビットフィールドは使いどころによっちゃ便利なんだけどね。
嫌いな人も好きな人もいるし、コーディングスタイルの問題とは
思うけど同じソースを異なるアーキテクチャで使いまわそうと
したときに下手な書き方してたら死ぬることも無いことは無いね。
0143デフォルトの名無しさんNGNG
>>141

物語じゃないんだから、前から順番に読むなYO!!
0144デフォルトの名無しさんNGNG
Cで構造体のネストするような場面では、素直にC++のクラスを使ったほうが便利?
0145Kusakabe YouichiNGNG
In article >>141, デフォルトの名無しさん/sage/141 wrote:
> しかし、当方のセルヴェルは低級なため、構造体のところまで

補充すればいいのでは?
0146デフォルトの名無しさんNGNG
Cをやり出してからPerlを見るとわけがわからない・・・
なんで1つの変数に文字列が入るんだ?
うーん・・・
0147デフォルトの名無しさんNGNG
>>146
それはある意味正常な感覚だな。

「変数」には「型」があるわけで、Cのプリミティブな型の感覚でとらえると
そういう感じになってしまう。
C++のclassと演算子オーバロードを学ぶとそのへんの「縛り」から抜け出せる。
stringクラスとかね。

Perlの型がC++のクラスとまったく同じかというと、厳密には違うんだろうけど
感覚的に「わけがわかって」くる。なんとなく。
0148デフォルトの名無しさんNGNG
>>146
文字列型だからです。
0149デフォルトの名無しさんNGNG
>>146

さすがインタプリタ言語だなと思う>文字列型
何文字つっこもうがセグメンテーション違反が起きないから。
0150ビットフィールドNGNG
>>146
さらにいうと、数値への自動変換機能つきの文字列な。
0151デフォルトの名無しさんNGNG
>>150

便利といえば便利だが厄介なときもあるな。
0152デフォルトの名無しさんNGNG
NULLポインターが
内部では『0』じゃない場合がある
って聞いたんだけど

それならこういうのは危険なのかな?

void* p[10];
memset(p,0,sizeof p);

とか

void** p = calloc(10,sizeof p);

この場合『0』で初期化しているので
内部ではNULLポインターではない、
と解釈されそう
0153デフォルトの名無しさんNGNG
NULL==0 は、NULLのビットパターンにかかわらず必ず成り立つから、かまわないのでわ?
0154デフォルトの名無しさんNGNG
>>153
整数定数0 と、ビットパターン0は別じゃない?
NULL == 0 が必ず成立することを規格は保証しているけど、
NULL == *(void*) &memset_zero_area は保証あるの?
# 超カンタンな問題ではなくてゴメン
0155デフォルトの名無しさんNGNG
>154
>NULL == 0 が必ず成立することを規格は保証しているけど
そうなの?
Cって実装依存じゃないの?
0156デフォルトの名無しさんNGNG
ポインタの文脈で 0 が使われると NULL と解釈されるだけで、
NULL = 0 ではない。
0157153NGNG
NULL==0 っていう式の値は1ってことは保証されてるよ。
==は必ずしもビットパターンの一致を検査するわけじゃないからね。
ただし、共用体やポインタのキャストを使ってNULLを整数だってコンパイラだまして整数定数0と比較する式は0になることもあるよ。
0158デフォルトの名無しさんNGNG
>>154
memset_zero_area ってのがなんなのか知らないからわかんない。
memset_zero_area ってなに? おせーて
0159デフォルトの名無しさんNGNG
char memset_zero_area[sizeof(void *)];
memset(memset_zero_area, 0, sizeof memset_zero_area);
ということだろう。
0160デフォルトの名無しさんNGNG
>>154
つーか NULL == *(void**) &memset_zero_area だな。
0161デフォルトの名無しさんNGNG
たとえば、NULLのビットパターンが0xa0000だとして、 NULL==(void *)0xa000は真かどうかってことかな?
0162Kusakabe YouichiNGNG
In article >>152, デフォルトの名無しさん/sage/152 wrote:

> NULLポインターが
> 内部では『0』じゃない場合がある
> って聞いたんだけど

「NULLが0なんじゃなくって、0がNULLなんです」! (定型)
0163Kusakabe YouichiNGNG
In article >>155, デフォルトの名無しさん/155 wrote:

> >154
> >NULL == 0 が必ず成立することを規格は保証しているけど
> そうなの?
> Cって実装依存じゃないの?

質問する前に規格書か文法書ぐらい読みましょう。
0164Kusakabe YouichiNGNG
In article >>157, 153/157 wrote:

> NULL==0 っていう式の値は1ってことは保証されてるよ。
> ==は必ずしもビットパターンの一致を検査するわけじゃないからね。

1行めはいいのですが、2行めは適切な教え方ではないですね。
0165157NGNG
>>164
>1行めはいいのですが、2行めは適切な教え方ではないですね。
ご指摘、感謝します。
0166162NGNG
>163
古い「ANSIC言語大辞典」という本を読んだが
「NULL == 0 が必ず成立することを保証」
という意味には取れんのだが..
C++に関してはNULLポインタの定義がしっかりしているが。
0167デフォルトの名無しさんNGNG
浮動小数点って何?
0168BCC32.141516NGNG
JPGの画像のwidthはどうやって得るの?
0169デフォルトの名無しさんNGNG
>>168
オフセット14バイト目からビッグエンディアン2バイト
0170デフォルトの名無しさんNGNG
>>166
void* p; において
p = 0; と p = NULL; は C++ では等価だか、Cでは等価を保証しない
(p == 0) と (p == NULL) は C++ でも C でも等価、つーことでしょ
0171デフォルトの名無しさんNGNG
>>127
ありがというございます。試してみます。
0172デフォルトの名無しさんNGNG
>>170
保証されるってば。保証されないのは、たとえsizeof(int) == sizeof(void *)
であっても*(int *)&p = 0 と p = 0が等価ではないということ。

なんかビットパターンが違うかもしれないということで混乱してるやつが
多いみたいだけど、sizeof(float) == sizeof(int)の場合(IA32はそうだね)に
float f = 1において*(int *)&f == 1 にはならなくてもf == (float)1になる
のと同じことだよ。
0173デフォルトの名無しさんNGNG
あー、保証されてるされてる。
なんかこの話題年に2回くらい見てる気がする。
0174デフォルトの名無しさんNGNG
#undef NULL
#define NULL "死ね"
0175166NGNG
「NULL == 0 が必ず成立することを保証」
の出典を教えてください。
保証しないと既存のプログラムが動かなくなる事はわかりますが。
0176Kusakabe YouichiNGNG
In article >>175, 166/175 wrote:

> 「NULL == 0 が必ず成立することを保証」
> の出典を教えてください。

っていうか文法書や規格書ぐらい読めば?
0177名無しさん@お腹いっぱい。NGNG
陽一コラ!!、早く寝ろよおまえ!!
こんな所で粘着してないでさっさと仕事さがせよ!!
わかったか? わかったらちょっとコーヒー買って来い!陽一!!!
0178デフォルトの名無しさんNGNG
お前ら。
臭がりすぎ〜
0179(-_-;)うぅNGNG
これ見ていただきたいんですが
やることは標準入力から数字を受け取って3乗して表示するものです。
p()のところでc=cは何を入れてるんでしょうか・・
ボーランドのだとコンパイルエラーになりませんでした。
実行すると入力した数字が表示されるみたいっす。


int main(void)
{
int a;
int (*b)(int a);

b=q;
a=atoi(gets("うんこ"));
printf("3乗は %d です\n",(*b)(a));

return(0);
}

int q(int a)
{
int c;
c=p(a);
return(c);
}

int p(int a)
{
int c=c;
printf("できるのか?→%d\n",c);
return(a * a * a);
}
0180Kusakabe YouichiNGNG
In article >>179, (-_-;)うぅ/179 wrote:
> ボーランドのだとコンパイルエラーになりませんでした。
> int c=c;

うーむ、そこも何をやりたかったか意味不明ですけど、

gets("うんこ")

ここもエラーにならなかったのですね:)

q()を介してp()を呼んでいる意味もなさそうですし、
bという関数のポインターを使う必要もないですね。
0181179NGNG
あ、ヘッダとプロトタイピング宣言は省きました。
0182デフォルトの名無しさんNGNG
>>179
c=c は、コンパイルエラーにならないとすると
正直何もしてないに等しい。

int c;
c=c;
と2行に分けて書いたのとほぼ等価行為なので
結局Cに何が入ってるかは神のみぞ知るってところ。
0183デフォルトの名無しさんNGNG

全てがスタックに取られたとしたら
スタックエリアはqが呼ばれた時に
 00 qのc
- 04 qからmainのreturnアドレス
- 08 qのa
- 0C mainのb
- 10 mainのa

となるから変ですね。 たぶん mainのa も qのcもスタックではなく
レジスタに割り付けられて、そのレジスタが同じというのが真相でしょう。

確か -S かなんかで出せる筈のアセンブラ出力してみて下さい。
0184デフォルトの名無しさんNGNG
>>176
ほんと、読解力ないね。
0185デフォルトの名無しさんNGNG
#include <stdio.h>

#undef NULL
#define NULL 1

int main( int, char** );

int main( int argc, char** args ) {
printf("Null is %d\n", NULL );
}
0186デフォルトの名無しさんNGNG
>176
>> 「NULL == 0 が必ず成立することを保証」
>> の出典を教えてください。
>っていうか文法書や規格書ぐらい読めば?

だから、さっさと出典だせ。
0187デフォルトの名無しさんNGNG
>>185
#include <stdio.h>
int printf(const char *format, ...) { return 0; }
int main()
{
 int c = 5;
 printf("c = %d\n", c);
 return 0;
}

何も表示されませんが、何か?
もちろん、標準ライブラリのprintf関数の動作は
規格で決まっていますが、何か?
0188デフォルトの名無しさんNGNG
そんな枝葉どうでもいいじゃん!
 おまえらpascalでもやれよ! 
0189デフォルトの名無しさんNGNG
「NULL == 0 が必ず成立することを保証」は、されていませんね。
#define NULL 0
があるから、0になってるだけで。
#define NULL 1
にすれば、「NULL == 0」は保証されません。
0190デフォルトの名無しさんNGNG
規格だと、
・ソースに現れた「0」は「ヌルポインタ」に変換される。
・NULLの定義は「0」もしくは「(void *)0」である。

この程度じゃ駄目か?
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
0191デフォルトの名無しさんNGNG
>>189
だからてめーの言う通りなら、
標準ライブラリの動作は全て「保証されていません」になるんだよ、バーカ
0192デフォルトの名無しさんNGNG
>>186
ISO/IEC 9899:1999
6.3.2.3
6.5.9
7.17
あたりかな。

ただし、NULLはstddef.hで定義されるマクロなので、明示的にも暗黙的にも
#includeしてない場合や、#undefして#defineした場合などは当然 NULL == 0
であるとは限らないけど、そんなプログラムはstrictly conforming program
じゃないから標準なんて気にするな。
0193デフォルトの名無しさんNGNG
http://members.tripod.co.jp/sweetparadise/i.index.html
0194デフォルトの名無しさんNGNG
お前ら「保証されている」って言葉の意味を考えた事ないですか?
0195デフォルトの名無しさんNGNG
ここで「保証されない」と言う人は、
「定数0」と「ビット列としての0」の区別も
「NULL」と「ヌルポインタ」の区別もしてないと思われ
0196デフォルトの名無しさんNGNG
「保証されていない」のは標準Cに準拠していないだけ。
「勝手に書き換える」のは「未定義の動作をひきおこす」だけ。
0197箱の臭いがするNGNG
気のせいか?
0198デフォルトの名無しさんNGNG
>>194
「int型はINT_MAXまでの値をとりえることが保証されている」

#undef INT_MAX
#define INT_MAX 1234567890123456789012345678901234567890

int i = INT_MAX;
printf("%d", i);

あれー?「保証されている」ってかいてあるのに、嘘じゃん。
0199デフォルトの名無しさんNGNG
結局「NULL は、プリプロセッサによってどんなコードに置き換わるかは不明だが、
NULL == 0であることは保証されている」ってことだな?
0200俺もそう思ったNGNG
>>197
気にするな。
0201デフォルトの名無しさんNGNG
mallocしたらexitするまでの間に必ず(以下略
0202デフォルトの名無しさんNGNG
>>201
お前の感じている感情は精神的疾患の一種だ
開放する方法は OS が知ってる OS に任せろ
0203デフォルトの名無しさんNGNG
すみません。ふと思いついて、

int n[1][1][1][1][1];

こういう配列を作ってみたんですが、
実際のメモリ上ではどういう構造になっているのか全く分かりません。

int n[5] とも違うようだし、
sizeof の値も sizeof(n) == sizeof(int) だし、
どなたかご教授願えませんでしょうか。
0204Kusakabe YouichiNGNG
In article >>203, デフォルトの名無しさん/sage/203 wrote:
> int n[1][1][1][1][1];
> こういう配列を作ってみたんですが、
> 実際のメモリ上ではどういう構造になっているのか全く分かりません。
int×2×2×2×2×2でしょ?

> int n[5] とも違うようだし、

どこから5がでてくるのでしょう?
0205デフォルトの名無しさんNGNG
>>204
> > int n[1][1][1][1][1];
> > こういう配列を作ってみたんですが、
> > 実際のメモリ上ではどういう構造になっているのか全く分かりません。
> int×2×2×2×2×2でしょ?
( ゚Д゚)ハア?
0206デフォルトの名無しさんNGNG
君ねー見た目が命だよ。
0207デフォルトの名無しさんNGNG
>>203
面白い。

>sizeof の値も sizeof(n) == sizeof(int) だし、
1x1x1x1x1で要素一つだから当然。
0208デフォルトの名無しさんNGNG
>203
その多次元配列のメモリレイアウトのこと?
0209デフォルトの名無しさんNGNG
基本的に下から順番に固まりになってる絵を想像すれば問題ない
0210デフォルトの名無しさんNGNG
>>204 pacalじゃないんだから配列指定は 最大じゃなくて サイズを示す
サイズは1だから メモリは 単なるintの変数と同じ
0211Kusakabe YouichiNGNG
>>207
たしかに、×2->×1ですね。(^^;

> > sizeof の値も sizeof(n) == sizeof(int) だし、
> 1x1x1x1x1で要素一つだから当然

というかもとの発言のひとは、何を確認したかったのだろう?
0212210NGNG
ただ、cの配列はサイズを越えたからといって叱ってくれる訳ではないので

n[x1][x2][x3][x4][x5] というように x1,x2,x3,x4,x5に 0以外を指定しても怒られない
0213Kusakabe YouichiNGNG
In article >>209, デフォルトの名無しさん/209 wrote:

> 基本的に下から順番に固まりになってる絵を想像すれば問題ない

下ってどっちですか?
0214デフォルトの名無しさんNGNG
>>213
ビルの窓から踏み出したら移動して逝く方向。
ご自身で確かめるよろし。
0215Kusakabe YouichiNGNG
In article >>210, デフォルトの名無しさん/sage/210 wrote:
> 配列指定は 最大じゃなくて サイズを示す
> サイズは1だから メモリは 単なるintの変数と同じ

そういえば、2ch.comp.programmerほうで、
「関数の引数に渡すときに&をつけるのがいやなので)」とかいう
だけの理由で、int a[1];みたいに書くとか言ってる人がいましたね:)
(それって、つまり代入や比較はその宣言したところではほとんどしなくて、
関数の引数に渡すばかりなんだろうか)
0216210NGNG
>215 スマン 判るように言ってくれ
 引数の宣言と 代入や比較とは?
0217Kusakabe YouichiNGNG
In article >>212, 210/sage/212 wrote:
> n[x1][x2][x3][x4][x5] というように x1,x2,x3,x4,x5に 0以外を指定しても怒られない

負の数は? > 0以外
0218210NGNG
>217 試してみなさい。
  たいていの環境では叱られないだろう
0219Kusakabe YouichiNGNG
In article >>214, デフォルトの名無しさん/sage/214 wrote:
> ビルの窓から踏み出したら移動して逝く方向。
> ご自身で確かめるよろし。

添字の小さいほうがどっちになるの?
0220デフォルトの名無しさんNGNG
>218
VC6.0でコンパイル。
警告、エラー
ともになし。
0221Kusakabe YouichiNGNG
In article >>216, 210/sage/216 wrote:
int a[10]; と宣言しておいて、

a[20] = 0; と代入してもコンパイル時に警告だしてくれるコンパイラーは
あまりないっていう程度の意味では?

# でも「0以外」ってのがよくわからん。そっちに関しては宣言時の話?
0222デフォルトの名無しさんNGNG
>>219
移動して逝きついた先で添え字を調べてみろ。
0223210NGNG
ええと、>>215の前半は
int func(int a[1])
{ なんとかかんとか
}

みたいに参照代わりに配列を使うという話と読んだ。

 がその話と後半 括弧内が繋がらない ので判らんと聞いた
0224デフォルトの名無しさんNGNG
間違ってオタオタ中ですか?
0225デフォルトの名無しさんNGNG
へー、素直に訂正することもあるんだー
0226デフォルトの名無しさんNGNG
>>225

間違いもあるさ。あんまり突っ込まないでやってくれ。
0227Kusakabe YouichiNGNG
In article >>224, デフォルトの名無しさん/sage/224 wrote:
> 間違ってオタオタ中ですか?
そういうことにしたいのですね:)
0228デフォルトの名無しさんNGNG
なんか必死だな。
0229デフォルトの名無しさんNGNG
>>223
どっちかというとこういうことじゃないか?

int func(int *);

int a[1];
func(a); /* &をつけない */
0230210NGNG
>>229 ああなるほど どうせそう書くなら
int func(int a[]); も一緒だし、そう書いた方がなんかいいと思えるよう
になったのは最近delphi漬だからかなあ
0231デフォルトの名無しさんNGNG
>>213
一番右の添え字。
配列のイメージってわかりますか?
0232203NGNG
レスありがとうございました。

n のひとつ分が多次元になるわけじゃなくて、
単なる n だったんですね。

勉強になりました。
0233デフォルトの名無しさんNGNG
そんな君に
「C言語ポインタ完全制覇」
をすすめる
0234デフォルトの名無しさんNGNG
うむむ、どう理解したんだか全然分からん。
0235デフォルトの名無しさんNGNG
>>232

次はジャパン言語を勉強してください。
0236デフォルトの名無しさんNGNG
int n[1][1][1][1] = {{{{1}}}};
0237デフォルトの名無しさんNGNG
n[0][0][0][0] = 1;
0238デフォルトの名無しさんNGNG
for (n[0][0][0][0] = 0; n[0][0][0][0] < 10; n[0][0][0][0]++)
 printf("%d\n", n[0][0][0][0]);
0239デフォルトの名無しさんNGNG
>238
メモリリークおめでとう
0240デフォルトの名無しさんNGNG
>>239 ハァ?
0241デフォルトの名無しさんNGNG
int n[1][1][1][1][1];
int i,j,k,l,m;
/* 初期化 */
for(i=0;i<1;i++){
  for(j=0;j<1;j++){
    for(k=0;k<1;k++){
      for(l=0;l<1;l++){
        for(m=0;m<1;l++){
          n[i][j][k][l][m]=0;
        }
      }
    }
  }
}
0242デフォルトの名無しさんNGNG
>>233
>「C言語ポインタ完全制覇」
これ(・∀・)イイ!
この本の著者さん、今度はJava本出したんだよね。
0243デフォルトの名無しさんNGNG
Javaでは何を完全制覇するの?
0244242NGNG
>>243
完全制覇じゃないけど、謎と落とし穴と解明するらしいよ。
0245デフォルトの名無しさんNGNG
そかそか。
0246242NGNG
ごめん…。
sage進行だったんだね…。
0247Kusakabe YouichiNGNG
In article >>227, Kusakabe Youichi/227 <[email protected]> wrote:

> In article >>224, デフォルトの名無しさん/sage/224 wrote:
> > 間違ってオタオタ中ですか?
> そういうことにしたいのですね:)

ほんものだったら「ということに」では? :)
0248Kusakabe YouichiNGNG
In article >>228, デフォルトの名無しさん/sage/228 wrote:

> なんか必死だな。

ということにしたいわけですか? :)

# えさやりすぎか?:)
0249デフォルトの名無しさん NGNG
>248
ふーん、で? 何怒ってるの?
0250デフォルトの名無しさんNGNG
糞壁改め餌壁
0251Kusakabe YouichiNGNG
In article >>249, デフォルトの名無しさん /sage/249 wrote:
> ふーん、で? 何怒ってるの?

おこってるっていうことにしてしまうと、何か安心するわけですね? :)
0252デフォルトの名無しさんNGNG
>>251
彼は質問してますね;)
0253152NGNG
遅れてゴメン

え〜と、
僕が言おうとしてたのは

・ポインターが必要なところに0が出てきたら
NULLポインターに置き換えられる
・NULLポインターはビットパターンが『0』とは限らない
ってことで

void* p[10];
memset(p,0,sizeof p);

のとき(32ビット環境で)
((DWORD)p[1]) == 0
ビットパターンが0なので
これは真になるのはわかるんだけど

p[1] == 0
(この『0』はNULLポインターの値に置き換えられる)
これが必ず真になるかが知りたかったの
0254デフォルトの名無しさんNGNG
なる。
0255Kusakabe YouichiNGNG
In article >>253, 152/sage/253 wrote:
> ・ポインターが必要なところに0が出てきたら
> NULLポインターに置き換えられる

「置き換え」というのは適切じゃないですね。
「解釈」ぐらいに言ったほうがいいのでは?

> ・NULLポインターはビットパターンが『0』とは限らない
> ってことで

「NULL」って書いちゃうと、マクロで定義した「NULL」という名前の
ことだと思ってしまって、理解できなくなるひともいるので、
カタカナで書いたりちがう書き方したほうがいいかも。
0256デフォルトの名無しさんNGNG
何でコイツの言う事は毎回毎回こうも中身が無いのかね (呆
0257デフォルトの名無しさんNGNG
そのためのコテハンだから。
0258デフォルトの名無しさんNGNG
voidだから。
0259Kusakabe YouichiNGNG
In article >>256, デフォルトの名無しさん/sage/256 wrote:

> 何でコイツの言う事は毎回毎回こうも中身が無いのかね

「ということにしたい」
0260デフォルトの名無しさんNGNG
うんうん (笑
0261CopyBorotNGNG
>>259
> 「ということにしたい」
「ということにしたいということにしたい」
0262デフォルトの名無しさんNGNG
文字列strの中の数字文字だけ削除する関数を作ったのですが、

void del_digit(char str[])
{
unsigned i = 0;
unsigned j;

while(str[i]){
if (str[i] >= '0' && str[i] <= '9'){
j = 0;
while(str[i + j])
str[i + j] = str[i + ++j]; //A
}else
i++;
}
}

//Aのところを
str[i + j++] = str[i + j];
とするとうまくいきません。
左辺を読み込んだ時点でjはインクリメントされるわけではないのでしょうか?
0263デフォルトの名無しさんNGNG
無効アドレスとはなんぞやを考えれば答えは必然と解る。
0264デフォルトの名無しさんNGNG
>>263
無効アドレスですか。。。
なんか初めて聞くような気が。
何せ勉強はじめたばかりなもので。
0265Kusakabe YouichiNGNG
In article >>262, デフォルトの名無しさん/262 wrote:
> str[i + j++] = str[i + j];
> とするとうまくいきません。

side-effectついてはK&Rにも書いてありますよ。
0266デフォルトの名無しさんNGNG
>>253
> ((DWORD)p[1]) == 0
> ビットパターンが0なので
> これは真になるのはわかるんだけど
なるとは限らない。
値をキャストする際にはビットパターンの変換も行われることを忘れないように。
DWORD 0のビットパターンが0の場合は((DWORD *)p)[1] == 0なら成り立つ。

> p[1] == 0
> (この『0』はNULLポインターの値に置き換えられる)
> これが必ず真になるかが知りたかったの
これも必ず真になるとは限らない。
規格に忠実に書く場合、null pointerで初期化したいならmemsetを使わずに
void *p[10] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
とか
for (i = 0; i < sizeof(p) / sizeof(*p); i++) p[i] = NULL;
で初期化する。
0267デフォルトの名無しさんNGNG
>>265
> side-effectついてはK&Rにも書いてありますよ。
これについて説明する際はsequence point(副作用完了点)のことを言う必要が
あるのでは?
0268デフォルトの名無しさんNGNG
>>265
>>267

K&Rはもってないです。
side-effectとsequence pointですか。。
なんか難しい話なのかな。
副作用ってのは関数形式マクロ使うときに2度インクリメントされたりする
から気をつけろと聞いたくらいです。
0269262=264=268NGNG
です。
ここID出ないんだ。
0270Kusakabe YouichiNGNG
In article >>268, デフォルトの名無しさん/268 wrote:
> side-effectとsequence pointですか。。
> なんか難しい話なのかな。
> 副作用ってのは関数形式マクロ使うときに2度インクリメントされたりする
> から気をつけろと聞いたくらいです。

たとえば a[i] = i++; で、何が起きるかは保証されない(a[5]に6が入るかもしれないし
5が入るかも)けど、
if (func1() && func2())....ではfunc1がfunc2より前に呼ばれることと、func1()の
返す値が0じゃなかった場合にfunc2()呼ばれないことが、
0271デフォルトの名無しさんNGNG
親切系の日下部さんもいるんだ。
0272デフォルトの名無しさんNGNG
>>268
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
を読みなさい。
0273262NGNG
>>272
どうもです、読んできます。
0274デフォルトの名無しさんNGNG
つか、わからなかったら、インデックスのインクリメントなんて、別の行に書け。
0275デフォルトの名無しさんNGNG
>>262
つーか、削除した分だけ最後の文字が増殖しそうな気がするのだが。
0276デフォルトの名無しさんNGNG
a[5]に5が入るかもしれないし、a[6]に5がはいるかも、じゃないのかな???
0277デフォルトの名無しさんNGNG
ネットに落ちてるソースを見てみると、
宣言やマクロが全部一つのヘッダファイル(例えばcommon.h)
にまとめられていて、それを全部の .c でインクルードしてる場合がある。

これはアリなのか? たんなるコーディングスタイルの問題か?

俺はいつも hoge.c には hoge.h というように、
一対一にヘッダ作ってるから、ちょっとビビった。
0278Kusakabe YouichiNGNG
In article >>277, デフォルトの名無しさん/sage/277 wrote:

> ネットに落ちてるソースを見てみると、
> 宣言やマクロが全部一つのヘッダファイル(例えばcommon.h)
> にまとめられていて、それを全部の .c でインクルードしてる場合がある。
>
> これはアリなのか? たんなるコーディングスタイルの問題か?
>
> 俺はいつも hoge.c には hoge.h というように、
> 一対一にヘッダ作ってるから、ちょっとビビった。

「まとめかた」の問題では?
意味もなく1つにまとめているんだったら、よくないですね。
0279デフォルトの名無しさんNGNG
>>277

それぞれのソースファイルに対してヘッダーファイルをつくるのなら、
マクロ等はすべてソースファイルの中に書けよ。
0280デフォルトの名無しさんNGNG
昔のCコンパイラは遅かったからね

プリコンパイルなんて仕掛けが出来てさ
そいつを最大限に利用しようとすると ヘッダファイルを全部纏めるというクセが
0281デフォルトの名無しさんNGNG
>>279

どうして?
0282277NGNG
悪い。一番肝心なことを訊いてなかった。
つまり「みんなはどうしてる?」ってことだ。
どうまとめようがアリなのは分かるけど、
なんか効率のいい方法とか、おすすめはないかな?

最近よく見るのが #include "hoge.c" ってカンジで、
.c をそのままインクルードする方法。
少なくともこれはよくないと思うんだが。
0283デフォルトの名無しさんNGNG
>>281

ファイル数が無駄に増えるから。
0284デフォルトの名無しさんNGNG
>>283

ん?どっちにしてもソースファイルx2になるんじゃないの?
0285デフォルトの名無しさんNGNG
>>284

ヘッダーファイルを一つにまとめた場合は、ソースファイル+1じゃない。
0286285NGNG
じゃなくて、ソースファイルに書き込めばソースファイルだけになるじゃない。
0287デフォルトの名無しさんNGNG
>それぞれのソースファイルに対してヘッダーファイルをつくるのなら、

って言う条件の話じゃなかったの??
0288マグナムNGNG
1000のファイルがあるとすると
#include "hoge1.h"
#include "hoge2.h"
.
.
.
と1000行書くとでも言うのかい?
どうまとめるかは規模によるだろ。
0289Kusakabe YouichiNGNG
In article >>288, マグナム/sage/288 wrote:
> 1000のファイルがあるとすると
> #include "hoge1.h"
> #include "hoge2.h"
> .
> .
> .
> と1000行書くとでも言うのかい?

そうですよ。
0290デフォルトの名無しさんNGNG
>>282
基本的には、あるまとまった機能単位でhoge.h hoge.c等をつくり、
その機能単位の複数から参照されるような共通定義は別にcommon.hなど
にまとめておく。

例外はもちろんある。そのへんは機に臨み、変じて応ず。
0291デフォルトの名無しさんNGNG
>>288
そのソースは1000ものヘッダが必要なのか?
構成をもうちょっと考えたほうがいいぞ、となる。

どうまとめるかは「規模」ではなく「依存関係」による。
0292デフォルトの名無しさんNGNG
外から呼ばれる関数のプロトタイプ宣言をヘッダに用意。
呼びたくなったら(リンクしたくなったら)そのヘッダをインクルードする。

それと、それらに使われる構造体やらなにやらの定義のヘッダは
別ファイルに作る。

ってのがスタンダードだと思ってました。
0293マグナムNGNG
>292
複数の人数でプロジェクト組んでやる場合
そちらの方がソース読みやすいね。
ヘッダでヘッダをインクルードしさらにへっだを...
というのをやられると読みにくてしょうがない。
0294デフォルトの名無しさんNGNG
普通1000もヘッダができるようなら、サブディレクトリに分割してライブラリ
にでもするだろ。

hoge/foo.c
hoge/foo.h
hoge/bar.c
hoge/bar.h

んで、メインでは公開するインターフェースだけを#include "hoge.h"する。
0295デフォルトの名無しさんNGNG
C++だけど、外に見せたくないprotectedやprivateなメンバの宣言と
外から呼ばれるメンバ関数の宣言を別のファイルに書きたくなることがある。
0296デフォルトの名無しさんNGNG
>>295
インターフェイスクラスを作って対処しても、ソースファイルが2つ増えるのがウザいんだよね〜。
0297296NGNG
つまらんツッコミが入る前に・・・

×ソースファイル2つ
○ヘッダファイルとソースファイルが1つずつ
0298デフォルトの名無しさんNGNG
>285
ホントに見せたくない変数なんかは.libにすればいいんじゃない?
わざわざprotectedされてる関数や変数を理由もなく使うバカはいないだろうし・・・
0299295NGNG
>>298
>ホントに見せたくない変数なんかは.libにすればいいんじゃない?
クラス定義に書かないで.libにする?
なんかそういう方法あるんですか?
0300299NGNG
宣言、だな、定義じゃなくて。
0301Kusakabe YouichiNGNG
In article >>297, 296/sage/297 wrote:

> つまらんツッコミが入る前に・・・
>
> ×ソースファイル2つ
> ○ヘッダファイルとソースファイルが1つずつ

ヘッダーファイルはソースファイルじゃないのですね? :)
0302デフォルトの名無しさんNGNG
>>301

うるさいよあんた。
0303デフォルトの名無しさんNGNG
実装ファイルとヘッダファイル
0304デフォルトの名無しさんNGNG
>303

そこ、エサまいちゃだめ。
0305デフォルトの名無しさんNGNG
Windows用で最新のC/C++の規格に完全対応している
コンパイラってドレデスカ?
0306ageNGNG
C言語をやるひとは、アセンブラを覚えた方がいいんですか?
0307Kusakabe YouichiNGNG
In article >>306, age/sage/306 wrote:

> C言語をやるひとは、アセンブラを覚えた方がいいんですか?

お好きなように。
0308デフォルトの名無しさんNGNG
>>306 ターゲットCPUが固定ならばアセンブラやるならばCは捨ててもよい
Cコンパイラしかないという環境があるからそういうターゲットならばCもよいと思うが

>>何をもって最新規格というのかわからんがVC++かGCCでとおらないものは
Cとはいえんとおもう。
BCCはANSI対応をうたっているけれどmakeファイルの互換性やライブラリーの互換性が低いのでいやだ
0309デフォルトの名無しさんNGNG
C99 のことでしょ?
漏れもC99に対応してるコンパイラーがわからん。
0310ボボNGNG
gcc 3.0だろが
0311デフォルトの名無しさんNGNG
cygwinっていうのにgccっていうのが入ってたので使ってみたんだけど
cygwinからじゃないともしかして実行できないんですか?
DOS窓から起動したらエラーで終了しちゃいました。
0312デフォルトの名無しさんNGNG
>>311
cygwin1.dllあたりを見つけたら実行はできるけど
ほとんど役に立たないよ。シェルがなきゃパワー半減。
0313デフォルトの名無しさんNGNG
cygwinのgccはそのままだとcygwin.dllに依存するけど、
オプションでそれ外せるよ。

オプションは"-mno-cygwin"
0314ビットフィールドNGNG
>>311
DOS窓からも実行できるぞ。
C:\cygwin\bin にパス通しとけ。
パスの通し方は自分で調べてね。
0315デフォルトの名無しさんNGNG
cygwinのgccで生成したバイナリってI/O系がちょー遅いよね。
何とかならない?
0316デフォルトの名無しさんNGNG
>>315
Winに無い機能をエミュレーションしてるんだから、そらー遅いだろう。

>>313
そのかわりUnix固有な事、例えばfork()なんかは呼べなくなるんで注意。
libcもmsvcrt.dllを使うようになる。
0317デフォルトの名無しさんNGNG
>>315
何とかしたいなら cygwin1.dll の開発メンバーになろう。
0318デフォルトの名無しさんNGNG
>>315
遅いってファイルIOも?
0319デフォルトの名無しさんNGNG
標準出力のベンチでRubyに負けたらしいぞ>gcc
0320デフォルトの名無しさんNGNG
ああ、あれはcygwin上での話なのか?
比較したrubyは何版だろう。
Windows用の中じゃcygwin版が一番速いはずなんだが…。
0321デフォルトの名無しさんNGNG
「gccっていうの」って発言が出るような時代なのだなぁ。しみじみ。
0322JustStupidRubyistNGNG
追試してみた。思ったより速いね>Ruby

Cygwin 1.3.6-6 / gcc 2.95.3-4 / Ruby 1.7.2

$gcc -O2 main.c # あっちのスレの 267
$time ./a.exe
real 0m3.578s
real 0m1.375s
real 0m1.281s
$time ./a.exe > /dev/null
real 0m2.281s
real 0m0.031s
real 0m0.016s

$ time ruby -e "for i in 1..10000 do puts 'hello,ruby'; end"
real 0m3.843s
real 0m1.750s
real 0m1.703s
$ time ruby -e "for i in 1..10000 do puts 'hello,ruby'; end" > /dev/null
real 0m2.297s
real 0m0.031s
real 0m0.047s
0323デフォルトの名無しさんNGNG
>>322

Perlもきぼーん。
自分でやれと言わないで・・・
0324デフォルトの名無しさんNGNG
ベンチスレ立ててやれよ
0325デフォルトの名無しさんNGNG
いいなぁUNIX環境・・・
俺のPC/ATじゃあ・・・・・(TT)
0326デフォルトの名無しさんNGNG
ここにも来たか
printベンチャー (´д`;)
0327Kusakabe YouichiNGNG
In article >>326, デフォルトの名無しさん/sage/326 wrote:

> ここにも来たか
> print(IM^]A,0 (´д`;)

文字化けしてますよ。
0328デフォルトの名無しさんNGNG
は?死ねよバカ
0329デフォルトの名無しさんNGNG
クソカベニマジレスカコワルイ
0330デフォルトの名無しさんNGNG
>>322
ほとんどがIOだから、たぶんcygwin1.dllに隠れて差が見えないんだろうな。

Linuxだとこんな感じ。
書き出してるデータ量がやや違うが、まあこんなもんだろう。
うーん、やけにperlが速いな。

gcc 2.96
ruby 1.7.2 2001-12-31
perl 5.6.0

$ gcc -O2 main.c
$ time ./a.out > /dev/null

real 0m0.010s
user 0m0.000s
sys 0m0.010s

$ time ruby -e "for i in 1..10000 do puts 'hello,ruby'; end" > /dev/null

real 0m1.115s
user 0m1.080s
sys 0m0.010s

$ time perl -e 'for $i (1..10000) {print "hello,Perl\n"}' > /dev/null

real 0m0.028s
user 0m0.020s
sys 0m0.000s
0331デフォルトの名無しさんNGNG
まだ意味なしベンチやってるし。
0332330NGNG
あ、rubyで遅いのはputsだ。一桁違う。

$ time ruby -e '10000.times {print "hello,C\n"}' > /dev/null
real 0m0.088s
user 0m0.060s
sys 0m0.020s

$ time ruby -e '10000.times {puts "hello,C\n"}' > /dev/null
real 0m1.055s
user 0m1.010s
sys 0m0.050s
0333デフォルトの名無しさんNGNG
>>330へ
http://isweb22.infoseek.co.jp/play/haya_01/
0334デフォルトの名無しさんNGNG
ルビー遅っ  (^∀^)ハハハっ 
0335ポン酢NGNG
#include<stdio.h>
main()
{
printf("EOF=%d",getchar() != EOF);
}
にキーボードからCtrl+Z(MS−DOS)を入力すると0を返してくれる
と思うのですがCtrl+Zを入力するとプログラムが終了してしまいます。
キーボードからEOFを入力するのはCtrl+Zであってますよね。
何がいけないのでしょうか?教えてください。
0336デフォルトの名無しさんNGNG
るbぃ晒しああげ!!
0337デフォルトの名無しさんNGNG
Cでクラスメソッドみたいなのを実装するにはどうしたらよいのですか?
WindowsでたくさんWindowコントロールがある場合1つのWindowだと
Handle->発信もとの判別をIF文使うかハッシュしてテーブル使うかしか
思いつかないんですけれど。
C++ならば1つクラス作ってメンバー関数にサブプロシージャもたせれば
実行時に関数の実体のコピーが作られるからメンバー変数にアクセスできるので

Handle->発信元レコード指定 の特定ができるけれど
Cの場合ポインタをレコードに入れるやり方ではできても
動的に変数分だけ関数の実体を作ったりする方法がわかりません。
0338デフォルトの名無しさんNGNG
まずサンクという方法があります
http://www.asahi-net.or.jp/~HA3T-NKMR/vcl3-1.htm
 これは小さなコードを動的に作成して、そのコードからインスタンスポインタと
 関数のポインタの2つを得るという方法で、win3.1の頃にwindowsDLLの解消
 方法として知られていました

次は SetWindowLongで GWL_USERDATA にインスタンスポインタを埋める事です
0339Kusakabe YouichiNGNG
In article >>335, ポン酢/335 wrote:

> #include<stdio.h>
> main()
> {
> printf("EOF=%d",getchar() != EOF);
> }
> にキーボードからCntl+Z(MS-DOS)を入力すると0を返してくれると思うのですが

まぬけな思い込み。

> Cntl+Zを入力するとプログラムが終了してしまいます。

当然ですね。

> キーボードからEOFを入力するのはCntl+Zであってますよね。

合ってません。

> 何がいけないのでしょうか? 教えてください。

思い込みがいけない。

17ペイジを読みましょう。
0340デフォルトの名無しさんNGNG
>>339
先生もやさしいところあるじゃん (w
0341デフォルトの名無しさんNGNG
>>338
サンクって
http://host1.sde.co.jp/hyper-dictionary/50-sa/sa/thunk.html
こういう用語じゃないの?
0342デフォルトの名無しさんNGNG
#include <stdio.h>
int main(void)
{
 printf("EOF=%d\n",getchar() != EOF);
 return(0);
}

^Z
EOF=0

できたんだけど・・・>>335
0343デフォルトの名無しさんNGNG
>>335
終了してしまうというのは、command.comのプロンプトに戻ってしまうということか、
それともウィンドウが閉じてしまうということか。
0344‏クンサNGNG
>341
Schemeでも使うYO!
0345デフォルトの名無しさんNGNG
>>339
Kusakabe Youichiの様なバイタリティ溢れる若者には
初心者を相手にがんばってもらいたい。
0346ポン酢NGNG
<<339
どこを見てもDOSはCtrl+ZでLinuxはCtrl+Dだと書いてあるのですが
違うのですか?どの本の17ページでしょうか?
<<342
うつして試してみましたが私の所では0返ってきませんでしたよ。
<<343
プロンプトに戻るということです。何かわかりますか?
0347Kusakabe YouichiNGNG
In article >>346, ポン酢/346 wrote:
> どこを見てもDOSはCtrl+ZでLinuxはCtrl+Dだと書いてあるのですが
> 違うのですか?

EOFがCtrl+Zなわけではありません。
(それが証拠に行の最初以外のところでCtrl+Zしてみればよい(傍証にしかならんか))

EOFという文字コードがあるわけじゃなく、
getchar()が「もう文字がない」ときに返す値なわけです。

ファイルの末尾にいちいちCtrl+Zが付いているわけじゃないでしょ?
たとえば「abcd」だけの4バイトのファイルだったら、getchar()を4回呼ぶ間は
それぞれの文字のコードを返し、5回目に呼んだときに、もうファイルに何もないので
(末尾に達しているので)、EOFをかえすだけです。
フィアルの末にCtrl+Zがついているわけではありません。

> どの本の17ページでしょうか?

まっとうな本です。

> うつして試してみましたが私の所では0返ってきませんでしたよ。

そこで0が返るかどうか「以前」の勘違いがあるんですってば。
0348デフォルトの名無しさんNGNG
>>347
23人目のKusakabeと認定されました。
0349デフォルトの名無しさんNGNG
人格分裂者みたいだな(w
0350デフォルトの名無しさんNGNG
>>348
23人ってあまりにも多すぎるし、そもそも奴はこんな論調を展開するまい。
CP/Mの話をも視野に入れた(でもいちいち言葉には書かない)話になるはずだ。
認定撤回を要求する。

要求は公開されるのだろうか?(w

23人目のハリーポッター?
0351ポン酢NGNG
>>347
>EOFがCtrl+Zなわけではありません。
>(それが証拠に行の最初以外のところでCtrl+Zしてみればよい(傍証にしかならんか))
試してみました。
C:\c>eof←実行して
kno←適当に文字を打ってここでCtrl+Zを入力すると
C:\c>←この状態になって
C:\c>eof←もう一度実行すると
EOF=0←これが表示されました。
どういうことなのでしょう?0は出てくれたのですがわけがわかりません。
0352デフォルトの名無しさんNGNG
>>350
>>348は22人目のニセモノって事だよ。
0353ポン酢NGNG
ttp://www.ht-net21.ne.jp/~sgwr-t/の掲示板で見たところ
Ctrl+Zはアンドゥとかぶっているのがよくないようなので
プログラムをこのように変更しました。
#include<stdio.h>

#define EOI 4

main()
{
printf("EOF=%d",getchar() != EOI);
}
</PRE></TD></TR></TABLE>
EOIというのは「end of input」の略です。
「4」というのはCtrl+Dの文字コードです。
Ctrl+A〜Ctrl+Zには1〜26が割り当てられているという情報は
ttp://www5b.biglobe.ne.jp/~yone-ken/VB/ura_info.htmlから得ました。
これでCtrl+Dを入力すると0が返ってきます。
このプログラムで「4」のところをCtrl+Zの「26」に変えて
実行してみましたが、Ctrl+Zの入力をするとプログラムが終了して
しまうのでやはりアンドゥと重なっているのがいけないのだろう
という結論になったのですが。どうでしょう?
0354ポン酢NGNG
</PRE></TD></TR></TABLE>
は気にしないで下さい。
0355 ◆woDeLPHI NGNG
試しに

#include<stdio.h>
main()
{
printf("EOF=%d\n",getchar() != EOF);
}
とやってみたら?
0356 ◆woDeLPHI NGNG
もしそれで納得出来る結果が出たなら

1、printf は必ずしも即座に結果を出す訳ではないです
2、結果をフラッシュせずに終ったら出力されない場合がある事
3、実際に出力させるには \n を送るか fflash で
0357 ◆woDeLPHI NGNG
ああ、全然的外れだ。
 結局 ctrl+Zで標準入力だけでなく標準出力も閉じてしまう
  win95系のdos窓で起こるバグの事を言ってるんじゃないかな?
0358デフォルトの名無しさんNGNG
日下部=voidって
昔某UG掲示板に論理粘着したあげくに絨毯爆撃で消された、あのvoid氏と同一人物なのだろうか・・・
0359デフォルトの名無しさんNGNG
口調は奴のそれだったのか?
0360デフォルトの名無しさんNGNG
可能性は高そうだけど偽者もいるからな。
0361デフォルトの名無しさんNGNG
関係ねーけどこんなの出てきた
http://www.nurs.or.jp/~nspixp/void/index.html

爆笑。
0362デフォルトの名無しさん NGNG
アレはHP∞だからのぅ (´д`;)
適当におちょくって遊ぶのが一番だで
0363ポン酢NGNG
>>357
私の環境はWin98です。
ちなみにコンパイラはVC++6.0のやつです。
Ctrl+Zにアンドゥが割り当てられているのが原因だと思うのですが。
違うのでしょうか?
0364 ◆woDeLPHI NGNG
>>363  作った実行ファイルをそのままwinNT系で動かせば大丈夫な筈

これは コンソール入力にctrl+Zが入力される事で コンソール出力も閉じてしまう
問題で、試しに そのアプリをリダイレクトしてみたら?
 例えば test.exe だとしたら
test. >temp.txt として
ctrl+Z を入力してみればちゃんと出力される筈
0365デフォルトの名無しさんNGNG
>>363
何もしなくてもUNDOの機能が組み込まれると思ったら大間違いだ。
0366ポン酢NGNG
>>364
リダイレクトしたら0でました。
0367ポン酢NGNG
DOSプロンプト上には表示されないのになぜなんでしょう?
Ctrl+ZやEOFをキーワードにGoogleで検索して軽く回ってみた
のですがどのページもこの問題について触れてないのが不思議です。
0368デフォルトの名無しさんNGNG
今までUP4800でプログラムを作ってきてたのですが、お金がないので
Linuxに載せ換えなければならなくなりました(泣)

大変にお行儀の悪いプログラム達で、ネットワーク経由のデータをntohl,hs
なんて一切せずそのまま使ってたりします。

バイナリで書き込んである大量のデータファイルもあるのですが、1・2・4
バイト混合の構造体(穴埋めくらいはしてありますが)+ご丁寧にビットフィ
ールドも使いまくっているのですが、これらを一気に変換する仕組みはないで
しょうか?

地道に見つけて一行ずつ直していくほかないのでしょうか?

だいぶ数があるので、もうメゲているので、どなたかのお知恵を拝借させてい
ただきたく。
0369 ◆woDeLPHI NGNG
>367 さあ? 単なるバグだと思ってたし、実際、コンソール入力出力は
ハードやbios叩いてたから深く考えなかったなあ・・・・スマン

>368 ご愁傷様
思いつくのは
1、そのサーバマシンがある間に、その構造体を読み書きする部分を直接から
 ハンドリング関数で読み書きするように変更
 例えば getDataHoge(フィールド名) みたいな感じね フィールド名はenumで定義

2、その後linuxに移す

という事くらいかなあ
0370ポン酢NGNG
スマンだなんてとんでもないです。
いろいろありがとうございました。
0371デフォルトの名無しさんNGNG
>>369
どうもありがとうございます。

UPのOSに依存する部分を確認して一行ずつ直すのにメゲているので
部分的でも良いのでさっと変換できるような仕組みがあったらいいなー
と、虫の良いことを考えているのですが…ないですかねぇ?
0372 ◆woDeLPHI NGNG
>.371 正直 UP4800 は触った事はありません。
64bitマシンでしたっけ?  int も64bitですか?
そしてエンディアンは同じですか?

エンディアンが同じなら構造体の intとかをint64とかに変名して一挙に
修正すればスムのでしょうけど
0373371ですNGNG
>>372さん

UPはMIPSで、R10000シリーズを使ってます。
32ビットですね。
多少癖はありますが、ごく普通のUNIXマシンだと思いますよ。

固定資産償却済みの化石のようなマシンだとR3000もあります。
#さらにゴミのような扱い(現役ではあるんですね、なさけない…)の
#古い古いUP(正確にはUPではなくEWS4800ですが)386もあります。
0374デフォルトの名無しさんNGNG
MIPSなら 両方に対応出来るんだから リトルエンディアンにしてそれで終わりじゃないのかい?
0375372ですNGNG
>>374さん
教えて君ですみません、もう少し教えて貰えませんか?

UP4800上のプログラム、データ->Linuxへ移植する際にMIPSマシンだとリトルエンディアン
にしておわり、ってどういう意味なのでしょうか?

CPUそのものがエンディアン変換を行ってくれたり、特別な命令を使うと86系と同じエ
ンディアン/パディングを行ってくれるのですか?
0376デフォルトの名無しさんNGNG
R10000って64bitじゃん。
http://www.google.com/search?q=MIPS+R10000+64ビット&hl=ja&lr=lang_en|lang_ja
0377376NGNG
あ、アプリが(バイナリ互換の為)32bitモードで動いてるって可能性もあるか。
ちゃんとマシン/OSの仕様確認した方が良さそうだね。
fileコマンドとかである程度わかると思う。
0378デフォルトの名無しさんNGNG
PS2はintが4バイトでlongが8バイトな糞システム。
ほとんど嫌がらせだよな...
0379デフォルトの名無しさんNGNG
>>378
ポインタは?
0380デフォルトの名無しさんNGNG
>>378
IA-64はそれと同じで、ポインタも64bitですが、何か?
0381デフォルトの名無しさんNGNG
>>346 亀れす
Section 1.5 Character input and output 17
is an expression .....以下略
日本語版は21Pね
0382デフォルトの名無しさんNGNG
>>378

8バイトも使えるなら好都合じゃない。
0383デフォルトの名無しさんNGNG
atoiの逆ってsprintf()でいいの?
0384デフォルトの名無しさんNGNG
itoa
0385デフォルトの名無しさんNGNG
iota
0386デフォルトの名無しさんNGNG
>385 1ch逝け
0387デフォルトの名無しさんNGNG
でも処理系によっては無くない?
0388デフォルトの名無しさんNGNG
NULLは0とは限らないよ。
やねのHPに書いてあった。

でもWindows上ではNULL==0が保証されてるよ。
0389デフォルトの名無しさんNGNG
>でもWindows上ではNULL==0が保証されてるよ。

だれが保証してんねん。
0390デフォルトの名無しさんNGNG
連帯保証人=???
0391デフォルトの名無しさんNGNG
APIリファレンスに書いてあった気がする。
0392デフォルトの名無しさんNGNG
Windowsじゃなくて、C/C++処理系が保証してます。
厳密に言うと、
「NULLが再定義されてない場合、式”NULL==0”を評価すると1になる。」
ってところでしょうか?
これ、何度も繰り返される話ですよね。
0393デフォルトの名無しさんNGNG
>>388
ほう?"Windows"が保証しているのか
# VC++ではなくて
0394デフォルトの名無しさんNGNG
Windows CEMeNT 20009895
といってセメントなんです、固まるものなんです。
固まらないほうがおかしいくらい。
0395デフォルトの名無しさんNGNG
ていうかWindowsのAPIがNULL==0として扱ってる。
∴Windowsも保証。
0396デフォルトの名無しさんNGNG
>>395
>ていうかWindowsのAPIがNULL==0として扱ってる。

それとこれとは話がちがうような。
0397デフォルトの名無しさんNGNG
Windowsが保証してるんじゃなくて
Windowsがそれを前提としているだけだRO
0398デフォルトの名無しさんNGNG
int *p;
p=realloc(p,size);

やっちゃったよ。
メモリが確保されないで1時間悩んだよ。
0399デフォルトの名無しさんNGNG
小一時間自分を問い詰めて吉
0400デフォルトの名無しさんNGNG
Win32コンソールでビットマップの表示の仕方教えてください。
0401デフォルトの名無しさんNGNG
コンソールでBMP表示・・・
できるのか?
0402デフォルトの名無しさんNGNG
コンソールには表示出来ませんから、窓をぴったり重ねて表示するとか
0403デフォルトの名無しさんNGNG
C/C++以外にポインタが使える(絶対番地にアクセスできる)高級言語って
ありますか?
0404デフォルトの名無しさんNGNG
>>403なんでこのスレで聞くの?

DelphiもC/C++と同じ程度に絶対番地にアクセス出来るし
VBでも多少は出来るよ
0405デフォルトの名無しさんNGNG
>>403
Pascalにもポインタはあるが、“絶対番地”ってなんだろうね。
言語仕様とOS依存な話と混ざってないかい。
0406デフォルトの名無しさんNGNG
質問です。

fp = fopen("hoge.txt", "a");
strcpy(a, "abc\n");
fputs(a, fp);
fclose(fp);

てなプログラムで、このときhoge.txtの後ろに文字列"abc\n"が追加されますが、
先頭に追加するようにできる、上手い方法はないですかね…?
1回ファイルの中身を全部読み出さないとだめなんでしょうか。

ヘタレな質問でスマソ
0407にせ1NGNG
>>406
どういう条件でかくの?
0408406NGNG
最初のhoge.txtの中身が
  "1234\n"
だとして、>>406のプログラムを実行するとhoge.txtが
  "1234\nabc\n"
ってなりますよね?
それを
  "abc\n1234\n"
となるようにしたいのです。

…わかりづらかったらスマソ
0409406NGNG
ちなみに、
FILE *fp;
char a[4];
としてます。
0410デフォルトの名無しさんNGNG
>>402
変数にアドレスとデータの概念(ポインタ)があり
アドレスの演算ができるのはC系統の言語だけ。
0411デフォルトの名無しさんNGNG
>>410
なんか格好良い言い方だな。
「410さんのレスがもらえるのはこのスレだけ!」
しかしC系統の言語ってのは、大雑把なくくりだな。
アセンブリは?
言語違うとか返されそうだ…
0412410NGNG
410のレス先は>>403だった。正直スマン。

>>411
アセンブラはあって当たり前と思うのであえて書かんかった。
というかそれが無いものはもはやノイマン型コンピュータではないと思う。
0413デフォルトの名無しさんNGNG
配列渡す時は、配列の最初のポインタを渡せばいいの?
0414デフォルトの名無しさんNGNG
配列の先頭へのポインタ渡すなら、それでもいぞ、でも、配列の大きさは渡せないぞぉ。
配列をそっくりコピーして渡したいなら、構造体に埋め込んじゃえ。
0415ネタではありませんNGNG
・・・ディスクフルってなに?
0416デフォルトの名無しさんNGNG
>>415
> ・・・ディスクフルってなに?
Cと関係あるのかな?

1.44Mのフロッピーディスクに2Mのデータを書き込もうとすると
発生する現象のことだ
0417 NGNG
>>406
ファイルは、 "a" または "a+" のアクセス種別で開くと、
すべての書き込み操作がファイルの終端から行われます。
ファイル ポインタは fseek 関数または rewind 関数で移動できますが、
書き込み操作を実行する前に必ずファイルの終端に戻されます。
したがって、すべてを読み出すしか方法はありません。
0418デフォルトの名無しさんNGNG
>>411

アセンブリ == 低級言語
0419415NGNG
>>416
どうもありがとう。
0420Kusakabe YouichiNGNG
本当にこのスレは頭の悪い人ばかりですね :)
自分は天才とは言いませんが、ここに来るのは子守みたいなもんです :)
0421デフォルトの名無しさんNGNG
>>420
「C の超難しいことなら漏れに聞け」スレでいってください
0422デフォルトの名無しさんNGNG
会社をやめてしまった先輩のソースをメンテしてるんですが、
どうにも理解不能な個所があるんです。

sprintf(wrkbuf, "%s%c", snddata, i["$#!"]);

i["$#!"]って、これはなに?
iはただのintで配列でもなんでもないのに。
しかも配列のインデックスが文字列!?

動いてるからいいんだけど、気持ち悪いよぉ。
0423デフォルトの名無しさんNGNG
defineされてるとか?
0424デフォルトの名無しさんNGNG
>>422
Cの[]演算子は実は交換法則がなりたつ。
だから"$#!"[i]と意味は一緒。(それでも俺はこんなソースキモくて嫌いだが)
しかしソンナコトほとんどだれも知らないし普通知る必要も無い。

その先輩のささやかな置き土産かも。
トロイやウイルスでなくてよかったな。
0425日下部圭子NGNG
>>422
> sprintf(wrkbuf, "%s%c", snddata, i["$#!"]);
>
> i["$#!"]って、これはなに?
> iはただのintで配列でもなんでもないのに。

int i = 0;
char p[] = "$#!";
で、

p[i] と i[p] は同じ結果を返します。
"abc"[i] と i["abc"] も同じですね。

でもi["abc"]なんて書き方をするプログラマはドキュソ決定。
0426デフォルトの名無しさんNGNG
>>423
何がです?
0427デフォルトの名無しさんNGNG
>>400
できるよ。
0xA800
0xB000
0xB800
0xE000
のセグメントがそれぞれ青、赤、緑、輝度になってるから
てきとーに書き込むのさー。

君にならできるさー。
0428デフォルトの名無しさんNGNG
>>425
ゴメソ…。
俺も面白がってやってる…。
0429422NGNG
>>424
>>425
ありがとうございます!
なるほど、"$#!"[i]と同じ意味ということですか。
一気に霧が晴れました。
0430428NGNG
"0123456789ABCDEF"[n];
ってやるとどうも頭でっかちで気に入らない。で、
n["0123456789ABCDEF"];
って、やったり…。
0431名無しさん@お腹いっぱい。NGNG
多分Perlの特殊変数 `$#" のつもりと思う・・・ (アフォだなぁ
0432名無しさん@お腹いっぱい。NGNG
あ>>422さんの事じゃ無いよ  ^^
0433名無しさん@お腹いっぱい。NGNG
あれ? 違うのかな? 話は交換性の方に言ってるけど
一応defineされてないか確認しても良いカモ
因みにPerlでは配列の最後の要素を指す添え字です -> $#
0434422NGNG
>433
や、ども。defineじゃありませんでした。
Perlとも関係ありませんでした。
たぶん先輩はこれ書いてる時にもうやめるつもりで、
僕に試練を与えてくれるつもりだったのでしょう。
0435デフォルトの名無しさんNGNG
じゃあ、試練に敗れたんだ…。
0436デフォルトの名無しさんNGNG
なぜ俺のことを漏れって言うのですか?
0437デフォルトの名無しさんNGNG
>>436
http://freezone.kakiko.com/jiten/m.html#more
0438422NGNG
>>435
あう。でもでも、関数へのポインタを返す関数の連鎖実行(うまく言えない
みたいのはなんとかクリアしたので自分では50点付けてます。
0439デフォルトの名無しさんNGNG
>>410
>変数にアドレスとデータの概念(ポインタ)があり
>アドレスの演算ができるのはC系統の言語だけ。
Delphiにもあるし、出来るけど?
var p:^byte; とポインタを定義して

inc(p,10); で p=p+10 相当の事も出来るよ

absoluteを使ってアドレスそのものを割り当てる事さえ出来る
0440デフォルトの名無しさんNGNG
スレタイトルに笑わせてもらったので(・∀・)アゲ!
0441あぼーんNGNG
あぼーん
0442デフォルトの名無しさんNGNG
>>441
ネズミ講か。貴様は死ね。
0443デフォルトの名無しさんNGNG
今Cで、getchar()関数で得た値をコマンドとして
int command(char cmd)みたいな感じで
関数の処理を分けるのを作っているんですが、
while(flag)
{
cmd=getchar();
flag=command(cmd);
}
とすると、getchar()の値が、最初に入力した値のまま
cmdに代入されるんですよ。
なにかうまい解決方法はないですかね?
0444追加(443)NGNG
因みに一回目はうまくいきます。
0445デフォルトの名無しさんNGNG
cmd = getchar()
の後に、
fflush(stdin)
を入れてみてください。多分うまくいくはずです。
標準入力の内容をフラッシュするのです。
0446デフォルトの名無しさんNGNG
>>445
http://pc.2ch.net/test/read.cgi/tech/1007902384/175-191
0447デフォルトの名無しさんNGNG
ありがとうございます。m(_ _)m
解決できそうです。
0448デフォルトの名無しさんNGNG
C-FAQに標準入力のフラッシュ(というかクリア)について書いてあるので、
読んどいたほうがいいかも。

結論をいってしまうと、処理系依存な方法を使うしかない。
fflush(stdin)かrewind(stdin)あたりのどれかしらは多分使えるので、
どれが使えるかライブラリリファレンスをチェック!
0449デフォルトの名無しさんNGNG
ねずみ講あぼーんage
0450名NGNG
「C の超カンタンなことなら漏れに聞け 」って挿入の弧と?。
0451デフォルトの名無しさんNGNG
>450
やっぱ年寄りは早起きなんだな。
0452デフォルトの名無しさんNGNG
すいません、Cの初心者(&コンピュータの仕組み自体もよく分かってない)なので
すがこの前

#include <stdio.h>

void main()
{
char a;
scanf("%s",&a);
char *b = &a;
for(int i = 0;b[i] != 100;i++)
{}
printf("dまでの字数は%d文字です\n",i);
}

と書いたらコンパイルは通って文字数の数え上げも出来たのですが何故だか5文字
以上打ち込むと強制終了のダイアログが出てしまいました。
友人に相談したら”お前怖いことするなぁ・・・邪悪だよ・・・。”としか逝って
くれませんでした。
一体何がいけなかったのでしょうか?
なんか初心者が質問しても良さそうなスレタイトルだったので思い切って質問して
みました。もしかしたら馬鹿な質問かもしれませんがどうか皆さんの御知恵を貸し
てください。
0453デフォルトの名無しさんNGNG
>>452
ネタですか?
0454デフォルトの名無しさんNGNG
>452
>char a;
はメモリを一文字分しか確保してない。
そこに文字列を入れることはできないのです。
char a[256];
のような感じにしましょう。

あと 'd' を意味しているのなら 100 と書かずに 'd' と書きましょう。

つか、ちゃんとCの本読みましょう。
0455デフォルトの名無しさんNGNG
>>452
自力で解決できるかどうかが、試金石になるでしょう。
0456デフォルトの名無しさんNGNG
>452
手元にCの本はない?
0457455NGNG
あ、おそっ、、、
0458デフォルトの名無しさんNGNG
>> 452
0文字分(+NULL終端)しかない領域に、
それ以上の文字列を突っ込んでいるから。
0459デフォルトの名無しさんNGNG
>>458キミもなんかおかしな事言うね。

問題なのはこれでしょ
>char a;
>scanf("%s",&a);
0460デフォルトの名無しさんNGNG
>>459
あんたが( ゚Д゚)ハア?
それがまさに1バイト(=char)に文字列突っ込む行為でねーの?
0461デフォルトの名無しさんNGNG
>>459キミもなんかおかしな事言うね。

問題なのはこれでしょ
>char a;
>scanf("%s",&a);

以下永遠に続く。
0462デフォルトの名無しさんNGNG
5文字まで大丈夫って言うのはなんでだろ。
0463デフォルトの名無しさんNGNG
アラインメントのせいで、4文字までは大丈夫、つか3文字+\0までは大丈夫そうなきがする、
あとは鼻から出た悪魔に気がつくのが5文字目入れてからだって事かも。
0464デフォルトの名無しさんNGNG
>>452
for(int i = 0;b[i] != 100;i++)
ってのも、思ったとおりになってないだろうな。
たぶん
for(int i = 0;i != 100;i++)
だろうね。
for(int i = 0;i<100;i++)
って書く人が多いから、このほうが意図が伝わりやすいけど。
つことは、
char a[100] ;
が正解かし?
0465デフォルトの名無しさんNGNG
char a[100];
scanf("%s", a);
だ、100バイト以上入力したら鼻悪魔だけど。
0466デフォルトの名無しさんNGNG
for(i=0 ; b[i] ; i++)
と思われ。
0467デフォルトの名無しさんNGNG
>>461
> char a;
> scanf("%s",&a);
char a[1];
scanf("%s",a);
1バイトに文字列突っ込む=これと同意だろ?
と言いたいのですが。
それとも俺が根本的におかしな事逝ってるのか、461さんよ?
0468デフォルトの名無しさんNGNG
ついでに
100と比較しているのは、454さんも言っているように
for(int i = 0;b[i] != 'd';i++)
と同意だと思われ。
“dまでの字数…”と書いてある~から。
これだとNULL終端見てないんで、
for(int i = 0;(b[i] && b[i] != 'd');i++)
か。
ただしコレだと'd'が存在しない場合のことはしらん。

文字列を格納する領域が必要なことは既に多くの方が説明されているので省略。
0469デフォルトの名無しさんNGNG
>>468
それだ!
ああ、すっきり。
0470ひよこ名無しさんNGNG
>>467
>1バイトに文字列突っ込む

この仕様を満たそうとして

> char a;
> scanf("%s",&a);

なんだな。おっしゃるとおりだ。

ただ、仕様の時点でバグがある。
0471461NGNG
>>467
>>459 >キミもなんかおかしな事言うね。
というほど根本的な違いがあるのかね?
もちろん、>>452のレベルにおいて、だが。
>>458も>>459も指摘してる場所は同じだろ、といいたい。

ま、おれがとんでもない勘違いをしてるのなら、指摘されたいと切に願う。
0472デフォルトの名無しさんNGNG
正規表現で言えば、

文字:.
文字列:.*\0

1bitで文字列を表現できるのは空文字列だけ。
0473デフォルトの名無しさんNGNG
どーでもいいじゃん。
バッファ確保さえすれば、いいじゃん。
0474デフォルトの名無しさんNGNG
charの変数と、要素数1個のcharの配列とは根本的に違うのを>>452がわかってれば、
どこがおかしいのかはすぐに気がつくだろう、という意味では、大きな違いがありそうだな。
0475デフォルトの名無しさんNGNG
何が違うの?
>charの変数と、要素数1個のcharの配列とは根本的に違う

よく分からない、マジで教えて下さい
0476デフォルトの名無しさんNGNG
>>475
データ型(変数型ではない)が違いますよ。
0477デフォルトの名無しさんNGNG
>>471
> >>459 >キミもなんかおかしな事言うね。
> というほど根本的な違いがあるのかね?
あぁ!?
“キミもなんかおかしな事言うね。”
ってのは俺のカキコじゃねーよ。
459のカキコだ。
0478デフォルトの名無しさんNGNG
printf("%c",&a);
と
printf("%c",a);
の違い?
0479デフォルトの名無しさんNGNG
>>478
その認識、非常に危険だがまぁ、その違いでもある。
&は何をするものか知ってるか?
0480461NGNG
>>467==>>477==>>458か?
なら、つっこむ先は>>459だ、俺は459じゃねーよ。
0481デフォルトの名無しさんNGNG
>>480
スマソ
459=461で、コピペで煽り返されたと思った。
俺の根本的考え違い、鬱氏。
0482461NGNG
>>481
あ、やぱし、ちょっとアツくなったよ、ゴメソ
0483デフォルトの名無しさんNGNG
int c
c = getc(stdin)) >= 0
で文字"a"を読み込むと、cには97が入る。
何で?
0484デフォルトの名無しさんNGNG
>>483
あってるじゃん
0485デフォルトの名無しさんNGNG
>>483
何でって・・・当たり前だろ。
0486483NGNG
ASCIIコード?
0487Riva ◆RivaByXA NGNG
>>483
ファイルからは8bit固定長のデータを常に読む。
JISコードの場合、int型で変換すると10進数で127までの
数になる。
つまり、aという文字は00110001と表されている。
これを10進数にすると97。
0488名無し募集中。。。NGNG
>>1
どういうとき引数にconst使えばいいの?
04891じゃないけどNGNG
>>488
関数のなかで、読取専用にしたい変数につかう。
もし変更すると、コンパイラに怒られる。
0490Riva ◆RivaByXA NGNG
>>488
引数を定数式として使いたい場合。
つまり、プログラムを通して値が変わらないような場合に使う。
プログラムにおいて、値を変更したい時は宣言部の値を
変えればいいことになる。
0491名無し募集中。。。NGNG
>>489
ポインタ変数にconstつけると、何が読み込み専用になるの?
0492名無し募集中。。。NGNG
>>490
それだと、#define とどう違うの?
0493デフォルトの名無しさんNGNG
>>487
やっと謎が解けた。
完璧理解しました。ありがとう
0494Riva ◆RivaByXA NGNG
#defineはコンパイルにおいて出てきた特定の文字列が
同じ定数に置き換わる.適用範囲はプログラムソース全体。
constの適用範囲は#defineより狭い。
外部関数の中で宣言すれば、外部関数の中でしか役割を果たさない。

ポインタ変数も,実数であらわされる。
その値が変わらないことを意味する。
0495489NGNG
>>491
constは直後の語にかかる。
const int *a;は値の代入はできないが、ポインタの代入は可
int const *b;は値の代入はできるが、ポインタの代入は不可
ひょっとして、Cじゃなくて、C++の話題になってきたかもしれないのでsage
0496495NGNG
sageてない。鬱氏
0497デフォルトの名無しさんNGNG
#defineに比べて、const定数は、コンパイラが型チェックをしてくれるYO!
0498デフォルトの名無しさんNGNG
a=12
b=6
c=a+b
d=a-b
write(*,*) a,b
write(*,*) c,d
write(*,*) a*b,a/b
end
みたいなプログラムをするには、
どんなソフトが必要ですか?
0499デフォルトの名無しさんNGNG
>>495
const int *a は int const* a と同じ。
ポインタを const にするには int* const a とする。
0500デフォルトの名無しさんNGNG
>>498
多分、きみにはそのプログラムを作ってくれる人が必要だね。
0501498NGNG
>>500
まぁこんな感じの、ってことで。
FORTRANプログラムって言うんでしょうか。
何を使ってプログラムを実行するんですか?
0502デフォルトの名無しさんNGNG
>>501
何かカワイいから教えてあげたいが、訳和歌蘭
FortranでもCでも良いからコンパイラが有れば
>>498みたいなソースから実行可能なコードを生成出来る。
コンパイラはフリーで沢山有るから探してくれ
0503デフォルトの名無しさんNGNG
>>498
Windows98以降をつかっているなら、

Dim a, b, c, d
a = 12
b = 6
c = a + b
d = a - b
WScript.Echo a, b
WScript.Echo c, d
WScript.Echo a*b, a/b

これをメモ帳に貼りつけて、abcd.vbsなんていう名前で保存してから、
そのファイルのアイコンをダブルクリックみよう。
0504デフォルトの名無しさんNGNG
ダブルクリックしてみよう。
0505498NGNG
ありがとうございました。
コンパイラを手に入れました。
なんですが、498をそのまま使ったら「宣言の構文エラー」って言われました。

> 498みたいなソースから実行可能なコードを生成
とはどうやるんでしょうか。
0506498NGNG
すいません、解説してくれてましたね。。。
ありがとうございました。
0507デフォルトの名無しさんNGNG
>>505
ここはC言語のスレ、で498のソースはどうみてもC言語ではないのだが?
ていうか何言語よ?
・数値演算の結果を出力したい
のか
・498のソースそのものを実行したい
のか、どっちよ?


#include<stdio.h>
void main(void){
int a,b,c,d;
a=12;
b=6;
c=a+b;
d=a-b;
printf("%d,%d\n",a,b);
printf("%d,%d\n",c,d);
printf("%d,%d\n",a*b,a/b);
return;
}
0508hageNGNG
hage
0509aNGNG
2038 年 1 月 19 日
アメリカ東部時間 (EST) にて 2038 年 1 月 18 日月曜日の午後 10 時 14 分 07 秒
協定世界時 (UTC) にて 2038 年 1 月 19 日火曜日の午前 3 時 14 分 07 秒
日本時間 (JST) にて 2038 年 1 月 19 日火曜日の午後 12 時 14 分 07 秒

 ●今後の代表的な「危険日」
 2025年 1月 1日 昭和100年問題
 2038年 1月19日 UNIXの日付管理問題
0510デフォルトの名無しさんNGNG
switch(m){
case1:
h(r,x,f());
case2:
h(r,x,g());
......
}

double f(x)
ddouble x;
{
......
}

double g(x)
double x;
{
......
}

void h(r,x,k())
double r,x,k();
{
printf("lf",r*k(x));
}
のように関数を引数にもつ関数というのは作れるのでしょうか?
0511デフォルトの名無しさんNGNG
void h(double r, double x, double (*k)(double));
double f(double x);

h(r,x,f);
0512デフォルトの名無しさんNGNG
>>511
おお、素早いお返事有難う御座います。そんな使い方があったんですね。
今まで、関数ごとに同じようなhにあたる関数を幾つも作ってた(か、配列を引数にしてた)
のですが、これでスマートになりますです。
0513デフォルトの名無しさんNGNG
>>510
hage!
0514名無し募集中。。。NGNG
>>494>>495>>496>>499

他人のソースは、よくconst使っていて何でかなと思ってました。
なんとなく雰囲気はわかりました、ども、ありがとです。
0515 NGNG
ttp://page3.auctions.yahoo.co.jp/jp/auction/c15302771
コンパイラ持ってない人おすすめかも!!
Microsoft Visual Studio 6.0 Professional edition アカデミック日本語版 
0516Riva ◆RivaByXA NGNG
>>515
MFCをやらないなら、MVS6.0はあまりおすすめできないかも。
MVSでコンパイルできるソースがgccでエラーになったりと、
初心者にはとっつきづらい。
0517510NGNG
>>511
無い頭を振り絞って教えてもらったことを試してみました。
とりあえず、次のようにすればコンパイラは通り、実行結果も手計算と一致しました。
(一応、僕と同レベルの人のために結果を載せときます)有難う御座いました。

#include <stdio.h>
main()
{
void h(double x,double (*k)(double));
double f(double x);
double x;

printf("x="); scanf("%lf",&x);
h(x,&f);
}

double f(x)
double x;
{
double s;
s=x*x+1;
return(s);
}

void h(x,k)
double x,(*k)();
{
double s;
s=(*k)(x);
printf("%lf",0.5*s);
}
0518510NGNG
>>517
すみません。
h(x,&f)の&はいりませんね。
0519ひよこ名無しさんNGNG
>>515
学生以外買っちゃいけないんじゃないの?
オークション自体ソフトの許諾に抵触したりしてそうだけど。
0520超初心者 NGNG
あ!メルマガ出してる兄ちゃんだ!
0521デフォルトの名無しさんNGNG
こんちは。
VCのintで-1はなんで0xffffffffなのかがわかりません。
負数の先頭バイトが1なのなら0x80000001じゃないんですか?
0522デフォルトの名無しさんNGNG
2の補数
0523デフォルトの名無しさんNGNG
Cって何ですか?
0524デフォルトの名無しさんNGNG
|             |
|  だれかボケて   |
|____ ____|
   ∧,,∧ ||
⊂ミ.,,゚Д゚彡つ
0525デフォルトの名無しさんNGNG
2の補数の符号反転は、bitパターンを反転して1を足します。
0526525NGNG
し、しまった…
0527デフォルトの名無しさんNGNG
>>521
別にVCに限ったことじゃない。
なぜ0xffffffffになるかは、
1+(-1)=0 なことを考えればわかる。

0x00000001 + 0x80000001 = 0x80000002
では、-2になってしまうだろ?
0528デフォルトの名無しさんNGNG
>>521
そんな表現したら(-1)+1を計算するときにめんどくなるだろ。
0529528NGNG
かぶったよ…。
0530デフォルトの名無しさんNGNG
と学校のちぇんちぇいに教わりました。
0531521NGNG
なるほどよくわかりました。
正数表現で先頭バイトに1を付するんじゃなくって。
先頭バイトが1の場合は負数なんですよっていうだけなんですね。
根本的にそこを勘違いしていました。
-1は
0x00000001を反転させて0xfffffffeにしたあと0x00000001を足して
0xffffffffということなんですか。よく分かりました。いつ忘れるかわからないけど(w
0532デフォルトの名無しさんNGNG
>>531
小さな突っ込み大きなお世話だろうけど、
“先頭1バイト”ではなく“先頭1ビット”ね。
0533ちいさな疑問(たぶん)NGNG
昔からずっと疑問に思っていたのですが、なぜC言語ではmain関数から
プログラムがスタートするのですか?
0534デフォルトの名無しさんNGNG
実は皆の知らないところでmainというクラスが作られていてmain関数はそのコンス
トラクタだったのだ!!・・・などというオレはやっぱりバカですか?
0535デフォルトの名無しさんNGNG
>> 533

簡単にいうとこうだから↓

_start( ){
main( );
exit( 0 );
}
0536デフォルトの名無しさんNGNG
char buffer[256]

while(gets(buffer) != NULL) {

}

これだと一生ループから抜けられないんですが、間違ってますか?
0537デフォルトの名無しさんNGNG
>char buffer[256]

セミコロンが無い。
0538デフォルトの名無しさんNGNG
>>536
getsってNULLなんぞ返したか?
0539デフォルトの名無しさんNGNG
>>537
あーごめん。セミコロンはちゃんと付いてます。

>>538
getsが悪いんですかね?
0540デフォルトの名無しさんNGNG
>>536
実行環境は何よ?
Windows系なら Ctrl+Z と [Enter]、
Unix系なら Ctrl+D を入力したらループ抜けると思うぞ。
0541デフォルトの名無しさんNGNG
>>540
Win98です。Ctrl+Zで確かに抜けられました。ありがとうございます。
こういう仕様にしたのかな…ふむ。
0542デフォルトの名無しさんNGNG
>>541
> こういう仕様にしたのかな…ふむ。
誰に逝ってんの?
独り言はキモイからヤメテ
0543 NGNG
#include<stdio.h>
#define SIZE 100

void main()
{

int a[SIZE][3],n,m,l,sum_e=0,sum_l=0,sum_m=0,sum[SIZE];
float ave[SIZE],ave_e,ave_l,ave_m;

printf("to stop input ^D\n");

for(n=0; n<SIZE; n++)
{
printf("\n%d人目のデータを入力してください\n",n+1);

sum[n]=0;

for(m=0; m<3; m++)
{
if(m==0) printf("英語の点数は");
if(m==1) printf("国語の点数は");
if(m==2) printf("数学の点数は");

scanf("%d",&a[n][m]);

if(a[n][m]==EOF) break;   /*ここ*/
if(m==0) sum_e += a[n][m];
if(m==1) sum_l += a[n][m];
if(m==2) sum_m += a[n][m];

sum[n] += a[n][m];


}

ave[n]=sum[n]/3;
ave_e=sum_e/(n+1);
ave_l=sum_l/(n+1);
ave_m=sum_m/(n+1);

if(a[n][m]==EOF) break;       /*ここ*/
}

for(l=0; l<n; l++)
{
printf("\n\n%d人目の三科目の合計点は%d点です\n",l+1,sum[l]);
printf("%d人目の三科目の平均点は%f点です\n\n",l+1,ave[l]);
}

printf("英語\n合計点は%d点\n平均点は%f点\n\n",sum_e,ave_e);
printf("国語\n合計点は%d点\n平均点は%f点\n\n",sum_l,ave_l);
printf("数学\n合計点は%d点\n平均点は%f点",sum_m,ave_m);

}

上の二箇所のifで、「^Dを入力したらループを抜ける」ようにしたつもりなんですが
上手くいきません……
0544デフォルトの名無しさんNGNG
if( scanf("%d",&a[n][m]) != 1) break;
が意図した動作だろう。漏れはscanfはおすすめしないが。
man scanfしる!
0545510NGNG
再びお願いします。
#include <stdio.h>
main()
{
double (*k)(double x);
double (*f)(double x), (*g)(double x);
double x=1.0;
printf("f or g? \n"); scanf("%lf",k);
printf("%lf" ,k==f ? f(x) : g(x));
}

double f(x)
double x;
{
return(x+1.0);
}

double g(x)
double x;
{
return(x+2.0);
}
というコードを書きました。やりたいことはキーボードから関数名(fかg)を
選択することです。しかし、コンパイラを通りません。
fとkが定義されていないと解釈されるようです。(続く)
0546デフォルトの名無しさんNGNG
k=='f' ? f(x) : g(x)
と思われ。
0547デフォルトの名無しさんNGNG
あ、kも…
0548510NGNG
下手な鉄砲なんとやらで、色々試してみてそのうちの1つが
#include <stdio.h>
main()
{
double k(double x);
double f(double x), g(double x);
double x=1.0;
printf("f or g? \n"); scanf("%lf",k);
printf("%lf" ,k==f ? f(x) : g(x));
}

double f(x)
double x;
{
return(x+1.0);
}

double g(x)
double x;
{
return(x+2.0);
}

double k(x)
double x;
{
}
なのですが、コンパイラは通るのですが、キーボードから f と
入力すると全て3.000000と出力されます。他のアルファベット(a,b,c.......)
を入力してもやはり3.000000と出力されます。
ということは、k!=(キーボードからの入力f)と解釈されたということになると思いますが、
つまりこれはキーボードから入力した文字 f とコードの中にある
関数の指すポインタ(のつもり)のfは別物ということになるのでしょうか?
他にもコンパイラを通るものはあったのですが、症状は同じです。
全部とは言いませんが、ヒントを下されば嬉しいです。
0549510NGNG
早い!>>546さんどうも有難うございます。
早速試してみます。というか、言われてみればそうですね。
間抜けでした(^_^;)
0550デフォルトの名無しさんNGNG
scanfのとこ、なんで %lf ? とかも。
0551デフォルトの名無しさんNGNG
つかさ。
double k(double x);に対して、
scanf("%lf",k);
は無いとおもうんだけどな。

char buf[255];
fgets( buf, sizeof( buf ), stdin )
printf("%lf",buf[0]=='f' ? f(x) : g(x));
ふつー、こんな感じやないか。
0552デフォルトの名無しさんNGNG
>>510
キーボード入力なりなんなりから、直接関数を指定することは不可能です。
>>551のようにしなさい。
0553デフォルトの名無しさんNGNG
全角の処理ってどうやったらいいのでしょうか?
struct ad_data{ /*構造体の宣言*/
char name[20];
int no;
};
struct ad_data wave[NI]; /*構造体の配列の宣言*/
struct ad_data *pit; /*構造体ポインタ*/
FILE *run;

printf("はじめに氏名と年齢を登録します。年齢は半角で入力して下さい。\n何名のご登録ですか?=");
scanf("%d",&num);getchar();putchar('\n');
while(i<num){
printf("氏名:");
fgets(lmy,20,stdin);
for(b=0;lmy[b]!='\n';b++);
lmy[b]='\0';
strcpy(wave[i].name,lmy);

printf("年齢:");
scanf("%d",&wave[i].no);getchar();
i++;
}


if((run=fopen("A:name_file.txt","w"))==NULL){ /*ファイルへの書き込み */
printf("ファイルがオープンできません\n");
exit(1);
}
pit=wave;
for(i=0;i<num;i++){
fprintf(run,"%s %d\n",pit->name,pit->no);
pit++;
}
fclose(run);
printf("以上の情報をファイルに書き込みました。読み込みようのプログラムで読込めます。\n");

0554533NGNG
上のように入力を行った後、ファイルで読込むと苗字と名前の間のスペースで
次に飛ばされてしまい、使い物にならなくなってしまうのです。良い解決法を
おねがいします。
0555510(アホでスマソ)NGNG
>>551
有難う御座いました。そのまま試してみたら見事目的が叶いました。
あと、当然ですが
char a;
scanf("%c",&a);
printf("%lf",a=='b'?f(x) : g(x));
としてbと入力しても2.000000と出ました。
よく考えたら、別に関数そのものをscanfに渡してやろうとする必要は
全然なかったですね。
0556510NGNG
>>552
そうだったのですか、これですっきりしました。
0557533NGNG
読み込みようのプログラムです。
#include<stdio.h>
#include<stdlib.h>
void main(void)
{
struct rea_data{
char name[20];
int no;
};

struct rea_data lot[10];
int i;
int p=100;
FILE *run;

while(p!=0){
i=0;
printf("ファイルの内容を出力します。\n\n");

if((run=fopen("A:name_file.txt","r"))==NULL){
printf("ファイルがオープンできません。フロッピィ―を入れて下さい。\n");
exit(1);
}

while(fscanf(run,"%s %d",lot[i].name,&lot[i].no)!=EOF){
printf("%s %d\n",lot[i].name,lot[i].no);i++;
}fclose(run);
printf("\n画面を終了させるには0を入力して下さい。\nもう一度出力させるには他の数字を入力して下さい。");
scanf("%d",&p);getchar();
}
}
0558デフォルトの名無しさんNGNG
scanfはスペース(空白)をデータ区切りとみなします。
別の関数を使ってください。
0559533NGNG
fgetsならOKですか?
0560533NGNG
構造体の定義事態が問題でしょうか?
0561デフォルトの名無しさんNGNG
>>559
OKですよ。保存形式(または読み出し処理)は変更しなきゃいけないけど。
0562560NGNG

どのように変更したらいいのでしょうか?
いろいろやってみたのですが、どうもうまくいかなかったのです。
お手数ですが、なにとぞよろしくおねがいします。
0563デフォルトの名無しさんNGNG
>>506
構造体の定義は別に変なとこありませんよ。
あえていうなら、読み込みの
while(fscanf(run,"%s %d",lot[i].name,&lot[i].no)!=EOF){
の&lot[i].noは&(lot[i].no)とするか、lot[i].&noとしないと
だめかもしんない。
0564デフォルトの名無しさんNGNG
>>563
ありがとうございます!
さっそくためしてみます。
0565デフォルトの名無しさんNGNG
>>562
たとえば、書き込み
sprintf(s,"%s,%d",name,no);
fputs(s,fp);

読み込み
fgets(r,30,fp);
rを加工(","を一文字ずつ調べてもよいし、token系の関数で分離していい)
で、noのほうはatoiで数値に戻すとか。

あくまで、例ね。もっと効率いい方法があるかもしんない。
0566デフォルトの名無しさんNGNG
スマソ
sprintf(s,"%s,%d\n",name,no);
こうしないと、読み込み失敗するな。
0567デフォルトの名無しさんNGNG
つかCじゃなきゃダメなの?
perlなら死ぬほど簡単にできるんだが(ワラ
0568デフォルトの名無しさんNGNG
>>567
Cでおねがいします。

0569デフォルトの名無しさんNGNG
宿題な感じを受けるのは気のせい?
0570568NGNG
気のせいではありません。よろしくおねがいします。
0571デフォルトの名無しさんNGNG
ウィンドウズのシステム関数でDWORDと定義する場合が
あるみたいですけど、具体的にどういった型なのか教えてもらえますか?>>1
0572デフォルトの名無しさんNGNG
>>571
1じゃねーけど、includeディレクトリにあるwindef.hを見れば分かる。
typedef unsigned long DWORD;
0573510NGNG
>>570
宿題は自分でやれ
0574デフォルトの名無しさんNGNG
WPARAMとLPARAM
ってなんじゃ
0575デフォルトの名無しさんNGNG
>>573
難しい?
0576デフォルトの名無しさんNGNG
bcc32(ボーランドのフリーなコンパイラ)で文字列を暗号化したいのですが
先生、どうやれば実現できますか?cryptが使えないんです。
0577デフォルトの名無しさんNGNG
>>576
ハッシュでも使っとけ!
0578デフォルトの名無しさんNGNG
>>577
“ハッシュ”って普通、一方向の変換でないの?
復号化できない変換を暗号化と呼ぶのでしょうか?
0579デフォルトの名無しさんNGNG
自前で作った構造体を関数で受け取りたい時、
関数側の引数のところは、structって付けないとだめなんでしょうか?

というか、つけたらコンパイル通ったのですが。
なんといったらいいか。FILEの構造体ならstructはつけなくても渡せたのに、
自前で作った構造体の場合は、structをつけないとだめか?ってことです。
0580510NGNG
>>579
ここのこと?
http://www.catnet.ne.jp/kouno/c_faq/c2.html#0
0581デフォルトの名無しさんNGNG
>>579
良い機会なので、includeファイルを覗くという行為を覚えましょう。
includeファイルはいくら覗いてもタイーホされません。

stdio.hを見ればわかるとおり、

typedef struct
{
...
} FILE;

と typedef されているので、structが不要なのです。
0582デフォルトの名無しさんNGNG
typedef struct _iobuf FILE;
この部分かな・・・。VC6.0<stdio.h>
>>580-581
Thanx!!
typedefの意味が分かった気がしました。
なるほろ。
0583デフォルトの名無しさんNGNG
>>578
暗号化と呼ぶかどうかは知らんが、crypt も復号できない。
0584デフォルトの名無しさんNGNG
>>577
先生!一方向性関数は勘弁してください。588さんの言うような可逆的な暗号がいいんです。
バイナリファイルで保存みたいな方法もあるらしいのですが、一体全体どうやるのですか?
ごーやほしてもわかりません。
0585デフォルトの名無しさんNGNG
出番ですよ、>>588さん!!
0586デフォルトの名無しさんNGNG
intからcharはatoiだけど、
doubleからcharはどうすればいいでしょう?

MSDNのどこかに書いてあるのでしょうか。。。ふむぅ。
0587デフォルトの名無しさんNGNG
missった
0588510NGNG
>>586
よく分かりませんがここのことでしょうか?
http://www.catnet.ne.jp/kouno/c_faq/c13.html#0
0589デフォルトの名無しさんNGNG
逆だった。しかもatofだということ判明。
0590510NGNG
げ、588ゲトしちゃった・・
0591デフォルトの名無しさんNGNG
>>588
すんませんでした。逝って来ます・・・
鬱だ。
0592デフォルトの名無しさんNGNG
先生!よかった。よく調べたら見つかりました、暗号化。
罵倒される前でほんとによかった。
0593デフォルトの名無しさんNGNG
ワラタ
0594デフォルトの名無しさんNGNG
 プログラミング言語C(K&R)かったんだけどさ〜
これ、たいした事なくない?
むっかしから、出てるみたいだけどさ〜
当時にしては画期的だったかもしんね〜けど。
0595デフォルトの名無しさんNGNG
>>584
ROT13 でもすれば?
0596デフォルトの名無しさんNGNG
たいしたこと無い人にはたいしたことはないかもしれませんな。
さっさとC++の勉強でも始めれば?
0597デフォルトの名無しさんNGNG
K&Rを一般のC言語解説本と思ってる?
0598デフォルトの名無しさんNGNG
そうなんだ!、その簡素で柔軟な仕様こそがC言語の唯一にして最高の武器なのさ!!
昔と言うけど、昔の人を馬鹿にしては駄目だよ!
君にピラミッドの建設が出来るかい?
僕らは人生の半分を勉強と言う名の過去の偉人の後追いに費やしてるんだよ!
君もそんな人になれればイイネ!!

0599 NGNG
ttp://page4.auctions.yahoo.co.jp/jp/auction/d12211147
またまた出てるよアカデミパック!!
開封済みってもしかしてあれか?コピしてあれしてるのか?(わら
0600デフォルトの名無しさんNGNG
困ってるので質問させてください。
例えば
struct type val[10];
と、定義した構造体の配列変数valを配列全部を
別の関数に渡す方法あるでしょうか?
return (val[10]);
で全部渡せるんでしょうか?
0601デフォルトの名無しさんNGNG
ポインタ使え
0602デフォルトの名無しさんNGNG
デバッグしてもすぐ次のエラーが出てしまいます。
一体何が悪いのやら・・・。
Stack Overflowって何?
例外処理 (初回) は 00.main.exe にあります: 0xC00000FD: Stack Overflow。
0603デフォルトの名無しさんNGNG
>602
str〜〜の使い方を見直せ
http://u-tokyo.www.linux.or.jp/JM/
0604デフォルトの名無しさんNGNG
struct val_10
{
struct type val[10];
};
で、このval_10を渡すとか。

#それが正しい設計かは別問題だがね。
0605602NGNG
str って何でしょうか?
見直すというか見たこと亡いんですけど・・・。
0606デフォルトの名無しさんNGNG
あ、そうか。悪いね
でもそれじゃ分からんよ。

そのエラーの意味はつまり
スタックがオーバーフローしたって事だ
書き込んじゃ行けない所に書き込んじゃってるの
本買え
0607日下部圭子 ◆ib749tYo NGNG
In article >>602, デフォルトの名無しさん/602 wrote:

> Stack Overflowって何?

再帰のバグかaotoで大きな配列を使っているかのどちらかでしょうね。

----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0608デフォルトの名無しさんNGNG
>600
こういうこと?

#include<stdio.h>

struct xy{
int x;
int y;
};

void f(xy *);

int main(){

int i;

xy a[10];

f(a);

for(i=0;i<10;i++)
printf("%d %d\n",a[i].x,a[i].y);

return 0;
}

void f(xy *a){

int i;

for(i=0;i<10;i++){
a[i].x=i;
a[i].y=i;
}

return;
}
0609608NGNG
エディタからコピペしたら、
めちゃくちゃ汚くなってしまった・・・
0610602NGNG
本にそれらしいこと書いてるんですけど、意味不明で・・・。

デバッグすると
test dword ptr [ecx],eax ; ...probe it
っていうところに→が出るんですけど、何なんでしょう?
そもそもこのページは何なのでしょう?
0611602NGNG
>> 607
再帰のバグってどんなのですか?
0612デフォルトの名無しさんNGNG
あー、とりあえず、vc++のデバッガなら、デバッグウインドウで
コールスタックを表示しろ。
0613日下部圭子 ◆ib749tYo NGNG
In article >>611, 602/611 wrote:
> 再帰のバグってどんなのですか?

キーワードを教えてもらったら、とりあえず検索でもしてみましょう。

----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0614デフォルトの名無しさんNGNG
func(){
func();
}

main(){
func();
}
0615デフォルトの名無しさんNGNG
>>614
スタック領域が消滅するのは時間の問題だなw。
0616デフォルトの名無しさんNGNG
いや、どうだろ。末尾再帰で無限ループとみた。
0617デフォルトの名無しさんNGNG
真面目な話、Basicは大体わかったのでちょっとC言語もやってみたいのですがプログラムを作るにはテラパットとLSI C-86試食版さえあれば
簡単なプログラムを作ることは可能ですか
0618デフォルトの名無しさんNGNG
staticじゃない関数でも末尾再帰はスタック食わないように
最適化されるもんなのかねぇ。
0619デフォルトの名無しさんNGNG
>>617
テラパットはいらない。
0620デフォルトの名無しさんNGNG
数字をfgetcで受けると代入された数値がおかしくなるんですが、何でですか?
scanf使わないで数字を取得したいのですが。
0621日下部圭子 ◆ib749tYo NGNG
In article >>620, デフォルト名無しさん/620 wrote:
> 数字をfgetcで受けると代入された数値がおかしくなるんですが、何でですか?
> scanf使わないで数字を取得したいのですが。

fgetc()は文字を一文字ずつしか受け取れません。
int n;
scanf("%d", &n)
のような数字を受け取るような使い方はできません。

fgets()とsscanf()の組み合わせを使いましょう。

----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0622620NGNG
>>621
わかりました。その組み合わせを使ってみます。
0623デフォルトの名無しさんNGNG
>>619ありがとうございました
0624デフォルトの名無しさんNGNG
領域確保するAPIで
GlobalAlloc・LocalAlloc・VirtualAlloc・malloc
のそれぞれの違いがよー分からん(゚Д゚)
詳しく知ってる人教えてYO
0625デフォルトの名無しさんNGNG
MFCってなんなんでしょうか?
エンジェル・ハートという本に
M もっこり
F ふらいんぐ
C きゃっち
ってかいてあったんですけど
0626デフォルトの名無しさんNGNG
モーニング娘ファンクラブ(公認)
0627デフォルトの名無しさんNGNG
>>625
だいたいそんなもんです
0628デフォルトの名無しさんNGNG
>>619
terapadだろ?メモ帳よりはマシ
0629デフォルトの名無しさんNGNG
テトラポッド?
0630デフォルトの名無しさんNGNG
>>629
言うと思った
0631デフォルトの名無しさん NGNG
エラーで
error LNK2001: 外部シンボル "_function" は未解決です
fatal error LNK1120: 外部参照 2 が未解決です。
って出てるんですけど、どう違うのでしょう?
それに、こういう場合どこを直せばいいのでしょう?
0632日下部圭子 ◆ib749tYo NGNG
In article >>631, デフォルト名無しさん/631 wrote:

> って出てるんですけど、どう違うのでしょう?
> それに、こういう場合どこを直せばいいのでしょう?

ヘルプに詳しい解説があります。

----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0633デフォルトの名無しさんNGNG
ようするに
_function
っていうのがソースに書いてあったんでさがしたけど、どこにもねーぞボケ
状態だと思う。
0634デフォルトの名無しさんNGNG
クラスで宣言してるのに
実装を忘れてるバヤイが多い
0635デフォルトの名無しさんNGNG
ライブラリをリンカに渡すのを忘れたとか。
VC++なら、純粋仮想デストラクタではまってるとか。
0636デフォルトの名無しさんNGNG
>>621
盲目的にscanf()を嫌うのもどうかと思うが。
if (scanf("%d", &n) != 1) {
error(); // とか
skipline(stdin);
}
すればいいだけだろう。
0637日下部圭子 ◆ib749tYo NGNG
In article >>636, デフォルト名無しさん/sage/636 wrote:

それでは[123a5]のような入力の時に困るでしょう。
(入力のミスを検出できない)
いろいと工夫すれば、scanf()もつかえるかもしれませんけど、
それなら一行ごとに入力を受け取ってバッファ上で
あれこれ操作やチェックをしたほうがずっと楽です。

----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0638デフォルトの名無しさんNGNG
やりたいことによる。複数回読むなら次でエラーになるだろうし、
scanf("%d%", &n) == 1 && getchar() == '\n' とか
scanf("%d%*[^\n]", &n) == 1 とかいろいろできるし、
要するに使い方をちゃんと考ろってこと。
0639デフォルトの名無しさんNGNG
>>638
無条件にscanf()使うな!っていうのはどうかとは思うけど、
ここは「Cの超カンタンな…」やからねぇ。
ここで質問するような初心者にたいしてなら、
考慮すべき点の多いscanf()は使うな、
と言いきるのもありではないでしょうか?
0640日下部圭子 ◆ib749tYo NGNG
In article >>638, デフォルト名無しさん/sage/638 wrote:

> scanf("%d%", &n) == 1 && getchar() == '\n' とか
> scanf("%d%*[^\n]", &n) == 1 とかいろいろできるし、

エラーの場合ストリームの読み飛ばしが必要だったり、
変な入力がエラーにならなかったりしますね。

> 要するに使い方をちゃんと考ろってこと。

初心者に使わせるのにはくせが強すぎると思いますよ。
(上記のようにいろいろ工夫が必要だし)
よく言われているように、fgets()でやったほうが簡単でしょう。

----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0641デフォルトの名無しさんNGNG
>>640
ホテル行きましょう!ホテル!
そしてあんなことやこんなことしてくれませんか?
0642デフォルトの名無しさんNGNG
あ、大婆様、keiko!(めーヴぇ)が飛んでるよ・・・
0643380NGNG
初心者質問です。
array配列からReduceNum番目の要素を削除する関数を作ろうと思っています。
型の違う配列を受ける方法がよくわからないので、void ポインタを使って
見ましたがvoid * サイズが定義されていませんエラーが山盛りでます。

int ReduceArray(void *array,unsigned int ArrayNum,unsigned int ReduceNum){

for (unsigned int i = ReduceNum ; i < ArrayNum - 1;i++){
array[i] = array[i + 1];
}
delete array[++i];
return 1;
}

こういう関数はどうやって書いたらよいのでしょう?
0644デフォルトの名無しさんNGNG
>>643
要素の大きさも引数として渡す。
あと、voidポインタにdelete演算子使うなよ。
しかしdelete使ってるという事はC++か?
C++ならtemplate関数で書け。
0645デフォルトの名無しさんNGNG
ファイル分けがワカラン
ヘッダとかどう書けばいいのか。。。
0646デフォルトの名無しさんNGNG
>>645
外部から参照するものはヘッダファイルに出す。
内部に隠蔽したいものはソースファイルに書く。
templateやinline関数はヘッダファイルに出す。
0647デフォルトの名無しさんNGNG
なるほろ。サンクスコ
簡単なクラスを作りたいんだけど、
メソッドの実装含めてヘッダに書けばいいのかな?
0648デフォルトの名無しさんNGNG
うむむ。違うか。。。
0649デフォルトの名無しさんNGNG
Perlでいう
opendir(DIR,$dir);
@files=readdir(DIR);
closedir(DIR);
はCではどのように書けばいいですか?
readdirみたいな関数があるんでしょうか?
0650日下部圭子 ◆ib749tYo NGNG
In article >>649, デフォルト名無しさん/sage/649 wrote:

Unix系ならopendir,readdir,closedirで。
Windows系なら、FindFirst,FindNextで。

詳しくは検索してください。

----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0651デフォルトの名無しさんNGNG
>>649

opendir(),readdir()はない。
かわりにfindfirst(),findnext()でディレクトリ内を
順にスキャンしてエントリを見てゆく方法が用意されている。
0652デフォルトの名無しさんNGNG
>>650
すいません。返答ありがとうございます。
FAQレベルとは分かっていながら手掛かりがつかめなくて困っていました。
それじでは、がんばります。
0653649NGNG
>>651
失礼しました。>>651さん、アドバイスありがとうございます。
0654644NGNG
>要素の大きさも引数として渡す。
ArrayNumというのがそれです。
最終的にでてくる配列は渡した配列より要素が1つ少なくなるので
for (unsigned int i = ReduceNum ; i < ArrayNum - 1;i++){
array[i] = array[i + 1];
}
としてみました。

>しかしdelete使ってるという事はC++か?
>C++ならtemplate関数で書け。

C++です。でもtemplate関数わからないです・・・。
perlなら簡単なのになあ・・・・せめて
任意の型の配列の渡し方がわかれば何とかなる気がするのですが・・
0655デフォルトの名無しさんNGNG
>>654
そのArrayNumは、要素の大きさではなく、要素の数では?
0656デフォルトの名無しさんNGNG
>>654
Vectroクラスとか使うのは?
0657デフォルトの名無しさんNGNG
#include <algorithm>
std::copy(
 &array[ReduceNum+1],
 &array[ArrayNum],
 &array[ReduceNum] );
でどうよ。
0658デフォルトの名無しさんNGNG
つーか、関数化以前の問題として…
TArray* array = new TArray[ArrayNum];
...
delete array[ArrayNum -1];
とやろうとしてないか?

配列の要素をdeleteするなら
TArray** array = new TArray*[ArrayNum];
for (int i = 0; i < ArrayNum; i++)
array[i] = new TArray;
...
delete array[ArrayNum -1];
ではないかと思われ。


656さんの言うようにstd::vector<T>を使う方が…
std::list<TArray> array;
array.erase(array.begin() + ReduceNum);
0659デフォルトの名無しさんNGNG
× std::list<TArray> array;
○ std::list<TArray> array(ArrayNum);
0660七氏NGNG
#define RBUF 1280
とかって仮にしておいて
いろいろコーディングして
memset(String,'\0',RBUF)←なんでもいい
.
あとでバッファが足りなくなったなあ・
ッ手思って
#define RBUF 2000
とかってやると大抵落ちます。なんでなんでしょう・・?
0661御子柴NGNG
分割とか結合ってどういう意味ですか。
ラブマとか書いてあるんですけど意味がわかりません。
おしえてください。
0662658NGNG
× std::list<TArray> array;
○ std::vector<TArray> array(ArrayNum);

寝ぼけてんな俺、そろそろ寝たい…
0663デフォルトの名無しさんNGNG
>>660
> #define RBUF 2000
> とかってやると大抵落ちます。なんでなんでしょう・・?
・2000でも足りてない
・どこかにバグがある
0664デフォルトの名無しさんNGNG
くだらない質問ですが、
typedef struct s{
char* str;
}ELEM;

こういう構造体があったとして、
ELEMをmallocでメモリ確保、strにもmallocでメモリ確保。
その後ELEMをfreeした場合、strは解放されずにのこってしまいますか?
0665デフォルトの名無しさんNGNG
>>664
> strは解放されずにのこってしまいますか?
YES、いわゆるメモリリークという状態ですね。
0666デフォルトの名無しさんNGNG
int a=1,b=1;
a=a++;
b=++b;

Cの規格では aは1、bは2になるんですか?
0667デフォルトの名無しさんNGNG
>>664
残るけど、終了すればきちんと解放される(はず)。
0668デフォルトの名無しさんNGNG
>>664
それがいわゆるメモリーリークってヤツ。
プログラム内部で、ヒープからmallocで確保しているメモリの参照を
取得する(=freeする)手段がなくなると、プログラム終了までプログ
ラムがそのメモリの再利用が出来なくなる。

プログラムが終了すれば、プログラムがOSから確保したメモリはOSに
全部かえしてしまうので、すぐ終わるプログラムならメモリーリーク
は気にするが必要ない。サーバープロセスとかだったら、リークが
たまってくるとハングアップするとかになるので危険。
0669デフォルトの名無しさんNGNG
>>666

なんでこの手の質問は後を絶たないのだろう?
0670デフォルトの名無しさんNGNG
>>669
それは「超カンタンなこと」ではとてもないので、ここで聞いては逝けない。
0671デフォルトの名無しさんNGNG
つうか実行してみりゃわかるだろうに。
0672デフォルトの名無しさんNGNG
>>666
aもbも2だろ?
0673デフォルトの名無しさんNGNG
なんて読んでる?
malloc = マロック
calloc = カロック

0674デフォルトの名無しさんNGNG
malloc = もろっこ
calloc = ころっけ
0675デフォルトの名無しさんNGNG
malloc = マリック
0676デフォルトの名無しさんNGNG
>673
その発言は削除対象になります。
0677デフォルトの名無しさんNGNG
malloc = ムァロック
0678デフォルトの名無しさんNGNG
エムアロック
0679デフォルトの名無しさんNGNG
処理系依存や未定義は、実行した結果を見て納得するの危険なんだが、
「やってみれ」が後を絶たないのは(以下略)
0680デフォルトの名無しさんNGNG
略さず
メモリアロケーション
0681デフォルトの名無しさんNGNG
>>672
> aもbも2だろ?
はい?正気?

>>679
> 処理系依存や未定義は、実行した結果を見て納得するの危険なんだが、
666が本気で聞いてるならどうにもならんDQNだろうが、
でも処理系依存や未定義って言葉が出てくる場面かね…
0682Cの馬鹿〜〜NGNG
FILE ポインタがわかりません。
なんで FILE *f とかで宣言するんですか?
FILE f とかはなんでだめなの?
0683デフォルトの名無しさんNGNG
>>682
大人の事情です。
あと、FILE“ポインタ”って自分で逝ってるでしょ?
FILE型のポインタです。

標準関数はファイルストリームを内部で管理してます。
fopen()を使うとその内部データへのポインタをもらえます。
そんな感じ。
0684デフォルトの名無しさんNGNG
>>682
えっと、質問です。
int a;
と
int *a;
の違いはわかりますか?
わかるのとわからないのでは、アドバイスの内容が変わってきますので。
0685デフォルトの名無しさんNGNG
>>684
教育工学的にすばらしい展開だな。
0686デフォルトの名無しさんNGNG
>>681
シーケンスポイントで検索してみろ、って言われたこと無い?
>>666 の式は、2つとも未定義だろ。
0687デフォルトの名無しさんNGNG
>>681
あんた「シケーンスポイントで検索しる」って言われたことあるだろ?
>>666の2つの式の結果は両方とも未定義だ。
0688デフォルトの名無しさんNGNG
int型からchar型に変換する関数「atoi」の逆、char型からint型に
変換する関数ってあるんですか?
0689デフォルトの名無しさんNGNG
itoa
0690デフォルトの名無しさんNGNG
>>689
標準関数にはない

>>688
sprintfを使う。
0691デフォルトの名無しさんNGNG
(ぷ
0692デフォルトの名無しさんNGNG
タブで区切られたデータを別々の変数に入れたいんですが、良い方法が思いつきません。
Perlでいうと、
($hoge1,$hoge2,$hoge3) = split /\t/, $hoge4;
のようなことがやりたいんですが、何かいい方法はないでしょうか・・・。
0693デフォルトの名無しさんNGNG
sscanf(hoge4, "%[^\t]%[^\t]%[^\t]", hoge1, hoge2, hoge3);
0694デフォルトの名無しさんNGNG
FILE構造体で扱えるファイルの限界サイズってどのくらいでしょうか?

fpos_tがlong型だとして、sizeof(long) == 4な環境では
2147483647バイト = 約2Gバイト程度

ってことでいいんでしょうか?
0695692NGNG
>>693

ありがとうございます。sscanf()は初めて聞きました・・・。
試しにやってみたところ、ちょっと変だったのですが、
sscanf(hoge4, "%s%s%s", hoge1, hoge2, hoge3);
としたらうまくいきました。
どうもありがとうございました。
0696デフォルトの名無しさんNGNG
 c や c++ では、どのようにして変数を宣言するのですか? また、どのような型がありますか。
0697デフォルトの名無しさんNGNG
>>696
char int float double
0698デフォルトの名無しさんNGNG
>>695 "%s%s%s" は空白文字区切りであり、
タブ区切りではないけど、それで良いの?
0699Not 692NGNG
本当に"%[^\t]%[^\t]%[^\t]"でいいの?
二つ目以降はわけのわからない値が代入されるんだけど。
それともVC6.0のバグ?
0700デフォルトの名無しさんNGNG
ごめんなさい。たぶん、
sscanf(hoge4, "%[^\t]\t%[^\t]\t%[^\n]", hoge1, hoge2, hoge3);
でいいかと。ボケボケは逝ってきます。
0701デフォルトの名無しさんNGNG
質問なのですが、以下のプログラム

#include <stdio.h>

int main(void)
{
float k,l;
printf("K? ");
scanf("%f",&k);
printf("f? ");
scanf("%f",&l);
printf("k + l = %f\n", k + l);
printf("k * 3.54 = %f\n", k*3.54);
return 0;
}

を実行して
K?2.1
l?1.1
と入力すると

K + l = 32.00000
K * 3.54 = 74.340000

のように答えが出力されてしまうのですがどうすれば直るのでしょうか。
k、lが整数でないと正常に動きません。さっぱり訳が分かりません。
環境はCygwinのgccです。

0702692NGNG
>>698
あ、空白が入ってると変なところで区切られちゃいますね・・・。
ということで
>>700
今度はうまくいきました。
この方法でやってみますね。

ありがとうございました。
0703デフォルトの名無しさんNGNG
>>701

VC6.0Proなら問題なかった。
見間違いじゃないよね?
0704デフォルトの名無しさんNGNG
>>703
float,double型のscanfをすると勝手に小数点が移動してしまうのです。
例えば上のプログラムの
scanf("%f",&k);
のすぐあとに
 printf("%f\n",k);
を入れて、kに2.1を入力すると
21.000000
と表示されてしまうんですよね。
全く持って謎です。どこが間違ってるんでしょうか。

0705デフォルトの名無しさんNGNG
>>704
素直にgets(略
0706704NGNG
>>705
厨房なもんでgets()で読み込んだ文字列(ここでは数字列?)を
計算に使ってるのを見たことが無いのですが。どうするのでしょう。
…っていうかどう考えても上のscanf間違ってないですよねぇ。
だれかCygwinのgcc使ってる人情報くれませんかね。
0707デフォルトの名無しさんNGNG
そういうときは、gcc -vの結果や、cygwinの
バージョンなども貼り付けるのが常道。
0708デフォルトの名無しさんNGNG
>>706
atoi,atol,atof
0709708NGNG
それに、strtod,strtol,strtoul
0710704NGNG
atof使ったら計算そのものは解決できました。
ありがとうございます。>>708

gcc -vですか。Cygwin上の「標準エラー出力」ってファイルに書き出すことはできるんですか?
僕には全く分からんメッセージがずらずら出てきたのですが手で移すのちと辛いので。
あと、Cygwinのバージョンってどうやって調べるんでしょうか?
ほんと厨房ですみません。
0711デフォルトの名無しさんNGNG
>>710
エディタ上でコンパイルすれ。
0712デフォルトの名無しさんNGNG
bashなら、 2> errとかあるんじゃねーの。
0713704NGNG
keisan.exe(.test+0x0):libgcc2.c: multiple definition of `mainCRTStartup'
/usr/lib/crt0.o(.text+0x0):crt0.c: first defined here
keisan.exe(.data+0x0):/cygnus/netrel/src/gcc-2.95.3-4/gcc/libgcc2.c: multiple definition of `_cygwin_crt0_bp'
/usr/lib/crt0.o(.data+0x0):crt0.c first defined here
/cygdrive/c/WINDOWS/TEMP/ccd1x2e0.o(.text+0x34):keisan.c: multiple definition of `main'
keisan.exe(.text+0.78):libgcc2.c: first defined here
collect2: ld returned 1 exit status

…というのがgcc -o -v keisan.exe keisan.cの結果です。
エディタ上(秀丸使用)でコンパイルというのがどういうことなのか
分からなかったので結局手で打ち込んでしまいました。
一応間違ってないか見直しましたが…。
0714デフォルトの名無しさんNGNG
>>669
明確ではないから。
0715デフォルトの名無しさんNGNG
 $gcc -v
 Reading specs from /usr/lib/gcc-lib/i386-unknown-openbsd2.9/2.95.3/specs
 gcc version 2.95.3 20010125 (prerelease)
こういうのをきいてるの
0716Cの馬鹿〜〜NGNG
>>683 >>684
遅いレスですみません。

>標準関数はファイルストリームを内部で管理してます。

なんとなくわかった気がします。
つまりFILEのアドレスを内部で管理してるって事でしょうか?
例えば、ディレクトリの下にあるファイルをポインタで示すとかって概念であってます?



int a;
と
int *a;
の違いはわかりますよ。 ポインタと変数ですよね。
でも・・・ float 型のポインタとかは正直・・・なんで?
なんでそんなん使うの?って思いますよ。
0717C++マンセーNGNG
>>716
クイズです。
整数型のデータの置いてある場所を覚えておきたいとき -> 整数ポインタ型をつかう
浮動小数点型のデータの置いてある場所を覚えておきたいとき -> □型をつかう
さて□には何が入るでしょう?
0718デフォルトの名無しさんNGNG
データ(オブジェクト)が取りうるメモリ容量が
あっていればCPU的には問題ないはずだが。
あっ浮動小数点型だと演算のときニーモニックが違ってくるか。
0719Cの馬鹿〜〜NGNG
>>717
正解は float?
0720デフォルトの名無しさんNGNG
>>716
float型はfloatの値(1.2とか)自体を保存するときに使う
float*型はfloat変数の場所を保存するときに使う。
なんで使うかは、float型の変数の場所が知りたいときもあるからだろ。
0721てぃーNGNG
time_tやsize_tのtってどういう意味ですか。
とても気になります。
0722デフォルトの名無しさんNGNG
typeのtだろ。
0723てぃーNGNG
そうだったのか!
ありがとう。
0724デフォルトの名無しさんNGNG
>>716

> なんでそんなん使うの?って思いますよ。

int* はわかるが float* はわからないのか?
それじゃ何で int* を使うか考えてみてくれ。(できればそれをここに書いてほしい)
多分同じ理由で float* が必要になると思われ。
0725デフォルトの名無しさんNGNG
>>716は
>ポインタと変数ですよね。
と結っていから、なにか、勘違いをしているらしので…
0726704NGNG
gcc -v の結果です。
Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/2.95.3-4/specs
gcc version 2.95.3-4 (cygwin special)
…これで何か分かるんでしょうか。
っていうか標準入力から実数を入力させるときってscanfじゃなくてgetsを
使うのって普通なんでしょうか?そろそろうちのCygwinのgccを
見限ってしまいそうな勢いです。


0727デフォルトの名無しさんNGNG
別に見限ってもいいでしょう。環境としてのCygwinだってかなりつかいでがあります。
mingwのgccをCygwinでつかったらどうですか。ちなみにうちのmingwはその小数点の
問題は起こりませんでした。versionは2.95.3-5です。
0728デフォルトの名無しさんNGNG
>>727
> versionは2.95.3-5です。
mingwじゃなくても問題は起きなかった。バージョンは同じ。
とりあえず>>704はバージョンを上げてみるべし。
0729デフォルトの名無しさんNGNG
新C言語シニア編   (著 林晴比古)  P60
コンパイルが通らない。この本の通り書いたのに。

struct cell{
    struct cell * next;
   int value;
}
typedef struct cell CELL;


こう書けばコンパイルが通る
typedef struct cell{
    struct cell * next;
   int value;
} CELL;
0730デフォルトの名無しさんNGNG
>コンパイルが通らない
こういうことを言う人ってのは、

>新C言語シニア編   (著 林晴比古)
こういう本を買っているのですね : )
0731デフォルトの名無しさんNGNG
 ; が…
0732デフォルトの名無しさんNGNG
>>730
ここは初心者スレなので、余計なつっこみは入れないでほしいのです。
0733デフォルトの名無しさんNGNG
エラーメッセージみりゃあ
原因わかるだろぅ
0734デフォルトの名無しさんNGNG
#includeで"〜.c"ファイル(ソースファイル)を読み込むのは好ましくないんですよね?
#includeを使わないで複数のソースファイルをまとめるにはどうすればよいのでしょうか。
0735>>734NGNG
ttp://www.kumei.ne.jp/c_lang/intro/no_39.htm
ttp://www.gulf.or.jp/~damayan/calc/divide4.html
ttp://www.kurume-it.ac.jp/home/denshi/aoki/kagakuenshu/www/63compile.htm
0736デフォルトの名無しさんNGNG
exit(1);
とか
return -1;
ってどういうことですか?
exit(100);  とか exit(-3.5)
とかもありなんですか?
0737デフォルトの名無しさんNGNG
>>736
要するに終了状態をプログラムの起動元に返す。
0(成功)以外の意味は処理系定義
ttp://www.bohyoh.com/CandCPP/C/Library/exit.html
0738デフォルトの名無しさんNGNG
>>737 ありがとう。
今、授業中なんだ。
0739はじめっこNGNG
初心者の俺には分からん。教えてください。

int i,j,k;
for(i=j=k=0; i<10; i++){

という部分、i,j,kはfor内だけのローカル変数でいいんだけど
もっとまともな書き方があると思うから、これが定石だ
とかいうソースを教えてください。
0740デフォルトの名無しさんNGNG
変数宣言と同時に、変数初期化、ってことかな?

int i = j = k = 0;
for(i=0; i<10; i++){
0741デフォルトの名無しさんNGNG
{
 int i;
 for(i=0; i<10; i++){
  int j, k;
  //
 }
}
でどうでっか
0742デフォルトの名無しさんNGNG
>>740
> int i = j = k = 0;
C/C++ではこーゆーことはできん。
0743代打名無しNGNG
すみません誰か教えてください、、、unixです、、、

キーボードから円を入力すると,ドルに変換するプログラムを作成しなさい。
なお,変換レートは本日分の値を使用し,
変換値の表示は小数点第1位までとすること。



角度を−90〜90度まで5度ステップで変化させ,
そのときの正弦関数と余弦関数の値をディスプレイに並べて表示する
プログラムを作成しなさい。
なお,正弦関数と余弦関数の値は,小数点以下3桁で表示しなさい。


下記の指示にしたがって解答しなさい。

1 キーボードから1より大きい整数値nを入力して,
その階乗n!を計算し,結果を表示するプログラムを作りなさい。
その際,nが1以下の時には,
nが1より大きい値となるまで入力を繰り返し求めるようにする。
また,階乗の値は double 型とする。

n!=2×3×4×・・・×(n−1)×n

2 作ったプログラムをコンパイルし,正しく動作することを確認したら,
15!を求め,画面に表示された通りを答えなさい。


0744はじめっこNGNG
ありがとうございます。
iもfor内のローカルにしたいんだけど、for内で宣言でき、
1行で書けるらしいんです。

int i,j,k,l;
for(i=j=k=0; …

これでもまだだめなソースと言われます。

>>742
ありがとうございます。
> int i = j = k = 0;
を直してコンパイルできるようになりました。
0745はじめっこNGNG
main(){
for(int i=0, int j=0, int k=0; i<10 && j<20 && k<20; i++){
cout << i << endl;
j++;
k++;
}
}

できないし、1行で書けるなんてウソかなー?
>>741さんのが定石かな?
0746デフォルトの名無しさんNGNG
>>743
> キーボードから円を入力すると,ドルに変換するプログラムを作成しなさい。
1:rate = doller:yenなので
doller = yen / rete
従って

double yen2doller(int yen, int rate)
{ return (double)yen / rete; }
yenかrateのどちらかを明示的にcastしないと
yen / rateをintとして計算してしまう。

最後に、
> なお,変換レートは本日分の値を使用し,
これは一体どこから取得するの?
私ならば仕様不備で突っ返す。
0747デフォルトの名無しさんNGNG
>>745

for( int i=0, j=0, k=0; i<10 && j<20 && k<20; ++i){
cout << i << endl;
++j;
++k;
}

これ超識。
なおi++より++i、これM識。
0748はじめましてこNGNG
こんにちは。
ポインタ値の設定についておしえて下さい。
下記の様に例1,例2があります。
char型のポインタ値の設定をする場合は
例1のp = &c;の様に&をつけるものと
思っていましたが例2を見ていただくとp = c;で
&がついていません。
どう違うのですか?
例1
char c;
char *p;
p = &c;
putchar(*p);

例2
char c[32] = "Hello";
char *p;
p=c;
printf("p:%s\n",p);
0749デフォルトの名無しさんNGNG
>>747ってCでも可能なのですか。
0750デフォルトの名無しさんNGNG
>>749
ANSI Cに準拠してればね。あと
 for (int i,j,k=i=j=0; 〜
とか。
0751デフォルトの名無しさんNGNG
>>748
if ( c==&c[0] ) printf( "%s\n", "つまりこーゆーことやねん" );
0752747NGNG
>>750
ついでにcoutとendlが整数型の変数ならな。
0753デフォルトの名無しさんNGNG
char c;と宣言したなら &c
char c[32];と宣言したなら c
はchar型のポイントとなっております。
0754デフォルトの名無しさんNGNG
>>747
for(int i = 0; i < 10; ++i)
すら、コンパイラ通らないようだけど漏れが悪いのかな。
0755煽りNGNG
>>754
コンパイラが悪い。
C99対応してないコンパイラなど捨ててしまえ!
0756typeNGNG
下のプログラムなんですがファイルからとってきたのと
同じものをタイプしても配列の長さが違います。
つまりi,jの長さが違うんです、
どうしてですか?

void num2(){
int n=100,i,j;
FILE *fp1,*fp2;
char honbun[100],type_moji[100];

fp1=fopen("input","r");

if(fp1==NULL)
exit(-1);
system("kinput2 2>/dev/null&");
do{
printf("%s", fgets(honbun,n,fp1));

fgets(type_moji,n,stdin);
i=strlen(honbun);
j=strlen(type_moji);
printf("%d %d",i,j);
}
while(!strcmp(honbun,type_moji));
fclose(fp1);
}
0757デフォルトの名無しさんNGNG
>>756
あちこちでおんなじこと書くなよ。ばーか。
0758デフォルトの名無しさんNGNG
Illegal character 'character' (0x'value')  コンパイラメッセージ

不正な文字 'character' (0x'value')
入力ファイルの中に無効な文字がありました。

その文字の 16 進値が出力されます。
これは,関数マクロに余分な引数が渡されたことが原因であることもあります。


・・・というエラーが出るのですが原因が全くわかりません。
配列の[]の中の文字に対するエラーなのですが、他の文字に
変えても同じエラーが出ます。
「関数マクロに余分な引数が・・・」このあたりが原因でしょうか。
なにか心当たりがある人いたら教えてください。お願いします。
0759デフォルトの名無しさんNGNG
>>754
コンパイラを捨ててしまうのも宜しいが、使って居るのが
C/C++コンパイラならば、C++のプログラムとしてコンパイル
しては如何かな。
コンパイラは変えたくなく、魔道に手を染めるは好まぬ、
というのであれば>>741で我慢なされ。
0760デフォルトの名無しさんNGNG
>>759
御意にござります。
0761デフォルトの名無しさんNGNG
>>759
> 魔道に手を染めるは好まぬ、
むぅ、宣言されてない関数をチェックするためによく使うが、
やはりそれは魔道なのか?
0762はじめましてこNGNG
>>753
ありがとうございました♪
0763ぺーぺーNGNG
うう・・・ こんな簡単のが理解出ません・・・
#include <stdio.h>
int f(int n)
{
int y;
if (n<=0) return 0;
y=f(n-1);
return y+n;
}

int main(void)
{
printf("%d\n",f(3));
return 0;
}
関数定義部の
y=f(n-1);
return y+n;
が理解できません・・・ なんで、6が表示されるんだろう・・・
0764デフォルトの名無しさんNGNG
何が分からん?
f(3) は
f(0)+f(1)+f(2)+f(3) だから0+1+2+3=6
再帰停止条件(ここではif(n<=0))に掛かるまで
関数が閉じないままどんどん同じ関数を積んで行くイメージをしてくれ
で、f(0)(停止条件)に掛かったら今度は、逆にf(0)→f(1)って感じで
抜けていく、
結局f(n) は0からnの総和になる

この辺で分かりやすいかな
http://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/recursive.html

後は線形再帰、末尾再帰とかで色々検索してくれ

0765デフォルトの名無しさんNGNG
それは再帰関数といって、関数が自分自身を呼び出しています。

main
 f(3)
  f(2)
   f(1)
    f(0)

という呼び出しシーケンスになっています。後は自分で考えてください。
0766デフォルトの名無しさんNGNG
>>763
1 + 2 + 3 だろ。
再帰だから、DrScheme でステップ実行やれば理解できるよ。
0767764 NGNG
あ、ちょっと嘘ツイテル  w
でも大体そんな感じ

0768凛NGNG
初心者ですいません。そんなのも解らないの?って思うかもしれませんが聞いてください。
"123.4"(文字列)から'.'を検索して小数点の前と後ろを分割して、どちらも1000倍にして、
それを足して123400(123000, 400)という数値を作りたいのですが解りません。
特に、小数点の後ろ側(0.4)を1000倍の仕方が・・・。
float型を使用しないでできるんでしょうか?
0769デフォルトの名無しさんNGNG
マルチポスト(以下略
0770はじめっこNGNG
>>747
ありがとうございます。できました。
for(int i=0, j=0, k=0; i<10 && j<20 && k<20; i++)
0771ぺーぺーNGNG
ありがとうございます。もっかい考えなおします。というか、これで悩んでたらやばいなぁ・・・
0772デフォルトの名無しさんNGNG
>>770
C++かC99だったのね…
0773デフォルトの名無しさんNGNG
out0.dat,out1.dat,out2.datみたいなファイルを作って書き込みたいんだけど
どうすればよいですか?
for(i=0;i<10;i++){
 fpw = fopen("out数字.dat","w");      ↑
fprintf(" ", );
fclose(fpw);
}
とやって見ようかと思ったけど、ムリだし・・・
0774デフォルトの名無しさんNGNG
>>773
sprintf()を調べる…
そいでファイル名の文字列を作る…
0775デフォルトの名無しさんNGNG
>>773
いや、何したいんだか判らん…
ファイル名の一部を連番にしたいなら、例えば

 char fname[64];
 sprintf(fname, "out%d", i);
 fpw = fopen(fname, "w");

だけど…そういう事でなく?
0776デフォルトの名無しさんNGNG
char filename[]="out0.dat";
for(i=0;i < 10;i++){
 filename[3] = i + 0x30;
 fpw = fopen(filename, "w");
 fprintf(" ",);
 fclose(fpw);
}
0777デフォルトの名無しさんNGNG
774,775さん。どうもありがとう。
本買って勉強しようかな?
0778776NGNG
fprintf(" ",);
は
fprintf(fpw," ");
な気がする。。。
0779デフォルトの名無しさんNGNG
あと776さんも。(書いている間に更新されてた・・・)
0780デフォルトの名無しさんNGNG
はじめまして、次のプログラムを作ってくれませんか?初心者で授業についていけてないんです。
プログラムを見て納得したい。お願いします。
平面状の2点P1(x1,y1),P2(x2,y2)を結ぶ直線のP1から3分の1の位置を求める 関数 int
c3poin (double x1, double y1, double x2, double y2, double *cx, double *cy)の
プログラムを作れ。
main関数も作り実行が確認できる形式にせよ。なおP1から3分の1の位置は次式で与えられる。
X = 2x1+x2/3, y = 2y1+y2/3
0781デフォルトの名無しさんNGNG
>>780
そのままだが

c3poin (double x1, double y1, double x2, double y2, double *cx, double *cy)
{
  *cx = 2*x1 + x2/3;
  *cy = 2*y1 + y2/3;
}
0782デフォルトの名無しさんNGNG
>>758
全角空白とか混じってないか?
0783デフォルトの名無しさんNGNG
>>768
> 特に、小数点の後ろ側(0.4)を1000倍の仕方が・・・。
strtoul()を使って何桁あったか調べる。
0784デフォルトの名無しさんNGNG
>782、783
両方とも、別スレで解決済みで御座います。
0785デフォルトの名無しさんNGNG
まるちかよ!
0786デフォルトの名無しさんNGNG
俺に聞け!のほうですな。ttp://pc.2ch.net/test/read.cgi/tech/1009499565/
0787ダダダダーん!NGNG
どうかこれも人助け。クラ−メルの公式をCでやってください。お願い〜。
0788デフォルトの名無しさんNGNG
>>787
おんなじしつもんをあちこちにかくなって。
0789デフォルトの名無しさんNGNG
>お願い〜。
>先生おねがい〜。
>こら、そこのあなた簡単っだって笑わない!
案外芸が細かいな。
0790デフォルトの名無しさんNGNG
同時書き込み、排他制御、ロックについて教えて下さい。

下記の処理を一つのファイルに対して
複数のプロセスから実行するときの定石を教えて下さい。

1テキストファイルをオープン
2テキストファイルへ書き込み
(何度か繰り返し)
3テキストファイルをクローズ

ファイルへ書き込むごとにオープンとクローズを繰り返すのはあほ?
同時に開きっぱなしにして一行ずつ追記していきたいんです。
0791デフォルトの名無しさんNGNG
790ですが追記です。

OSはWinとUNIXで両方使えたらいいんですけどね。
0792デフォルトの名無しさんNGNG
オープンを繰り返すのが普通だと思いますが。

追記モードで、バッファが関係してなくて、write一発で決まって、
複数プロセス/スレッドからのオープンが問題ないなら、
ロックは要らないかもしれません。
0793デフォルトの名無しさんNGNG
2次元の文字配列
char data[20][20];
というのを定義したとして,それを引数として別の関数から
呼び出そうと思ったのですが,うまくいきません.簡単に書くと

main () {
char data[20][20];

r=kansu(data);
}
に対して,kansuを
int kansu(char data[][]) {
:
:
}
とすると,引数の指定が間違っています,というような感じでエラーが
出てしまいます.どのようにすべきなのでしょうか?



0794デフォルトの名無しさんNGNG
http://www.st.rim.or.jp/~phinloda/cqa/cqa17.html
0795デフォルトの名無しさんNGNG
char(*data)[20]
079615分でNGNG
キ─ボードからファイル名を入力して、そのファイルの文字数をカウントするプログラム
を作って頂けないでしょうか?

間に合わないか、、
0797デフォルトの名無しさんNGNG
>>796
作るほどのもんじゃないな。
0798デフォルトの名無しさんNGNG
>>796
何に使うの?
0799デフォルトの名無しさんNGNG
>>796
_openと_filelength見れ。
改行?無視無視。
0800796NGNG
学校の課題です。。
もうそろそろ今使ってる場所追い出されるので、諦めます。
0801デフォルトの名無しさんNGNG
>>796
なんてムカツク言い方…。(・∀・)カエレ!
0802デフォルトの名無しさんNGNG
>796
エクスプローラーからALT+RETURN
0803796NGNG
1つのファイルに、UTF16,UTF8,SJIS,EUC,ISO-2022-JP,ISO-2022-KR,BIG5などが
混在してあるファイルの「正確な」文字数をカウントしたいんです。
もちろん、"あ"を2とかカウントしたりしては駄目です、、、
0804デフォルトの名無しさんNGNG
>>803
無理、あとヽ(`Д´)ノ カエレ!
なんだよ「間に合わないか」とか「駄目です」ってのはよ…
自分で文字コードについて調べて少しでも作ってみれ。
0805デフォルトの名無しさんNGNG
>>803
境目は?
0806デフォルトの名無しさんNGNG
>1つのファイルに、UTF16,UTF8,SJIS,EUC,ISO-2022-JP,ISO-2022-KR,BIG5などが
>混在してあるファイル

それって許されるのか?(w
0807デフォルトの名無しさんNGNG
>>803
m17n-ruby に UTF16 ISO-2022-KR BIG5 エンコードを追加実装して
適当に guess をかませながら str.size を足していく
0808デフォルトの名無しさんNGNG
>>803
muleで開いて、自分で数える。
0809796NGNG
あ、書き忘れましたが、そのテキストは、MIME-Multipartです、、、
もちろん、Multipartなメタメッセージは、数えてはいけません。
あと、UTF16で、リガチャなど複合文字もきちんと数えていただきたいです、、、
0810デフォルトの名無しさんNGNG
>>809
ふん、出てくる出てくる、次々に“仕様”がよ(藁
「数えてはいけません」って、てめぇ何様?
自分のやりたい事、要求仕様くらい整理して語れんのか?
0811ccccccNGNG
これからC言語を勉強していきたいのですが、
おすすめの開発ソフトと入門書を教えてください。
0812デフォルトの名無しさんNGNG
>>809
メールで送って MIME デコードはメーラに任せ、
部分部分コピペして別ファイルに入れてもおk?
0813デフォルトの名無しさんNGNG
>>811
gcc と K&R
0814デフォルトの名無しさんNGNG
なんか、新手の荒らしに見えるのだが<教えて君大量発生
0815デフォルトの名無しさんNGNG
2chネタ心者なのだろう。
0816デフォルトの名無しさんNGNG
“教えて”君なら答えようかって気にもなるけどさ、
“作って”君は何だコイツ?としか思えんな…
0817デフォルトの名無しさんNGNG
>>815
2chというよりネット初心者という感じ。
こんなもん貼り付けて見るか
http://www.geocities.co.jp/SiliconValley/5656/#CHAPTER001
0818デフォルトの名無しさんNGNG
文字列を比較して特定のメッセージがあったら
その行を抜き出すプログラムを作りたいんですけど
いい関数あります?
ライブラリの見方がよくわからないもんでして・・・・
0819796NGNG
>810
整理できなくて、すみません、、、

MIME-Version: 1.0
Content-type: multipart/mixed; boundary="------a---"; charset UTF-8
Sample UTF-Txt
------a---
Content-type: text/plain; charset=shift_jis
シフトJISでかかれています
------a---

というようなテキストが延々続きます。
数えるのは、Multipartの中にかかれた文字です。
扱うエンコーディングは、IANAに登録されたものすべてだそうです。
○付き文字や、リガチャなども考慮して数える、というものです。
卒業がかかっているもので、なにとぞよろしくお願いします、、m(_ _)m
0820デフォルトの名無しさんNGNG
>>807
> 適当に guess をかませながら str.size を足していく
その答え方いいなぁ、“適当に”が重要ですね。
“いいかげんに”では無いところがポイント。
0821デフォルトの名無しさんNGNG
>これからC言語を勉強していきたいのですが、
>おすすめの開発ソフトと入門書を教えてください

勉強なのか仕事に使うかで違うと思うけど勉強ということにする。
仕事ということにしても無駄にはならない。

参考書は
前橋氏のC言語体当たり学習=>ポインタ完全制覇 => K&R
がおすすめ。
C言語診断室という本もいいのだがどうも入手が困難
みたいなのでWeb上のものを読むとよい。同様にlanguage C FAQも
Webにあるので読もう。

ツールとしては「C言語を始めよう」+ ボーランドCコンパイラが
いいと思う。どちらもフリー。(ボーランドCコンパイラは無料のユーザ登録が必要)
0822デフォルトの名無しさんNGNG
>>818
KMP法 BM法などがある。
google で検索すればソースもあるよ。
0823デフォルトの名無しさんNGNG
>811

CPad
http://hp.vector.co.jp/authors/VA017148/pages/cpad.html#cpadintroduction

新C言語入門 スーパービギナー編
http://www.amazon.co.jp/exec/obidos/ASIN/4797306718/qid=1011888886/sr=1-1/ref=sr_1_2_1/250-4218930-7128232
0824デフォルトの名無しさんNGNG
>820
先にあげられたリンク先で自分のことをあげてる箇所もわからないようだから転載してあげよう。
俺って親切!

Q:私は社会人ではなく、学生です。 課題として出された問題をメーリングリストに参加している人達に解いてもらっても問題はないでしょうか? (New! 2001.07.09)
A:問題大アリです。 今すぐ事務局に退学届けを出し別な道を模索した方が、儚い人生の道を踏み誤り本当に下らない人生とならずに済む確率が少しは上がるでしょう。
0825デフォルトの名無しさんNGNG
初心者にメールを出してみようと思ったことはないかな?
0826デフォルトの名無しさんNGNG
>>822
超ありがとう。
掘っていいよ(w
0827796NGNG
>824
私へのリプライでしょうか? それはメーリングリストに適用されるもので、
このトピにはあてはまらないと判断しました。
あなたに答えてもらわなくても結構です!
824以外の方、どうかお願いします!! m(_ _)m
0828820NGNG
>>824
…え゛、漏れですか?
すいません、もう数年前に事務局に退学届けを出し
(学生とは)別な道を模索しました〜
(ぴったりな内容の回答例だたので、ちょとドキドキ)
0829796NGNG
というか、824はやりかたがわからないのではないですか?
無知な人は黙っていてください!
0830820NGNG
なぁ、796よ。
君のこの一連の書き込みはネタだよな(笑
ネタだと逝ってくれ、でないとイタすぎる…
0831796NGNG
>830
ネタですよ。メール欄をみましょう。
それでは、偽者は去ります。
またあえるといいですね。
それと、Multipartな文字数えプログラム、
できたら発表してくださいね。
0832デフォルトの名無しさんNGNG
初心者スレでのネタはなるべくやめてほしいのです。
本当に困ってる人がきたときに、いちいちネタか?ネタか?と確認作業が入るので仕事が遅くなります。
0833デフォルトの名無しさんNGNG
|= ← これはどういう意味ですか?
0834デフォルトの名無しさんNGNG
>>833
あんたちょっとだまってて、っていう意味です。
0835デフォルトの名無しさんNGNG
明日は曇りという意味です
0836833NGNG
真面目に答えて下さい。
検索にかからないんですよ!
お願いします、一言教えて下さい。
0837デフォルトの名無しさんNGNG
#include "match.h"  こういうセミコロンで囲んだものの意味がわからないんですけど
#include <match.h> とは意味が違うのですか?
0838デフォルトの名無しさんNGNG
a|=bはa=a|b
0839デフォルトの名無しさんNGNG
>>837
ファイルを探す順序が違う。だけかな?
0840デフォルトの名無しさんNGNG
K&Rを読め>837
0841デフォルトの名無しさんNGNG
>>840
そんな殺生な・・・
買わなきゃダメでスカイ?

>>839
ファイルを探す順序はどちらが早いんですかね?
0842名無しさん@お腹いっぱいNGNG
" "
0843841NGNG
>842
ありがとう.
0844833NGNG
838、ありがとう。
御礼にあなたのことを想像しながらオナります。
0845デフォルトの名無しさんNGNG
セミコロンじゃなくてダブルクォーテーションです。
で、""はカレントを先に探して、そのあとの順番は<>と同じだったんじゃ?
0846デフォルトの名無しさんNGNG
セミコロンで囲むと、エラー出ます。
#include ;math.h;
0847841NGNG
あらま。俺ってば恥ずかしい。
匿名掲示板でよかった〜〜
ありがとう845
0848( ´∀`)NGNG
�@strlen
�Astrcat
�Bstrcmp
どう使うか、どういうものかはわかってますが
何て読む(発音)するかわかりません・・・。
おい、お前ら、お助け頂けませんか?
0849俺はNGNG
(1)エス・ティー・アール・レン
(2)エス・ティー・アール・キャット
(3)エス・ティー・アール・シー・エム・ピー(またはコンプ)
と読んでるなぁ。
0850( ´∀`)NGNG
>>849
即レスありがとう。謝謝。
0851デフォルトの名無しさんNGNG
string
0852デフォルトの名無しさんNGNG
>>848-850
そこらへんは呼び方いろいろだと思うけどね。
回りで通じる呼び方にするべし。
おれは、str部分はストラにしてる。
0853( ´∀`)NGNG
>>852
お返事ありがとう。そっか〜。
漏れは家で独学なんだけど、みんなはどうなのかと
気になっていましたので・・・。
0854デフォルトの名無しさんNGNG
関数の読み方は年にスレが10立つほどのFAQです。

「False」を「ファール」って発音してる人の数→
http://pc.2ch.net/test/read.cgi/tech/1005578173/
0855デフォルトの名無しさんNGNG
>>854
見るたびに思うがFalseをファールと発音するやつはいないだろ。
0856デフォルトの名無しさんNGNG
enumはイニューム
charはチャー
0857デフォルトの名無しさんNGNG
reinterpret_cast<T>
読み方わかんないんで“あー、ほらキャスト”で誤魔化す。
0858デフォルトの名無しさんNGNG
素直に読めば「リインタプリットキャスト」では?
0859デフォルトの名無しさんNGNG
reinterpret_castやstatic_castなんて使うことあるの?
reinterpret_castならまだしもstatic_castってCのキャストと同じなうえに主張が強すぎて読みにくいし。
0860デフォルトの名無しさんNGNG
さがりすぎ:)
0861ちょっと恥ずかしいけどNGNG
恥ずかしい質問なんですが、
char *name = new char[50];
char *my = "ABC";
name = "ABC";  //(strcpy(name,my)ならOK)
strcat(name,my); //nameは"ABCABC"

これがエラーになるのがよく分からないのです。
name = "ABC"とstrcpy(name,my)って同じような
気がするんですが・・・・
今までC++BuilderのAnsiStringばかり使って楽して
来たのですが、汎用なものを作ろうとcharやりだし
たのはよいけどcharってなんだか面倒なこと多いですねぇ
0862デフォルトの名無しさんNGNG
>>861
ここで説明始めると小一時間では終わらん。
name = "ABC"は、文字列定数"ABC"のアドレスをポインタ変数nameに代入している。
strcpy(name,"ABC")は文字列"ABC"をポインタ変数nameが指す領域に複写している。
ポインタとメモリ管理について勉強しる!
0863デフォルトの名無しさんNGNG
>>861
なぜ char * を使うことで汎用なものになると思いましたか?
0864デフォルトの名無しさんNGNG
>>861
漏れのコンパイラ(VC6)では通っちゃったよ。
どんなエラーが出た?
0865デフォルトの名無しさんNGNG
コンパイルエラーは出ないだろ。
0866デフォルトの名無しさんNGNG
実行結果も期待通りだったよ。
コンパイラに依存するの?
0867デフォルトの名無しさんNGNG
>>866
おいおいおいおい
0868デフォルトの名無しさんNGNG
>>861
それはたぶんReadOnlyな領域に文字列を書き込もうとしている。
ただ、リンカのオプション等によってはwriteできる領域に配置させることも
あるのかもしれない。
0869デフォルトの名無しさんNGNG
>>865 >>867
がなにをいいたいのかわからん。
漏れがヴァカでスマソが、詳しく書いてください。
0870デフォルトの名無しさんNGNG
>>869
環境知らんけどすぐ後にもう一つ文字列リテラル作って
出力してみたらどうなる?

char *name = new char[50];
char *my = "ABC";
name = "ABC";  //(strcpy(name,my)ならOK)
char *s="tabunkowaremasu";
strcat(name,my); //nameは"ABCABC"
cout << s << endl ;

みたいに
0871デフォルトの名無しさんNGNG
>864
VCな人は、/GFつきでビルド・実行してみれ。
0872デフォルトの名無しさんNGNG
>>870
スマソ。漏れがものすごい勘違いしてた。
確かにそれだと壊れるよ。
ありがと。
0873デフォルトの名無しさんNGNG
Mid(String str,int a,int b)

Mid(”ほげほげ”,1,2) -> ほげ
Mid(”aiueokakikukeko”,3,4) -> ueok

こういう関数をCでだれか作っておくれ。
0874デフォルトの名無しさんNGNG
エラー処理は端折ってある。あと、freeを忘れるなよ :)
wchar_t *wcsmid( const wchar_t * str, int begin, int end )
{
 int length = end - begin;
 wchar_t *ret = malloc(( end - begin + 1 )*2);
 wcsncpy(ret, str+begin, length );
 ret[length] = L'\0';
 return ret;
}
0875ちょっと恥ずかしいけどNGNG
 遅くなりまた。しかもかなり説明不足な質問で申し訳ないです。
環境はVC++6.0でエラーは仰る通りコンパイル時ではなく、実行時
に「writtenになることはできませんでした」というエラーでした。
0876デフォルトの名無しさんNGNG
>>874
わーいありがちょー。
0877デフォルトの名無しさんNGNG
*2はまずいな。*sizeof( whcar_t )か。
0878873NGNG
エラー E2034 mid.cpp 13: 'void *' 型は 'wchar_t *' 型に変換できない(関数 wcsmid(
const wchar_t *,int,int) )

教えておくれ。(泣
freeを忘れるなの意味もよくわからない。
0879ちょっと恥ずかしいけどNGNG
 >>863
char *が汎用だと思ったのは、自分が使う環境がC++Builder or VC++6.0
だとした場合、仮にC++Builder でAnsiString使っても.c_str()がありますし
MFCのCStringにも・・・・と思ったらCStringの場合にはstrcpyでコピーしな
いとダメ?だとしたら大して汎用ではないかなぁ。
なんでBorlandもMSも文字列はSTLの<string>を標準にしてくれないんで
しょうか・・って愚痴ですね。
0880デフォルトの名無しさんNGNG
>>878
wchar_t *ret = (wchar_t*)malloc(( end - begin + 1 )*2);
0881873NGNG
double *r=(double *)callos(5000,aizeof(double));
free(r);
いま調べた、領域開放。
0882873NGNG
>>880
シェシェ。サンクス
0883デフォルトの名無しさんNGNG
こんばんは.
ちょうど文字列ってことで,C言語において,
*ch1,と *ch2 に英文字列が入っているとき,それが全く同じ文字列か
どうか調べる効率の良い方法はないでしょうか?
今は
while(ch1[cnt]!='\0'){
  if(ch1[cnt]==ch2[cnt]){
    break;
  }
  cnt++;
}
って感じなんですが.もっとスマートな方法募集中です.
C++にしろってのは無しでお願いします.
0884デフォルトの名無しさんNGNG
strcmpじゃ駄目なの?
0885デフォルトの名無しさんNGNG
ソレハstrcmpトドウチガウノデショウカ?
0886デフォルトの名無しさんNGNG
ムシロ、883のコードハ、strcspnポイ。
0887デフォルトの名無しさんNGNG
そういや他人のコード読むと、最初の一文字を比較してから、
strcmp()してるのが多いけど、今時のパソコンでも効果的で
漏れも真似してやるべき?
0888883NGNG
やっぱりそうですよねぇ.
strcmpを使う場合は
if(strcmp(ch1,ch2)==0){}
とすればいいんでしょうけど.何か動作がおかしいのでね.
strcspn調べたら確かに883っぽいですね.
0889デフォルトの名無しさんNGNG
あり?さがらない...
名前入れたら阿寒のか?
0890デフォルトの名無しさんNGNG
当然やることによるんでは?
頻度にね.
0891デフォルトの名無しさんNGNG

                              ∧ ∧   。  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                              (*゚ー゚) /  < ここに「sage」(半角)と
                              (   つ     | 入れるとスレがありません。
                            | ̄ ̄ ̄ ̄ ̄|   \___________
0892デフォルトの名無しさんNGNG
スレなくなっちゃうのかよ!
0893デフォルトの名無しさんNGNG
>>878
テメェで「こういう関数をCでだれか作っておくれ。」といっておきつつ、
> エラー E2034 mid.cpp 13:
C++でコンパイルするヴァカ発見。
0894デフォルトの名無しさんNGNG
>>861
うまく説明出来ないが、大体こんな感じ。

>char *name = new char[50];
1.まずchar型の変数50個のアドレスが確保され
  その先頭のアドレスが変数「name」に代入される。

>char *my = "ABC";
2. read only文字列"ABC"の先頭文字'A'のアドレスが
   変数「my」に代入される。

>name = "ABC";  //(strcpy(name,my)ならOK)
3. さらに「2」とは違う別のRead only文字列"ABC"の
   先頭文字'A'のアドレスが変数「name」に代入される。
   この段階で「1」で確保したメモリをせっかく指し示していた
   変数「name」がまったく別のアドレスを指し示す事になる。
   「1」で確保されたメモリは迷子状態。

>strcat(name,my); //nameは"ABCABC"
4. 変数「name」は現段階でread onlyの文字列の先頭アドレスを
   指し示しているので、内容を変更する行為は全てエラーになる。
0895暇人NGNG
char a=*("abc"+1);
putchar(a);

結果:b
Cって凄いね。
理屈どうりにうまくいくのは。
0896デフォルトの名無しさんNGNG
> それが全く同じ文字列か
> どうか調べる効率の良い方法はないでしょうか?
while(*ch1++ = *ch2++);

0897デフォルトの名無しさんNGNG
だーいにゅー
0898デフォルトの名無しさんNGNG
>>887
あなたが試してみて、みんなに結果を報告してくれるとみんな助かります。
よろしく。
0899デフォルトの名無しさんNGNG
> それが全く同じ文字列か
> どうか調べる効率の良い方法はないでしょうか?

/* まったく同じだったら1 違えば0 */

unsigned int strchk(char *a,char *b)
unsigned int c=0,d;
if((d=strlen(a)) == strlen(b)){
while(*a != '\0')
if(*a++ == *b++) c++;
if(c == d) return 1;
}
return 0;
}
0900デフォルトの名無しさんNGNG
>>899
それを使うんだったらstrcmp()の方が間違いなく速い。

そもそも、>>883 のソースがなにをやりたいのかよく分からないんだけど…
(strcspnとも違うと思うぞ)
もしかして、2行目は==じゃなくて!=の間違いだったりしない?
それにしても、「全く同じ文字列かどうか」のチェックになってないが。

実はチェックしたいのは、「全く同じ文字列かどうか」じゃない別のこと
じゃないの? そうでないと、strcmp()でダメな理由が分からん。
0901デフォルトの名無しさんNGNG
こんばんは、あまりにも低レベルな質問で恐縮なのですがVCで以下のところが
よくわかりません。

char buffer[1];
int len;
len = strlen(buffer);

としたところlenに7が入りました。
これは初期化をしていないからでしょうか?
0902デフォルトの名無しさんNGNG
そうです
0903デフォルトの名無しさんNGNG
>>901
C 言語では文字列の終端を 「ヌル文字 ('\0')」 と規定している。
strlen は '\0' が現れるまでカウントしているわけだ。

そのコードの場合は buffer がたまたま割り当てられたメモリ領域の頭から
'\0' が見つかるまで延々とカウントすることになる(いつまでかはやってみないと不明)。

つーか char buffer[1]; だと1文字分しかないので
文字列はヌル文字しかない空文字列(これ→ "" )しか入らないと思うが。
0904デフォルトの名無しさんNGNG
>903
詳しい解説ありがとうございました。
C言語って怖いですね。
たとえばbuffer[255]と宣言して。
buffer[255]="\0"とかやっても大丈夫なんですから。

気をつけなければ。
0905デフォルトの名無しさんNGNG
>>904
>buffer[255]="\0"とかやっても大丈夫なんですから。
buffer[255]='\0'じゃないと、コンパイルエラーになると思うが。
0906デフォルトの名無しさんNGNG
struct name {

  int namelen;

  char namestr[1];

};

どうやって使うの?
http://www.catnet.ne.jp/kouno/c_faq/c2.html#6
0907デフォルトの名無しさんNGNG
>906
#define 1 255
ってやってるんじゃないの?最初のほうで。

# いや嘘です。許してください。
0908デフォルトの名無しさんNGNG
>>906

 struct name *p = (struct name *)malloc(256);
 strcpy(p->namestr, "ほげ");
 p->namelen = strlen(p->namestr);

とか。
0909デフォルトの名無しさんNGNG
>>908
固定で割り当てたら意味ないだろ。

#include <stddef.h>

struct name
newname(const char *str)
{
 size_t len = strlen(str) + 1;
 struct name *p = (struct name *)malloc(offsetof(struct name, namestr) + len);
 memcpy(p->namestr, str, len);
 p->namelen = len;
 return p;
}

struct name *n = newname("ほげ");
0910デフォルトの名無しさんNGNG
ファイル名の一部分だけ違うやつを連続して読み込みたいと
おもって(たとえば、file1、file2、file3・・・・つう感じで)

char file_name[6];
int i;

file_name[0] = 'f';
file_name[1] = 'i';
file_name[2] = 'l';
file_name[3] = 'e';
file_name[5] = '\0';

for (i =1 ; i < 10 ; i++) {

file_name[4] = '0' + i;
fopen(file_name,"r");

}

こんな感じでやったんだけどfopenのところがコンパイル通りません。
どうしたらよいんでしょうか?

元ネタは
C言語 体当たり学習 徹底入門
という本のP158/159あたりのコードなんですけど・・・

0911デフォルトの名無しさんNGNG
>>910
コンパイルエラーはなんて出てるの?
単に
#include <stdio.h>
の記述抜けってコトはない?
0912910NGNG
>>911

#include <stdio.h>は記述してあります。

コードをコンパイルしようとしたときに出るエラーは

error C2664: 'fopen' : 1 番目の引数を 'int [7]' から
'const char *' に変換できません。 (新しい機能 ; ヘルプを参照)

というやつです。VC++ 6.0を使って勉強しています。
どうやら

fp = fopen(fopen((char *)file_name,"r");

とするとエラーが出なくなります。
コンパイラ特有の解釈とかが絡んでのエラーなんでしょうか?
それとも、C言語としての規約としては
わざわざキャストしなければいけないと言うことではないですよね?

0913 NGNG
>>912
俺はVC6でちゃんとコンパイル通ったぞ。
本当に>>910のコピペと同じ内容か?
int file_name[6];
って宣言してないか?
0914910=910NGNG
>>913

>int file_name[6];
>って宣言してないか?

あっ!!!!
すんまそん・・・・・・思いっきりしてました。

これをなおして、キャストもはずしてきちんと動くようになりました。
本の作者には変な疑いをかけてしまって申し訳ないっす。。。。

あと100万年くらい精進いたします。
今後とも、なにとぞご指導ください。

0915デフォルトの名無しさんNGNG
>>909
難しい。ちょっとコメントがほしい
0916デフォルトの名無しさんNGNG
>>914
なんで char => int と宣言を変えるだけで駄目なの?
0917デフォルトの名無しさんNGNG
>>916
1 番目の引数を 'int [7]' から 'const char *' に変換できないから。

・・・実は漏れもよくわからん(w
0918デフォルトの名無しさんNGNG
int a[7]を暗黙の内にchar*やconst char*にするのは、
バグの元。(というか殆どバグと同じだから)
int*や、const int*にはOK。違いが判るか?
0919デフォルトの名無しさんNGNG
変更するべきでなさそうな変数とか宣言するときにみんなちゃんと const つけてる?

const int lineCount = lines.size();
for( int lineIndex = 0; lineIndex<lineCount; ++lineIndex ){
const char const* lpszLine = lines[lineIndex];
...
}

とか。
なんか意味なさそうだけどつけたほうがかっこいいかなぁとか。
思わない?漏れだけ?
0920910NGNG
>>918
#聞くは一時の恥、聞かぬは一生の恥根性で。。。。。

正直なところわかりません。

「char*/const char*」も「int*/const int*」もどちらも
変数の値にはアドレスが入っている。
しかし、そのアドレスが指し示す先には
char*の場合(本来意図しない)文字の値が入っている。
しかし、int*の場合は本来の意図通りの数値が入っているから?

ここまではあっていますでしょうか?
だからどうしてダメなのか今ひとつピンとこないんですが・・・・

よろしければなにとぞご教授ください。
0921デフォルトの名無しさんNGNG
>>919
過度なconstの記述はかえってコードを見ずらくするんで
関数引数やC++のメソッド/静定数にしかつかわない。
0922デフォルトの名無しさんNGNG
>>920
file_name[]をintとしたときとcharとしたときの変数ダンプ見れ。
0923凛NGNG
ちょっとわからないので教えていただけたらうれしいです。

unsigned chat A[] = {
0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90
};

unsigned char bits;
bits = A[(unsigned char)(p->mon->aaa.buf[(unsigned char)p->mon->aaa.cnt] - ' ')];

もし、cnt が「4」のとき、bitsにはどういう何が入るのでしょうか?
0924デフォルトの名無しさんNGNG
>>923
> もし、cnt が「4」のとき、bitsにはどういう何が入るのでしょうか?
p->mon->aaa ってのは何?
それが分からなきゃなんだかサパーリ サパーリ

# なんで配列の添え字をunsigned charにキャストしてるんだろう…
0925デフォルトの名無しさんNGNG
>凛
http://pc.2ch.net/test/read.cgi/tech/1009499565/n652-670
態度がよろしくない気がするのは漏れだけか?
0926凛NGNG
924さんありがとう。
p->mon->aaaは、構造体です。
># なんで配列の添え字をunsigned charにキャストしてるんだろう…
型変換は特にしなくても良いとは思ったんですが・・・。

aaa.bufはメンバがバッファです。
aaa.cntは添え字みたいな感じです。
で、スペースをマイナスってどういうことかなって。
ごめんなさい。わかりづらくて。
0927デフォルトの名無しさんNGNG
>aaa.bufはメンバがバッファです。
>aaa.cntは添え字みたいな感じです。
正直、感動した。
なんつーの、えと、デカルチャー!
0928デフォルトの名無しさんNGNG
>>926
> で、スペースをマイナスってどういうことかなって。
だ・か・ら!
p->mon->aaa の値が分からなきゃ答えられないでしょうが!!

文字コードでの空白文字からのオフセット値を取ってるんでしょ。
なんでそんな事をしてるのかは、これだけのコードではワケワカラン。
0929高校生NGNG
p->mon->aaa.bufのサイズが256で
配列の添え字が0〜255じゃなきゃ困るってことだろ?
0930デフォルトの名無しさんNGNG
>929
そのようなバッファに対して、cntをunsigned charとしないのは
なぜだろうか。ついでに、A[]は要素が10個しかないようだが、
A[(unsigned char...に意味はあるのだろうか?
0931凛NGNG
bufの中身が"9876543210"で、cntが「4」の場合です。
923 の配列のどれが選択されるんでしょう?
ホント、手間かけてごめんなさい。
0932凛NGNG
追記。
"選択されるんでしょう?"てゆーのは、
bits = A[p->mon->aaa.buf[p->mon->aaa.cnt] - ' '];
をした結果、bitsに入る値のことです。
0933デフォルトの名無しさんNGNG
実行してみれば?
呆れて何も言えんわ…
0934デフォルトの名無しさんNGNG
何で質問をマトモにすることも出来ないアフォが、この業界に
入ってくるやつには多いんだろうかね?
あんまりバカじゃ出来ない仕事のはずなのにね。
0935デフォルトの名無しさんNGNG
追記
実行してエラーが出たからといって、
エラーになるんです、とか書き込まないように(w
0936デフォルトの名無しさんNGNG
結果:core dump.
ジャネーノ?
0937910NGNG
>>922

やってみました

int file_name_i[2];
char file_name_c[2];

と、したときに

intは 0x0012ff78、charは 0x0012ff74となってました。
これは番地を表しているのですよね?

で、file_name_i[0]/file_name_i[1]にはそれぞれ「0xcccccccc」が
file_name_c[0]/file_name_c[1]にはそれぞれ「0xcc」が入っていました。
これは値(数値や文字)ですよね?

ということで、intをcharにキャストすると予期せぬアドレスを
壊してしまう(バッファあふれ?)事になるからでしょうか?

んー、そもそもVC++の使い方がわかっていないので
これらの値が何を指しているのかも怪しいのですが・・・・・
いかがなもんでしょうか?
0938デフォルトの名無しさんNGNG
ほらよ。てか、一体何がわからんのかわからん。
一個ずつ筋道たてて考えれや。
cntが4なら
→p->mon->aaa.buf[(unsigned char)p->mon->aaa.cnt]は'5'
→'5'-' 'は0x15=21
→A[21]なんて知らん
→(;´Д`)core dumped
0939938NGNG
あ、>>938は>>931-932ね。
0940デフォルトの名無しさんNGNG
>937
大概、char*を受ける関数、ってのはCの文字列が欲しいわけだよな。
"string\0"ってヤツ。で、int[]={'s', 't', 'r'...}やけども、x86系なら、
"s\0\0\0t\0\0\0r\0\0\0"...ってなるわけよ。扱われるのは
最初の's'だけになっちまう。こんな危ない動作を、暗黙で行えるか、
ちゅうこと。(その危なさを知って、敢えて行いますよ、っていう言明が
キャストなわけ。)
0941デフォルトの名無しさんNGNG
>>937
まず、普通はintは4バイトでcharは1バイト。
だから、int a[2]に1と2を入れるとメモリイメージ的には
00 00 00 01 00 00 00 02 となる(とりあえずエンディアンは無視で)
で、char b[2]に1と2を入れると
01 02 となる。
こういう違いのため、int*をchar*として使おうとすると、1バイトずつ
取り出すことになるんで上の場合は1と2ではなく、
00がたくさんと01,02に見えてしまう、といった感じで。
0942922NGNG
>>937
ここが超簡単スレだって事を失念してたよ・・・。
>>941
の説明をみてくれ
0943デフォルトの名無しさんNGNG
>>915
#include <stddef.h>はoffsetofを使うため。
> struct name *p = (struct name *)malloc(offsetof(struct name, namestr) + len);

offsetof(...)はnamestrの前までの固定領域のサイズ、それとnamestr用の領
域を一緒に割り当てる。
0944デフォルトの名無しさんNGNG
>943
あー、漏れだたら、面倒だからsizeof( name ) + len で済ますかなー。
0945デフォルトの名無しさんNGNG
すみません、ひとつ教えて欲しいんですが例えば、
「20人分の点数を入力して、上位5名分の点数を高得点順に出力する」
という問題で、高得点順に並び替えるプログラムが分かりません。
if文を使って考えてみましたが分かりませんでした。
おねがいします。
0946デフォルトの名無しさんNGNG
>945
ふつーにsortすればいいのでは?
0947デフォルトの名無しさんNGNG
そもそも「ソート」という概念すら知らないのかも。
"ソート" & "アルゴリズム" で検索してみろ。

0948910NGNG
>>940-941

すげーわかりましたっ!!!!!
かなり感動でっす。
ほんまに、ありがとうございます。

んで、自分が >>937 で書いた

> ということで、intをcharにキャストすると予期せぬアドレスを
> 壊してしまう(バッファあふれ?)事になるからでしょうか?

は、逆を考えてしまっていたようですね。
自分は大きさ1(char)のところへ大きさ4(int)の物を入れるのがキャストと
思っていましたが、大きさ4(int)の物を大きさ1(char)として扱うのが
キャストですね。

ほーんま、勉強になりました。
これでもうちょっと頑張って勉強していけます。
これからもよろしくお願いします。

>>942

そうですよね、これって超簡単なことなんですよね。。。。。
で、初心者が脱落しやすいといわれる、メモリへの格納イメージ部分なんですよね。
なんか、1歩先へ進めた気がします。
こんなへたれですけど、これからもがんばりましゅ。。。。
0949デフォルトの名無しさんNGNG
>>948
いや、どっちもキャストとは言うと思います。
ただ、大きさ1(char)のところへ大きさ4(int)の物を入れようとすると
大きさ3分が切り捨てられるため意図した動きにならないこともあります。
0950デフォルトの名無しさんNGNG
>>946

>>945の
> if文を使って考えてみましたが分かりませんでした。

この一文から945の程度が知れるのでたぶんソートとか言っても意味わからんと思われ。
0951デフォルトの名無しさんNGNG
if文を20個ネストと言うのはどうだ?
0952デフォルトの名無しさんNGNG
>>950

たいていif文を使って〜とかfor文を使って〜とかいうやつはそれを習ってるか習ったばかりの段階だからな。
0953デフォルトの名無しさんNGNG
>951
if文20個だけでは済まないような‥‥
0954デフォルトの名無しさんNGNG
>>948
EOFが127を超えるという事を聞いたことがあるんだけど、どう対処するの?
0955デフォルトの名無しさんNGNG
引数に多次元配列を取るにはどうしたらよいですか?
0956デフォルトの名無しさんNGNG
>>955
Cに多次元配列はない。
0957デフォルトの名無しさんNGNG
え?
0958クワサワ先生NGNG
http://www.puchiwara.com/hacking/

/ | | | |ヽ                               @ノノヽヽヽ@
|( ゚〜゚ )| ノノノ人ヽ_ (ノ~\\        ノノノノ从ヘ ノノノノヽヽ (0^〜^0)
|(   )| (●´ー`●) (`.∀´) ノハヽヽ.  |( ´Д` )| 从^▽^从 (   )
 | | |  (    )  (   ) 从 ^◇^ 从 |(   )|  (   )  .| | |
 | | |  | |   |  ||| (    )  |||   | | |   | | |
(_)__)  (__)_) (__)_) (_)_)   (_)__)  (_)__) (_)__)
 飯田    安倍    保田   矢口    後藤    石川   吉澤

           ノノノノヽヽ  .ノノノノ从ヘ   / | | | |ヽ
∋oノハヽヽo∈ ∬`▽´∬ 川’ー’川  川o・-・)   ◎ノ^^ヽ◎  @ノハ@
  ( ´�D`)    (   )   (   )   (   )  §(´・e・`)§  (‘д‘ )
  (   )    |||   |||   |||    (   )   (   )
  (_)_)   (_)__)   (_)__)    (_)__)   (_)_)   (_)_)
     辻     小川    高橋      紺野     新垣     加護
0959デフォルトの名無しさんNGNG
>>655
void test(int **ip);
0960948=910NGNG
>>949

うっ、おっしゃるとおりどっちもキャストですね。。。。
#やっぱり、俺アホだ・・

もし良かったら確認させてもらいたいんですが、
> きさ1(char)のところへ大きさ4(int)の物を入れようとすると
> 大きさ3分が切り捨てられるため

って、本当なのでしょうか?
自分のイメージでは、意図しない場所(大きさ3だけ後方)まで書き込んでしまい、
メモリ領域を破壊すると思っていたいのですが・・・・・
その部分は切り捨てられちゃうんですか?
0961948=910NGNG
>>954

す・すんまそん・・・・
おっしゃることが理解できないです。

EOFはマクロだろうというところまでは頭が働いたので
適当にヘッダーファイルを漁ったところ
stdio.hの中に

#define EOF (-1)

つうのを見つけました。
この値が場合によって(処理系によって?)127を超える値になると言うことでしょうか?

で、そのようになった場合、自分が質問させてもらっていた
事にどのような影響があるんでしょうか?
またもや、スレのタイトル通り超カンタンな事をお聞きしてますでしょうか?
ヒントでも良いので、教えてもらえませんか?
#マジ頼むっす
0962デフォルトの名無しさんNGNG
char c; int i; char*cp = &c;
で、
*c = i;       なら、cで表現できないデータが失われるかも、ってだけ。
*(int*)c = i; なら、メモリ破壊。
この違いがおわかりか?
0963デフォルトの名無しさんNGNG
あ、いかん。下の方の*cとかは*cp,*(int*)cpね。
0964960NGNG
>>962

うぅ、、、、、これは俺が試されているんだろう。
ここでしくじったら、二度と質問に答えてもらえないかも
#プレッシャー!!!

ということで、猿なので一度にはわかりませんので
順を追って考えさしてください。

char c; 値(1バイト)が格納される
int i;    値(4バイト)が格納される
char *cp= &c; 変数cの値が格納されているアドレスを*cpに代入  //かなり理解があやしいぃ。。。

で、

*cp = i; 4バイト分の値(i)を、変数cpが示す先のアドレスへ入れる。
変数cpは&cが代入されているから、1バイト分のアドレス領域
>>メモリ破壊
*(int *)cp = i; アドレスcpが指し示す先には4バイト分のデータ領域があるとコンパイラに、
無理矢理信じ込ませる。→cpをint *でキャストしているので
で、そのアドレスが指し示す先に4バイト分の値(i)を代入
でも実際は1バイト分(&c)しかない。
>>メモリ破壊

下側は何となくこれで良いような気がしますです。
上は・・・・・????
くぅ、こんなにメモリの事を考えてコード読んだのはじめてっす。
この1文書くのに1時間かかりました。
必死に考えました、マジで悔しいっす。
お願いみしゅてないでぇ〜〜〜〜(T_T)
0965デフォルトの名無しさんNGNG
>>964
*cp = i;
と
memcpy( cp, &i, sizeof(int) );
との違いを理解しろ。
0966965NGNG
>>964
char a = 128;
printf( "a=%d", a );
結果がどうなるか試してみればいい。
aの値を色々変えてみれば、解かると思う。
0967デフォルトの名無しさんNGNG
>960
つか、君の主張では、
 コンパイラは避けられて、又避けるべきな
 「メモリ破壊を招くコード」をわざわざ出力する
と言うことになるんだが。
0968964=910NGNG
>>965
たびたびお騒がせしております
本日もたりない頭を絞ってみました

>*cp = i;

4byte分(int i)の値を、1byte分(char cp)確保されている
場所へコピーしようとするが、賢いコンパイラが
余った3byte分を破棄してくれて、
意図しない結果になるがメモリ破壊は起こらない。

>memcpy( cp, &i, sizeof(int) );

変数iの値が確保されているアドレス(&i)を先頭として、
4byte分(=sizeof(int))の内容をを変数cpが指し示す
アドレスから4byte分の領域へ無理矢理コピーする。
が、cpはchar型なので本当は1byte分しか
メモリ領域が確保されていない為メモリ破壊が起こる。

ここまでは、よかでしょうか?

で、キャストというのはmemcpyと同じように無理矢理
内容をコピーしてしまうために >>962 さんがおっしゃる状況になる。
こんな理解でよろしいでしょうか?
0969964=910NGNG
>>966
ありがとうございます。

最初に気がついたのは、代入する値が127以下だと
表示される値が代入した値なのに、128以上だと
負の値が表示されることでした。
これはしばらく考えていたら、情報処理でやった
2の補数の考え方だと言うことに気がつきました。
最終的に確信が持てたのは変数の宣言を
unsigned charにしたときなのですが・・・・

で、さらに

printf("a=%d\n",a);
printf("a=%c\n",a);

などとやっているうちに、なんとか >>965 でいただいた
課題への回答へいたることが出来ました。
0970960=910NGNG
>>967
おっしゃるとおりですね。
そのときの自分は「キャスト」という物に
固執しすぎていたようです。

キャストするならば、コンパイラはこちらの意図通りに
だまされてくれるので、メモリ破壊が起こってしまいますが
そうでなければきちんと切り捨ててくれるんですね。
勉強になりました。

これからも頑張って精進していきます。
なにとぞよろしゅうお願いしますです。
0971965NGNG
>>968
まだ勘違いしてると思うよ。
その考えでは
*cp = i;
と
memcpy( cp, &i, sizeof(char) );
が同じという事になってしまう。
0972971NGNG
>>971
説明が悪かったな。
この場合はたまたま結果が同じになるな。

float f; char c;
で
c = f;
と
memcpy( &c, &f, sizeof(char) );
では、結果が違うという事が言いたかった。
0973あぼーんNGNG
そろそろNEWスレかな
0974968=910NGNG
>>971=972
ま、まだダメっすか・・・・
ちょっと鬱かもしれない。

> float f; char c;
> で
> c = f;

4Byte分のfloatの値(数値)を1Byte分のcharの
値へ(文字コードとして)代入しようとするが、
余分な3Byte分は切り捨てられる。
よって、メモリ破壊は起こらない。
(結果は意図した物にはならないが、
エンディアンにより一定の規則性あり?)

> memcpy( &c, &f, sizeof(char) );

変数fが格納されているアドレス(&f)から
1byte分(sizeof(char))のアドレスを
変数cが格納されているアドレス(&c)へコピーする。
メモリ破壊は起こらないが意図した結果にならない。

って、こう考えてしまうんですが、
わざわざお題を考えていただいているんだから
この答えじゃおかしいんですよねぇ。
なんか、まじめにこんがらがってきました。

足りない頭がマジむかつくっ!!
次スレに移行するまでにはOK頂きたいっす。。。。
0975972NGNG
>>974
>(結果は意図した物にはならないが、
>エンディアンにより一定の規則性あり?)
c=fはキャスト変換なんだよ。
明示的キャスト変換になっていないから、いい書き方だとはいえないけど。
(本当はc=(char)fと書くべき)
結果は意図したものになるんだよ。
キャスト変換はメモリコピーとは違う。

以下の部分をコンパイルして実行してみたらわかる。
解かりやすいように、charじゃなくてshortを使ってみた。
fの値をいろいろ変えてみると解かると思うけど。
s = f の結果は意図したものになってる。


float f;
short s;
f = 1234.56789;

s = f;
printf("s = f -> %d\n",s);

memcpy( &s, &f, sizeof( short ) );
printf("memcpy -> %d\n",s);
0976デフォルトの名無しさんNGNG
char *f="1000.TXT";
のようにした場合、
"1001.TXT"と変えることは無理でしょうか?
0977デフォルトの名無しさんNGNG
>976
char *f = "1000.TXT";
f = "1001.TXT";
で何か問題でも?
0978デフォルトの名無しさんNGNG
ありがとうございまする。
そんな簡単にできるとは・・・。

char型はなんだかよーわかりません。。。
0979デフォルトの名無しさんNGNG
コマンドライン引数を使って"okinawaken"を入力して
ASCIIコードに変換→表示というプログラムを作りたいんですが・・・
宜しくお願いします
0980デフォルトの名無しさんNGNG
int main(int argc, char *argv[])
{
int i;
for(i = 1; i < argc; i++){
printf("%s\n", argv[i]);
}
return 0;
}
>>979
これを参考にしてチョ
0981979NGNG
>980さん
早速のレス有難う御座います
この場合、okinawakenはどうやって入力させればいいのでしょうか

初心者質問ですみません
0982デフォルトの名無しさんNGNG
オロオロ。あっしも初心者でげす。
まずexe作って、
hoge.exeだったとしたら、
DOSプロンプトから
hoge.exe okinawaken
と打てばよいのではないでしょうか。
0983デフォルトの名無しさんNGNG
test.exe okinawaken[Enter]
0984デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int i;
int tmp=0;
for(i = 1; i < argc; i++){
printf("%s\n", argv[i]);
tmp=tmp+atoi(argv[i]);
}
printf("コマンドライン引数の和は%d",tmp);
return 0;
}
これはコマンドライン引数の和を求めるプログラムで、
これをhoge.exeにして、c:\に移動して、
DOSから
cd c:\
hoge.exe 100 20
とすると和が表示されるはずです。
これを参考に。
0985979NGNG
有難う御座います
おかげさまでなんとか出来そうな感じになりました
親切にしていただいて、涙がちょちょぎれそうです
多謝
0986979NGNG
たびたびすみません
okinawakenを ASCIIコードに変換→表示
という部分が上手くいかなくて・・・
申し訳ありませんが教えていただけませんでしょうか
0987デフォルトの名無しさんNGNG
const char* p="osakafu";
while(*p) printf("%x\n",*p++);
0988979NGNG
>987さん
ご教授、誠に有難う御座います
しかし当方の頭ではコマンドライン引数で入力された文字列に
適用することが出来ませんでした
0989979NGNG
自分は
printf("%s\n", argv[i]);
↓
printf("%x\n", argv[i]);
このようにフォーマット指定子を変えるだけで
ASCIIコードになると思っていたのですが
全然違うみたいですね・・・・
すみません、分からないです・・・
0990デフォルトの名無しさんNGNG
ヽ(`Д´)ノ
const char* p=argv[i];
while(*p) printf("%x\n",*p++);
0991偽下部恵子 ◆GpSwX8mo NGNG
>>989
これじゃだめかしら。

#include <stdio.h>
int main(int argc,char *argv[])
{
int i;
for(i=0;i < argc;i++){
int d=0;
while(argv[i][d] != '\0') printf("%x",argv[i][d++]);
putchar('\n');
}
return 0;
}
0992979NGNG
>990さん
>991さん
自分のようなおばかに教えていただき、感謝の極みです
御陰様でやっとできました
大変貴重なレス、有難う御座いました
0993デフォルトの名無しさんNGNG
C言語なら、俺に聞け! <12>
http://pc.2ch.net/test/read.cgi/tech/1012348974/

に吸収かな。内容大して違わないし。
0994デフォルトの名無しさんNGNG
1000ゲッターにはおいしいスレだな
0995デフォルトの名無しさんNGNG
            ヘ-+------+--+-----+ヽ_
          /:::|:::::::|:::::::::::::/::::::/::::::::::::::/:::::::/`\_
       / ̄\::::::|:::::/:::......-―――--..........__/:::::::::::::::\
   ┌ー ̄::::::::::::ヽ::|:::..-^ ̄            ^ ヽ、:::::::::\
   ヽ::::::::::::::::::::::::::::/ 今だ995            \::::::::ヽ
    ヽ:::::::::::::::::::::::/    ゲットー     ::::       \:::::ヽ
    ヽ::::::::::::::::::/   ズザーー       ::::::::        \::::|_
     ):::::::::::::::|              ::::*:::::        ヽ:|::::ヽ
     /::::::::::::::::|              ::;;;;:          l::::::::ヽ
    /::::::::::::::::::|             ノ::ii:ヽ::          l::::::::::|
    |::::::::::::::::::::|            /::::;リ:::l::::         |::::::::::::|
    |:::::::::::::::::::::l           ...l::::;リ:::/::         /:::::::::::::|
    .|::::::::::::::::::::::l          . /:ア/:::        /:::::::::::::::i
    l:::::::::::::::::::::::::l          ./::`^:::::        /:::::::::::::::::/
    ヽ::::::::::::::::::::::::l         /::::::::::        /:::::::::::::::::::/
     /:::::::::::::::::::::::l        /:::::::::::::      /::::::::::::::::::::::/
     /::::::::::::::::::::::::i __-ー--=;;;::::::::::::::  ....::::/:::::::::::::::::::::::/
    ./:::::::::::::::::::::::::::i":::::::::::::::  ヾ─ 、/"ヽ:/::::::::::::::::::::::::::::l
     ヽ::::::::::::::::::::::丶::::::::::   /   il   .ヽ:::::::::::::::::::::::::::/
       \::::::::::::::::::::ヽ:::::::  /    l !    ヽ:::::::::::::::::::/
         ii::::::::::::::::::` -::-/     / .i     ヽ::::::::/
          ----- ̄丶/     lヽ       ヽ/
                /      l ^ヽ..      ヽ
                /      l   ヽ      .ヽ
               l       .l    ヽ      /
               丶      l     ヽ      .l
               ヽ      l     l     /
                ヽ___../      .ヽ---/
0996デフォルトの名無しさんNGNG
996get
0997デフォルトの名無しさんNGNG
∋oノハヽo∈/ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ´�D`) < こんにちわぁ〜
= ⊂   )   \_______
= (__/"(__) トテテテ...

∋oノハヽo∈ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
○( ´�D` )○< つぃののみれす!
 \   /   \_______
   しし))ミ ピョ-ン

∋oノハヽo∈ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ´�D`) < きょうはせんをげっとしにきたのれす
  ∪   )  \_______________
  (_)_)
0998デフォルトの名無しさんNGNG
∋oノノハヽヽo∈  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (´�D`≡´�D`) < られもいましぇんね?ののがせんげっとしちゃいましゅよ?
   (⊃ ⊂)    \________________________
   (_)_)
0999デフォルトの名無しさんNGNG
いまら!999げっとぉぉぉなのれす!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄(´´
  ∋oノハヽo∈   )      (´⌒(´
  ⊂(´�D`⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ

らにみてるのれす、てれるらないれすか!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ポ∋oノハヽo∈ ポ
  ン (´�D` #)    ン
   (´;) U,U )〜 (;;).
(´)〜(⌒;;UU (´ )...〜⌒(`)
1000デフォルトの名無しさんNGNG
いまら!せんげっとぉぉぉなのれす!!
 ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
  ∋oノハヽo∈        (´⌒(´
  ⊂(´�D`⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
          ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ

   |        ?
   |       ̄∨ ̄             (´´
   |     ∋oノハヽo∈ )       (´⌒(´
   人    ⊂(´�D`⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
  (  )      | ̄ ̄ ̄ ̄ ̄ ̄ (´⌒(´⌒;; ̄ ̄
    ̄       |  ズザーーーーーッ
            |

    |
    |               (´´
    |!            (´⌒(´
∋oノハヽo∈      (´⌒;;;≡≡≡
  (´�D`; )⌒つ  | ̄ ̄ ̄ ̄ ̄ (´⌒(´⌒;; ̄ ̄
 ⊂  ̄U      |
              |

   |
   | プラ〜ン
   |
∋oノ|ヽo∈
 ( / ⌒ヽ     | ̄ ̄ ̄ ̄ ̄ ̄ ̄
  U    )      |
    UU       |
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。