C の超カンタンなことなら漏れに聞け
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG他の言語はHTMLしかできないが、例のスレがウイルスに犯されているのをみかねて、立ち上がった。
変数宣言、入力、出力、演算、条件文、繰り返し文、関数、ファイル処理、ポインタ、構造体、と入門レベルなら一通りできる。
あと構造体のチェイン、関数のポインタ、ビットシフト、共用体がわからんが、これもあと一ヶ月くらい勉強すればわかるだろう。
このスレでは、漏れが基礎レベルの質問に答える。しかし、俺様が5分以上考え込む難問は禁止だ。
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNGまず、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は
NGNG0007Kusakabe Youichi
NGNG> また、まぎらわしいことに、「文字列定数」とかいうものもある。
「リテラル」は「定数」って訳すと混乱する場合も多いので、
そう訳さない場合もけっこうありますよ。
> {
> int ch; // int 型の ch を宣言。
> ch=getchar(); // getchar で一文字読み込み、ch に代入する。
> putchar(ch); // putchar で、ch に読み込んだ文字を出力する。
> }
>
> 上のコードを実行すると、プロンプトが出て、文字を入力するように待機しているで、
プロンプトがでるってどんな環境の場合だろう?
たとえば A と入力しEnterを押せば
> A
> と出力される。
Enterはどこ行っちゃったの?
> (1)なぜ ch をint で宣言したのか(なぜgetcharをintで受けるのか)
なぜ変数名が「ch」なのか? てのも気になりますね。
0008デフォルトの名無しさん
NGNG糞壁は気にしないで、続けてね。
0009デフォルトの名無しさん
NGNG嬉々としてしゃしゃり出てくる7には、
ウザイを通り越してむしろ愛すら感じる(;´Д`)ハァハァ
0010デフォルトの名無しさん
NGNGうむ、Kusakabeが嬉々として食いつくタイトルだな。
ご苦労 >>1
0011>なぜ変数名が「ch」なのか?
NGNG>1
才能を感じる♪
0012Kusakabe Youichi
NGNG>「リテラル」は「定数」って訳すと混乱する場合も多いので、
>そう訳さない場合もけっこうありますよ。
わたしならこんなめんどうな回答はしませんね。
こう答えます。
13ペイジを見ればわかりますよ?:)
0013Kusakabe Youichi
NGNG> クソスレ立てる1はウザイが、
> 嬉々としてしゃしゃり出てくる7には、
「ききとしてしゃしゃりでて」きたことにすると、うれしいのですね? :)
0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNGはい、うざいけど気にせず続けてね。
0016Kusakabe Youichi
NGNG> 13ペイジを見ればわかりますよ?:)
「よ」の後ろがだめですね。(まるでMS-IMEユーザー)
0017デフォルトの名無しさん
NGNGvoid というのは「何も無い」という状態を、積極的に宣言するものだ。たとえば
int main() // () の中が空白
でも、引数無し、というのは見てわかるが、
int main(void) // () の中に void がある
とかいたほうが、
「引数はありませんよ」
と明らかに示しているのでわかりやすい。
また、もし間違えて、この関数を引数つきで呼んでしまったときは、コンパイラーで判断して、エラーを出せる。
また、関数の返り値が何も無い、ということを示すときにも使う。
(1)void foo (void) //foo という関数は、引数が無くて、返り値も無い
(2)int bar(void) // bar という関数は、引数が無くて、int 型の返り値を返す
このように使う。また、void 型の変数宣言というのもあるらしいが、そこまでよく読んでいないので省略。
ちなみに、ネットでvoidというハンドルを使う者もまれにいるらしい。これは「void」という名前ではない。
「名前」欄を空白にせずに、わざわざvoidと書き込むということは、
「名乗るほどの名前じゃありやせん」
という意味、つまり、2ちゃんでの「名無しさん」とかと同じ意味である。
0018Kusakabe Youichi
NGNG> 「よ」の後ろがだめですね。(まるでMS-IMEユーザー)
わたしがバカにするのはATOKだけですね。
0019デフォルトの名無しさん
NGNG他でやってください。
0020Kusakabe Youichi
NGNG> ちなみに、ネットでvoidというハンドルを使う者もまれにいるらしい。これは「void」という名前ではない。
そんなにこわがらなくてもー :)
0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG不定は文字どおり、定まってない。決まっていない。
処理系依存は、(実装が)処理系によって違ってる。
ってことじゃないの?
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNG不定というのは、本当に何がはいるかまったくわからない、ということ。
処理系依存は、ある特定の処理系だけつかうなら、その動作が予想できるけど、別の処理系に持っていったとき、どういう動作になるかわからないもの。
0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNG同じ。しかし、「0」と書くより
「\0」
と書いたほうが「文字としての0」という雰囲気をもっている。文字列の終端を見つけたいときなど
「0まできたらループ終了」
とかいうコードを書くと
「この0はいったいなんだ?」
と一瞬迷う。「\0」にしておけば、文字としての0、つまり、文字列の終端がきたらループを抜けるんだな、とすぐわかる。
0030デフォルトの名無しさん
NGNG知らないので省略
>>28
ここ↓わかりやすいぞ
http://www2.airnet.ne.jp/sardine/complang/Forth.html
0031デフォルトの名無しさん
NGNGポーランド人じゃないので
そんな記法受け付けません。
0032デフォルトの名無しさん
NGNG「何もさしていない」って意味っしょ?
0033デフォルトの名無しさん
NGNGhttp://www.catnet.ne.jp/kouno/c_faq/c5.html#0
とりあえずFAQ読め。
0034デフォルトの名無しさん
NGNGヒープのを知らないのでは答えられないと思いますが。
0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNG>答えられないと思いますが。
なら、聞くなよ。
0037>33のリンク
NGNG0038デフォルトの名無しさん
NGNGナルをヌルとか言っているし。
0040デフォルトの名無しさん
NGNGじゃ、原文で読めよ。
http://www.eskimo.com/~scs/C-faq/top.html
0041デフォルトの名無しさん
NGNGsageるのなら書き込むなよ。
0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNGsageをなんか勘違いしてないか?
0044デフォルトの名無しさん
NGNGsage == ネタ
これもな(w
0045デフォルトの名無しさん
NGNG君の脳内ルールを、ここで語られても困りますが。
0046デフォルトの名無しさん
NGNG君にはネタという言葉が通じないのかな?
0047デフォルトの名無しさん
NGNGナル null ほとんどの場合、0 と等価
ニル nil Lisp用語 なにも無いという意味
ヌル null ナルの日本人用読み方
0048デフォルトの名無しさん
NGNG0049デフォルトの名無しさん
NGNG間抜けなことを書いてしまったからネタということにしたいのでしょう。
追求しないのが大人の態度。
0052デフォルトの名無しさん
NGNG100点満点で10点
0054デフォルトの名無しさん
NGNG空(から)
0055Kusakabe Youichi
NGNG> このように使う。また、void 型の変数宣言というのもあるらしいが、
はつみみです。
0056Kusakabe Youichi
NGNG> In article >>16, Kusakabe Youichi/9 <[email protected]> wrote:
> > 「よ」の後ろがだめですね。(まるでMS-IMEユーザー)
>
> わたしがバカにするのはATOKだけですね。
わたしはATOKを馬鹿にしたりしたことはいちどもないですよ。
(使うやつは馬鹿だろうけど)
0058Kusakabe Youichi
NGNG> In article >>17, Kusakabe Youichi/17 <[email protected]> wrote:
> > ちなみに、ネットでvoidというハンドルを使う者もまれにいるらしい。これは「void」という名前ではない。
>
> そんなにこわがらなくてもー :)
「てもー」なのに「:)」が付いてるんですか?
0059デフォルトの名無しさん
NGNGほとんどの場合等価です。
0061Kusakabe Youichi
NGNG> NULLと'\0'ってどう違うんですか?
全然ちがうものですよ。
125ペイジ 「5.1.3 NULLと'\0'と0」 を読みましょう。
0062デフォルトの名無しさん
NGNG不定
0064デフォルトの名無しさん
NGNG不定なので比べようがありません。
0066デフォルトの名無しさん
NGNGhttp://dictionary2.goo.ne.jp/ej/voice/N/02060587.wav
これを何度も聞いてください。そのうち悟りを開けます。
0067デフォルトの名無しさん
NGNG本もってたらここで
わざわざ聞かないって。
0068デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNGということにしたいのですね? :)
0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNGifとgotoを使う。
0074デフォルトの名無しさん
NGNGではnullと不定は等価ではないということになります。
0075デフォルトの名無しさん
NGNGあ、そっか。Cにもgotoってあったんだったな。
それさえ使わない方法は無理だよね?
0076デフォルトの名無しさん
NGNG知らない。
0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNGその辺は曖昧です。あなたが不定ではないと思えば不定ではないし、不定であると思えば不定だということになります。
0081デフォルトの名無しさん
NGNGいえ、コンピュータ自体が曖昧なのです。人間が作った物ですから。
0082Kusakabe Youichi
NGNG> 本もってたらここで
> わざわざ聞かないって。
買えばいいのに。
0083Kusakabe Youichi
NGNG> whileもforも関数の再帰呼び出しも使わないで繰り返し処理を行う方法を教えてください。
回数分書く。
0084デフォルトの名無しさん
NGNGあほか。
0086デフォルトの名無しさん
NGNGはいそうです。コンピュータの機嫌を損ねないよう、くれぐれも気をつけてください。
0087デフォルトの名無しさん
NGNGようは、気の持ち様ということで。
0088デフォルトの名無しさん
NGNGいわれてみれば
それもあるな
0089デフォルトの名無しさん
NGNGループのアンロール。
先生にしてはまともな回答。
0090デフォルトの名無しさん
NGNGわかりました。ありがとうございました。
0091デフォルトの名無しさん
NGNG0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG繰り返し処理…
って質問してるからなぁ。
つーか、難癖付けるにしてももう少しエレガントにやっとくれ。
0094デフォルトの名無しさん
NGNGそれを言ったら、再帰もループと言えるのか?
0096デフォルトの名無しさん
NGNG0097Kusakabe Youichi
NGNG> 繰り返し処理…
> って質問してるからなぁ。
回数分繰り返してかくんだから「繰り返し処理」ですよ。
0098デフォルトの名無しさん
NGNG無限ループにしたい場合はどうするの?
0099デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNGインラインアセンブラでジャンプすればー
0101デフォルトの名無しさん
NGNG日本語書けとは言わないから、理解はしてくれ、偽カベさん。
91が「ループ処理を…なら不正解」と書いたのに対して、
「繰り返し処理…って質問してるからなぁ」と答えたんだが?
ついでに「難癖付けるにしてももう少しエレガントに」とも書いたな。
0102デフォルトの名無しさん
NGNG普通に書くしかないでしょうね。
0103Kusakabe Youichi
NGNG> >>97
>
> 無限ループにしたい場合はどうするの?
無限にかくのよ。
0104デフォルトの名無しさん
NGNGアホカ
0105デフォルトの名無しさん
NGNG繰り返し処理を…の質問に対しての回答だから
先生は日本語読み違ってないよ。
先生に栄養を与えるようなことは書かないほうがいいよ。
0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNG泣いているの?クリスマスイブに一人だから?
0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG人
。。∧ ∧Å。ノ。,,,
_(⊂(゚Д゚*)⌒ヽつ_
|=======∪======|
|yyyyyyyyyyyyyyy|
|~~~~~~~~~~~~~~~~~~~~~|
======================
0110デフォルトの名無しさん
NGNGC言語を使うとはどういうことでしょう?Cでソースコードを書くということでしょうか?
それなら頭の中でコンパイル&リンクすればよいです。
0111Kusakabe Youichi
NGNG(^^;)
0112デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNGパーレンはそのまま書けばいいよ。
0114デフォルトの名無しさん
NGNG0115デフォルトの名無しさん
NGNG左括弧
何か?
0116デフォルトの名無しさん
NGNG3文字表記があるのは次の9通り
??= #
??( [
??/ \
??) ]
??' ^
??< {
??! |
??> }
??- ~
従って
>>115
正解
0117デフォルトの名無しさん
NGNG不定と思ってたけど、処理系依存だった
0118デフォルトの名無しさん
NGNGint main(int argc,char* argv??(??))??<
if(argc==2??!argc==3)
printf("%s??/n",argv??(1??));
??>
とかでOK??
0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNG> if(argc==2??!argc==3)
どうでもいいが
if(argc==2??!??!argc==3)
と思われ
0121板違い
NGNG<は<で&は&で
その他は文字コード;だろ?
0122デフォルトの名無しさん
NGNGエスケープできてないな。
<lt; &ということか。
0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNGchar型の文字(10進数の数字)をint型に変えることはatoi関数で出来ますが、
char型の文字(16進数の数字)をint型に変えるにはどうすれば良いですか?
0125124
NGNG0126デフォルトの名無しさん
NGNGprintf("%x:%d\n", i, i);
0127デフォルトの名無しさん
NGNGcharはそのままintになるが、16進数文字列からの変換なら
int i = (int)strtol(str, 0, 16);
unsigned u = (unsigned)strtoul(str, 0, 16);
0128デフォルトの名無しさん
NGNGビットフィールドについて騙ってください
0129ビットフィールド
NGNGくそレススマソ。
まあ、どうせくそスレだからいいよな。
0130デフォルトの名無しさん
NGNG「omajinai」ってなんですか?
宗教?
0131デフォルトの名無しさん
NGNG☆ Webサイト制作初心者用スレッドver14 ☆
http://pc.2ch.net/test/read.cgi/hp/1009190196/
0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNGstruct data{
int a:1;
int b:7;
}
この:1や:2はいったい何物ですか?
0134
NGNGビットです。
0135デフォルトの名無しさん
NGNGもうちょっと詳しく教えてください。
私が見た本には載ってなかったんです。
0136デフォルトの名無しさん
NGNGそいや
int a:1 ; は 0か-1 になるのか 0か1になるのか どっちだったかな?
0137デフォルトの名無しさん
NGNGstruct data{
char a:1;
char b:7;
・・・
と沢山
}
とかやるとビット並びが連続しない所が出来てイヤーンな感じだった記憶もある
0138デフォルトの名無しさん
NGNGなるほど。これって入門書とかではあんまり取り上げてないですよね。
結構一般的なテクニックなんでしょうか。
0139デフォルトの名無しさん
NGNGうんにゃ 少なくともおいらは コンパイラによって動作違うからキライ
(1<<n) とかシフト演算とか使うなやっぱり
0140Kusakabe Youichi
NGNG> 最近次のような記述をみました。
> struct data{
> int a:1;
> int b:7;
> }
> この:1や:2はいったい何物ですか?
K&Rでも見たら?
0141デフォルトの名無しさん
NGNGお、K&Rに載ってるのですか。ちょうど今読んでるところなのです。
しかし、当方のセルヴェルは低級なため、構造体のところまで
読み進むにはもう少し時間がかかりそうです。
0142デフォルトの名無しさん
NGNG嫌いな人も好きな人もいるし、コーディングスタイルの問題とは
思うけど同じソースを異なるアーキテクチャで使いまわそうと
したときに下手な書き方してたら死ぬることも無いことは無いね。
0143デフォルトの名無しさん
NGNG物語じゃないんだから、前から順番に読むなYO!!
0144デフォルトの名無しさん
NGNG0145Kusakabe Youichi
NGNG> しかし、当方のセルヴェルは低級なため、構造体のところまで
補充すればいいのでは?
0146デフォルトの名無しさん
NGNGなんで1つの変数に文字列が入るんだ?
うーん・・・
0147デフォルトの名無しさん
NGNGそれはある意味正常な感覚だな。
「変数」には「型」があるわけで、Cのプリミティブな型の感覚でとらえると
そういう感じになってしまう。
C++のclassと演算子オーバロードを学ぶとそのへんの「縛り」から抜け出せる。
stringクラスとかね。
Perlの型がC++のクラスとまったく同じかというと、厳密には違うんだろうけど
感覚的に「わけがわかって」くる。なんとなく。
0148デフォルトの名無しさん
NGNG文字列型だからです。
0149デフォルトの名無しさん
NGNGさすがインタプリタ言語だなと思う>文字列型
何文字つっこもうがセグメンテーション違反が起きないから。
0151デフォルトの名無しさん
NGNG便利といえば便利だが厄介なときもあるな。
0152デフォルトの名無しさん
NGNG内部では『0』じゃない場合がある
って聞いたんだけど
それならこういうのは危険なのかな?
void* p[10];
memset(p,0,sizeof p);
とか
void** p = calloc(10,sizeof p);
この場合『0』で初期化しているので
内部ではNULLポインターではない、
と解釈されそう
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG整数定数0 と、ビットパターン0は別じゃない?
NULL == 0 が必ず成立することを規格は保証しているけど、
NULL == *(void*) &memset_zero_area は保証あるの?
# 超カンタンな問題ではなくてゴメン
0155デフォルトの名無しさん
NGNG>NULL == 0 が必ず成立することを規格は保証しているけど
そうなの?
Cって実装依存じゃないの?
0156デフォルトの名無しさん
NGNGNULL = 0 ではない。
0157153
NGNG==は必ずしもビットパターンの一致を検査するわけじゃないからね。
ただし、共用体やポインタのキャストを使ってNULLを整数だってコンパイラだまして整数定数0と比較する式は0になることもあるよ。
0158デフォルトの名無しさん
NGNGmemset_zero_area ってのがなんなのか知らないからわかんない。
memset_zero_area ってなに? おせーて
0159デフォルトの名無しさん
NGNGmemset(memset_zero_area, 0, sizeof memset_zero_area);
ということだろう。
0160デフォルトの名無しさん
NGNGつーか NULL == *(void**) &memset_zero_area だな。
0161デフォルトの名無しさん
NGNG0162Kusakabe Youichi
NGNG> NULLポインターが
> 内部では『0』じゃない場合がある
> って聞いたんだけど
「NULLが0なんじゃなくって、0がNULLなんです」! (定型)
0163Kusakabe Youichi
NGNG> >154
> >NULL == 0 が必ず成立することを規格は保証しているけど
> そうなの?
> Cって実装依存じゃないの?
質問する前に規格書か文法書ぐらい読みましょう。
0164Kusakabe Youichi
NGNG> NULL==0 っていう式の値は1ってことは保証されてるよ。
> ==は必ずしもビットパターンの一致を検査するわけじゃないからね。
1行めはいいのですが、2行めは適切な教え方ではないですね。
0166162
NGNG古い「ANSIC言語大辞典」という本を読んだが
「NULL == 0 が必ず成立することを保証」
という意味には取れんのだが..
C++に関してはNULLポインタの定義がしっかりしているが。
0167デフォルトの名無しさん
NGNG0168BCC32.141516
NGNG0169デフォルトの名無しさん
NGNGオフセット14バイト目からビッグエンディアン2バイト
0170デフォルトの名無しさん
NGNGvoid* p; において
p = 0; と p = NULL; は C++ では等価だか、Cでは等価を保証しない
(p == 0) と (p == NULL) は C++ でも C でも等価、つーことでしょ
0171デフォルトの名無しさん
NGNGありがというございます。試してみます。
0172デフォルトの名無しさん
NGNG保証されるってば。保証されないのは、たとえ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#define NULL "死ね"
0175166
NGNGの出典を教えてください。
保証しないと既存のプログラムが動かなくなる事はわかりますが。
0176Kusakabe Youichi
NGNG> 「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 Youichi
NGNG> ボーランドのだとコンパイルエラーになりませんでした。
> int c=c;
うーむ、そこも何をやりたかったか意味不明ですけど、
gets("うんこ")
ここもエラーにならなかったのですね:)
q()を介してp()を呼んでいる意味もなさそうですし、
bという関数のポインターを使う必要もないですね。
0181179
NGNG0182デフォルトの名無しさん
NGNGc=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ほんと、読解力ないね。
0185デフォルトの名無しさん
NGNG#undef NULL
#define NULL 1
int main( int, char** );
int main( int argc, char** args ) {
printf("Null is %d\n", NULL );
}
0186デフォルトの名無しさん
NGNG>> 「NULL == 0 が必ず成立することを保証」
>> の出典を教えてください。
>っていうか文法書や規格書ぐらい読めば?
だから、さっさと出典だせ。
0187デフォルトの名無しさん
NGNG#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#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だからてめーの言う通りなら、
標準ライブラリの動作は全て「保証されていません」になるんだよ、バーカ
0192デフォルトの名無しさん
NGNGISO/IEC 9899:1999
6.3.2.3
6.5.9
7.17
あたりかな。
ただし、NULLはstddef.hで定義されるマクロなので、明示的にも暗黙的にも
#includeしてない場合や、#undefして#defineした場合などは当然 NULL == 0
であるとは限らないけど、そんなプログラムはstrictly conforming program
じゃないから標準なんて気にするな。
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNG「定数0」と「ビット列としての0」の区別も
「NULL」と「ヌルポインタ」の区別もしてないと思われ
0196デフォルトの名無しさん
NGNG「勝手に書き換える」のは「未定義の動作をひきおこす」だけ。
0197箱の臭いがする
NGNG0198デフォルトの名無しさん
NGNG「int型はINT_MAXまでの値をとりえることが保証されている」
#undef INT_MAX
#define INT_MAX 1234567890123456789012345678901234567890
int i = INT_MAX;
printf("%d", i);
あれー?「保証されている」ってかいてあるのに、嘘じゃん。
0199デフォルトの名無しさん
NGNGNULL == 0であることは保証されている」ってことだな?
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNGお前の感じている感情は精神的疾患の一種だ
開放する方法は OS が知ってる OS に任せろ
0203デフォルトの名無しさん
NGNGint n[1][1][1][1][1];
こういう配列を作ってみたんですが、
実際のメモリ上ではどういう構造になっているのか全く分かりません。
int n[5] とも違うようだし、
sizeof の値も sizeof(n) == sizeof(int) だし、
どなたかご教授願えませんでしょうか。
0204Kusakabe Youichi
NGNG> int n[1][1][1][1][1];
> こういう配列を作ってみたんですが、
> 実際のメモリ上ではどういう構造になっているのか全く分かりません。
int×2×2×2×2×2でしょ?
> int n[5] とも違うようだし、
どこから5がでてくるのでしょう?
0205デフォルトの名無しさん
NGNG> > int n[1][1][1][1][1];
> > こういう配列を作ってみたんですが、
> > 実際のメモリ上ではどういう構造になっているのか全く分かりません。
> int×2×2×2×2×2でしょ?
( ゚Д゚)ハア?
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNG面白い。
>sizeof の値も sizeof(n) == sizeof(int) だし、
1x1x1x1x1で要素一つだから当然。
0208デフォルトの名無しさん
NGNGその多次元配列のメモリレイアウトのこと?
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNGサイズは1だから メモリは 単なるintの変数と同じ
0211Kusakabe Youichi
NGNGたしかに、×2->×1ですね。(^^;
> > sizeof の値も sizeof(n) == sizeof(int) だし、
> 1x1x1x1x1で要素一つだから当然
というかもとの発言のひとは、何を確認したかったのだろう?
0212210
NGNGn[x1][x2][x3][x4][x5] というように x1,x2,x3,x4,x5に 0以外を指定しても怒られない
0213Kusakabe Youichi
NGNG> 基本的に下から順番に固まりになってる絵を想像すれば問題ない
下ってどっちですか?
0214デフォルトの名無しさん
NGNGビルの窓から踏み出したら移動して逝く方向。
ご自身で確かめるよろし。
0215Kusakabe Youichi
NGNG> 配列指定は 最大じゃなくて サイズを示す
> サイズは1だから メモリは 単なるintの変数と同じ
そういえば、2ch.comp.programmerほうで、
「関数の引数に渡すときに&をつけるのがいやなので)」とかいう
だけの理由で、int a[1];みたいに書くとか言ってる人がいましたね:)
(それって、つまり代入や比較はその宣言したところではほとんどしなくて、
関数の引数に渡すばかりなんだろうか)
0216210
NGNG引数の宣言と 代入や比較とは?
0217Kusakabe Youichi
NGNG> n[x1][x2][x3][x4][x5] というように x1,x2,x3,x4,x5に 0以外を指定しても怒られない
負の数は? > 0以外
0218210
NGNGたいていの環境では叱られないだろう
0219Kusakabe Youichi
NGNG> ビルの窓から踏み出したら移動して逝く方向。
> ご自身で確かめるよろし。
添字の小さいほうがどっちになるの?
0220デフォルトの名無しさん
NGNGVC6.0でコンパイル。
警告、エラー
ともになし。
0221Kusakabe Youichi
NGNGint a[10]; と宣言しておいて、
a[20] = 0; と代入してもコンパイル時に警告だしてくれるコンパイラーは
あまりないっていう程度の意味では?
# でも「0以外」ってのがよくわからん。そっちに関しては宣言時の話?
0222デフォルトの名無しさん
NGNG移動して逝きついた先で添え字を調べてみろ。
0223210
NGNGint func(int a[1])
{ なんとかかんとか
}
みたいに参照代わりに配列を使うという話と読んだ。
がその話と後半 括弧内が繋がらない ので判らんと聞いた
0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNG間違いもあるさ。あんまり突っ込まないでやってくれ。
0227Kusakabe Youichi
NGNG> 間違ってオタオタ中ですか?
そういうことにしたいのですね:)
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNGどっちかというとこういうことじゃないか?
int func(int *);
int a[1];
func(a); /* &をつけない */
0230210
NGNGint func(int a[]); も一緒だし、そう書いた方がなんかいいと思えるよう
になったのは最近delphi漬だからかなあ
0231デフォルトの名無しさん
NGNG一番右の添え字。
配列のイメージってわかりますか?
0232203
NGNGn のひとつ分が多次元になるわけじゃなくて、
単なる n だったんですね。
勉強になりました。
0233デフォルトの名無しさん
NGNG「C言語ポインタ完全制覇」
をすすめる
0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNG次はジャパン言語を勉強してください。
0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNG0238デフォルトの名無しさん
NGNGprintf("%d\n", n[0][0][0][0]);
0239デフォルトの名無しさん
NGNGメモリリークおめでとう
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNGint 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>「C言語ポインタ完全制覇」
これ(・∀・)イイ!
この本の著者さん、今度はJava本出したんだよね。
0243デフォルトの名無しさん
NGNG0244242
NGNG完全制覇じゃないけど、謎と落とし穴と解明するらしいよ。
0245デフォルトの名無しさん
NGNG0246242
NGNGsage進行だったんだね…。
0247Kusakabe Youichi
NGNG> In article >>224, デフォルトの名無しさん/sage/224 wrote:
> > 間違ってオタオタ中ですか?
> そういうことにしたいのですね:)
ほんものだったら「ということに」では? :)
0248Kusakabe Youichi
NGNG> なんか必死だな。
ということにしたいわけですか? :)
# えさやりすぎか?:)
0249デフォルトの名無しさん
NGNGふーん、で? 何怒ってるの?
0250デフォルトの名無しさん
NGNG0251Kusakabe Youichi
NGNG> ふーん、で? 何怒ってるの?
おこってるっていうことにしてしまうと、何か安心するわけですね? :)
0252デフォルトの名無しさん
NGNG彼は質問してますね;)
0253152
NGNGえ〜と、
僕が言おうとしてたのは
・ポインターが必要なところに0が出てきたら
NULLポインターに置き換えられる
・NULLポインターはビットパターンが『0』とは限らない
ってことで
void* p[10];
memset(p,0,sizeof p);
のとき(32ビット環境で)
((DWORD)p[1]) == 0
ビットパターンが0なので
これは真になるのはわかるんだけど
p[1] == 0
(この『0』はNULLポインターの値に置き換えられる)
これが必ず真になるかが知りたかったの
0254デフォルトの名無しさん
NGNG0255Kusakabe Youichi
NGNG> ・ポインターが必要なところに0が出てきたら
> NULLポインターに置き換えられる
「置き換え」というのは適切じゃないですね。
「解釈」ぐらいに言ったほうがいいのでは?
> ・NULLポインターはビットパターンが『0』とは限らない
> ってことで
「NULL」って書いちゃうと、マクロで定義した「NULL」という名前の
ことだと思ってしまって、理解できなくなるひともいるので、
カタカナで書いたりちがう書き方したほうがいいかも。
0256デフォルトの名無しさん
NGNG0257デフォルトの名無しさん
NGNG0258デフォルトの名無しさん
NGNG0259Kusakabe Youichi
NGNG> 何でコイツの言う事は毎回毎回こうも中身が無いのかね
「ということにしたい」
0260デフォルトの名無しさん
NGNG0262デフォルトの名無しさん
NGNGvoid 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デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNG無効アドレスですか。。。
なんか初めて聞くような気が。
何せ勉強はじめたばかりなもので。
0265Kusakabe Youichi
NGNG> str[i + j++] = str[i + j];
> とするとうまくいきません。
side-effectついてはK&Rにも書いてありますよ。
0266デフォルトの名無しさん
NGNG> ((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> side-effectついてはK&Rにも書いてありますよ。
これについて説明する際はsequence point(副作用完了点)のことを言う必要が
あるのでは?
0268デフォルトの名無しさん
NGNG>>267
K&Rはもってないです。
side-effectとsequence pointですか。。
なんか難しい話なのかな。
副作用ってのは関数形式マクロ使うときに2度インクリメントされたりする
から気をつけろと聞いたくらいです。
0269262=264=268
NGNGここID出ないんだ。
0270Kusakabe Youichi
NGNG> side-effectとsequence pointですか。。
> なんか難しい話なのかな。
> 副作用ってのは関数形式マクロ使うときに2度インクリメントされたりする
> から気をつけろと聞いたくらいです。
たとえば a[i] = i++; で、何が起きるかは保証されない(a[5]に6が入るかもしれないし
5が入るかも)けど、
if (func1() && func2())....ではfunc1がfunc2より前に呼ばれることと、func1()の
返す値が0じゃなかった場合にfunc2()呼ばれないことが、
0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNGhttp://www.catnet.ne.jp/kouno/c_faq/c_faq.html
を読みなさい。
0274デフォルトの名無しさん
NGNG0275デフォルトの名無しさん
NGNGつーか、削除した分だけ最後の文字が増殖しそうな気がするのだが。
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNG宣言やマクロが全部一つのヘッダファイル(例えばcommon.h)
にまとめられていて、それを全部の .c でインクルードしてる場合がある。
これはアリなのか? たんなるコーディングスタイルの問題か?
俺はいつも hoge.c には hoge.h というように、
一対一にヘッダ作ってるから、ちょっとビビった。
0278Kusakabe Youichi
NGNG> ネットに落ちてるソースを見てみると、
> 宣言やマクロが全部一つのヘッダファイル(例えばcommon.h)
> にまとめられていて、それを全部の .c でインクルードしてる場合がある。
>
> これはアリなのか? たんなるコーディングスタイルの問題か?
>
> 俺はいつも hoge.c には hoge.h というように、
> 一対一にヘッダ作ってるから、ちょっとビビった。
「まとめかた」の問題では?
意味もなく1つにまとめているんだったら、よくないですね。
0279デフォルトの名無しさん
NGNGそれぞれのソースファイルに対してヘッダーファイルをつくるのなら、
マクロ等はすべてソースファイルの中に書けよ。
0280デフォルトの名無しさん
NGNGプリコンパイルなんて仕掛けが出来てさ
そいつを最大限に利用しようとすると ヘッダファイルを全部纏めるというクセが
0281デフォルトの名無しさん
NGNGどうして?
0282277
NGNGつまり「みんなはどうしてる?」ってことだ。
どうまとめようがアリなのは分かるけど、
なんか効率のいい方法とか、おすすめはないかな?
最近よく見るのが #include "hoge.c" ってカンジで、
.c をそのままインクルードする方法。
少なくともこれはよくないと思うんだが。
0283デフォルトの名無しさん
NGNGファイル数が無駄に増えるから。
0284デフォルトの名無しさん
NGNGん?どっちにしてもソースファイルx2になるんじゃないの?
0285デフォルトの名無しさん
NGNGヘッダーファイルを一つにまとめた場合は、ソースファイル+1じゃない。
0286285
NGNG0287デフォルトの名無しさん
NGNGって言う条件の話じゃなかったの??
0288マグナム
NGNG#include "hoge1.h"
#include "hoge2.h"
.
.
.
と1000行書くとでも言うのかい?
どうまとめるかは規模によるだろ。
0289Kusakabe Youichi
NGNG> 1000のファイルがあるとすると
> #include "hoge1.h"
> #include "hoge2.h"
> .
> .
> .
> と1000行書くとでも言うのかい?
そうですよ。
0290デフォルトの名無しさん
NGNG基本的には、あるまとまった機能単位でhoge.h hoge.c等をつくり、
その機能単位の複数から参照されるような共通定義は別にcommon.hなど
にまとめておく。
例外はもちろんある。そのへんは機に臨み、変じて応ず。
0291デフォルトの名無しさん
NGNGそのソースは1000ものヘッダが必要なのか?
構成をもうちょっと考えたほうがいいぞ、となる。
どうまとめるかは「規模」ではなく「依存関係」による。
0292デフォルトの名無しさん
NGNG呼びたくなったら(リンクしたくなったら)そのヘッダをインクルードする。
それと、それらに使われる構造体やらなにやらの定義のヘッダは
別ファイルに作る。
ってのがスタンダードだと思ってました。
0293マグナム
NGNG複数の人数でプロジェクト組んでやる場合
そちらの方がソース読みやすいね。
ヘッダでヘッダをインクルードしさらにへっだを...
というのをやられると読みにくてしょうがない。
0294デフォルトの名無しさん
NGNGにでもするだろ。
hoge/foo.c
hoge/foo.h
hoge/bar.c
hoge/bar.h
んで、メインでは公開するインターフェースだけを#include "hoge.h"する。
0295デフォルトの名無しさん
NGNG外から呼ばれるメンバ関数の宣言を別のファイルに書きたくなることがある。
0296デフォルトの名無しさん
NGNGインターフェイスクラスを作って対処しても、ソースファイルが2つ増えるのがウザいんだよね〜。
0297296
NGNG×ソースファイル2つ
○ヘッダファイルとソースファイルが1つずつ
0298デフォルトの名無しさん
NGNGホントに見せたくない変数なんかは.libにすればいいんじゃない?
わざわざprotectedされてる関数や変数を理由もなく使うバカはいないだろうし・・・
0300299
NGNG0301Kusakabe Youichi
NGNG> つまらんツッコミが入る前に・・・
>
> ×ソースファイル2つ
> ○ヘッダファイルとソースファイルが1つずつ
ヘッダーファイルはソースファイルじゃないのですね? :)
0302デフォルトの名無しさん
NGNGうるさいよあんた。
0303デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNGそこ、エサまいちゃだめ。
0305デフォルトの名無しさん
NGNGコンパイラってドレデスカ?
0306age
NGNG0307Kusakabe Youichi
NGNG> C言語をやるひとは、アセンブラを覚えた方がいいんですか?
お好きなように。
0308デフォルトの名無しさん
NGNGCコンパイラしかないという環境があるからそういうターゲットならばCもよいと思うが
>>何をもって最新規格というのかわからんがVC++かGCCでとおらないものは
Cとはいえんとおもう。
BCCはANSI対応をうたっているけれどmakeファイルの互換性やライブラリーの互換性が低いのでいやだ
0309デフォルトの名無しさん
NGNG漏れもC99に対応してるコンパイラーがわからん。
0310ボボ
NGNG0311デフォルトの名無しさん
NGNGcygwinからじゃないともしかして実行できないんですか?
DOS窓から起動したらエラーで終了しちゃいました。
0312デフォルトの名無しさん
NGNGcygwin1.dllあたりを見つけたら実行はできるけど
ほとんど役に立たないよ。シェルがなきゃパワー半減。
0313デフォルトの名無しさん
NGNGオプションでそれ外せるよ。
オプションは"-mno-cygwin"
0315デフォルトの名無しさん
NGNG何とかならない?
0316デフォルトの名無しさん
NGNGWinに無い機能をエミュレーションしてるんだから、そらー遅いだろう。
>>313
そのかわりUnix固有な事、例えばfork()なんかは呼べなくなるんで注意。
libcもmsvcrt.dllを使うようになる。
0317デフォルトの名無しさん
NGNG何とかしたいなら cygwin1.dll の開発メンバーになろう。
0318デフォルトの名無しさん
NGNG遅いってファイルIOも?
0319デフォルトの名無しさん
NGNG0320デフォルトの名無しさん
NGNG比較したrubyは何版だろう。
Windows用の中じゃcygwin版が一番速いはずなんだが…。
0321デフォルトの名無しさん
NGNG0322JustStupidRubyist
NGNGCygwin 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デフォルトの名無しさん
NGNGPerlもきぼーん。
自分でやれと言わないで・・・
0324デフォルトの名無しさん
NGNG0325デフォルトの名無しさん
NGNG俺のPC/ATじゃあ・・・・・(TT)
0326デフォルトの名無しさん
NGNGprintベンチャー (´д`;)
0327Kusakabe Youichi
NGNG> ここにも来たか
> print(IM^]A,0 (´д`;)
文字化けしてますよ。
0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNG0330デフォルトの名無しさん
NGNGほとんどが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デフォルトの名無しさん
NGNG0332330
NGNG$ 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
0334デフォルトの名無しさん
NGNG0335ポン酢
NGNGmain()
{
printf("EOF=%d",getchar() != EOF);
}
にキーボードからCtrl+Z(MS−DOS)を入力すると0を返してくれる
と思うのですがCtrl+Zを入力するとプログラムが終了してしまいます。
キーボードからEOFを入力するのはCtrl+Zであってますよね。
何がいけないのでしょうか?教えてください。
0336デフォルトの名無しさん
NGNG0337デフォルトの名無しさん
NGNGWindowsでたくさんWindowコントロールがある場合1つのWindowだと
Handle->発信もとの判別をIF文使うかハッシュしてテーブル使うかしか
思いつかないんですけれど。
C++ならば1つクラス作ってメンバー関数にサブプロシージャもたせれば
実行時に関数の実体のコピーが作られるからメンバー変数にアクセスできるので
Handle->発信元レコード指定 の特定ができるけれど
Cの場合ポインタをレコードに入れるやり方ではできても
動的に変数分だけ関数の実体を作ったりする方法がわかりません。
0338デフォルトの名無しさん
NGNGhttp://www.asahi-net.or.jp/~HA3T-NKMR/vcl3-1.htm
これは小さなコードを動的に作成して、そのコードからインスタンスポインタと
関数のポインタの2つを得るという方法で、win3.1の頃にwindowsDLLの解消
方法として知られていました
次は SetWindowLongで GWL_USERDATA にインスタンスポインタを埋める事です
0339Kusakabe Youichi
NGNG> #include<stdio.h>
> main()
> {
> printf("EOF=%d",getchar() != EOF);
> }
> にキーボードからCntl+Z(MS-DOS)を入力すると0を返してくれると思うのですが
まぬけな思い込み。
> Cntl+Zを入力するとプログラムが終了してしまいます。
当然ですね。
> キーボードからEOFを入力するのはCntl+Zであってますよね。
合ってません。
> 何がいけないのでしょうか? 教えてください。
思い込みがいけない。
17ペイジを読みましょう。
0340デフォルトの名無しさん
NGNG先生もやさしいところあるじゃん (w
0341デフォルトの名無しさん
NGNGサンクって
http://host1.sde.co.jp/hyper-dictionary/50-sa/sa/thunk.html
こういう用語じゃないの?
0342デフォルトの名無しさん
NGNGint main(void)
{
printf("EOF=%d\n",getchar() != EOF);
return(0);
}
^Z
EOF=0
できたんだけど・・・>>335
0343デフォルトの名無しさん
NGNG終了してしまうというのは、command.comのプロンプトに戻ってしまうということか、
それともウィンドウが閉じてしまうということか。
0344クンサ
NGNGSchemeでも使うYO!
0345デフォルトの名無しさん
NGNGKusakabe Youichiの様なバイタリティ溢れる若者には
初心者を相手にがんばってもらいたい。
0346ポン酢
NGNGどこを見てもDOSはCtrl+ZでLinuxはCtrl+Dだと書いてあるのですが
違うのですか?どの本の17ページでしょうか?
<<342
うつして試してみましたが私の所では0返ってきませんでしたよ。
<<343
プロンプトに戻るということです。何かわかりますか?
0347Kusakabe Youichi
NGNG> どこを見ても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デフォルトの名無しさん
NGNG23人目のKusakabeと認定されました。
0349デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNG23人ってあまりにも多すぎるし、そもそも奴はこんな論調を展開するまい。
CP/Mの話をも視野に入れた(でもいちいち言葉には書かない)話になるはずだ。
認定撤回を要求する。
要求は公開されるのだろうか?(w
23人目のハリーポッター?
0351ポン酢
NGNG>EOFがCtrl+Zなわけではありません。
>(それが証拠に行の最初以外のところでCtrl+Zしてみればよい(傍証にしかならんか))
試してみました。
C:\c>eof←実行して
kno←適当に文字を打ってここでCtrl+Zを入力すると
C:\c>←この状態になって
C:\c>eof←もう一度実行すると
EOF=0←これが表示されました。
どういうことなのでしょう?0は出てくれたのですがわけがわかりません。
0352デフォルトの名無しさん
NGNG>>348は22人目のニセモノって事だよ。
0353ポン酢
NGNGCtrl+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は気にしないで下さい。
1、printf は必ずしも即座に結果を出す訳ではないです
2、結果をフラッシュせずに終ったら出力されない場合がある事
3、実際に出力させるには \n を送るか fflash で
0358デフォルトの名無しさん
NGNG昔某UG掲示板に論理粘着したあげくに絨毯爆撃で消された、あのvoid氏と同一人物なのだろうか・・・
0359デフォルトの名無しさん
NGNG0360デフォルトの名無しさん
NGNG0361デフォルトの名無しさん
NGNGhttp://www.nurs.or.jp/~nspixp/void/index.html
爆笑。
0362デフォルトの名無しさん
NGNG適当におちょくって遊ぶのが一番だで
0363ポン酢
NGNG私の環境はWin98です。
ちなみにコンパイラはVC++6.0のやつです。
Ctrl+Zにアンドゥが割り当てられているのが原因だと思うのですが。
違うのでしょうか?
これは コンソール入力にctrl+Zが入力される事で コンソール出力も閉じてしまう
問題で、試しに そのアプリをリダイレクトしてみたら?
例えば test.exe だとしたら
test. >temp.txt として
ctrl+Z を入力してみればちゃんと出力される筈
0365デフォルトの名無しさん
NGNG何もしなくてもUNDOの機能が組み込まれると思ったら大間違いだ。
0366ポン酢
NGNGリダイレクトしたら0でました。
0367ポン酢
NGNGCtrl+ZやEOFをキーワードにGoogleで検索して軽く回ってみた
のですがどのページもこの問題について触れてないのが不思議です。
0368デフォルトの名無しさん
NGNGLinuxに載せ換えなければならなくなりました(泣)
大変にお行儀の悪いプログラム達で、ネットワーク経由のデータをntohl,hs
なんて一切せずそのまま使ってたりします。
バイナリで書き込んである大量のデータファイルもあるのですが、1・2・4
バイト混合の構造体(穴埋めくらいはしてありますが)+ご丁寧にビットフィ
ールドも使いまくっているのですが、これらを一気に変換する仕組みはないで
しょうか?
地道に見つけて一行ずつ直していくほかないのでしょうか?
だいぶ数があるので、もうメゲているので、どなたかのお知恵を拝借させてい
ただきたく。
ハードやbios叩いてたから深く考えなかったなあ・・・・スマン
>368 ご愁傷様
思いつくのは
1、そのサーバマシンがある間に、その構造体を読み書きする部分を直接から
ハンドリング関数で読み書きするように変更
例えば getDataHoge(フィールド名) みたいな感じね フィールド名はenumで定義
2、その後linuxに移す
という事くらいかなあ
0370ポン酢
NGNGいろいろありがとうございました。
0371デフォルトの名無しさん
NGNGどうもありがとうございます。
UPのOSに依存する部分を確認して一行ずつ直すのにメゲているので
部分的でも良いのでさっと変換できるような仕組みがあったらいいなー
と、虫の良いことを考えているのですが…ないですかねぇ?
64bitマシンでしたっけ? int も64bitですか?
そしてエンディアンは同じですか?
エンディアンが同じなら構造体の intとかをint64とかに変名して一挙に
修正すればスムのでしょうけど
0373371です
NGNGUPはMIPSで、R10000シリーズを使ってます。
32ビットですね。
多少癖はありますが、ごく普通のUNIXマシンだと思いますよ。
固定資産償却済みの化石のようなマシンだとR3000もあります。
#さらにゴミのような扱い(現役ではあるんですね、なさけない…)の
#古い古いUP(正確にはUPではなくEWS4800ですが)386もあります。
0374デフォルトの名無しさん
NGNG0375372です
NGNG教えて君ですみません、もう少し教えて貰えませんか?
UP4800上のプログラム、データ->Linuxへ移植する際にMIPSマシンだとリトルエンディアン
にしておわり、ってどういう意味なのでしょうか?
CPUそのものがエンディアン変換を行ってくれたり、特別な命令を使うと86系と同じエ
ンディアン/パディングを行ってくれるのですか?
0376デフォルトの名無しさん
NGNGhttp://www.google.com/search?q=MIPS+R10000+64ビット&hl=ja&lr=lang_en|lang_ja
0377376
NGNGちゃんとマシン/OSの仕様確認した方が良さそうだね。
fileコマンドとかである程度わかると思う。
0378デフォルトの名無しさん
NGNGほとんど嫌がらせだよな...
0379デフォルトの名無しさん
NGNGポインタは?
0380デフォルトの名無しさん
NGNGIA-64はそれと同じで、ポインタも64bitですが、何か?
0381デフォルトの名無しさん
NGNGSection 1.5 Character input and output 17
is an expression .....以下略
日本語版は21Pね
0382デフォルトの名無しさん
NGNG8バイトも使えるなら好都合じゃない。
0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNG0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNG0387デフォルトの名無しさん
NGNG0388デフォルトの名無しさん
NGNGやねのHPに書いてあった。
でもWindows上ではNULL==0が保証されてるよ。
0389デフォルトの名無しさん
NGNGだれが保証してんねん。
0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNG厳密に言うと、
「NULLが再定義されてない場合、式”NULL==0”を評価すると1になる。」
ってところでしょうか?
これ、何度も繰り返される話ですよね。
0393デフォルトの名無しさん
NGNGほう?"Windows"が保証しているのか
# VC++ではなくて
0394デフォルトの名無しさん
NGNGといってセメントなんです、固まるものなんです。
固まらないほうがおかしいくらい。
0395デフォルトの名無しさん
NGNG∴Windowsも保証。
0396デフォルトの名無しさん
NGNG>ていうかWindowsのAPIがNULL==0として扱ってる。
それとこれとは話がちがうような。
0397デフォルトの名無しさん
NGNGWindowsがそれを前提としているだけだRO
0398デフォルトの名無しさん
NGNGp=realloc(p,size);
やっちゃったよ。
メモリが確保されないで1時間悩んだよ。
0399デフォルトの名無しさん
NGNG0400デフォルトの名無しさん
NGNG0401デフォルトの名無しさん
NGNGできるのか?
0402デフォルトの名無しさん
NGNG0403デフォルトの名無しさん
NGNGありますか?
0404デフォルトの名無しさん
NGNGDelphiもC/C++と同じ程度に絶対番地にアクセス出来るし
VBでも多少は出来るよ
0405デフォルトの名無しさん
NGNGPascalにもポインタはあるが、“絶対番地”ってなんだろうね。
言語仕様とOS依存な話と混ざってないかい。
0406デフォルトの名無しさん
NGNGfp = fopen("hoge.txt", "a");
strcpy(a, "abc\n");
fputs(a, fp);
fclose(fp);
てなプログラムで、このときhoge.txtの後ろに文字列"abc\n"が追加されますが、
先頭に追加するようにできる、上手い方法はないですかね…?
1回ファイルの中身を全部読み出さないとだめなんでしょうか。
ヘタレな質問でスマソ
0407にせ1
NGNGどういう条件でかくの?
0408406
NGNG"1234\n"
だとして、>>406のプログラムを実行するとhoge.txtが
"1234\nabc\n"
ってなりますよね?
それを
"abc\n1234\n"
となるようにしたいのです。
…わかりづらかったらスマソ
0409406
NGNGFILE *fp;
char a[4];
としてます。
0410デフォルトの名無しさん
NGNG変数にアドレスとデータの概念(ポインタ)があり
アドレスの演算ができるのはC系統の言語だけ。
0411デフォルトの名無しさん
NGNGなんか格好良い言い方だな。
「410さんのレスがもらえるのはこのスレだけ!」
しかしC系統の言語ってのは、大雑把なくくりだな。
アセンブリは?
言語違うとか返されそうだ…
0412410
NGNG>>411
アセンブラはあって当たり前と思うのであえて書かんかった。
というかそれが無いものはもはやノイマン型コンピュータではないと思う。
0413デフォルトの名無しさん
NGNG0414デフォルトの名無しさん
NGNG配列をそっくりコピーして渡したいなら、構造体に埋め込んじゃえ。
0415ネタではありません
NGNG0416デフォルトの名無しさん
NGNG> ・・・ディスクフルってなに?
Cと関係あるのかな?
1.44Mのフロッピーディスクに2Mのデータを書き込もうとすると
発生する現象のことだ
0417
NGNGファイルは、 "a" または "a+" のアクセス種別で開くと、
すべての書き込み操作がファイルの終端から行われます。
ファイル ポインタは fseek 関数または rewind 関数で移動できますが、
書き込み操作を実行する前に必ずファイルの終端に戻されます。
したがって、すべてを読み出すしか方法はありません。
0418デフォルトの名無しさん
NGNGアセンブリ == 低級言語
0419415
NGNGどうもありがとう。
0420Kusakabe Youichi
NGNG自分は天才とは言いませんが、ここに来るのは子守みたいなもんです :)
0421デフォルトの名無しさん
NGNG「C の超難しいことなら漏れに聞け」スレでいってください
0422デフォルトの名無しさん
NGNGどうにも理解不能な個所があるんです。
sprintf(wrkbuf, "%s%c", snddata, i["$#!"]);
i["$#!"]って、これはなに?
iはただのintで配列でもなんでもないのに。
しかも配列のインデックスが文字列!?
動いてるからいいんだけど、気持ち悪いよぉ。
0423デフォルトの名無しさん
NGNG0424デフォルトの名無しさん
NGNGCの[]演算子は実は交換法則がなりたつ。
だから"$#!"[i]と意味は一緒。(それでも俺はこんなソースキモくて嫌いだが)
しかしソンナコトほとんどだれも知らないし普通知る必要も無い。
その先輩のささやかな置き土産かも。
トロイやウイルスでなくてよかったな。
0425日下部圭子
NGNG> 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何がです?
0427デフォルトの名無しさん
NGNGできるよ。
0xA800
0xB000
0xB800
0xE000
のセグメントがそれぞれ青、赤、緑、輝度になってるから
てきとーに書き込むのさー。
君にならできるさー。
0428デフォルトの名無しさん
NGNGゴメソ…。
俺も面白がってやってる…。
0430428
NGNGってやるとどうも頭でっかちで気に入らない。で、
n["0123456789ABCDEF"];
って、やったり…。
0431名無しさん@お腹いっぱい。
NGNG0432名無しさん@お腹いっぱい。
NGNG0433名無しさん@お腹いっぱい。
NGNG一応defineされてないか確認しても良いカモ
因みにPerlでは配列の最後の要素を指す添え字です -> $#
0434422
NGNGや、ども。defineじゃありませんでした。
Perlとも関係ありませんでした。
たぶん先輩はこれ書いてる時にもうやめるつもりで、
僕に試練を与えてくれるつもりだったのでしょう。
0435デフォルトの名無しさん
NGNG0436デフォルトの名無しさん
NGNG0439デフォルトの名無しさん
NGNG>変数にアドレスとデータの概念(ポインタ)があり
>アドレスの演算ができるのはC系統の言語だけ。
Delphiにもあるし、出来るけど?
var p:^byte; とポインタを定義して
inc(p,10); で p=p+10 相当の事も出来るよ
absoluteを使ってアドレスそのものを割り当てる事さえ出来る
0440デフォルトの名無しさん
NGNG0441あぼーん
NGNG0442デフォルトの名無しさん
NGNGネズミ講か。貴様は死ね。
0443デフォルトの名無しさん
NGNGint command(char cmd)みたいな感じで
関数の処理を分けるのを作っているんですが、
while(flag)
{
cmd=getchar();
flag=command(cmd);
}
とすると、getchar()の値が、最初に入力した値のまま
cmdに代入されるんですよ。
なにかうまい解決方法はないですかね?
0444追加(443)
NGNG0445デフォルトの名無しさん
NGNGの後に、
fflush(stdin)
を入れてみてください。多分うまくいくはずです。
標準入力の内容をフラッシュするのです。
0447デフォルトの名無しさん
NGNG解決できそうです。
0448デフォルトの名無しさん
NGNG読んどいたほうがいいかも。
結論をいってしまうと、処理系依存な方法を使うしかない。
fflush(stdin)かrewind(stdin)あたりのどれかしらは多分使えるので、
どれが使えるかライブラリリファレンスをチェック!
0449デフォルトの名無しさん
NGNG0450名
NGNG0451デフォルトの名無しさん
NGNGやっぱ年寄りは早起きなんだな。
0452デフォルトの名無しさん
NGNGすがこの前
#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ネタですか?
0454デフォルトの名無しさん
NGNG>char a;
はメモリを一文字分しか確保してない。
そこに文字列を入れることはできないのです。
char a[256];
のような感じにしましょう。
あと 'd' を意味しているのなら 100 と書かずに 'd' と書きましょう。
つか、ちゃんとCの本読みましょう。
0455デフォルトの名無しさん
NGNG自力で解決できるかどうかが、試金石になるでしょう。
0456デフォルトの名無しさん
NGNG手元にCの本はない?
0457455
NGNG0458デフォルトの名無しさん
NGNG0文字分(+NULL終端)しかない領域に、
それ以上の文字列を突っ込んでいるから。
0459デフォルトの名無しさん
NGNG問題なのはこれでしょ
>char a;
>scanf("%s",&a);
0460デフォルトの名無しさん
NGNGあんたが( ゚Д゚)ハア?
それがまさに1バイト(=char)に文字列突っ込む行為でねーの?
0461デフォルトの名無しさん
NGNG問題なのはこれでしょ
>char a;
>scanf("%s",&a);
以下永遠に続く。
0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNGあとは鼻から出た悪魔に気がつくのが5文字目入れてからだって事かも。
0464デフォルトの名無しさん
NGNGfor(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デフォルトの名無しさん
NGNGscanf("%s", a);
だ、100バイト以上入力したら鼻悪魔だけど。
0466デフォルトの名無しさん
NGNGと思われ。
0467デフォルトの名無しさん
NGNG> char a;
> scanf("%s",&a);
char a[1];
scanf("%s",a);
1バイトに文字列突っ込む=これと同意だろ?
と言いたいのですが。
それとも俺が根本的におかしな事逝ってるのか、461さんよ?
0468デフォルトの名無しさん
NGNG100と比較しているのは、454さんも言っているように
for(int i = 0;b[i] != 'd';i++)
と同意だと思われ。
“dまでの字数…”と書いてある~から。
これだとNULL終端見てないんで、
for(int i = 0;(b[i] && b[i] != 'd');i++)
か。
ただしコレだと'd'が存在しない場合のことはしらん。
文字列を格納する領域が必要なことは既に多くの方が説明されているので省略。
0469デフォルトの名無しさん
NGNGそれだ!
ああ、すっきり。
0470ひよこ名無しさん
NGNG>1バイトに文字列突っ込む
この仕様を満たそうとして
> char a;
> scanf("%s",&a);
なんだな。おっしゃるとおりだ。
ただ、仕様の時点でバグがある。
0471461
NGNG>>459 >キミもなんかおかしな事言うね。
というほど根本的な違いがあるのかね?
もちろん、>>452のレベルにおいて、だが。
>>458も>>459も指摘してる場所は同じだろ、といいたい。
ま、おれがとんでもない勘違いをしてるのなら、指摘されたいと切に願う。
0472デフォルトの名無しさん
NGNG文字:.
文字列:.*\0
1bitで文字列を表現できるのは空文字列だけ。
0473デフォルトの名無しさん
NGNGバッファ確保さえすれば、いいじゃん。
0474デフォルトの名無しさん
NGNGどこがおかしいのかはすぐに気がつくだろう、という意味では、大きな違いがありそうだな。
0475デフォルトの名無しさん
NGNG>charの変数と、要素数1個のcharの配列とは根本的に違う
よく分からない、マジで教えて下さい
0476デフォルトの名無しさん
NGNGデータ型(変数型ではない)が違いますよ。
0477デフォルトの名無しさん
NGNG> >>459 >キミもなんかおかしな事言うね。
> というほど根本的な違いがあるのかね?
あぁ!?
“キミもなんかおかしな事言うね。”
ってのは俺のカキコじゃねーよ。
459のカキコだ。
0478デフォルトの名無しさん
NGNGと
printf("%c",a);
の違い?
0479デフォルトの名無しさん
NGNGその認識、非常に危険だがまぁ、その違いでもある。
&は何をするものか知ってるか?
0481デフォルトの名無しさん
NGNGスマソ
459=461で、コピペで煽り返されたと思った。
俺の根本的考え違い、鬱氏。
0483デフォルトの名無しさん
NGNGc = getc(stdin)) >= 0
で文字"a"を読み込むと、cには97が入る。
何で?
0484デフォルトの名無しさん
NGNGあってるじゃん
0485デフォルトの名無しさん
NGNG何でって・・・当たり前だろ。
0486483
NGNG0487Riva ◆RivaByXA
NGNGファイルからは8bit固定長のデータを常に読む。
JISコードの場合、int型で変換すると10進数で127までの
数になる。
つまり、aという文字は00110001と表されている。
これを10進数にすると97。
0488名無し募集中。。。
NGNGどういうとき引数にconst使えばいいの?
04891じゃないけど
NGNG関数のなかで、読取専用にしたい変数につかう。
もし変更すると、コンパイラに怒られる。
0490Riva ◆RivaByXA
NGNG引数を定数式として使いたい場合。
つまり、プログラムを通して値が変わらないような場合に使う。
プログラムにおいて、値を変更したい時は宣言部の値を
変えればいいことになる。
0491名無し募集中。。。
NGNGポインタ変数にconstつけると、何が読み込み専用になるの?
0492名無し募集中。。。
NGNGそれだと、#define とどう違うの?
0493デフォルトの名無しさん
NGNGやっと謎が解けた。
完璧理解しました。ありがとう
0494Riva ◆RivaByXA
NGNG同じ定数に置き換わる.適用範囲はプログラムソース全体。
constの適用範囲は#defineより狭い。
外部関数の中で宣言すれば、外部関数の中でしか役割を果たさない。
ポインタ変数も,実数であらわされる。
その値が変わらないことを意味する。
0495489
NGNGconstは直後の語にかかる。
const int *a;は値の代入はできないが、ポインタの代入は可
int const *b;は値の代入はできるが、ポインタの代入は不可
ひょっとして、Cじゃなくて、C++の話題になってきたかもしれないのでsage
0496495
NGNG0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNGb=6
c=a+b
d=a-b
write(*,*) a,b
write(*,*) c,d
write(*,*) a*b,a/b
end
みたいなプログラムをするには、
どんなソフトが必要ですか?
0499デフォルトの名無しさん
NGNGconst int *a は int const* a と同じ。
ポインタを const にするには int* const a とする。
0500デフォルトの名無しさん
NGNG多分、きみにはそのプログラムを作ってくれる人が必要だね。
0501498
NGNGまぁこんな感じの、ってことで。
FORTRANプログラムって言うんでしょうか。
何を使ってプログラムを実行するんですか?
0502デフォルトの名無しさん
NGNG何かカワイいから教えてあげたいが、訳和歌蘭
FortranでもCでも良いからコンパイラが有れば
>>498みたいなソースから実行可能なコードを生成出来る。
コンパイラはフリーで沢山有るから探してくれ
0503デフォルトの名無しさん
NGNGWindows98以降をつかっているなら、
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デフォルトの名無しさん
NGNG0505498
NGNGコンパイラを手に入れました。
なんですが、498をそのまま使ったら「宣言の構文エラー」って言われました。
> 498みたいなソースから実行可能なコードを生成
とはどうやるんでしょうか。
0506498
NGNGありがとうございました。
0507デフォルトの名無しさん
NGNGここは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;
}
0508hage
NGNG0509a
NGNGアメリカ東部時間 (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デフォルトの名無しさん
NGNGcase1:
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デフォルトの名無しさん
NGNGdouble f(double x);
h(r,x,f);
0512デフォルトの名無しさん
NGNGおお、素早いお返事有難う御座います。そんな使い方があったんですね。
今まで、関数ごとに同じようなhにあたる関数を幾つも作ってた(か、配列を引数にしてた)
のですが、これでスマートになりますです。
0513デフォルトの名無しさん
NGNGhage!
コンパイラ持ってない人おすすめかも!!
Microsoft Visual Studio 6.0 Professional edition アカデミック日本語版
0516Riva ◆RivaByXA
NGNGMFCをやらないなら、MVS6.0はあまりおすすめできないかも。
MVSでコンパイルできるソースがgccでエラーになったりと、
初心者にはとっつきづらい。
0517510
NGNG無い頭を振り絞って教えてもらったことを試してみました。
とりあえず、次のようにすればコンパイラは通り、実行結果も手計算と一致しました。
(一応、僕と同レベルの人のために結果を載せときます)有難う御座いました。
#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);
}
0518510
NGNGすみません。
h(x,&f)の&はいりませんね。
0520超初心者
NGNG0521デフォルトの名無しさん
NGNGVCのintで-1はなんで0xffffffffなのかがわかりません。
負数の先頭バイトが1なのなら0x80000001じゃないんですか?
0522デフォルトの名無しさん
NGNG0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNG| だれかボケて |
|____ ____|
∧,,∧ ||
⊂ミ.,,゚Д゚彡つ
0525デフォルトの名無しさん
NGNG0526525
NGNG0527デフォルトの名無しさん
NGNG別にVCに限ったことじゃない。
なぜ0xffffffffになるかは、
1+(-1)=0 なことを考えればわかる。
0x00000001 + 0x80000001 = 0x80000002
では、-2になってしまうだろ?
0528デフォルトの名無しさん
NGNGそんな表現したら(-1)+1を計算するときにめんどくなるだろ。
0529528
NGNG0530デフォルトの名無しさん
NGNG0531521
NGNG正数表現で先頭バイトに1を付するんじゃなくって。
先頭バイトが1の場合は負数なんですよっていうだけなんですね。
根本的にそこを勘違いしていました。
-1は
0x00000001を反転させて0xfffffffeにしたあと0x00000001を足して
0xffffffffということなんですか。よく分かりました。いつ忘れるかわからないけど(w
0532デフォルトの名無しさん
NGNG小さな突っ込み大きなお世話だろうけど、
“先頭1バイト”ではなく“先頭1ビット”ね。
0533ちいさな疑問(たぶん)
NGNGプログラムがスタートするのですか?
0534デフォルトの名無しさん
NGNGトラクタだったのだ!!・・・などというオレはやっぱりバカですか?
0535デフォルトの名無しさん
NGNG簡単にいうとこうだから↓
_start( ){
main( );
exit( 0 );
}
0536デフォルトの名無しさん
NGNGwhile(gets(buffer) != NULL) {
}
これだと一生ループから抜けられないんですが、間違ってますか?
0537デフォルトの名無しさん
NGNGセミコロンが無い。
0538デフォルトの名無しさん
NGNGgetsってNULLなんぞ返したか?
0539デフォルトの名無しさん
NGNGあーごめん。セミコロンはちゃんと付いてます。
>>538
getsが悪いんですかね?
0540デフォルトの名無しさん
NGNG実行環境は何よ?
Windows系なら Ctrl+Z と [Enter]、
Unix系なら Ctrl+D を入力したらループ抜けると思うぞ。
0541デフォルトの名無しさん
NGNGWin98です。Ctrl+Zで確かに抜けられました。ありがとうございます。
こういう仕様にしたのかな…ふむ。
0542デフォルトの名無しさん
NGNG> こういう仕様にしたのかな…ふむ。
誰に逝ってんの?
独り言はキモイからヤメテ
#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が意図した動作だろう。漏れはscanfはおすすめしないが。
man scanfしる!
0545510
NGNG#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と思われ。
0547デフォルトの名無しさん
NGNG0548510
NGNG#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は別物ということになるのでしょうか?
他にもコンパイラを通るものはあったのですが、症状は同じです。
全部とは言いませんが、ヒントを下されば嬉しいです。
0549510
NGNG早速試してみます。というか、言われてみればそうですね。
間抜けでした(^_^;)
0550デフォルトの名無しさん
NGNG0551デフォルトの名無しさん
NGNGdouble k(double x);に対して、
scanf("%lf",k);
は無いとおもうんだけどな。
char buf[255];
fgets( buf, sizeof( buf ), stdin )
printf("%lf",buf[0]=='f' ? f(x) : g(x));
ふつー、こんな感じやないか。
0553デフォルトの名無しさん
NGNGstruct 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");
0554533
NGNG次に飛ばされてしまい、使い物にならなくなってしまうのです。良い解決法を
おねがいします。
0555510(アホでスマソ)
NGNG有難う御座いました。そのまま試してみたら見事目的が叶いました。
あと、当然ですが
char a;
scanf("%c",&a);
printf("%lf",a=='b'?f(x) : g(x));
としてbと入力しても2.000000と出ました。
よく考えたら、別に関数そのものをscanfに渡してやろうとする必要は
全然なかったですね。
0556510
NGNGそうだったのですか、これですっきりしました。
0557533
NGNG#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別の関数を使ってください。
0559533
NGNG0560533
NGNG0561デフォルトの名無しさん
NGNGOKですよ。保存形式(または読み出し処理)は変更しなきゃいけないけど。
0562560
NGNGどのように変更したらいいのでしょうか?
いろいろやってみたのですが、どうもうまくいかなかったのです。
お手数ですが、なにとぞよろしくおねがいします。
0563デフォルトの名無しさん
NGNG構造体の定義は別に変なとこありませんよ。
あえていうなら、読み込みの
while(fscanf(run,"%s %d",lot[i].name,&lot[i].no)!=EOF){
の&lot[i].noは&(lot[i].no)とするか、lot[i].&noとしないと
だめかもしんない。
0564デフォルトの名無しさん
NGNGありがとうございます!
さっそくためしてみます。
0565デフォルトの名無しさん
NGNGたとえば、書き込み
sprintf(s,"%s,%d",name,no);
fputs(s,fp);
読み込み
fgets(r,30,fp);
rを加工(","を一文字ずつ調べてもよいし、token系の関数で分離していい)
で、noのほうはatoiで数値に戻すとか。
あくまで、例ね。もっと効率いい方法があるかもしんない。
0566デフォルトの名無しさん
NGNGsprintf(s,"%s,%d\n",name,no);
こうしないと、読み込み失敗するな。
0567デフォルトの名無しさん
NGNGperlなら死ぬほど簡単にできるんだが(ワラ
0568デフォルトの名無しさん
NGNGCでおねがいします。
0569デフォルトの名無しさん
NGNG0570568
NGNG0571デフォルトの名無しさん
NGNGあるみたいですけど、具体的にどういった型なのか教えてもらえますか?>>1
0572デフォルトの名無しさん
NGNG1じゃねーけど、includeディレクトリにあるwindef.hを見れば分かる。
typedef unsigned long DWORD;
0573510
NGNG宿題は自分でやれ
0574デフォルトの名無しさん
NGNGってなんじゃ
0575デフォルトの名無しさん
NGNG難しい?
0576デフォルトの名無しさん
NGNG先生、どうやれば実現できますか?cryptが使えないんです。
0577デフォルトの名無しさん
NGNGハッシュでも使っとけ!
0578デフォルトの名無しさん
NGNG“ハッシュ”って普通、一方向の変換でないの?
復号化できない変換を暗号化と呼ぶのでしょうか?
0579デフォルトの名無しさん
NGNG関数側の引数のところは、structって付けないとだめなんでしょうか?
というか、つけたらコンパイル通ったのですが。
なんといったらいいか。FILEの構造体ならstructはつけなくても渡せたのに、
自前で作った構造体の場合は、structをつけないとだめか?ってことです。
0580510
NGNGここのこと?
http://www.catnet.ne.jp/kouno/c_faq/c2.html#0
0581デフォルトの名無しさん
NGNG良い機会なので、includeファイルを覗くという行為を覚えましょう。
includeファイルはいくら覗いてもタイーホされません。
stdio.hを見ればわかるとおり、
typedef struct
{
...
} FILE;
と typedef されているので、structが不要なのです。
0582デフォルトの名無しさん
NGNGこの部分かな・・・。VC6.0<stdio.h>
>>580-581
Thanx!!
typedefの意味が分かった気がしました。
なるほろ。
0583デフォルトの名無しさん
NGNG暗号化と呼ぶかどうかは知らんが、crypt も復号できない。
0584デフォルトの名無しさん
NGNG先生!一方向性関数は勘弁してください。588さんの言うような可逆的な暗号がいいんです。
バイナリファイルで保存みたいな方法もあるらしいのですが、一体全体どうやるのですか?
ごーやほしてもわかりません。
0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNGdoubleからcharはどうすればいいでしょう?
MSDNのどこかに書いてあるのでしょうか。。。ふむぅ。
0587デフォルトの名無しさん
NGNG0588510
NGNGよく分かりませんがここのことでしょうか?
http://www.catnet.ne.jp/kouno/c_faq/c13.html#0
0589デフォルトの名無しさん
NGNG0590510
NGNG0591デフォルトの名無しさん
NGNGすんませんでした。逝って来ます・・・
鬱だ。
0592デフォルトの名無しさん
NGNG罵倒される前でほんとによかった。
0593デフォルトの名無しさん
NGNG0594デフォルトの名無しさん
NGNGこれ、たいした事なくない?
むっかしから、出てるみたいだけどさ〜
当時にしては画期的だったかもしんね〜けど。
0595デフォルトの名無しさん
NGNGROT13 でもすれば?
0596デフォルトの名無しさん
NGNGさっさとC++の勉強でも始めれば?
0597デフォルトの名無しさん
NGNG0598デフォルトの名無しさん
NGNG昔と言うけど、昔の人を馬鹿にしては駄目だよ!
君にピラミッドの建設が出来るかい?
僕らは人生の半分を勉強と言う名の過去の偉人の後追いに費やしてるんだよ!
君もそんな人になれればイイネ!!
またまた出てるよアカデミパック!!
開封済みってもしかしてあれか?コピしてあれしてるのか?(わら
0600デフォルトの名無しさん
NGNG例えば
struct type val[10];
と、定義した構造体の配列変数valを配列全部を
別の関数に渡す方法あるでしょうか?
return (val[10]);
で全部渡せるんでしょうか?
0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNG一体何が悪いのやら・・・。
Stack Overflowって何?
例外処理 (初回) は 00.main.exe にあります: 0xC00000FD: Stack Overflow。
0603デフォルトの名無しさん
NGNGstr〜〜の使い方を見直せ
http://u-tokyo.www.linux.or.jp/JM/
0604デフォルトの名無しさん
NGNG{
struct type val[10];
};
で、このval_10を渡すとか。
#それが正しい設計かは別問題だがね。
0605602
NGNG見直すというか見たこと亡いんですけど・・・。
0606デフォルトの名無しさん
NGNGでもそれじゃ分からんよ。
そのエラーの意味はつまり
スタックがオーバーフローしたって事だ
書き込んじゃ行けない所に書き込んじゃってるの
本買え
0607日下部圭子 ◆ib749tYo
NGNG> Stack Overflowって何?
再帰のバグかaotoで大きな配列を使っているかのどちらかでしょうね。
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0608デフォルトの名無しさん
NGNGこういうこと?
#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;
}
0609608
NGNGめちゃくちゃ汚くなってしまった・・・
0610602
NGNGデバッグすると
test dword ptr [ecx],eax ; ...probe it
っていうところに→が出るんですけど、何なんでしょう?
そもそもこのページは何なのでしょう?
0611602
NGNG再帰のバグってどんなのですか?
0612デフォルトの名無しさん
NGNGコールスタックを表示しろ。
0613日下部圭子 ◆ib749tYo
NGNG> 再帰のバグってどんなのですか?
キーワードを教えてもらったら、とりあえず検索でもしてみましょう。
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0614デフォルトの名無しさん
NGNGfunc();
}
main(){
func();
}
0615デフォルトの名無しさん
NGNGスタック領域が消滅するのは時間の問題だなw。
0616デフォルトの名無しさん
NGNG0617デフォルトの名無しさん
NGNG簡単なプログラムを作ることは可能ですか
0618デフォルトの名無しさん
NGNG最適化されるもんなのかねぇ。
0619デフォルトの名無しさん
NGNGテラパットはいらない。
0620デフォルトの名無しさん
NGNGscanf使わないで数字を取得したいのですが。
0621日下部圭子 ◆ib749tYo
NGNG> 数字をfgetcで受けると代入された数値がおかしくなるんですが、何でですか?
> scanf使わないで数字を取得したいのですが。
fgetc()は文字を一文字ずつしか受け取れません。
int n;
scanf("%d", &n)
のような数字を受け取るような使い方はできません。
fgets()とsscanf()の組み合わせを使いましょう。
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0623デフォルトの名無しさん
NGNG0624デフォルトの名無しさん
NGNGGlobalAlloc・LocalAlloc・VirtualAlloc・malloc
のそれぞれの違いがよー分からん(゚Д゚)
詳しく知ってる人教えてYO
0625デフォルトの名無しさん
NGNGエンジェル・ハートという本に
M もっこり
F ふらいんぐ
C きゃっち
ってかいてあったんですけど
0626デフォルトの名無しさん
NGNG0627デフォルトの名無しさん
NGNGだいたいそんなもんです
0628デフォルトの名無しさん
NGNGterapadだろ?メモ帳よりはマシ
0629デフォルトの名無しさん
NGNG0630デフォルトの名無しさん
NGNG言うと思った
0631デフォルトの名無しさん
NGNGerror LNK2001: 外部シンボル "_function" は未解決です
fatal error LNK1120: 外部参照 2 が未解決です。
って出てるんですけど、どう違うのでしょう?
それに、こういう場合どこを直せばいいのでしょう?
0632日下部圭子 ◆ib749tYo
NGNG> って出てるんですけど、どう違うのでしょう?
> それに、こういう場合どこを直せばいいのでしょう?
ヘルプに詳しい解説があります。
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0633デフォルトの名無しさん
NGNG_function
っていうのがソースに書いてあったんでさがしたけど、どこにもねーぞボケ
状態だと思う。
0634デフォルトの名無しさん
NGNG実装を忘れてるバヤイが多い
0635デフォルトの名無しさん
NGNGVC++なら、純粋仮想デストラクタではまってるとか。
0636デフォルトの名無しさん
NGNG盲目的にscanf()を嫌うのもどうかと思うが。
if (scanf("%d", &n) != 1) {
error(); // とか
skipline(stdin);
}
すればいいだけだろう。
0637日下部圭子 ◆ib749tYo
NGNGそれでは[123a5]のような入力の時に困るでしょう。
(入力のミスを検出できない)
いろいと工夫すれば、scanf()もつかえるかもしれませんけど、
それなら一行ごとに入力を受け取ってバッファ上で
あれこれ操作やチェックをしたほうがずっと楽です。
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0638デフォルトの名無しさん
NGNGscanf("%d%", &n) == 1 && getchar() == '\n' とか
scanf("%d%*[^\n]", &n) == 1 とかいろいろできるし、
要するに使い方をちゃんと考ろってこと。
0639デフォルトの名無しさん
NGNG無条件にscanf()使うな!っていうのはどうかとは思うけど、
ここは「Cの超カンタンな…」やからねぇ。
ここで質問するような初心者にたいしてなら、
考慮すべき点の多いscanf()は使うな、
と言いきるのもありではないでしょうか?
0640日下部圭子 ◆ib749tYo
NGNG> scanf("%d%", &n) == 1 && getchar() == '\n' とか
> scanf("%d%*[^\n]", &n) == 1 とかいろいろできるし、
エラーの場合ストリームの読み飛ばしが必要だったり、
変な入力がエラーにならなかったりしますね。
> 要するに使い方をちゃんと考ろってこと。
初心者に使わせるのにはくせが強すぎると思いますよ。
(上記のようにいろいろ工夫が必要だし)
よく言われているように、fgets()でやったほうが簡単でしょう。
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0641デフォルトの名無しさん
NGNGホテル行きましょう!ホテル!
そしてあんなことやこんなことしてくれませんか?
0642デフォルトの名無しさん
NGNG0643380
NGNGarray配列から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要素の大きさも引数として渡す。
あと、voidポインタにdelete演算子使うなよ。
しかしdelete使ってるという事はC++か?
C++ならtemplate関数で書け。
0645デフォルトの名無しさん
NGNGヘッダとかどう書けばいいのか。。。
0646デフォルトの名無しさん
NGNG外部から参照するものはヘッダファイルに出す。
内部に隠蔽したいものはソースファイルに書く。
templateやinline関数はヘッダファイルに出す。
0647デフォルトの名無しさん
NGNG簡単なクラスを作りたいんだけど、
メソッドの実装含めてヘッダに書けばいいのかな?
0648デフォルトの名無しさん
NGNG0649デフォルトの名無しさん
NGNGopendir(DIR,$dir);
@files=readdir(DIR);
closedir(DIR);
はCではどのように書けばいいですか?
readdirみたいな関数があるんでしょうか?
0650日下部圭子 ◆ib749tYo
NGNGUnix系ならopendir,readdir,closedirで。
Windows系なら、FindFirst,FindNextで。
詳しくは検索してください。
----------------------------------
||//
(@_@) Kusakabe Keiko
----------------------------------
0651デフォルトの名無しさん
NGNGopendir(),readdir()はない。
かわりにfindfirst(),findnext()でディレクトリ内を
順にスキャンしてエントリを見てゆく方法が用意されている。
0652デフォルトの名無しさん
NGNGすいません。返答ありがとうございます。
FAQレベルとは分かっていながら手掛かりがつかめなくて困っていました。
それじでは、がんばります。
0654644
NGNGArrayNumというのがそれです。
最終的にでてくる配列は渡した配列より要素が1つ少なくなるので
for (unsigned int i = ReduceNum ; i < ArrayNum - 1;i++){
array[i] = array[i + 1];
}
としてみました。
>しかしdelete使ってるという事はC++か?
>C++ならtemplate関数で書け。
C++です。でもtemplate関数わからないです・・・。
perlなら簡単なのになあ・・・・せめて
任意の型の配列の渡し方がわかれば何とかなる気がするのですが・・
0655デフォルトの名無しさん
NGNGそのArrayNumは、要素の大きさではなく、要素の数では?
0656デフォルトの名無しさん
NGNGVectroクラスとか使うのは?
0657デフォルトの名無しさん
NGNGstd::copy(
&array[ReduceNum+1],
&array[ArrayNum],
&array[ReduceNum] );
でどうよ。
0658デフォルトの名無しさん
NGNGTArray* 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(ArrayNum);
0660七氏
NGNGとかって仮にしておいて
いろいろコーディングして
memset(String,'\0',RBUF)←なんでもいい
.
あとでバッファが足りなくなったなあ・
ッ手思って
#define RBUF 2000
とかってやると大抵落ちます。なんでなんでしょう・・?
0661御子柴
NGNGラブマとか書いてあるんですけど意味がわかりません。
おしえてください。
0662658
NGNG○ std::vector<TArray> array(ArrayNum);
寝ぼけてんな俺、そろそろ寝たい…
0663デフォルトの名無しさん
NGNG> #define RBUF 2000
> とかってやると大抵落ちます。なんでなんでしょう・・?
・2000でも足りてない
・どこかにバグがある
0664デフォルトの名無しさん
NGNGtypedef struct s{
char* str;
}ELEM;
こういう構造体があったとして、
ELEMをmallocでメモリ確保、strにもmallocでメモリ確保。
その後ELEMをfreeした場合、strは解放されずにのこってしまいますか?
0665デフォルトの名無しさん
NGNG> strは解放されずにのこってしまいますか?
YES、いわゆるメモリリークという状態ですね。
0666デフォルトの名無しさん
NGNGa=a++;
b=++b;
Cの規格では aは1、bは2になるんですか?
0667デフォルトの名無しさん
NGNG残るけど、終了すればきちんと解放される(はず)。
0668デフォルトの名無しさん
NGNGそれがいわゆるメモリーリークってヤツ。
プログラム内部で、ヒープからmallocで確保しているメモリの参照を
取得する(=freeする)手段がなくなると、プログラム終了までプログ
ラムがそのメモリの再利用が出来なくなる。
プログラムが終了すれば、プログラムがOSから確保したメモリはOSに
全部かえしてしまうので、すぐ終わるプログラムならメモリーリーク
は気にするが必要ない。サーバープロセスとかだったら、リークが
たまってくるとハングアップするとかになるので危険。
0669デフォルトの名無しさん
NGNGなんでこの手の質問は後を絶たないのだろう?
0670デフォルトの名無しさん
NGNGそれは「超カンタンなこと」ではとてもないので、ここで聞いては逝けない。
0671デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNGaもbも2だろ?
0673デフォルトの名無しさん
NGNGmalloc = マロック
calloc = カロック
0674デフォルトの名無しさん
NGNGcalloc = ころっけ
0675デフォルトの名無しさん
NGNG0676デフォルトの名無しさん
NGNGその発言は削除対象になります。
0677デフォルトの名無しさん
NGNG0678デフォルトの名無しさん
NGNG0679デフォルトの名無しさん
NGNG「やってみれ」が後を絶たないのは(以下略)
0680デフォルトの名無しさん
NGNGメモリアロケーション
0681デフォルトの名無しさん
NGNG> aもbも2だろ?
はい?正気?
>>679
> 処理系依存や未定義は、実行した結果を見て納得するの危険なんだが、
666が本気で聞いてるならどうにもならんDQNだろうが、
でも処理系依存や未定義って言葉が出てくる場面かね…
0682Cの馬鹿〜〜
NGNGなんで FILE *f とかで宣言するんですか?
FILE f とかはなんでだめなの?
0683デフォルトの名無しさん
NGNG大人の事情です。
あと、FILE“ポインタ”って自分で逝ってるでしょ?
FILE型のポインタです。
標準関数はファイルストリームを内部で管理してます。
fopen()を使うとその内部データへのポインタをもらえます。
そんな感じ。
0684デフォルトの名無しさん
NGNGえっと、質問です。
int a;
と
int *a;
の違いはわかりますか?
わかるのとわからないのでは、アドバイスの内容が変わってきますので。
0685デフォルトの名無しさん
NGNG教育工学的にすばらしい展開だな。
0686デフォルトの名無しさん
NGNGシーケンスポイントで検索してみろ、って言われたこと無い?
>>666 の式は、2つとも未定義だろ。
0688デフォルトの名無しさん
NGNG変換する関数ってあるんですか?
0689デフォルトの名無しさん
NGNG0691デフォルトの名無しさん
NGNG0692デフォルトの名無しさん
NGNGPerlでいうと、
($hoge1,$hoge2,$hoge3) = split /\t/, $hoge4;
のようなことがやりたいんですが、何かいい方法はないでしょうか・・・。
0693デフォルトの名無しさん
NGNG0694デフォルトの名無しさん
NGNGfpos_tがlong型だとして、sizeof(long) == 4な環境では
2147483647バイト = 約2Gバイト程度
ってことでいいんでしょうか?
0695692
NGNGありがとうございます。sscanf()は初めて聞きました・・・。
試しにやってみたところ、ちょっと変だったのですが、
sscanf(hoge4, "%s%s%s", hoge1, hoge2, hoge3);
としたらうまくいきました。
どうもありがとうございました。
0696デフォルトの名無しさん
NGNG0697デフォルトの名無しさん
NGNGchar int float double
0698デフォルトの名無しさん
NGNGタブ区切りではないけど、それで良いの?
0699Not 692
NGNG二つ目以降はわけのわからない値が代入されるんだけど。
それともVC6.0のバグ?
0700デフォルトの名無しさん
NGNGsscanf(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です。
0702692
NGNGあ、空白が入ってると変なところで区切られちゃいますね・・・。
ということで
>>700
今度はうまくいきました。
この方法でやってみますね。
ありがとうございました。
0703デフォルトの名無しさん
NGNGVC6.0Proなら問題なかった。
見間違いじゃないよね?
0704デフォルトの名無しさん
NGNGfloat,double型のscanfをすると勝手に小数点が移動してしまうのです。
例えば上のプログラムの
scanf("%f",&k);
のすぐあとに
printf("%f\n",k);
を入れて、kに2.1を入力すると
21.000000
と表示されてしまうんですよね。
全く持って謎です。どこが間違ってるんでしょうか。
0705デフォルトの名無しさん
NGNG素直にgets(略
0706704
NGNG厨房なもんでgets()で読み込んだ文字列(ここでは数字列?)を
計算に使ってるのを見たことが無いのですが。どうするのでしょう。
…っていうかどう考えても上のscanf間違ってないですよねぇ。
だれかCygwinのgcc使ってる人情報くれませんかね。
0707デフォルトの名無しさん
NGNGバージョンなども貼り付けるのが常道。
0708デフォルトの名無しさん
NGNGatoi,atol,atof
0709708
NGNG0710704
NGNGありがとうございます。>>708
gcc -vですか。Cygwin上の「標準エラー出力」ってファイルに書き出すことはできるんですか?
僕には全く分からんメッセージがずらずら出てきたのですが手で移すのちと辛いので。
あと、Cygwinのバージョンってどうやって調べるんでしょうか?
ほんと厨房ですみません。
0711デフォルトの名無しさん
NGNGエディタ上でコンパイルすれ。
0712デフォルトの名無しさん
NGNG0713704
NGNG/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明確ではないから。
0715デフォルトの名無しさん
NGNGReading specs from /usr/lib/gcc-lib/i386-unknown-openbsd2.9/2.95.3/specs
gcc version 2.95.3 20010125 (prerelease)
こういうのをきいてるの
0716Cの馬鹿〜〜
NGNG遅いレスですみません。
>標準関数はファイルストリームを内部で管理してます。
なんとなくわかった気がします。
つまりFILEのアドレスを内部で管理してるって事でしょうか?
例えば、ディレクトリの下にあるファイルをポインタで示すとかって概念であってます?
int a;
と
int *a;
の違いはわかりますよ。 ポインタと変数ですよね。
でも・・・ float 型のポインタとかは正直・・・なんで?
なんでそんなん使うの?って思いますよ。
0717C++マンセー
NGNGクイズです。
整数型のデータの置いてある場所を覚えておきたいとき -> 整数ポインタ型をつかう
浮動小数点型のデータの置いてある場所を覚えておきたいとき -> □型をつかう
さて□には何が入るでしょう?
0718デフォルトの名無しさん
NGNGあっていればCPU的には問題ないはずだが。
あっ浮動小数点型だと演算のときニーモニックが違ってくるか。
0719Cの馬鹿〜〜
NGNG正解は float?
0720デフォルトの名無しさん
NGNGfloat型はfloatの値(1.2とか)自体を保存するときに使う
float*型はfloat変数の場所を保存するときに使う。
なんで使うかは、float型の変数の場所が知りたいときもあるからだろ。
0721てぃー
NGNGとても気になります。
0722デフォルトの名無しさん
NGNG0723てぃー
NGNGありがとう。
0724デフォルトの名無しさん
NGNG> なんでそんなん使うの?って思いますよ。
int* はわかるが float* はわからないのか?
それじゃ何で int* を使うか考えてみてくれ。(できればそれをここに書いてほしい)
多分同じ理由で float* が必要になると思われ。
0725デフォルトの名無しさん
NGNG>ポインタと変数ですよね。
と結っていから、なにか、勘違いをしているらしので…
0726704
NGNGReading 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デフォルトの名無しさん
NGNGmingwのgccをCygwinでつかったらどうですか。ちなみにうちのmingwはその小数点の
問題は起こりませんでした。versionは2.95.3-5です。
0728デフォルトの名無しさん
NGNG> versionは2.95.3-5です。
mingwじゃなくても問題は起きなかった。バージョンは同じ。
とりあえず>>704はバージョンを上げてみるべし。
0729デフォルトの名無しさん
NGNGコンパイルが通らない。この本の通り書いたのに。
struct cell{
struct cell * next;
int value;
}
typedef struct cell CELL;
こう書けばコンパイルが通る
typedef struct cell{
struct cell * next;
int value;
} CELL;
0730デフォルトの名無しさん
NGNGこういうことを言う人ってのは、
>新C言語シニア編 (著 林晴比古)
こういう本を買っているのですね : )
0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNGここは初心者スレなので、余計なつっこみは入れないでほしいのです。
0733デフォルトの名無しさん
NGNG原因わかるだろぅ
0734デフォルトの名無しさん
NGNG#includeを使わないで複数のソースファイルをまとめるにはどうすればよいのでしょうか。
0735>>734
NGNGttp://www.gulf.or.jp/~damayan/calc/divide4.html
ttp://www.kurume-it.ac.jp/home/denshi/aoki/kagakuenshu/www/63compile.htm
0736デフォルトの名無しさん
NGNGとか
return -1;
ってどういうことですか?
exit(100); とか exit(-3.5)
とかもありなんですか?
0737デフォルトの名無しさん
NGNG要するに終了状態をプログラムの起動元に返す。
0(成功)以外の意味は処理系定義
ttp://www.bohyoh.com/CandCPP/C/Library/exit.html
0738デフォルトの名無しさん
NGNG今、授業中なんだ。
0739はじめっこ
NGNGint i,j,k;
for(i=j=k=0; i<10; i++){
という部分、i,j,kはfor内だけのローカル変数でいいんだけど
もっとまともな書き方があると思うから、これが定石だ
とかいうソースを教えてください。
0740デフォルトの名無しさん
NGNGint i = j = k = 0;
for(i=0; i<10; i++){
0741デフォルトの名無しさん
NGNGint i;
for(i=0; i<10; i++){
int j, k;
//
}
}
でどうでっか
0742デフォルトの名無しさん
NGNG> int i = j = k = 0;
C/C++ではこーゆーことはできん。
0743代打名無し
NGNGキーボードから円を入力すると,ドルに変換するプログラムを作成しなさい。
なお,変換レートは本日分の値を使用し,
変換値の表示は小数点第1位までとすること。
角度を−90〜90度まで5度ステップで変化させ,
そのときの正弦関数と余弦関数の値をディスプレイに並べて表示する
プログラムを作成しなさい。
なお,正弦関数と余弦関数の値は,小数点以下3桁で表示しなさい。
下記の指示にしたがって解答しなさい。
1 キーボードから1より大きい整数値nを入力して,
その階乗n!を計算し,結果を表示するプログラムを作りなさい。
その際,nが1以下の時には,
nが1より大きい値となるまで入力を繰り返し求めるようにする。
また,階乗の値は double 型とする。
n!=2×3×4×・・・×(n−1)×n
2 作ったプログラムをコンパイルし,正しく動作することを確認したら,
15!を求め,画面に表示された通りを答えなさい。
0744はじめっこ
NGNGiもfor内のローカルにしたいんだけど、for内で宣言でき、
1行で書けるらしいんです。
int i,j,k,l;
for(i=j=k=0; …
これでもまだだめなソースと言われます。
>>742
ありがとうございます。
> int i = j = k = 0;
を直してコンパイルできるようになりました。
0745はじめっこ
NGNGfor(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> キーボードから円を入力すると,ドルに変換するプログラムを作成しなさい。
1:rate = doller:yenなので
doller = yen / rete
従って
double yen2doller(int yen, int rate)
{ return (double)yen / rete; }
yenかrateのどちらかを明示的にcastしないと
yen / rateをintとして計算してしまう。
最後に、
> なお,変換レートは本日分の値を使用し,
これは一体どこから取得するの?
私ならば仕様不備で突っ返す。
0747デフォルトの名無しさん
NGNGfor( 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デフォルトの名無しさん
NGNG0750デフォルトの名無しさん
NGNGANSI Cに準拠してればね。あと
for (int i,j,k=i=j=0; 〜
とか。
0751デフォルトの名無しさん
NGNGif ( c==&c[0] ) printf( "%s\n", "つまりこーゆーことやねん" );
0753デフォルトの名無しさん
NGNGchar c[32];と宣言したなら c
はchar型のポイントとなっております。
0754デフォルトの名無しさん
NGNGfor(int i = 0; i < 10; ++i)
すら、コンパイラ通らないようだけど漏れが悪いのかな。
0756type
NGNG同じものをタイプしても配列の長さが違います。
つまり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あちこちでおんなじこと書くなよ。ばーか。
0758デフォルトの名無しさん
NGNG不正な文字 'character' (0x'value')
入力ファイルの中に無効な文字がありました。
その文字の 16 進値が出力されます。
これは,関数マクロに余分な引数が渡されたことが原因であることもあります。
・・・というエラーが出るのですが原因が全くわかりません。
配列の[]の中の文字に対するエラーなのですが、他の文字に
変えても同じエラーが出ます。
「関数マクロに余分な引数が・・・」このあたりが原因でしょうか。
なにか心当たりがある人いたら教えてください。お願いします。
0759デフォルトの名無しさん
NGNGコンパイラを捨ててしまうのも宜しいが、使って居るのが
C/C++コンパイラならば、C++のプログラムとしてコンパイル
しては如何かな。
コンパイラは変えたくなく、魔道に手を染めるは好まぬ、
というのであれば>>741で我慢なされ。
0760デフォルトの名無しさん
NGNG御意にござります。
0761デフォルトの名無しさん
NGNG> 魔道に手を染めるは好まぬ、
むぅ、宣言されてない関数をチェックするためによく使うが、
やはりそれは魔道なのか?
0762はじめましてこ
NGNGありがとうございました♪
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デフォルトの名無しさん
NGNGf(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デフォルトの名無しさん
NGNGmain
f(3)
f(2)
f(1)
f(0)
という呼び出しシーケンスになっています。後は自分で考えてください。
0766デフォルトの名無しさん
NGNG1 + 2 + 3 だろ。
再帰だから、DrScheme でステップ実行やれば理解できるよ。
0767764
NGNGでも大体そんな感じ
0768凛
NGNG"123.4"(文字列)から'.'を検索して小数点の前と後ろを分割して、どちらも1000倍にして、
それを足して123400(123000, 400)という数値を作りたいのですが解りません。
特に、小数点の後ろ側(0.4)を1000倍の仕方が・・・。
float型を使用しないでできるんでしょうか?
0769デフォルトの名無しさん
NGNG0770はじめっこ
NGNGありがとうございます。できました。
for(int i=0, j=0, k=0; i<10 && j<20 && k<20; i++)
0771ぺーぺー
NGNG0772デフォルトの名無しさん
NGNGC++かC99だったのね…
0773デフォルトの名無しさん
NGNGどうすればよいですか?
for(i=0;i<10;i++){
fpw = fopen("out数字.dat","w"); ↑
fprintf(" ", );
fclose(fpw);
}
とやって見ようかと思ったけど、ムリだし・・・
0774デフォルトの名無しさん
NGNGsprintf()を調べる…
そいでファイル名の文字列を作る…
0775デフォルトの名無しさん
NGNGいや、何したいんだか判らん…
ファイル名の一部を連番にしたいなら、例えば
char fname[64];
sprintf(fname, "out%d", i);
fpw = fopen(fname, "w");
だけど…そういう事でなく?
0776デフォルトの名無しさん
NGNGfor(i=0;i < 10;i++){
filename[3] = i + 0x30;
fpw = fopen(filename, "w");
fprintf(" ",);
fclose(fpw);
}
0777デフォルトの名無しさん
NGNG本買って勉強しようかな?
0778776
NGNGは
fprintf(fpw," ");
な気がする。。。
0779デフォルトの名無しさん
NGNG0780デフォルトの名無しさん
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そのままだが
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全角空白とか混じってないか?
0783デフォルトの名無しさん
NGNG> 特に、小数点の後ろ側(0.4)を1000倍の仕方が・・・。
strtoul()を使って何桁あったか調べる。
0784デフォルトの名無しさん
NGNG両方とも、別スレで解決済みで御座います。
0785デフォルトの名無しさん
NGNG0786デフォルトの名無しさん
NGNG0787ダダダダーん!
NGNG0788デフォルトの名無しさん
NGNGおんなじしつもんをあちこちにかくなって。
0789デフォルトの名無しさん
NGNG>先生おねがい〜。
>こら、そこのあなた簡単っだって笑わない!
案外芸が細かいな。
0790デフォルトの名無しさん
NGNG下記の処理を一つのファイルに対して
複数のプロセスから実行するときの定石を教えて下さい。
1テキストファイルをオープン
2テキストファイルへ書き込み
(何度か繰り返し)
3テキストファイルをクローズ
ファイルへ書き込むごとにオープンとクローズを繰り返すのはあほ?
同時に開きっぱなしにして一行ずつ追記していきたいんです。
0791デフォルトの名無しさん
NGNGOSはWinとUNIXで両方使えたらいいんですけどね。
0792デフォルトの名無しさん
NGNG追記モードで、バッファが関係してなくて、write一発で決まって、
複数プロセス/スレッドからのオープンが問題ないなら、
ロックは要らないかもしれません。
0793デフォルトの名無しさん
NGNGchar data[20][20];
というのを定義したとして,それを引数として別の関数から
呼び出そうと思ったのですが,うまくいきません.簡単に書くと
main () {
char data[20][20];
r=kansu(data);
}
に対して,kansuを
int kansu(char data[][]) {
:
:
}
とすると,引数の指定が間違っています,というような感じでエラーが
出てしまいます.どのようにすべきなのでしょうか?
0794デフォルトの名無しさん
NGNG0795デフォルトの名無しさん
NGNG079615分で
NGNGを作って頂けないでしょうか?
間に合わないか、、
0797デフォルトの名無しさん
NGNG作るほどのもんじゃないな。
0798デフォルトの名無しさん
NGNG何に使うの?
0799デフォルトの名無しさん
NGNG_openと_filelength見れ。
改行?無視無視。
0800796
NGNGもうそろそろ今使ってる場所追い出されるので、諦めます。
0801デフォルトの名無しさん
NGNGなんてムカツク言い方…。(・∀・)カエレ!
0802デフォルトの名無しさん
NGNGエクスプローラーからALT+RETURN
0803796
NGNG混在してあるファイルの「正確な」文字数をカウントしたいんです。
もちろん、"あ"を2とかカウントしたりしては駄目です、、、
0804デフォルトの名無しさん
NGNG無理、あとヽ(`Д´)ノ カエレ!
なんだよ「間に合わないか」とか「駄目です」ってのはよ…
自分で文字コードについて調べて少しでも作ってみれ。
0805デフォルトの名無しさん
NGNG境目は?
0806デフォルトの名無しさん
NGNG>混在してあるファイル
それって許されるのか?(w
0807デフォルトの名無しさん
NGNGm17n-ruby に UTF16 ISO-2022-KR BIG5 エンコードを追加実装して
適当に guess をかませながら str.size を足していく
0808デフォルトの名無しさん
NGNGmuleで開いて、自分で数える。
0809796
NGNGもちろん、Multipartなメタメッセージは、数えてはいけません。
あと、UTF16で、リガチャなど複合文字もきちんと数えていただきたいです、、、
0810デフォルトの名無しさん
NGNGふん、出てくる出てくる、次々に“仕様”がよ(藁
「数えてはいけません」って、てめぇ何様?
自分のやりたい事、要求仕様くらい整理して語れんのか?
0811cccccc
NGNGおすすめの開発ソフトと入門書を教えてください。
0812デフォルトの名無しさん
NGNGメールで送って MIME デコードはメーラに任せ、
部分部分コピペして別ファイルに入れてもおk?
0813デフォルトの名無しさん
NGNGgcc と K&R
0814デフォルトの名無しさん
NGNG0815デフォルトの名無しさん
NGNG0816デフォルトの名無しさん
NGNG“作って”君は何だコイツ?としか思えんな…
0817デフォルトの名無しさん
NGNG2chというよりネット初心者という感じ。
こんなもん貼り付けて見るか
http://www.geocities.co.jp/SiliconValley/5656/#CHAPTER001
0818デフォルトの名無しさん
NGNGその行を抜き出すプログラムを作りたいんですけど
いい関数あります?
ライブラリの見方がよくわからないもんでして・・・・
0819796
NGNG整理できなくて、すみません、、、
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> 適当に guess をかませながら str.size を足していく
その答え方いいなぁ、“適当に”が重要ですね。
“いいかげんに”では無いところがポイント。
0821デフォルトの名無しさん
NGNG>おすすめの開発ソフトと入門書を教えてください
勉強なのか仕事に使うかで違うと思うけど勉強ということにする。
仕事ということにしても無駄にはならない。
参考書は
前橋氏のC言語体当たり学習=>ポインタ完全制覇 => K&R
がおすすめ。
C言語診断室という本もいいのだがどうも入手が困難
みたいなのでWeb上のものを読むとよい。同様にlanguage C FAQも
Webにあるので読もう。
ツールとしては「C言語を始めよう」+ ボーランドCコンパイラが
いいと思う。どちらもフリー。(ボーランドCコンパイラは無料のユーザ登録が必要)
0822デフォルトの名無しさん
NGNGKMP法 BM法などがある。
google で検索すればソースもあるよ。
0823デフォルトの名無しさん
NGNGCPad
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先にあげられたリンク先で自分のことをあげてる箇所もわからないようだから転載してあげよう。
俺って親切!
Q:私は社会人ではなく、学生です。 課題として出された問題をメーリングリストに参加している人達に解いてもらっても問題はないでしょうか? (New! 2001.07.09)
A:問題大アリです。 今すぐ事務局に退学届けを出し別な道を模索した方が、儚い人生の道を踏み誤り本当に下らない人生とならずに済む確率が少しは上がるでしょう。
0825デフォルトの名無しさん
NGNG0826デフォルトの名無しさん
NGNG超ありがとう。
掘っていいよ(w
0827796
NGNG私へのリプライでしょうか? それはメーリングリストに適用されるもので、
このトピにはあてはまらないと判断しました。
あなたに答えてもらわなくても結構です!
824以外の方、どうかお願いします!! m(_ _)m
0829796
NGNG無知な人は黙っていてください!
0830820
NGNG君のこの一連の書き込みはネタだよな(笑
ネタだと逝ってくれ、でないとイタすぎる…
0831796
NGNGネタですよ。メール欄をみましょう。
それでは、偽者は去ります。
またあえるといいですね。
それと、Multipartな文字数えプログラム、
できたら発表してくださいね。
0832デフォルトの名無しさん
NGNG本当に困ってる人がきたときに、いちいちネタか?ネタか?と確認作業が入るので仕事が遅くなります。
0833デフォルトの名無しさん
NGNG0834デフォルトの名無しさん
NGNGあんたちょっとだまってて、っていう意味です。
0835デフォルトの名無しさん
NGNG0836833
NGNG検索にかからないんですよ!
お願いします、一言教えて下さい。
0837デフォルトの名無しさん
NGNG#include <match.h> とは意味が違うのですか?
0838デフォルトの名無しさん
NGNG0839デフォルトの名無しさん
NGNGファイルを探す順序が違う。だけかな?
0840デフォルトの名無しさん
NGNG0842名無しさん@お腹いっぱい
NGNG0843841
NGNGありがとう.
0844833
NGNG御礼にあなたのことを想像しながらオナります。
0845デフォルトの名無しさん
NGNGで、""はカレントを先に探して、そのあとの順番は<>と同じだったんじゃ?
0846デフォルトの名無しさん
NGNG#include ;math.h;
0847841
NGNG匿名掲示板でよかった〜〜
ありがとう845
0848( ´∀`)
NGNG�Astrcat
�Bstrcmp
どう使うか、どういうものかはわかってますが
何て読む(発音)するかわかりません・・・。
おい、お前ら、お助け頂けませんか?
0849俺は
NGNG(2)エス・ティー・アール・キャット
(3)エス・ティー・アール・シー・エム・ピー(またはコンプ)
と読んでるなぁ。
0851デフォルトの名無しさん
NGNG0852デフォルトの名無しさん
NGNGそこらへんは呼び方いろいろだと思うけどね。
回りで通じる呼び方にするべし。
おれは、str部分はストラにしてる。
0853( ´∀`)
NGNGお返事ありがとう。そっか〜。
漏れは家で独学なんだけど、みんなはどうなのかと
気になっていましたので・・・。
0854デフォルトの名無しさん
NGNG「False」を「ファール」って発音してる人の数→
http://pc.2ch.net/test/read.cgi/tech/1005578173/
0855デフォルトの名無しさん
NGNG見るたびに思うがFalseをファールと発音するやつはいないだろ。
0856デフォルトの名無しさん
NGNGcharはチャー
0857デフォルトの名無しさん
NGNG読み方わかんないんで“あー、ほらキャスト”で誤魔化す。
0858デフォルトの名無しさん
NGNG0859デフォルトの名無しさん
NGNGreinterpret_castならまだしもstatic_castってCのキャストと同じなうえに主張が強すぎて読みにくいし。
0860デフォルトの名無しさん
NGNG0861ちょっと恥ずかしいけど
NGNGchar *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ここで説明始めると小一時間では終わらん。
name = "ABC"は、文字列定数"ABC"のアドレスをポインタ変数nameに代入している。
strcpy(name,"ABC")は文字列"ABC"をポインタ変数nameが指す領域に複写している。
ポインタとメモリ管理について勉強しる!
0863デフォルトの名無しさん
NGNGなぜ char * を使うことで汎用なものになると思いましたか?
0864デフォルトの名無しさん
NGNG漏れのコンパイラ(VC6)では通っちゃったよ。
どんなエラーが出た?
0865デフォルトの名無しさん
NGNG0866デフォルトの名無しさん
NGNGコンパイラに依存するの?
0867デフォルトの名無しさん
NGNGおいおいおいおい
0868デフォルトの名無しさん
NGNGそれはたぶんReadOnlyな領域に文字列を書き込もうとしている。
ただ、リンカのオプション等によってはwriteできる領域に配置させることも
あるのかもしれない。
0870デフォルトの名無しさん
NGNG環境知らんけどすぐ後にもう一つ文字列リテラル作って
出力してみたらどうなる?
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デフォルトの名無しさん
NGNGVCな人は、/GFつきでビルド・実行してみれ。
0872デフォルトの名無しさん
NGNGスマソ。漏れがものすごい勘違いしてた。
確かにそれだと壊れるよ。
ありがと。
0873デフォルトの名無しさん
NGNGMid(”ほげほげ”,1,2) -> ほげ
Mid(”aiueokakikukeko”,3,4) -> ueok
こういう関数をCでだれか作っておくれ。
0874デフォルトの名無しさん
NGNGwchar_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わーいありがちょー。
0877デフォルトの名無しさん
NGNG0878873
NGNGconst wchar_t *,int,int) )
教えておくれ。(泣
freeを忘れるなの意味もよくわからない。
0879ちょっと恥ずかしいけど
NGNGchar *が汎用だと思ったのは、自分が使う環境がC++Builder or VC++6.0
だとした場合、仮にC++Builder でAnsiString使っても.c_str()がありますし
MFCのCStringにも・・・・と思ったらCStringの場合にはstrcpyでコピーしな
いとダメ?だとしたら大して汎用ではないかなぁ。
なんでBorlandもMSも文字列はSTLの<string>を標準にしてくれないんで
しょうか・・って愚痴ですね。
0880デフォルトの名無しさん
NGNGwchar_t *ret = (wchar_t*)malloc(( end - begin + 1 )*2);
0881873
NGNGfree(r);
いま調べた、領域開放。
0883デフォルトの名無しさん
NGNGちょうど文字列ってことで,C言語において,
*ch1,と *ch2 に英文字列が入っているとき,それが全く同じ文字列か
どうか調べる効率の良い方法はないでしょうか?
今は
while(ch1[cnt]!='\0'){
if(ch1[cnt]==ch2[cnt]){
break;
}
cnt++;
}
って感じなんですが.もっとスマートな方法募集中です.
C++にしろってのは無しでお願いします.
0884デフォルトの名無しさん
NGNG0885デフォルトの名無しさん
NGNG0886デフォルトの名無しさん
NGNG0887デフォルトの名無しさん
NGNGstrcmp()してるのが多いけど、今時のパソコンでも効果的で
漏れも真似してやるべき?
0888883
NGNGstrcmpを使う場合は
if(strcmp(ch1,ch2)==0){}
とすればいいんでしょうけど.何か動作がおかしいのでね.
strcspn調べたら確かに883っぽいですね.
0889デフォルトの名無しさん
NGNG名前入れたら阿寒のか?
0890デフォルトの名無しさん
NGNG頻度にね.
0891デフォルトの名無しさん
NGNG∧ ∧ 。 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(*゚ー゚) / < ここに「sage」(半角)と
( つ | 入れるとスレがありません。
| ̄ ̄ ̄ ̄ ̄| \___________
0892デフォルトの名無しさん
NGNG0893デフォルトの名無しさん
NGNGテメェで「こういう関数をCでだれか作っておくれ。」といっておきつつ、
> エラー E2034 mid.cpp 13:
C++でコンパイルするヴァカ発見。
0894デフォルトの名無しさん
NGNGうまく説明出来ないが、大体こんな感じ。
>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暇人
NGNGputchar(a);
結果:b
Cって凄いね。
理屈どうりにうまくいくのは。
0896デフォルトの名無しさん
NGNG> どうか調べる効率の良い方法はないでしょうか?
while(*ch1++ = *ch2++);
0897デフォルトの名無しさん
NGNG0898デフォルトの名無しさん
NGNGあなたが試してみて、みんなに結果を報告してくれるとみんな助かります。
よろしく。
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それを使うんだったらstrcmp()の方が間違いなく速い。
そもそも、>>883 のソースがなにをやりたいのかよく分からないんだけど…
(strcspnとも違うと思うぞ)
もしかして、2行目は==じゃなくて!=の間違いだったりしない?
それにしても、「全く同じ文字列かどうか」のチェックになってないが。
実はチェックしたいのは、「全く同じ文字列かどうか」じゃない別のこと
じゃないの? そうでないと、strcmp()でダメな理由が分からん。
0901デフォルトの名無しさん
NGNGよくわかりません。
char buffer[1];
int len;
len = strlen(buffer);
としたところlenに7が入りました。
これは初期化をしていないからでしょうか?
0902デフォルトの名無しさん
NGNG0903デフォルトの名無しさん
NGNGC 言語では文字列の終端を 「ヌル文字 ('\0')」 と規定している。
strlen は '\0' が現れるまでカウントしているわけだ。
そのコードの場合は buffer がたまたま割り当てられたメモリ領域の頭から
'\0' が見つかるまで延々とカウントすることになる(いつまでかはやってみないと不明)。
つーか char buffer[1]; だと1文字分しかないので
文字列はヌル文字しかない空文字列(これ→ "" )しか入らないと思うが。
0904デフォルトの名無しさん
NGNG詳しい解説ありがとうございました。
C言語って怖いですね。
たとえばbuffer[255]と宣言して。
buffer[255]="\0"とかやっても大丈夫なんですから。
気をつけなければ。
0905デフォルトの名無しさん
NGNG>buffer[255]="\0"とかやっても大丈夫なんですから。
buffer[255]='\0'じゃないと、コンパイルエラーになると思うが。
0906デフォルトの名無しさん
NGNGint namelen;
char namestr[1];
};
どうやって使うの?
http://www.catnet.ne.jp/kouno/c_faq/c2.html#6
0907デフォルトの名無しさん
NGNG#define 1 255
ってやってるんじゃないの?最初のほうで。
# いや嘘です。許してください。
0908デフォルトの名無しさん
NGNGstruct name *p = (struct name *)malloc(256);
strcpy(p->namestr, "ほげ");
p->namelen = strlen(p->namestr);
とか。
0909デフォルトの名無しさん
NGNG固定で割り当てたら意味ないだろ。
#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コンパイルエラーはなんて出てるの?
単に
#include <stdio.h>
の記述抜けってコトはない?
0912910
NGNG#include <stdio.h>は記述してあります。
コードをコンパイルしようとしたときに出るエラーは
error C2664: 'fopen' : 1 番目の引数を 'int [7]' から
'const char *' に変換できません。 (新しい機能 ; ヘルプを参照)
というやつです。VC++ 6.0を使って勉強しています。
どうやら
fp = fopen(fopen((char *)file_name,"r");
とするとエラーが出なくなります。
コンパイラ特有の解釈とかが絡んでのエラーなんでしょうか?
それとも、C言語としての規約としては
わざわざキャストしなければいけないと言うことではないですよね?
0914910=910
NGNG>int file_name[6];
>って宣言してないか?
あっ!!!!
すんまそん・・・・・・思いっきりしてました。
これをなおして、キャストもはずしてきちんと動くようになりました。
本の作者には変な疑いをかけてしまって申し訳ないっす。。。。
あと100万年くらい精進いたします。
今後とも、なにとぞご指導ください。
0915デフォルトの名無しさん
NGNG難しい。ちょっとコメントがほしい
0916デフォルトの名無しさん
NGNGなんで char => int と宣言を変えるだけで駄目なの?
0917デフォルトの名無しさん
NGNG1 番目の引数を 'int [7]' から 'const char *' に変換できないから。
・・・実は漏れもよくわからん(w
0918デフォルトの名無しさん
NGNGバグの元。(というか殆どバグと同じだから)
int*や、const int*にはOK。違いが判るか?
0919デフォルトの名無しさん
NGNGconst int lineCount = lines.size();
for( int lineIndex = 0; lineIndex<lineCount; ++lineIndex ){
const char const* lpszLine = lines[lineIndex];
...
}
とか。
なんか意味なさそうだけどつけたほうがかっこいいかなぁとか。
思わない?漏れだけ?
0920910
NGNG#聞くは一時の恥、聞かぬは一生の恥根性で。。。。。
正直なところわかりません。
「char*/const char*」も「int*/const int*」もどちらも
変数の値にはアドレスが入っている。
しかし、そのアドレスが指し示す先には
char*の場合(本来意図しない)文字の値が入っている。
しかし、int*の場合は本来の意図通りの数値が入っているから?
ここまではあっていますでしょうか?
だからどうしてダメなのか今ひとつピンとこないんですが・・・・
よろしければなにとぞご教授ください。
0921デフォルトの名無しさん
NGNG過度なconstの記述はかえってコードを見ずらくするんで
関数引数やC++のメソッド/静定数にしかつかわない。
0922デフォルトの名無しさん
NGNGfile_name[]をintとしたときとcharとしたときの変数ダンプ見れ。
0923凛
NGNGunsigned 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> もし、cnt が「4」のとき、bitsにはどういう何が入るのでしょうか?
p->mon->aaa ってのは何?
それが分からなきゃなんだかサパーリ サパーリ
# なんで配列の添え字をunsigned charにキャストしてるんだろう…
0925デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1009499565/n652-670
態度がよろしくない気がするのは漏れだけか?
0926凛
NGNGp->mon->aaaは、構造体です。
># なんで配列の添え字をunsigned charにキャストしてるんだろう…
型変換は特にしなくても良いとは思ったんですが・・・。
aaa.bufはメンバがバッファです。
aaa.cntは添え字みたいな感じです。
で、スペースをマイナスってどういうことかなって。
ごめんなさい。わかりづらくて。
0927デフォルトの名無しさん
NGNG>aaa.cntは添え字みたいな感じです。
正直、感動した。
なんつーの、えと、デカルチャー!
0928デフォルトの名無しさん
NGNG> で、スペースをマイナスってどういうことかなって。
だ・か・ら!
p->mon->aaa の値が分からなきゃ答えられないでしょうが!!
文字コードでの空白文字からのオフセット値を取ってるんでしょ。
なんでそんな事をしてるのかは、これだけのコードではワケワカラン。
0929高校生
NGNG配列の添え字が0〜255じゃなきゃ困るってことだろ?
0930デフォルトの名無しさん
NGNGそのようなバッファに対して、cntをunsigned charとしないのは
なぜだろうか。ついでに、A[]は要素が10個しかないようだが、
A[(unsigned char...に意味はあるのだろうか?
0931凛
NGNG923 の配列のどれが選択されるんでしょう?
ホント、手間かけてごめんなさい。
0932凛
NGNG"選択されるんでしょう?"てゆーのは、
bits = A[p->mon->aaa.buf[p->mon->aaa.cnt] - ' '];
をした結果、bitsに入る値のことです。
0933デフォルトの名無しさん
NGNG呆れて何も言えんわ…
0934デフォルトの名無しさん
NGNG入ってくるやつには多いんだろうかね?
あんまりバカじゃ出来ない仕事のはずなのにね。
0935デフォルトの名無しさん
NGNG実行してエラーが出たからといって、
エラーになるんです、とか書き込まないように(w
0936デフォルトの名無しさん
NGNGジャネーノ?
0937910
NGNGやってみました
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
0940デフォルトの名無しさん
NGNG大概、char*を受ける関数、ってのはCの文字列が欲しいわけだよな。
"string\0"ってヤツ。で、int[]={'s', 't', 'r'...}やけども、x86系なら、
"s\0\0\0t\0\0\0r\0\0\0"...ってなるわけよ。扱われるのは
最初の's'だけになっちまう。こんな危ない動作を、暗黙で行えるか、
ちゅうこと。(その危なさを知って、敢えて行いますよ、っていう言明が
キャストなわけ。)
0941デフォルトの名無しさん
NGNGまず、普通は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に見えてしまう、といった感じで。
0943デフォルトの名無しさん
NGNG#include <stddef.h>はoffsetofを使うため。
> struct name *p = (struct name *)malloc(offsetof(struct name, namestr) + len);
offsetof(...)はnamestrの前までの固定領域のサイズ、それとnamestr用の領
域を一緒に割り当てる。
0944デフォルトの名無しさん
NGNGあー、漏れだたら、面倒だからsizeof( name ) + len で済ますかなー。
0945デフォルトの名無しさん
NGNG「20人分の点数を入力して、上位5名分の点数を高得点順に出力する」
という問題で、高得点順に並び替えるプログラムが分かりません。
if文を使って考えてみましたが分かりませんでした。
おねがいします。
0946デフォルトの名無しさん
NGNGふつーにsortすればいいのでは?
0947デフォルトの名無しさん
NGNG"ソート" & "アルゴリズム" で検索してみろ。
0948910
NGNGすげーわかりましたっ!!!!!
かなり感動でっす。
ほんまに、ありがとうございます。
んで、自分が >>937 で書いた
> ということで、intをcharにキャストすると予期せぬアドレスを
> 壊してしまう(バッファあふれ?)事になるからでしょうか?
は、逆を考えてしまっていたようですね。
自分は大きさ1(char)のところへ大きさ4(int)の物を入れるのがキャストと
思っていましたが、大きさ4(int)の物を大きさ1(char)として扱うのが
キャストですね。
ほーんま、勉強になりました。
これでもうちょっと頑張って勉強していけます。
これからもよろしくお願いします。
>>942
そうですよね、これって超簡単なことなんですよね。。。。。
で、初心者が脱落しやすいといわれる、メモリへの格納イメージ部分なんですよね。
なんか、1歩先へ進めた気がします。
こんなへたれですけど、これからもがんばりましゅ。。。。
0949デフォルトの名無しさん
NGNGいや、どっちもキャストとは言うと思います。
ただ、大きさ1(char)のところへ大きさ4(int)の物を入れようとすると
大きさ3分が切り捨てられるため意図した動きにならないこともあります。
0950デフォルトの名無しさん
NGNG>>945の
> if文を使って考えてみましたが分かりませんでした。
この一文から945の程度が知れるのでたぶんソートとか言っても意味わからんと思われ。
0951デフォルトの名無しさん
NGNG0952デフォルトの名無しさん
NGNGたいていif文を使って〜とかfor文を使って〜とかいうやつはそれを習ってるか習ったばかりの段階だからな。
0953デフォルトの名無しさん
NGNGif文20個だけでは済まないような‥‥
0954デフォルトの名無しさん
NGNGEOFが127を超えるという事を聞いたことがあるんだけど、どう対処するの?
0955デフォルトの名無しさん
NGNG0956デフォルトの名無しさん
NGNGCに多次元配列はない。
0957デフォルトの名無しさん
NGNG0958クワサワ先生
NGNG/ | | | |ヽ @ノノヽヽヽ@
|( ゚〜゚ )| ノノノ人ヽ_ (ノ~\\ ノノノノ从ヘ ノノノノヽヽ (0^〜^0)
|( )| (●´ー`●) (`.∀´) ノハヽヽ. |( ´Д` )| 从^▽^从 ( )
| | | ( ) ( ) 从 ^◇^ 从 |( )| ( ) .| | |
| | | | | | ||| ( ) ||| | | | | | |
(_)__) (__)_) (__)_) (_)_) (_)__) (_)__) (_)__)
飯田 安倍 保田 矢口 後藤 石川 吉澤
ノノノノヽヽ .ノノノノ从ヘ / | | | |ヽ
∋oノハヽヽo∈ ∬`▽´∬ 川’ー’川 川o・-・) ◎ノ^^ヽ◎ @ノハ@
( ´�D`) ( ) ( ) ( ) §(´・e・`)§ (‘д‘ )
( ) ||| ||| ||| ( ) ( )
(_)_) (_)__) (_)__) (_)__) (_)_) (_)_)
辻 小川 高橋 紺野 新垣 加護
0959デフォルトの名無しさん
NGNGvoid test(int **ip);
0960948=910
NGNGうっ、おっしゃるとおりどっちもキャストですね。。。。
#やっぱり、俺アホだ・・
もし良かったら確認させてもらいたいんですが、
> きさ1(char)のところへ大きさ4(int)の物を入れようとすると
> 大きさ3分が切り捨てられるため
って、本当なのでしょうか?
自分のイメージでは、意図しない場所(大きさ3だけ後方)まで書き込んでしまい、
メモリ領域を破壊すると思っていたいのですが・・・・・
その部分は切り捨てられちゃうんですか?
0961948=910
NGNGす・すんまそん・・・・
おっしゃることが理解できないです。
EOFはマクロだろうというところまでは頭が働いたので
適当にヘッダーファイルを漁ったところ
stdio.hの中に
#define EOF (-1)
つうのを見つけました。
この値が場合によって(処理系によって?)127を超える値になると言うことでしょうか?
で、そのようになった場合、自分が質問させてもらっていた
事にどのような影響があるんでしょうか?
またもや、スレのタイトル通り超カンタンな事をお聞きしてますでしょうか?
ヒントでも良いので、教えてもらえませんか?
#マジ頼むっす
0962デフォルトの名無しさん
NGNGで、
*c = i; なら、cで表現できないデータが失われるかも、ってだけ。
*(int*)c = i; なら、メモリ破壊。
この違いがおわかりか?
0963デフォルトの名無しさん
NGNG0964960
NGNGうぅ、、、、、これは俺が試されているんだろう。
ここでしくじったら、二度と質問に答えてもらえないかも
#プレッシャー!!!
ということで、猿なので一度にはわかりませんので
順を追って考えさしてください。
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*cp = i;
と
memcpy( cp, &i, sizeof(int) );
との違いを理解しろ。
0967デフォルトの名無しさん
NGNGつか、君の主張では、
コンパイラは避けられて、又避けるべきな
「メモリ破壊を招くコード」をわざわざ出力する
と言うことになるんだが。
0968964=910
NGNGたびたびお騒がせしております
本日もたりない頭を絞ってみました
>*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=910
NGNGありがとうございます。
最初に気がついたのは、代入する値が127以下だと
表示される値が代入した値なのに、128以上だと
負の値が表示されることでした。
これはしばらく考えていたら、情報処理でやった
2の補数の考え方だと言うことに気がつきました。
最終的に確信が持てたのは変数の宣言を
unsigned charにしたときなのですが・・・・
で、さらに
printf("a=%d\n",a);
printf("a=%c\n",a);
などとやっているうちに、なんとか >>965 でいただいた
課題への回答へいたることが出来ました。
0970960=910
NGNGおっしゃるとおりですね。
そのときの自分は「キャスト」という物に
固執しすぎていたようです。
キャストするならば、コンパイラはこちらの意図通りに
だまされてくれるので、メモリ破壊が起こってしまいますが
そうでなければきちんと切り捨ててくれるんですね。
勉強になりました。
これからも頑張って精進していきます。
なにとぞよろしゅうお願いしますです。
0972971
NGNG説明が悪かったな。
この場合はたまたま結果が同じになるな。
float f; char c;
で
c = f;
と
memcpy( &c, &f, sizeof(char) );
では、結果が違うという事が言いたかった。
0973あぼーん
NGNG0974968=910
NGNGま、まだダメっすか・・・・
ちょっと鬱かもしれない。
> float f; char c;
> で
> c = f;
4Byte分のfloatの値(数値)を1Byte分のcharの
値へ(文字コードとして)代入しようとするが、
余分な3Byte分は切り捨てられる。
よって、メモリ破壊は起こらない。
(結果は意図した物にはならないが、
エンディアンにより一定の規則性あり?)
> memcpy( &c, &f, sizeof(char) );
変数fが格納されているアドレス(&f)から
1byte分(sizeof(char))のアドレスを
変数cが格納されているアドレス(&c)へコピーする。
メモリ破壊は起こらないが意図した結果にならない。
って、こう考えてしまうんですが、
わざわざお題を考えていただいているんだから
この答えじゃおかしいんですよねぇ。
なんか、まじめにこんがらがってきました。
足りない頭がマジむかつくっ!!
次スレに移行するまでにはOK頂きたいっす。。。。
0975972
NGNG>(結果は意図した物にはならないが、
>エンディアンにより一定の規則性あり?)
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のようにした場合、
"1001.TXT"と変えることは無理でしょうか?
0977デフォルトの名無しさん
NGNGchar *f = "1000.TXT";
f = "1001.TXT";
で何か問題でも?
0978デフォルトの名無しさん
NGNGそんな簡単にできるとは・・・。
char型はなんだかよーわかりません。。。
0979デフォルトの名無しさん
NGNGASCIIコードに変換→表示というプログラムを作りたいんですが・・・
宜しくお願いします
0980デフォルトの名無しさん
NGNG{
int i;
for(i = 1; i < argc; i++){
printf("%s\n", argv[i]);
}
return 0;
}
>>979
これを参考にしてチョ
0981979
NGNG早速のレス有難う御座います
この場合、okinawakenはどうやって入力させればいいのでしょうか
初心者質問ですみません
0982デフォルトの名無しさん
NGNGまずexe作って、
hoge.exeだったとしたら、
DOSプロンプトから
hoge.exe okinawaken
と打てばよいのではないでしょうか。
0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG#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
とすると和が表示されるはずです。
これを参考に。
0985979
NGNGおかげさまでなんとか出来そうな感じになりました
親切にしていただいて、涙がちょちょぎれそうです
多謝
0986979
NGNGokinawakenを ASCIIコードに変換→表示
という部分が上手くいかなくて・・・
申し訳ありませんが教えていただけませんでしょうか
0987デフォルトの名無しさん
NGNGwhile(*p) printf("%x\n",*p++);
0988979
NGNGご教授、誠に有難う御座います
しかし当方の頭ではコマンドライン引数で入力された文字列に
適用することが出来ませんでした
0989979
NGNGprintf("%s\n", argv[i]);
↓
printf("%x\n", argv[i]);
このようにフォーマット指定子を変えるだけで
ASCIIコードになると思っていたのですが
全然違うみたいですね・・・・
すみません、分からないです・・・
0990デフォルトの名無しさん
NGNGconst char* p=argv[i];
while(*p) printf("%x\n",*p++);
0991偽下部恵子 ◆GpSwX8mo
NGNGこれじゃだめかしら。
#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;
}
0992979
NGNG>991さん
自分のようなおばかに教えていただき、感謝の極みです
御陰様でやっとできました
大変貴重なレス、有難う御座いました
0993デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1012348974/
に吸収かな。内容大して違わないし。
0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
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デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG( ´�D`) < こんにちわぁ〜
= ⊂ ) \_______
= (__/"(__) トテテテ...
∋oノハヽo∈ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
○( ´�D` )○< つぃののみれす!
\ / \_______
しし))ミ ピョ-ン
∋oノハヽo∈ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´�D`) < きょうはせんをげっとしにきたのれす
∪ ) \_______________
(_)_)
0998デフォルトの名無しさん
NGNG(´�D`≡´�D`) < られもいましぇんね?ののがせんげっとしちゃいましゅよ?
(⊃ ⊂) \________________________
(_)_)
0999デフォルトの名無しさん
NGNG ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄(´´
∋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 |
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。