【隔離】Cなら俺に訊け! Part.104【病棟】
.._ .......、._ _ /:/l! まず問題を冷静に吟味して
:~""''.>゙' "~ ,、、''‐'、| Cの話か否かをはっきりさせてから質問しましょう。 _
゙、'、::::::ノ:::::::_,.-=. _〜:、 /_.}'':, 質問する前には最低限検索を。
``、/:::::::::__....,._ `゙'Y' _.ェ-、....._ /_゙''i゙ノ、ノ
,.--l‐''"~..-_'.x-='"゙ー 、`'-、 ,:' ノ゙ノブ
" .!-'",/ `'-‐'') /\ `/ でノ-〈
.-''~ >'゙:: ‐'"゙./ ヽ.,' ~ /
//::::: ', / ,:'゙
GUIなどの標準Cではできないことの質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書くべし。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/ Cプログラマ必読本・『プログラミング言語C』(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/ 各種リンク、関連スレは
>>2-4あたり
【前スレ】C言語なら俺に聞け! Part 103
http://pc5.2ch.net/test/read.cgi/tech/1109394073/ 他の過去ログはここ
http://nssearch.hp.infoseek.co.jp/clang/
イジョウ(・∀・)
なんだこのふざけたスレタイ
7 :
デフォルトの名無しさん:05/03/06 18:23:46
ヘミ猫が…ヘミ猫が…ッ!
9 :
デフォルトの名無しさん:05/03/06 18:37:05
>1
漏れはこういうのも好きだぞ!
>>1 そんなアホなスレタイはHSPスレだけでいいんだよ
氏ね。
11 :
デフォルトの名無しさん:05/03/06 18:48:20
だれかちゃんとしたの作れ
これでいーじゃん
>1
なんで荒れるような事するかなぁ。バカじゃねえの?
14 :
デフォルトの名無しさん:05/03/06 18:52:51
ここは隔離スレ?
本スレどこだよ
18 :
デフォルトの名無しさん:05/03/06 19:03:32
>>15 あの小僧が誰に向かって ぼけ つーたのかはっきりさせときたい
>>1乙。
前スレ
>>985 いや、いくら歳の離れた子から最近の流行を聞いても、どうしても真似できないことが必ずある。
その傾向はアニメなどに顕著に見られる。
例えば、エスパー魔美のことだって、父親が画家で魔美がヌードモデル(のアルバイト)をしていることや、
超能力を使えることまでは分かるかもしれないが、一度のテレポーテーションで600m移動できるとか、
高畑と魔美がよくガードレールを通してテレパシーで会話すること、
テレポーテーション用のハートのブローチは高畑の手作りであること、
雨の日に傘を差しながらテレポーテーションすると濡れてしまうこと(図説無しでは説明が難しい)、
写真に念写したときに(テスト勉強したと思われる)数学の式も念写されてしまったことなどは、
話を聞くだけじゃなくて実際にアニメを欠かさず熱中して見ないと分からない。
だからこそ、出来るだけ細かいことを書いている。
40のオヤジが、子供から話を聞いただけで魔美のテレポーテーション距離を知り、
かつ覚えることが果たして可能だろうか。
40のオヤジが、ドラクエIの呪文を順に10個言えるだろうか。
40のオヤジが、タイムパトロールに逮捕された犯人が23世紀の刑務所に入ることを知っているだろうか。
子供特有の注意力・観察力・記憶力・熱意が無ければ、そうしたディテイルは記憶に残らない。
あなたの年齢は分からないが、おそらくご年配だろう。
あなたはドラクエIの呪文を間違えることなく10個挙げられるのか。
「不思議の海のナディア」でノーチラス号が危機に陥ったとき、ガス中毒で死亡した
船員の名前を言えるだろうか。
ひみつのアッコちゃんで、アッコちゃんが変身しているところを人に見られたときに
どのような罰が下されるかを覚えているだろうか。
前スレ
>>986 スマソ、漏れはオヤジ扱いされることには我慢ならないので、つい。
前スレ
>>987 言われてみれば、INT21Hもあった。何の制御かは忘れてしまったが、INT21Hを使ったような記憶はある。
昔持ってたMS-DOSの本があればすぐに思い出せるのだが。
21 :
デフォルトの名無しさん:05/03/06 19:20:29
1.1と書いた場合この数値の型はfloat? double?
22 :
デフォルトの名無しさん:05/03/06 19:22:55
「キャスト」と「暗黙の型変換」の違いがわかりません
両者は同じものなんですか?
23 :
デフォルトの名無しさん:05/03/06 19:26:00
>>22 char c = '\x80';
int i;
i = c; //implicit conversion
i = (int)(unsigned char)c; //cast
>>21 最後にDをつけない場合は float.
>>22 キャスト→人間が強制的に型変換する
暗黙の型変換→コンパイラが自動的に必要に応じて型変換する
>>24 長文だからコピペとは限らない。
>>20は漏れのオリジナル。断じてコピペではない。
前スレの教訓。
荒らしは基本的に放置
スルーできない奴は、当人も荒らし
27 :
デフォルトの名無しさん:05/03/06 20:47:14
>>23 でもそのふたつ、結果は同じなんですよね?
たまたま結果が一致してるだけですか?
結果が違うケースもあるんですか?
printf("%d %d",c,(int)(unsigned char)c);
29 :
デフォルトの名無しさん:05/03/06 20:59:39
JAVAはCの欠点を補った言語だときいたのですが、
JAVAよりもCが主な言語として使用されていくとききました。
なぜでしょうか?
よろしければ具体的にお願い致します。
>>29 誰がどこで言ってたんだ?何故言ってた奴に聞かない?
31 :
デフォルトの名無しさん:05/03/06 21:07:17
>>14 21エモンのオープニングは光GENJIじゃねーよ。ぼけ。
32 :
デフォルトの名無しさん:05/03/06 21:11:41
>>31 21エモンのオープニングは「ちょいと急ぎな車屋さん〜」という曲のはずだけど・・・
若い男性のグループということだけは確かだけど、光GENJIじゃなければ誰だろう・・・
記憶違い大杉>漏れ
樹海に逝ってくる。
>>29 重い、言語仕様がでかい故に柔軟性に欠ける
35 :
デフォルトの名無しさん:05/03/06 21:27:57
>>34 ありがとう御座います。
また、PerlとRubyというプログラミング言語が、CやJAVAより
すぐれているとききました。
どのような点からでしょうか?
36 :
デフォルトの名無しさん:05/03/06 21:35:54
>>20 藻前は本当にオヤジ臭いな。
オヤジ扱いされて腹立てる辺りがオヤジ臭いんだって。
38 :
デフォルトの名無しさん:05/03/06 21:38:23
>>36 有難う御座います。
また、CやJAVAよりとっつきやすいでしょうか?
>>38 ちょこちょこ作ってすぐ試せるからね
とっつきやすいと思う
構文もcに似てるしね
41 :
デフォルトの名無しさん:05/03/06 21:49:03
>>38 はい。おそらくとっつきやすいです。
言語そのものがというより、環境を準備するのが簡単だからですが。
42 :
デフォルトの名無しさん:05/03/06 21:53:34
有難う御座います!
>>41 環境とはどのようなものでしょう?
また、初心者にお奨めはどちらでしょうか?
Perlのほうが有名っぽいのですが。
樹海に逝く前に、
>>32 40のアニオタ・ゲーオタって極めて稀だと思うのだが。
しかも、子供並に熱中するとなれば尚更のこと。
実は漏れ、ヲタの友人に付き合って(オタ向け)アニメ専門店に行ったことがあるが、
いくら探しても藤子不二雄の作品は見当たらなかった。
ということは、だ。藤子不二雄作品はアニオタには人気がない可能性が高い。
ゲームにしても、DQ4で小さなメダルを全て集めるのは子供であって、
ゲーオタではない。DQ4で小さなメダルを全て集めないと気がすまない40代のオヤジがいたら、
どんなヤツか見てみたい。
40のオヤジがセーラームーン(コミック)を買うことはあるようだが、
年齢から考えると特定の登場人物に「萌え」的感情を持っている可能性が高い。
確実に言えるのは、純真無垢な子供と40代のオヤジでは持っている感性が違うこと。
アニメを見せて感想文を書かせたら、子供とオヤジでは全く違う文章になるはず。
それに、漏れの文章のどこがオヤジなのかと問いたい。
もし漏れがオヤジだとしたら、長文を書いてまで自分を20代だと主張して何になる?
ネット上で実年齢を証明する手段は存在しないが、あれだけ証拠を揃えたら
普通は(漏れが)20代だと納得するだろ。
アニオタ・ゲーオタの可能性を無くすために敢えて幼児番組まで書いた。
さすがに、40のオヤジが幼児番組を好んで見ることはないだろ。
「にこにこぷん」は、当時は幼児だったから楽しかったんだよ。
今の漏れが見たら、幼児のように無邪気に楽しむことは出来ない。
こういうことを書くと「(オヤジが)ロリコンだったら〜」とか言うかも知れないが、
「にこにこぷん」は大人がぬいぐるみを着て演技しているのだから、
ロリコンが好む可能性は皆無に等しい。
そこまでして漏れにオヤジのレッテルを貼るのは何故?
>>43 残念、あんたは実年齢じゃなくて精神的「オヤジ」ですから〜
むきになるところがオヤジなんだってば。
そうそう、幼児番組云々だが、好きな奴はとことん好きだぞ。
漏れは今やってる幼児番組が好きで詳しいが、漏れは幼児なのか?w
>>42 Perlのが普及してるのかな?
最初はどっちでもいいと思う
いいかげんスレ違いって怒られそうなので
googleで調べておいで
>>37 リアルだったら直接顔を合わせればおおよその年齢を相手に伝えることが出来るが、
ネットだと、少なくとも2ちゃんねるでは、直接顔を合わせることが出来ない。
だから、0歳から100歳まで好き勝手に設定されてしまう。
実年齢は証拠を腐るほど挙げたからいいとして、精神がオヤジだと思われるのは耐えられない。
漏れはオヤジが嫌いだというのもあるが、オヤジと言われて喜ぶ香具師がどこにいる?
「オヤジ」って、はっきり言って侮蔑語だろ。
同じ40代でも、品があって好感を持てる男性を「オヤジ」とは言わないだろ。
(漏れが言うのも何だが)それこそ、「オジサマ」とか言うだろ。
漏れのどこがオヤジなのかと問い詰めたい。
>>44 >残念、あんたは実年齢じゃなくて精神的「オヤジ」ですから〜
ギターの無い波田陽区は寒いからやめろよw
まあ、歳の割りに落ち着いていると言われることは結構あるが、
オヤジと言われたことは一度も無いぞ。
まあ、良く言えば「冷静沈着」といったところだ。
だが、断じて精神的に更けていることはない。
>むきになるところがオヤジなんだってば。
むきになったらオヤジか。w
>そうそう、幼児番組云々だが、好きな奴はとことん好きだぞ。
あまり聞いたことが無いな。少なくとも今の漏れには、幼児番組を楽しむことは出来ない。
>漏れは今やってる幼児番組が好きで詳しいが、漏れは幼児なのか?w
子供がいれば、一緒に見て楽しむこともあるかも知れないが、
子供がいないのに幼児番組を好きになれるか?
もし幼児番組を素で楽しめるとしたら、幼児と同じ感性を持っていることになる。
まあ、今までの発言を見る限り、人をからかうのが好きな幼稚園児レベルだな、藻前の精神は。
つまり、「ガキ」ということだ。
48 :
デフォルトの名無しさん:05/03/06 22:34:46
オヤジは粘着だからうざいな・・・
>>47 10代の漏れの私的な価値観からすると、
「とても20代とは見えないくらい幼稚に見える」とだけ言っておこう。
3・40代のオヤジ× 10代半ばのリア中○
騒いでたら大人気なく見えて情けないから、冷静になって落ち着きなさいな
>>48 藻前らがそうさせているんだろ。
>>49 どうやら、2ちゃんねるでは精神年齢が退行してしまう性質が漏れにはあるようだ。
冷静になりたいが、オヤジ扱いだけは耐えられない。
>>50 >冷静になりたいが、オヤジ扱いだけは耐えられない。
いい加減、社会に出ろよ。
世の中には優秀なオヤジもけっこういるぞ。
皆、そういう優秀なオヤジ達を目指して
必死で頑張ろうとするから、
人間として成長していくんだよ。
ス ル ー し る !
>>51 それは間違いないが、今の時代「オヤジ」という言葉はマイナスイメージの方が強い。
その証拠に、40代の上司に対して面と向かって「オヤジ」とは言えないだろ。
優秀になりたいとは思うが、オヤジにはなりたくない。年齢の問題じゃなくて、精神的に。
隔離の病棟スレだろ?こんなもんだろ
本スレどこだよ
>>53 >その証拠に、40代の上司に対して面と向かって「オヤジ」とは言えないだろ。
俺なら、20代の部下に対してだって、
面と向かって「ガキ」とは言えないね。
それは何の証拠にもなっていないよ。
>>57 お前が来るな。
隔離スレから追い出すなよ。
>>58 >隔離スレから追い出すなよ。
結局のところ、諸悪の根源は
>>1 ということで。
>>59 20台を主張するキチガイは前スレから居付いたわけで。
そのためにこのスレができたわけで。
>>53 紳士的でダンディなオヤジ(オジサマ?)には憧れるし、なりたいと思うけどなぁ
何時かは言われるようになるんだし、どうこう言っても仕方ない気がするのは私だけ・・?
そういう細かいことを気にするから老けるんだ
俺も20代だが、オヤジと言われたこともあれば若いと言われることもあるし、
人それぞれなんだから別にいいじゃん。あらゆる人から同じように見られるなんて
ある意味気持ち悪いと思わないか?
あまりにスレ違いなので、ひとつ軽い話題でも。
ソースの分割ってどのあたりを目安にして分けます?
機能、目的、量とか・・・規模によっても違うと思うんですけど、どんな感じでしょ。
話題性に乏しいようでしたらスルーでよろしく。
あの・・・もうPart.105立てちゃおうかw
>>前928
せっかくですが今の自分には分かりませんでした・・・
66 :
デフォルトの名無しさん:05/03/07 01:16:48
なんか盛り上がってますなー
>>65 仮に、
char output[4];
とする。
char *p = output;
*p++ = '0';
*p++ = '1';
*p++ = '2';
*p++ = '\0';
と、ここまでは何をしているか判ると思う。
ここでpの指す先はどこだろう。
配列outputは要素数が4だから飛び越してしまうわけだね。
そもそも最後に'\0'を書きたいわけだから最後のpのインクリメントは必要ないわけだ。
文脈によってはインクリメントしても構わないだろうが、
最後の行は
*p = '\0';
で充分と言うことだ。
と、元のソースを無視して解説してみるテスト。
>>63 ソースの分割は構造体とそれに対する操作をセットにしたあたりを目安にして分けたりしてます。
量とかは関数の分割の目安に使ってます。
>>67 >>924じゃないけど便乗。
>*p++ = '0';
つまり↑は代入された後にインクリメントされるから、
最終的なポインタpの値がa[4]になって(越えて)しまうってことだよね?
70 :
デフォルトの名無しさん:05/03/07 02:31:26
メモリリークについての質問なのですが、mallocしなくてもメモリリークしてしまうことはあるのでしょうか。
今書いてるプログラムでmallocしたものは全てfreeしているにも関わらず、メモリが開放されていないような現象に陥っているのですが。
また、あるとしたら起こしている箇所を調べる方法や、解決する方法などありましたら教えていただきたいです。
strdup()使ってるとか(w
72 :
デフォルトの名無しさん:05/03/07 03:59:37
プログラムの中に関数がいくつあるかわかるようにするにはどうすればいいんですか?
「昇順に並べる」がどっちか分からなくなっちゃいました。
マジ恥ずかしい質問なんですけど教えてください。
すいません・・・まじで。
昇順でググれば一発なものを、わざわざ3行もかけて書き込むとはどうかと
余計な文をつけてググっちゃったせいで
ニアピンなHPばっかヒットして焦ってカキコしちゃいました。
真面目にモニターを前に顔から火を噴いています。
とにもかくにもすべてのレスに感謝。
一生忘れずにすみそうな気がします。
78 :
デフォルトの名無しさん:05/03/07 04:59:04
79 :
デフォルトの名無しさん:05/03/07 04:59:49
> メモリが開放されていない
するなよぼけ > 開放
80 :
デフォルトの名無しさん:05/03/07 05:01:59
81 :
デフォルトの名無しさん:05/03/07 05:02:39
ぼけ。解答なんかよんだら意味ねーだろ。自分で考えろよ。
82 :
デフォルトの名無しさん:05/03/07 05:03:47
Answer Bookのほうが質がいいな。
朝っぱらから解答THX
>>81 そりゃ自分なりのプログラムは書きますYO!
書き上げたあとで洗練されたものと比較して、どのように改良できるのかを考えるのも大切だと思ったんすよ
>>82 マジっすか Amaz(ryでは散々に言われてましたけど・・・;
>>80 アトランダムに、Answer to Exercise 4-1を見てみた。
あんまりいいコードには見えない。
#異常値として-1を使うのは悪くないが、生のまま使うのはよくない。
教えてください。
関数の引数がない場合に
int hoge();
と宣言する場合と
int hoge(void);
と宣言する場合で
何か違いはありますか?
たしか、型チェックがどうたらという話を聞いたような
気がするのですが、いまいちよくわかりません。
>>85 Cの場合、前者は引き数プロトタイプを省略したと見做される。
従って、
int hoge();
int main()
{
return hoge(0);
}
という呼び出しができる。
後者の場合は、当然に引き数がないことを要求されるので、
int hoge(void);
int main()
{
return hoge(0);
}
はエラーになる。
ちなみにC++の場合は引き数プロトタイプを省略できないので、どちらでもいいと言うことになる。
87 :
デフォルトの名無しさん:05/03/07 10:51:56
引き数 じゃねーと 引数 だ ぼけ
>>86 ナイスな説明ありがとうございました。
voidは引数がないことを明示的に宣言するわけですね。
89 :
デフォルトの名無しさん:05/03/07 11:25:10
そんな日本語はありません > 明示的に
英和辞典用語だ ;-)
「暗示的に」ならある。
プログラミング用語ですよw
「償却された値」とかもいかにも英語を無理やり日本語に
置き換えた感はありますが・・・
>>69 配列の最後の要素の次を指すポインタは有効。
これは例外なんどけどネ。まぁ,規格書読んでくれ。
とりあえず最後にインクリメントするのは不要なのは確かだな
92 :
デフォルトの名無しさん:05/03/07 14:45:54
>>78 ありがとうございます。さっそくフリーソフトで試してみます。
93 :
諦めかけた人:05/03/07 14:54:27
誰か、あほな俺でも分かるように _alloca の使い方と使い道を教えてください。
初心者に、「まず標準Cの範疇かどうかを確認しろ」
ってのは無理な注文なんだろうか…
>>93 alloca / _alloca が使えるシステムは多いが、
標準ではない。
malloc は知ってるのか?
100byteぐらいのデータがどんどん来て
それについて処理をするのだけど
すでに処理をしたデータと同じ場合飛ばしてよくて
でも、大量に有るから保存はしないで
すでにあったかどうかを知る方法を教えてください。
ハッシュとか使うのでしょうか。
>>96 ごめんなさい。
お手数ですがもしご存知でしたら適当なスレを教えていただければ幸いです。
>>93 使い方は簡単。malloc()と同じ要領。
但し、解放は暗黙に行なわれるのでfree()してはいけない。
という実装だと思われるが標準ではないので詳細は該当スレで。
尚、非標準ではあるし使い道に悩むくらいなら使わないほうが宜しい。
>>95 未処理のデータを処理せずに飛ばしてしまう可能性が
あっても良ければハッシュが有効。
たとえ僅かでもそのような確率があっては許されない
時はハッシュは役に立たない。全データを保存して
おくしか無いと思う。
保存したデータを検索する時にはハッシュが使える。
100
101 :
80:05/03/07 16:09:12
102 :
諦めかけた人:05/03/07 16:21:03
標準C だのとか言うのは初心者でどうも分かりませんが、
使い方が malloc と一緒と聞けたので、なんとかわかりました。
けど、素直に malloc だけ使っとくことにします。
>>94>>98さん、ありがとうございました!
>>99 どうもありがとうございます。
多少飛ばしてしまってもかまわないので。
すみません、STLのsetとfindを使えば、ハッシュ検索ということになりますか?
getcharの戻り値がint型なのについて質問です。
getcharはファイルの終わりに達すると-1のEOFを返すという
とこで、int型である必要があるとの説明を見ました。
もしgetcharの戻り値をchar型で受け取ってしまうと、
ファイルの終端よりも前でEOFと判断してしまう可能性が
あるということのようです。
これって要は、int型→char型の変換で上位の数ビットが
切り取られてしまうからという様に自分は解釈したのですが
これでいいのでしょうか?
だとすると、疑問なのですが、char型の範囲を超えるビットが
ONになるようなint型の数値でEOF以外のものが戻り値でありうるのでしょうか?
あるいは0xFFという文字があることを想定してのことでしょうか?
EOFと勘違いしてしまうケースはどういう戻り値を返すときなのでしょうか?
>>104 君はせっかく2147483647文字読み込めるところを
わずか255文字にしたいのか?
まず、getcharの返却値は読み込んだ文字数です。これはおk?
intなのは当然でcharなのはかなりおかしいと思いませんか?
EOFと考えるからこんがらがってるんじゃないか?
通常は読み込んだ文字数を返すけど、ファイルの終わりを読み込んだら
終わりのしるしとして-1を返す、ってだけ。
で、-1だとみんな忘れるからそれにEOFという名前を
わりあててるだけのこと。
108 :
デフォルトの名無しさん:05/03/07 16:54:15
>>106 > まず、getcharの返却値は読み込んだ文字数です。
そんな変なライブラリ使うなよ。
>>103 ここはCスレだからSTLはスレ違い。ちなみにSTLにはハッシュという概念がない。
cで、変数の宣言って関数の先頭で行わなければならないんですか?
自分が組んだプログラムがgcc-3.3.3ではコンパイル出来たんですが、
フリーbsdのgcc-2.95では関数の途中(式文?を書いた後)で宣言した変数は、宣言がされていないというエラーが出てしまいました。
gccのバージョンの違いでこうなるのかと思うんですが、gcc-3.3.3で同様にするオプションがありましたら教えてください。
スマン、何かと勘違いしてた...
スレの住人の皆様、このスレのレベルを下げる書き込み大変失礼しました。
>>104様
大変失礼しました。
>>106の書き込みは気にしないで下さい
いや、むしろ削除依頼だしたいくらいです。
と言うわけで、今日からC初心者に戻ります、さようなら
∧||∧
( ⌒ ヽ
∪ ノ
∪∪
>>110 >変数の宣言って関数の先頭で行わなければならないんですか?
そうです。
>>110 -std=c89 -pedantic-errors
>変数の宣言って関数の先頭で行わなければならないんですか?
そのローカル変数が使用される中括弧ブロックの先頭なら良い。
#c++もいらん拡張をしたもんだ
>>114 > #c++もいらん拡張をしたもんだ
不必要なコンストラクタ走らせないためじゃないの?
自己解決しました。orz
.,/ _,/ .、、 ...、ヽ,,-、
.,,メ-‐'" _"',| .、、._,i.""│._、
._,,,/`,イ―'' ,`",l゙、、,,ジ'"`.```.|゙゛
.,,,-,i´,―--―''" 、、,!冖'"`、_、,,,/'゚,,."゙l-‐''
_,,,,,,,,,,,,,、 _,,,,,--''"`'",/゙ 、、.',j/′.、,,∠''"` .'_ヽ.',゙l.._,,、
,,-'"゙` `゙゙''lーイ"` .‐′ _,..,,/ .ヽ、,i,i´ ``゙’ 、、シ":"'.「
.,,i´ `'i、\ ゙!, ._,-'"ン'` 、、`_,/`,i´ _,___,ニ='" .'゙、゙".゙l,,-'`
.,/′ `'i,\ ′ .,,,,-',,,,、.,i´、_:_'_v`"゙i、| ```` ` 、_,Jィ""゙l, _,,,,、
: ,i´ ゙l. ヽ丶 .r‐'"、.l゙、、:,p=l┴丶 .!,,! `'"''''''冖''?'''゙~."""'."'/゛ `
: |,,r ゙l, 、 i、、、、:,,_,xl!ヴi,、 、、っ,,,, 、`',,,,、`、`、|、
|、 、"| .i、 lrr-''"゙,,ハ;、-'"゙゙'''''''"丶ヽ.,,冫``~`"`"~"``` `/ `''''
`''r,,、 、 、、 .、丶、.``ヽ,レ"° `` .j゚'=∠、````,,,,,∠ ~'ヽ```````、_,r‐'ヘi、
`゙'ーi,,_、、、、、: :._,,,r〃 " /^゚"'广 ,/ .,/゙゙゙'''ヶ―''''″ `
`゙^""""''"'" ` ′ ′ ."
ぱいちんこ
121 :
デフォルトの名無しさん:05/03/07 19:32:39
同じファイルに fopen 二回かけるのはまずいんですか?
123 :
デフォルトの名無しさん:05/03/07 19:59:55
なるほど。Thx
124 :
デフォルトの名無しさん:05/03/07 20:37:46
2次元配列をmain関数と自作関数でやり取りするときはどうすればよいのでしょうか?
ポインタを利用すればいいのはなんとなくわかるのですが、2次元になるとどのようにポインタの値を増やせばいいのかがわかりません
ちなみに与えられた課題は
2行2列の行列を入力し、その逆行列を求める関数を作れという問題です
main()で行列を入力し、逆行列を求める関数inv()に渡す
mat[2][2]
scanf()
inv()でmat[2][2]の値を利用して逆行列を求める
mainに返すか、invでそのまま結果を表示するかは自由
です
二次元配列は配列の配列。
だから、配列へのポインタを渡せばよい。
126 :
デフォルトの名無しさん:05/03/07 20:51:50
> #c++もいらん拡張をしたもんだ
アホ
128 :
デフォルトの名無しさん:05/03/07 21:57:08
char (**c)[4] ;
には何を代入できますか?
ポインタ配列へのポインタだから、 char *p[4] ;
と思ったけど、駄目でした。
130 :
デフォルトの名無しさん:05/03/07 22:11:32
>>129 char (*voke)[4];
c = &voke;
cha sine[4];
voke = &sine;
じゃあ、これには何を入れればいいんですか?
int ((**c)[3])[4] ;
(´・ω・`)
>>126 えっ。今までそう思っていたよ。
(スレ違いかも知れないけど)
教えて下さい
135 :
デフォルトの名無しさん:05/03/07 22:42:33
>>131 int ((**c)[3])[4] ;
int (*aho)[3][4];
c = &aho;
VC++.NETでプログラムを作ったのですが、ただの開始を選ぶと正常に動作するのに、
デバッグなしで開始すると画面が真っ黒になります。原因にこころあたりのある方は
おられませんか?
137 :
デフォルトの名無しさん:05/03/07 22:46:02
>>131 これとにらめっこして一生悩んでなさい
#include <stdio.h>
int
main(int argc, char **argv)
{
int ((**sine)[3])[3];
int (*aho)[3][3];
int baka[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
aho = &baka;
sine = &aho;
printf("%d\n", (**sine)[1][1]);
return 0;
}
わかりやすいこたえをありがとう
また始まるのか (・∀・)ニヤニヤ
20代がおとなしいな
>>141 乾燥注意報が出ております。
火の元には十分注意してください。
ああ新言語規格ですね。
規格に準拠したコンパイラってもう出来たんですか?
C90ベースの回答をして「アホ」呼ばわりされてもねぇw
ああ失礼。規格に付いては全然知らなくて
俗に言うANSIーCのつもりだったのですが
なんといいますか、まあ…あれだ。
ROMっとけ。
ネタスレだからって、どんなネタでも受けるわけじゃない。
最低限の基礎も知らないくせにえらそうな態度だな
149 :
デフォルトの名無しさん:05/03/08 00:47:08
> > 変数の宣言って関数の先頭で行わなければならないんですか?
> そうです。
いいえ。
そんな制限があるコンパイラーはにせものです。
>>114 C++の設計と進化の3.11.5にその辺乗ってるよ。
個人的には116が結構納得だけど。
>>144 通称C89のANSI CがISOで承認されたのが1990年なことから、C90とも呼ぶよ。
151 :
デフォルトの名無しさん:05/03/08 01:31:26
> そのローカル変数が使用される中括弧ブロックの先頭なら良い。
> C++もいらん拡張をしたもんだ
いちばん始めのCからそんなのはできてたぞ ぼけ
152 :
デフォルトの名無しさん:05/03/08 01:32:40
> 通称C89のANSI CがISOで承認されたのが1990年なことから、C90とも呼ぶよ。
そんないわれかたができたのも 1997年後ごろから。
(しかも一般人までひろまったのが、2000年以降)
153 :
デフォルトの名無しさん:05/03/08 01:35:32
154 :
デフォルトの名無しさん:05/03/08 01:41:35
c言語で図形を描画してみたいんだけど
turbo cじゃなくてvc++.netでも出来ますか?
155 :
デフォルトの名無しさん:05/03/08 01:45:24
そんなものはありません > c言語
>>151 >110
>フリーbsdのgcc-2.95では関数の途中(式文?を書いた後)で宣言した変数は、宣言がされていないというエラーが出てしまいました。
に対してC++もいらん拡張を…と書いたんだと解釈したけど違うかな。いい方に考えすぎ?
>>152 何だ?に対しての返答だから、いつから…は関係ないのではないかと。
C99なんかと区別するために結構最近使われ始めたってのは同意。
157 :
デフォルトの名無しさん:05/03/08 01:47:51
> 彼らはさっそく新しい言語にC9Xという愛称を付けた。
> 1989年にANSIが承認したC89と区別するためだ。
> 疑い深い人々がそれをC0Xと呼び始めるのにあまり時間はかからなかった。
> 彼らはそれが実際には2000年以前には完成しないだろうと考えたのだ。
158 :
デフォルトの名無しさん:05/03/08 01:49:37
> に対してC++もいらん拡張を…と書いたんだと解釈したけど違うかな。
っていうか、Cは「その変数を使う前ならどこでもOK」だ。
実はC++より前にCにはその機能が入っているものが多かったのだ。
159 :
デフォルトの名無しさん:05/03/08 01:50:51
> 関数の途中で宣言した変数は、宣言がされていないというエラーが出てしまいました。
それはそのコンパイラーがにせものだからです。
うちの (gcc 4.0)では平気です。
>>157 どこかで読んだことが…とぐぐってみたらCマガ2000年4月号と出ました。約5年前の記事とは。
>>158 C89実装系なら変数宣言はブロックの先頭、処理系によってはC++の構文を取り入れて
ブロックの先頭以外でもOK、C99実装系ならブロックの先頭以外でもOK…ってことだよね。
161 :
デフォルトの名無しさん:05/03/08 02:03:14
いいえ、「C++の構文をとりいれて」ではありません。C++が真似したの。
どっちがさきにその点が有名になったかで勘違いしているひともいる。
あ、勘違いといえば、// 形式のコメントについてもC++由来だと思い込んでいるぼけがいた。
実際にはちがう。
ここにかいてある通りだ >
http://www.gihyo.co.jp/book/2001/402231/download/column.html > ところで、この形式のコメントはC++では当初より採用されていたものなので、
> C++からのフィードバックだと思う人もいるかもしれないが、
> 実はCの祖先であるBCPL由来のものだ。
> むしろ隔世遺伝か先祖返りといったところだろう。
>>161 そうなの?規格ベースだとC89からだろうけど、実務ベースだとあんまり自信なさげ。
C++設計と進化によると、途中の変数宣言はAlgolから拝借と書いてあるのと、
自分が普段使ってるVC、BCCコンパイラがCコンパイル時はちゃんと途中の変数宣言を
エラー扱いするから、Algol -> C++ -> C99 と遷移してきたと思ってたり。
//のコメントが BCPL が祖先ってことは C++設計と進化 にも書いてあるのと、
以前どこかで読んだという、うろ覚えな記憶が。
>>162 自己訂正レス
>規格ベースだとC89からだろうけど
規格ベースだとC99からだろうけど
です。
164 :
デフォルトの名無しさん:05/03/08 02:17:19
> Algol -> C++ -> C99 と遷移してきたと思ってたり
それはおおきなまちがいです。
> //のコメントが BCPL が祖先ってことは C++設計と進化 にも書いてあるのと、
初期のCでは使えなかったのですが、使える拡張をする処理系が増えたのはC89ができるよりも
前です。てっきりC89でも取り入れるかなー とおもったけど入らなかった。でもC89以降の
処理系では、たいがいのものがその拡張(//)をしてあった(たいがいスイッチでオフにもできる)。
C99で「いまさらながら」とりいれられたものです。
つまりC++登場以前からCではけっこう普及してたんですよね。
165 :
デフォルトの名無しさん:05/03/08 02:20:28
i =+ 2; ってのが
i += 2; になった時代 (もしくは、前者も互換性のために残してあった時代) から
Cを使っているひとは、ここにはいなさそうですね。
わたしの時代のCは
# include みたいに、#のあとに空白はNGでした。
#ifdefはあったけど#ifがなかったのでけっこう苦労しましたね。
0xffとかはあったけど、""の中では\xもなかったので全部8進数で書いてました。
>>164,165
なるほどです。
C89制定時はまだC言語に(プログラミングにも)出会ってなかったので、
面白い話が聞けました。どもです。
ちなみに、#のあとに空白入れてもOKなの知らなかった。。。
167 :
デフォルトの名無しさん:05/03/08 02:30:06
#のあとに空白をいれると、
#if ほげ
# define FOO
#else
...てときにインデントできるってんだけど、わたしは嫌いなのでやらないです。
>>167 あ、納得。使わないけど、自分も時たま見ますね。
#if #ifdef 系列だけかと勝手に思ってたら#includeなんかでも使用できたとは。
#if ほげ
#define FOO
#else
で充分だろ?
>>165 原始時代のCをよむと、
どうも、ポインタが一律で、unsigned int扱い、らしく、
たとえば、
struct user
{
int u_rsav[2]; /* save r5,r6 when exchanging stacks */
int u_fsav[25]; /* save fp registers */
/* rsav and fsav must be first in structure */
...
char *u_offset[2]; /* offset in file for IO */
...
} u;
char *u_offset[2]; は
unsigned int u_offset[2];
相当らしく、
しかも、この実装では、
intが16ビットらしく、
ようするに、これは、
上位16ビット/下位16ビット
計32ビットを入れるためのものらしい...です。
#なんでこんなものを<略>
(最近になってCを始めた人としては・・C99だけ覚えたら良いのでは?とか思ってるわけで・・・
企画制定にまつわる話や当時の風潮を知るのは非常に興味深い事だし、なぜこうなったのかを知るのは大切だと思うけどね。
C99完全準拠な処理系ってなんかあったっけ?ぱっと出てこないだけど。
173 :
デフォルトの名無しさん:05/03/08 09:07:54
@ XXXXXXXXXXXXX @
のような、@で囲まれた部分を削除するツールを作りたいんですけど、
@ 〜 @ で囲まれた部分を空白に置き換えることは出来ますが、
削除(DeleteもしくはBackSpace)が押されたときと同じ動作をさせるには、
どうすればいいんですか?
175 :
デフォルトの名無しさん:05/03/08 10:04:52
s/@[^@]*@//g;
お早い回答ありがとうございます。 s/ //g; の部分が
ピンときませんが、家に帰ったら試したいと思います。m(_ _)m
何この問答…
178 :
デフォルトの名無しさん:05/03/08 10:14:58
そのセミコロンはなんだよ ぼけ
179 :
デフォルトの名無しさん:05/03/08 10:15:32
> 最近になってCを始めた人としては・・C99だけ覚えたら良いのでは?
そうですね。それ以外覚えてもあまり意味ない。
180 :
デフォルトの名無しさん:05/03/08 10:16:00
> VC.NET
あんなものはCコンパイラーとは呼べない。
182 :
デフォルトの名無しさん:05/03/08 10:30:11
>>181 問題をもっと詳しく記述しなさい
宿題ならそのまま書きなさい
183 :
デフォルトの名無しさん:05/03/08 10:34:18
s/@.*@//g; ではなくて
s/@.*@//g だ
それを含む行を行ごと全部消したいなら
g/@.*@/d
184 :
デフォルトの名無しさん:05/03/08 10:39:01
もちろん、
@あいうえお@かきくけこ@さしすせそ@
みたいなのを
かくくけこ
だけにしたいなら
@.*@の部分は@[^@]*@ になるが
いずれにせよセミコロンはへん
最後にもうひとつお願いします。関数は何をつかえばいいのですか?
普通に fscanf の "" の中に入れて試してみようかと思ってるけど、
にわかには信じがたいのです、試そうとは思いますが。
質問。
処理系はx86系のWin機です。
たとえば、
unsigned long *mem;
mem = (unsigned long*)malloc(1000*1000*4);
と、newやmalloc等で確保した大きめのメモリ領域はシステムメモリに割り当てられるのか、
それとも仮想メモリに割り当てられるのかは選択、もしくは判断できるのでしょうか?
OSがメモリの管理を行なってるので一概にとはいえないけど、こちらからは操作できないのかと考えてます。
188 :
デフォルトの名無しさん:05/03/08 11:00:03
関数などつかうなsedを使えぼけ
車輪を再発明するな ぼけ
sed 's/@[^@]*@//g' ファイル名
だ ぼけ
189 :
デフォルトの名無しさん:05/03/08 11:01:12
> 処理系はx86系のWin機です。
よそ行け ぼけ
Windowsにまともな仮想メモリーなどない ぼけ
190 :
デフォルトの名無しさん:05/03/08 11:08:22
>>174 おまえはよ。ちょっとましな先生のもとで授業でもうけたほうがいいぞ。
「きょうは@で囲まれたところを消したいが
明日は#でかこまれたときを消したいかもしれない」
「きょうは1行に複数でてきたら全部消したいかもしれないが
明日はその行に出てきた最初のだけ消したいかもしれない」
「きょうは消したいが、明日は-�に置き換えたいかもしれない」
「来年のいまごろにはそれがでてきた行をすべて消したいと思うかもしれない」
「1年半語には、それが出てきた行を次の行と連結してさらにその次の行と
とりかえたいと思うかもしれない」
ということを考えろと教えないやつはだめ教師
191 :
デフォルトの名無しさん:05/03/08 11:10:11
そんなの要望を全部満たすのがsedだ。
いまさらsedの数百分の1の機能のもの(しかもバグだらけになるだろう)を
再発明して何になる。自分のコーディングの勉強にさえならないことはわからないのか?
sedの使い方を少しでも慣れ、その思想にふれたほうが、よほど自分のプログラムの
勉強になる。と、わたしの学校の先生は言った。(もうすぐ卒業式!)
192 :
デフォルトの名無しさん:05/03/08 11:17:59
っていうかsedさえ使えないようなやつがコード書くなよなあ...。
おそろしい時代になったもんだ。
193 :
デフォルトの名無しさん:05/03/08 11:20:48
edだったら
1,$s/@[^@]*@//g したり
g/@[^@]*@/ したりすればいい。
viだったら
:%s/@[^@]*@//g したり
:g/@[^@]*@/ したりすればいい。
sedだったら
sed 's/@[^@]*@//g' ファイル名 したり
sed '/@[^@]*@/' ファイル名 したりすればいい。
...と日下部先生の本にも書いてある。
>>188 その程度の事で別プロセス起動するのは如何なものか。
>>188-193 遅れながら申し訳ないです。少し席を外してまして。
こんな素人にもわかるご説明ありがとうございました。
ただ、自分のは Windows なので…
しかも、ここはC言語スレなので… それが残念でした。
>>196 ふつー、regex (なければ拾ってきて) 使う
やはり、本来文字を削除する場合、空白じゃなく、全くの(Deleteみたいに)無にしたいのですが、
それはないのですか?
ないですよ。
>>200 LIFOに空白以外積んで書き込んだら?
×LIFO
○FIFO
に訂正
日下部(笑)
205 :
デフォルトの名無しさん:05/03/08 15:18:57
完全にネタスレ化しとる
>>205 最初から隔離目的に立てたスレだろ?それが何か?
207 :
デフォルトの名無しさん:05/03/08 17:12:45
(int*)NULL とかって、キャストする意味は何ですか?
ただ単に読み易くするだけですか?
>>207 別に無くても良い。
俺は読み易くなるとは思わない。(読み辛くなるとも思わないが)
ほへぇ
べほぉ
>>211 自分で本スレ立てれば?&削除依頼出せば?
213 :
デフォルトの名無しさん:05/03/08 19:58:30
>>189 仮想メモリー
仮想メモリー
仮想メモリー
仮想メモリー
仮想メモリー
仮想メモリー
仮想メモリー
仮想メモリー
仮想メモリー
仮想メモリー
214 :
デフォルトの名無しさん:05/03/08 20:53:51
sed sedってUNIXの亡霊にとり憑かれたジジイが・・・
215 :
デフォルトの名無しさん:05/03/08 21:04:45
いや、sed は便利だよ
GUI の 10 〜 10000 倍くらい早く仕事を片づけてくれる
216 :
デフォルトの名無しさん:05/03/08 21:48:26
sedよりperlのほうが強力で早いよな
いまさらperlやるのもな。
218 :
デフォルトの名無しさん:05/03/08 22:09:27
いまさらsedやるのもな。
いまさらsed,perlやるのもな。
今からやるならCだよな!
仮想メモリー
222 :
デフォルトの名無しさん:05/03/08 22:27:30
開発期間を度外視するなら verilog とか・・・
メモリでも HDD でもネットでも何でもできるぞ
仮想包茎
224 :
デフォルトの名無しさん:05/03/08 22:40:14
ruby最高!
ただいまっと。亀レス失礼。
>>173 VC.NETって_Bool使えたっけ?
226 :
デフォルトの名無しさん:05/03/08 23:17:22
試せりゃわかるものを・・・
わかってても何かを確認し忘れてる・・・
どっちみちアフォには変わりない
227 :
デフォルトの名無しさん:05/03/09 00:13:56
mallocでメモリ確保して、ファイルを読み込んで
保存したいんですが
最後に ヘヘヘヘヘヘ が付いてしまうのですが
なんとかなくすにはどうすれば良いのでしょうか?
void main()
{
char *p;
int x;
FILE *fp,*fp2;
x = (size_t )filelength(fileno(fp));
fp = fopen(hanakuso.txt,"r");
if (!fp) return NULL;
fp2 = fopen(makiguso.txt,"w");
if (!fp) return NULL;
x = (size_t )filelength(fileno(fp));
p = (char *)malloc(x + 80);
if (!ptr){
fclose(fp);
return NULL;
}
fread(p,x,1,fp);
strcat(ptr,"ボクはその時!");
fwrite(p,x,1,fp2);
}
頂点の番号の配列と頂点の個数の情報を持った面、
のリストがあったときに、
それぞれの面と隣接している(二つ以上の頂点番号が同じ)面のリストを作るには
どんな方法が良いでしょうか。
全部の面にたいして全部の面を探索すると、
オーダが面の数の2乗になって、時間がかかりまくるのですが、
何か短くすませることができる方法はないでしょうか?
↑訂正
>if (!fp) return NULL;
if (!fp2) return NULL;
>fwrite(p,x,1,fp2);
fwrite(p,x+80,1,fp2);
ファイル名とかがふざけてるとしか思えんな
すいません^^;
for(i=0;i<x+80;i++) { p2=p+i; *p2=0; }
一応、初期化してみると ヘヘヘヘヘ は消えたんですけど
余白が付いちゃうんですよね
これで我慢するしかないのかな?
>>228 面データから辺データを構築して、
辺データの中にその辺を所有している面のリストを構築するとか。
_itoa 関数で 数値を文字列に出来るのですが
浮動少数値を文字列にするにはどうすれば良いんでしょうか?
235 :
65:05/03/09 01:25:55
>つまり↑は代入された後にインクリメントされるから
これで溶けました。後置は増加前の値として扱うと。
>配列outputは要素数が4だから飛び越してしまうわけだね。
outputに長さ制限や末尾は関係ないので
「飛び出す」というより「既に次の番号に進めてある」かと。
敢えて要素数を言うなら、5個でしょう。
勉強しはじめとは言え、自力で気づかなかった自分はやばい。
>>231 fread() は読み取り後のバッファに '\0' を付けない。
fread() の後、自分で
p[x] = 0;
とするか、または fgets() を使う。つか、こういう使い方
するなら fgets()。
それと、読み込み前に初期化なんかするのは恥。
>>231 0x20で初期化するんじゃなくて'\0^で初期化すればよい。
>>236 の言っているように恥とする文化もあるが、時と場合によりけり。
238 :
デフォルトの名無しさん:05/03/09 03:03:11
> やはり、本来文字を削除する場合、空白じゃなく、全くの(Deleteみたいに)無にしたいのですが、
> それはないのですか?
だからsedだといってるだろうが ぼけ
239 :
デフォルトの名無しさん:05/03/09 03:04:20
> sedよりperlのほうが強力で早いよな
いやperlのほうが遅い。
先日測定する用事があったのだが、sedでできるようなことをperlにもやらせて
両方でくらべたら6倍ほどperlが遅かった。
240 :
デフォルトの名無しさん:05/03/09 03:05:46
> 一応、初期化してみると ヘヘヘヘヘ は消えたんですけど
> 余白が付いちゃうんですよね
ぼけ。ちゃんとサイズ分だけ書けよ。
241 :
デフォルトの名無しさん:05/03/09 03:13:45
242 :
デフォルトの名無しさん:05/03/09 03:14:18
なんのためにfilelengthみてんだよ。
サイズわかってるならきっちりかけよ ぼけ
+80ってなに?
食いつきがいいな
つーか、fputs()でファイルに文字列追加すりゃいいだけじゃん。
246 :
デフォルトの名無しさん:05/03/09 03:39:39
そそ。
なので237はかなりのぼけ
247 :
デフォルトの名無しさん:05/03/09 09:25:02
>>239 perlでやらせるようなことをsedにやらせたらsedのが遅い
248 :
デフォルトの名無しさん:05/03/09 09:35:47
いいや、確実にperlのほうが遅い。
そんな常識もしらない247は、ただのしったかぶりで、どっちも使ったことないにちがいない。
perlでできて、sedではできない(若しくは困難)なことは多い。
sedで駄目だったら、とりあえずawkだな。
もういいって
252 :
デフォルトの名無しさん:05/03/09 11:40:45
このスレに戻ってきたよ(^-^)
誰だお前は
俺だよ、俺(^-^)
しらん
示談金は10万です
デレクトリパス や ファイル名 の間の 「\\」 文字なんですが
char ss[]="c:\anpan\man\no\anko\"
この文字列があった場合、書き出すのに
↓のようにしたいのですが
char ss2[]="c:\\anpan\\man\\no\\anko\"
簡単に変換する方法はないでしょうか?
(パス、ファイル名はランダムなんです。)
訂正
>char ss2[]="c:\\anpan\\man\\no\\anko\" → ×
char ss2[]="c:\\anpan\\man\\no\\anko\\" → ○
>>259 sed -e 's/\\/\\\\/g'
264 :
デフォルトの名無しさん:05/03/09 21:25:06
#include <stdio.h>
void main(void)
{
float mat[2][2];
int i,j;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("mat[%d][%d]?",i,j);
scanf("%f",mat[i][j]);
}
}
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("mat[%d][%d]=%f\n",i,j,mat[i][j]);
}
}
}
これを実行するとscanf()関数の呼び出し時の実引数が不正です。と出ます
試験的にキーボードから配列に入力された値をただそのまま表示したいのですが、どのように間違っているのでしょうか?
ええ、ファイル名を取得して
それをTXTファイルに書き込んで
その
TXTファイルからもう一度、文字列(ファイル名)を取得して
そのファイルを読ませたいんです
アリさん.TXT
FindFirstFile( "c:\kirigirisu\to\アリさん.TXT",&FindData )
ss=strcpy(WaveFile[i],FindData.cFileName);
fputs(ss,fp);
fgets(ss2,80,fp);
ss2ファイルを開きたいけど、ss2[]="c:\kirigirisu\to\アリさん.TXT"で
これをそのままファイル名として使うと、アリさん.TXTが読めないんです
省くとこんな感じです
↑修正
>ss=strcpy(WaveFile[i],FindData.cFileName); ×
strcpy(ss,FindData.cFileName); ○
>>264 >printf("mat[%d][%d]?",i,j);
>scanf("%f",mat[i][j]);
この順番が逆なんではないでしょうか?
違いましたね。忘れてください^^;
>>264 >scanf("%f",mat[i][j]);
これを scanf("%f",mat&[i][j]); したら動きましたよ
scanf("%f",&mat[i][j]); こうでした^^;
271 :
264:05/03/09 21:42:03
あれ、ほんとだ・・・
配列を使うとき「&」はいらないって教わったような気がするんだけど・・・
ともかくありがとうございます
>>271 それは%sの話だろ。
もっともこの場合もscanf("%f",mat[i] + j);にすれば&は要らないけどさ。
273 :
デフォルトの名無しさん:05/03/09 22:27:52
>>271 「おまじない」って教え方の弊害がモロに出た形だな
274 :
デフォルトの名無しさん:05/03/09 22:31:48
弊害っていうか単純に教え方の間違いだし
275 :
デフォルトの名無しさん:05/03/09 22:33:16
276 :
デフォルトの名無しさん:05/03/09 22:35:52
scanf("",&a)の場合&aって言うのは「a」のアドレスって意味だよ。
だから仮にaと同じ方のポインタpを定義して
p=&aとして
scanf("",p)(アスタリスク無くても)とすれば
scanf("",&a)と式的に同値
この場合だとscanf("",mat)とすれば自動的にmatの先頭アドレス
が渡される。
277 :
デフォルトの名無しさん:05/03/09 22:37:35
278 :
デフォルトの名無しさん:05/03/09 22:55:45
先ほどはありがとうございました
ふたたびエラーです
今度は関数invにてmat←invをやりたいのですがこれを実行すると
関数指名子か関数へのポインタでないオブジェクトには関数呼び出し演算子はつけられません
と言われます
さぱーり意味不明っす
#include <stdio.h>
void inv(float mat[][2],float inv[][2])
{
int i,j;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
inv[i][j]=mat[i][j];
}
}
}
void main(void)
{
float mat[2][2],inv[2][2];
int i,j;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("mat[%d][%d]?",i,j);
scanf("%f",&mat[i][j]);
}
}
inv(mat,inv);
そもそも戻り値があるでもない、かと言ってポインタでもない
関数を作成して何の意味があるんだ?
inv inv inv inv inv
281 :
278:05/03/09 23:14:57
今は練習です
課題として逆行列を計算する関数invを作成しろ、というのがあるのでそのために試行錯誤してます
282 :
デフォルトの名無しさん:05/03/09 23:19:50
>>278 陰部が2つあるようだが、main の中で触っている陰部はどっちのことだと思う?
283 :
デフォルトの名無しさん:05/03/09 23:20:53
二股はよくないなw
284 :
デフォルトの名無しさん:05/03/09 23:22:44
-1
285 :
278:05/03/09 23:27:29
>>283 二股がよくなかったんですね・・・
配列名を変えたらうまくいきそうな予感です
2×2行列なら
void inv(float *mat[][2])
{
*mat[0][0]=*mat[1][1];
*mat[0][1]=-*mat[0][1];
*mat[1][0]=-*mat[1][0];
}
にデターミナントの逆数かけてやればいいんじゃないの?
>>265 ちゃんと日本語ですけど、説明の仕方がへたですいません
c:\kirigirisu\to\アリさん.TXT ←あるファイルX
FindFirstFile( "アリさん.TXT",&FindData ) ← ファイル名取得
strcpy(ss,FindData.cFileName); ← それを文字列ssへ書き込み
fputs(ss,fp); ← 文字列ssからTXTファイルBへ書き込み
fgets(ss2,80,fp); TXTファイルBから文字列を取得 (c:\kirigirisu\to\アリさん.TXT)
ss2 この文字列に入ってるデータ → c:\kirigirisu\to\アリさん.TXT
fp2=fopen(ss2,"r"); ← ここでファイルを読みたいんですが 「\\」
c:\\kirigirisu\\to\\アリさん.TXT
このようでないのでファイルを開けなんです
そのために、ss2[]="c:\kirigirisu\to\アリさん.TXT" から
ss3[]="c:\\kirigirisu\\to\\アリさん.TXT" にする方法はありませんか?
というのがお聞きしたかった質問です。
だから、
c:/kirigirisu/to/アリさん.TXT
でええやんか
289 :
デフォルトの名無しさん:05/03/09 23:38:47
ええ、ファイル検索から取得したデータが
c:\kirigirisu\to\アリさん.TXT ← これなので
c:\kirigirisu\to\アリさん.TXT ← これから
c:/kirigirisu/to/アリさん.TXT ← これに変換しなければならないのですが
どうすれば良いのでしょうか?
んなアホな。
"\"を"\\"にするのは、ソース内で文字定数で書く時だけだぞ。
当方C初めて1週間の初心者でして物凄く初歩的な質問で申し訳ないですが
入力された文字を昇順に並び替える方法探してまして
if、while、for、printf scanfのみで作るのって無理でしょうか・・?
#include <stdio.h>
int main(void)
{
char in_str[81];
char re_str[81];
int i,j,k;
int num[80];
printf("Input string : ");
scanf("%80s",in_str);
for(i=0;in_str[i] != '\0';i++)
{}
for(j=0;j<i;j++)
{
num[j]=0;
for(k=0;k<i;k++)
{
if(in_str[j] > in_str[k])
{
num[j]++;
}
}
re_str[num[j]] = in_str[j];
}
re_str[i] = '\0';
printf("Sort string : %s\n",re_str);
}
でとりあえず作ってみてダメなんですが、テンパってます、情けないorz
\を\\にしたいのか、\を/にしたいのかどっちなんだよ
>>291 ええ、そう言えばそうですね
でも、詳しく言うと
c:\kirigirisu\to\アリさん.TXTを書き込んだTXTを
読み込むのは別のソフトで
c:\\kirigirisu\\to\\アリさん.TXTこのようにTXTに書かなければ
読んでくれないんです。
>>293 \ を\\で お願いします
>>292 入力された文字列のそれぞれの文字をただの数字と見て
適当なソートアルゴリズム使えば簡単にできるよ。
ちなみに文字数は
int i,num_str=0;
while(in_str[i] != '\n'){
num_str++;
i++;
}
見たいな感じで取得できるかと。
297 :
デフォルトの名無しさん:05/03/09 23:50:40
> 11:40:29 PM: void_No2: callocの第1引数と第2引数をとりかえて呼び出すと、実際なにが変わりますか?
298 :
デフォルトの名無しさん:05/03/09 23:53:07
scanfつかうなよ ぼけ
300 :
278:05/03/09 23:57:27
>>298 なぜ使うべきでないのか,わかってんのか?
俺は安全に使えるときにはガンガン使うぜ
安全に使えない(あるいは知らない)なら,使わないべきだけどな
main しかないような,おもちゃプログラムなら scanf で引数確認すりゃ,大丈夫だろ
302 :
デフォルトの名無しさん:05/03/09 23:58:50
WindowsXPで開発をしたいのですが、
フリーのコンパイラーとエディタを紹介して頂けないでしょうか?
やはり、Linuxのように、gccとXEmacsがいいのでしょうか?
>>294 Cに文字列置き換え標準関数は用意無いから、
一文字ずつ取り出して、'\'なら"\\"に変換するしか無いでしょ。
MBCSだと、2バイト目に"\"がある場合があるから、
マルチバイト対応で取り出す必要がある。
用意無いから→用意されて無いから
306 :
デフォルトの名無しさん:05/03/10 00:02:15
> 俺は安全に使えるときにはガンガン使うぜ
ようするにおまえばぼけ
307 :
デフォルトの名無しさん:05/03/10 00:02:41
> 一文字ずつ取り出して、'\'なら"\\"に変換するしか無いでしょ。
っていうか、最初から/にしときゃいいじゃん
Google+フリー+コンパイラ OR エディタ
309 :
デフォルトの名無しさん:05/03/10 00:03:29
>>301 しょうがないよ実験器具と一般製品の区別がつかないアフォの弟子だろW
310 :
デフォルトの名無しさん:05/03/10 00:03:33
311 :
デフォルトの名無しさん:05/03/10 00:05:45
> main しかないような,おもちゃプログラムなら scanf で引数確認すりゃ,大丈夫だろ
そんなぼけたこといってるから みんなにぼけっていわれるんだよ ぼけ
312 :
デフォルトの名無しさん:05/03/10 00:07:14
fgen は有毒ガスが出て危ないから絶対に使用禁止とか言ってるのと同じ
>>311 使用を禁止しても意味がない。
関数の提供を禁止しろ。
314 :
デフォルトの名無しさん:05/03/10 00:11:08
そのうち 100V の供給も禁止すべきとか言い出すぞw
315 :
デフォルトの名無しさん:05/03/10 00:11:56
>>303 ありがとうございます。
やりたい事は、学校の宿題の補助的な作業です。
基本事項の復習などを、家で空いた時間を使ってやってみたりしたいんです。
316 :
デフォルトの名無しさん:05/03/10 00:16:14
> fgen は有毒ガスが出て危ないから
そんなものはない
317 :
デフォルトの名無しさん:05/03/10 00:17:39
だったらまずWindowsXPをフォーマットして消し、
全部のパーティションを、LinuxかFreeBSDかNetBSDかOpenBSDかPlan9用にしろ。
それでOK
318 :
デフォルトの名無しさん:05/03/10 00:18:44
319 :
ぼけ:05/03/10 00:19:48
>>306 分かった,俺はぼけなんだな。
それは認めてやるから,質問に答えろよ
>>309 おもちゃプログラムとそうでないプログラムとは区別つく
とりあえず
>>292 はおもちゃ程度だと思うけど
一般製品レベルなのか?
あと,独学だから誰の弟子でもない
>>309 は詳しいのか?だったら教えをこいたい
>>311 ぼけたこといってるのはは分かった。
どこがぼけた事なのか訊きたい
確かに scanf は危ないけど,規格で仕様がはっきりしているから
正しく使っている限りくだらないバグは出ないはず
コードは書くとバグが出るからな
もしかして正しい使い方そのものがないとか言ってるのか?
>>312 意味府。ゴメ
320 :
デフォルトの名無しさん:05/03/10 00:21:25
>規格で仕様がはっきりしているから
>正しく使っている限りくだらないバグは出ないはず
それだけだな
あのすばらしい20代をもう一度
322 :
デフォルトの名無しさん:05/03/10 00:24:16
> 正しく使っている限りくだらないバグは出ないはず
なんてまぬけなことを言ってるやつは、じぶんでは自覚ないんだろうなあ ぼけだから
323 :
デフォルトの名無しさん:05/03/10 00:24:36
構造体をポインタではなく値で関数から返すことってできますか?
325 :
デフォルトの名無しさん:05/03/10 00:33:05
>>323 struct *** func(-----)
{
retrun (構造体変数名);
}
でいける
326 :
デフォルトの名無しさん:05/03/10 00:37:06
>>324-325 できました
しかしこれを使っているコードをdiv()とか以外にみかけた
ことが無いのですが、何か落とし穴とかあるんですか?
327 :
デフォルトの名無しさん:05/03/10 00:37:48
>>317 自宅のPCは、プログラミング以外にも、
日常用として使っているのでそれは出来ません。
>>326 構造体のサイズがでかくなるとスタックを圧迫する可能性がある
コピーに時間がかかる
ポインタを渡せば,サイズが小さくてすむことが多い
329 :
デフォルトの名無しさん:05/03/10 00:40:50
>>322 ストレートの罵倒語しか言うことねえのかよw
330 :
デフォルトの名無しさん:05/03/10 00:41:23
>>326 めんどくさいからじゃないか?構造体を返す関数を作成するより、ポインタを用いたほうが
ずっと柔軟だし。それに、自己参照構造体とか使うにもポインタだし。
333 :
名前は開発中のものです。:05/03/10 00:54:52
実行ファイルの引数が空白を含めたファイル名の場合に
部分を一つの文字列としてmain関数の引数として取得できるようにするには、
どうすればいいでしょうか?
moge.exe c:\hogehoge kkok\hoge.txt
と実行
void main( int argc , char** argv )
{
//c:\hogehoge kkok\hoge.txtと表示したい
printf(argv[1]);
}
334 :
デフォルトの名無しさん:05/03/10 00:59:40
>>331 そういわれてみれば説明できないなw
いつも構造体いじるときはポインタ使ってるけど、別に、構造体返す関数とポインタ併用すれば
多変数を一度に処理できるわけだし。
構造体返す関数を用いたほうが良いのか悪いのか・・・・
教えてエロイ人
スレの浪費が加速されていく・・・春だね
moge.exe "c:\hogehoge kkok\hoge.txt"
>>334 適材適所。
メンバの少ない構造体なら値を返すので充分だろ。
>>333 プログラム側ではなく、コマンドインタプリタ側で対策汁。
""で囲めば何とかなるべ。
昔、どうやったらscanfを正しく使えるか、fjで延々と議論されてたことがあったな。
途中で疲れて読むのやめちゃったけど:>
int n;
scanf("%d", &n);
に字を入れると、なにやら、暴走。
char str[3];
scanf("%s", str);
に hagehagehagehagehagehagehage...
を、入れると、全部入るけど、
たぶん、なにかが壊れている。
使う人が、安全な人でないと、
安全に使うのは不可能。
scanf("%3s", str);
ホントだ
眠いし、適当に書いた
scanf なんか使う奴はばかです。
345 :
デフォルトの名無しさん:05/03/10 07:43:41
> 構造体のサイズがでかくなるとスタックを圧迫する可能性がある
ああ、これはでま。
構造体そのものを引数で渡したり、戻り値に構造体(ポインターではなく)そのものを
使うってのが、せっかくC89で追加されたのに、あまり使われないのは
別に理由があります。(まともなひとなら知ってる)
346 :
デフォルトの名無しさん:05/03/10 07:45:25
scanf使うのはぼけだ っていわれて
> 理由を聞かせてもらおうか
なんて言うやつはかなりのぼけ
348 :
ぼけ:05/03/10 10:17:50
おっ朝になってまともな議論になってきてるな
>>338 情報thx
疲れるくらいディープなんですね。だから scanf 禁止を唱える椰子が出てくる。
これは想像通りでした
でも,簡単に安全に使える場合もあるからその時に使えばいいと思う
>>339 >int n;
>scanf("%d", &n);
>に字を入れると、なにやら、暴走。
戻り値を確認汁
EOF なら終了。 < 1 ならバッファを空にするコードを書けばいい
その際 rewind とか fflush とか fseek を stdin に使ってはいけない
>char str[3];
>scanf("%s", str);
バッファオーバーランしない書き方がある。
>>341 の言うとおり
>>347 俺もそう思う
理由が言えない椰子と目的語が無い椰子は放置汁
見ても分かるように、
>>343,
>>347のような奴はすぐ遁走するからナ。
一回だけ相手するのは別に問題ないだろうよ。
>>351 今ちょっと試したら、呼び出し元でスタックから構造体のスペースを確保してそのポインタを渡していた。
呼び出し元ではどっちみち必要になるスペースだから事実上ポインタ渡しと変わらないコードだったよ。
従って、構造体を返してもスタックを消費するとは限らないということだね。
>>347 bad know-how 駆使してまで scanf を使いたがるのは
ばかでしょ。
それと、私は
>>346 ではありません。間抜けですね。
好き好んでscanfは使わんが、それを馬鹿呼ばわりはしないな
同意、関数は悪くない、使うやつが馬鹿なだけ。
使い捨てツールなんぞにバンバン使ってる。
scan formated
scanf()論争を見る度に、論争自体の無意味さを感じる。
formated ってなに?
stdioとか、テレタイプの時代考えろばか者
槍鉋使えないやつが多すぎ
360 :
デフォルトの名無しさん:05/03/10 18:36:53
>>357 まったくそのとおり
実験器具に幼児レベルの安全性を求める
思いこみの激しいプロ市民が後を絶たない
内容的にはまったく馬鹿げていて取るに足らないが
どんな嘘でも大きい声で叫び続ければ真実を駆逐する
事実、ISO/IEC9899 にさえいくつかの傷がある
これは個人的な問題では片づかない社会悪で、
どんなにくだらなくても抵抗はせざるを得ない
361 :
デフォルトの名無しさん:05/03/10 19:18:33
テキストファイルを更新セーブモードで開いて、
そのファイルの3行目に文字を出力する方法を教えてください。
fseekはバイト数ですし、fgetsを3回呼び出した後に書き込みをやって
みたんですが、出力されていませんでした。エラーは出ていませんでした。
>>362 ありがとうございます。
fseek(fp, ftell(fp), SEEK_SET); で出来ました。なんでだろう・・。
>>361 ただし、読み出しと書き込みを切り替えるときは、その前に
fsetpos、fseek、rewind のいずれかの関数を実行する必要があります。
だって
>>364 分かりました。ありがとうございました。
入力された数値の最下位ビットをchar型の変数に'0'か'1'の文字として格納し、
表示させるプログラムを作りたいのですが、
以下のプログラムでは適切に表示されません。
どこを修正すればよいのでしょうか??
#include <stdio.h>
int main(void)
{
int number;
char box;
fprintf(stdout,"Input Number : ");
scanf("%d",&number);
box = (number & 1);
fprintf(stdout,"\nLast bit is : %c\n",box);
return 0;
}
ツマンナイ
>>366 box = '0' + (number & 1);
数値の0と1,文字の'0'と'1',それぞれ全くの別物。
371 :
デフォルトの名無しさん:05/03/10 23:58:36
> 実験器具に幼児レベルの安全性を求める
このぼけ、scanfをつかうべきじゃない理由を「きけんだだか」だとでも思ってるらしい...
...だめすぎ。
きけんだだか
373 :
デフォルトの名無しさん:05/03/11 00:04:38
たしかに。つかうべきじゃない理由は「危険だから」ではないね。
たいした危険もないんだし。
そもそも、つかうべきでない理由をわからないっていう時点で、
使っているやつはだめだめだと思うが。
結局、ウニックスとCの係わり合いを知ればなるほど
と思えるんだろうに、マンモス悲しい
結局誰も知らないんですね。
>>375 自分が無知なのに人を批判する資格ないよ。アンタ。
仕様(バグや癖を含めて)を分かってて使う分には問題ないだろ。
何も考えずに使う香具師が多すぎるから「使うな」と言っとけば楽なだけ。
> 何も考えずに使う香具師が多すぎるから
少くとも俺の周りではscanfを使う奴はいないのだが、そんなにいっぱいいるのか?
宿題スレには大量にいる
宿題なら別に問題ないだろう。
scanf は喪前らが思考停止せず、Cについて深く考えるために
C&R がわざと疑問を感じる仕様にして遺してくれた教材と思え。
そのおかげでVB厨やJava厨のよりも優秀になれただろ?
384 :
デフォルトの名無しさん:05/03/11 03:12:17
はぁ?
>>381 確かに、宿題ならOK。
ただ、大学とかでその先を教えないから、宿題以外でも使い出す。
数値を読むときはscanfを使うもんだ、って思い込んで
(実際、周りに結構居るし)
数値を読むときはsscanfを使うもんだ
387 :
デフォルトの名無しさん:05/03/11 07:49:33
> 仕様(バグや癖を含めて)を分かってて使う分には問題ないだろ。
いいや。使っちゃだめ。
何で?
389 :
デフォルトの名無しさん:05/03/11 07:50:38
おいしいよね > 数値化
# Kusakabe先生ちで食べたのは、うまかったけど塩が強すぎると思った。
390 :
デフォルトの名無しさん:05/03/11 07:51:35
391 :
デフォルトの名無しさん:05/03/11 07:52:51
「こんなところでgotoつかうなよ ぼけ」
「なんで?」
「おしえない」
と同じだな。
つまり「理由」は説明するものではなく、本人が心から理解できないと意味がないってことだ。
393 :
デフォルトの名無しさん:05/03/11 08:14:49
> 分からない、だろ(プゲラ
こういうまぬけなセリフは、教えてもらえなくて、かつ理解もできないやつがまけおしみでよく使う。
闇雲にgoto使うなとか言う奴はアマチュア
395 :
デフォルトの名無しさん:05/03/11 08:43:17
> 闇雲にgoto使うなとか言う奴はアマチュア
いや、実際gotoをつかったほうがいい場面なんてのはかなり少ないので、
どうせよくわかっていない君らが使いたくなる場面なんてのは、
まずまちがいなく「使うのはぼけ」な場面だろうな。
アマチュアというより脳内Cプログラマだろう
ああ。gotoをつかったほうがいいような仕様が欲しい
>>399 多重ループ抜け出しに余計なフラグ操作やってる口?
>>400 あまりに定型的な突っ込みで笑ってしまったよ。
そういう場合は関数分けして単なるbreakで済む様に書くから問題無し
本当に実行効率に厳しいときは素直にgotoつかうさ
プ。
駄目だこいつ。
当店の人気メニュー
1位・goto
2位・exit前のfree
3位・scanf
goto十人前で
gotoを嫌うあまり、かえって保守性の悪いコードにしてしまう、
これを、木を見て森を見ずと言います。
うちの大学ではgotoの使い方も習った
効果的に使えばずっと見やすいコードになる場合もあるから、一応使い方は知っておけ、と
次の週はやたらとgotoを使う奴がが多すぎてgoto禁止になった
exitの前にfreeするとなにが悪いのでしょうか?
そりゃうちは馬鹿大学だったからな
俺らレベルに合わせてくれないと半分以上が卒業できないもん
都の西北早稲田のとなり か。
'a'は文字定数でint型。
でも
char c = 'a'
は、よく見かける。
混乱してます。
この辺りのことを綺麗にまとめてあるHPはありませんか?
誰だ?'a'はint型だなんていったのは?
そいつを呼んで来い
C++と同じだと思ってた...orz
さすが厨房隔離スレ
低レベルの巣窟だな
418 :
デフォルトの名無しさん:05/03/11 20:26:33
素数表でも作ってみたら? >goto
while(scanf(...) == 1)
{
//...
}
↑
こういう判定すら goto を無理に回避しようとしている
ひねくれたコードだってことを説明できる人はいなさそうだなw
>>413 stdioはintにキャストするみたいだ。
int fgetc(FILE *stream);
fgetc() reads the next character from stream and returns
it as an unsigned char cast to an int, or EOF on end of
file or error.
int fputc(int c, FILE *stream);
fputc() writes the character c, cast to an unsigned char,
to stream.
EOFだけ符号拡張されて最上位ビットが立つ、のかな?
>>418 switch文もラベルをつかうので、
その点で、goto文の同類、のような。
それを言うなら
do{
...
if(...) break;
...
}while( 0 );
421 :
デフォルトの名無しさん:05/03/11 21:07:05
422 :
デフォルトの名無しさん:05/03/11 22:14:22
俺こんなん使いまくってるよ
無理矢理forやwhileの仕様に合わせて条件文変形させるより
ずっとわかりやすいじゃん
gotoを悪いとか言ってる奴はfj出身のCオタクだけ!
Lispみたいに用途に合わせて制御構造作れたらいいのにねえ
for (;;) {
hoge;
if (fuga) {
goto Owari;
}
}
Owari:
>>422 そのケースはbreakでいいと思うのだけど?
424 :
デフォルトの名無しさん:05/03/11 22:50:23
> 1位・goto
> 2位・exit前のfree
> 3位・scanf
順位がまるっきり逆だと思うが
425 :
デフォルトの名無しさん:05/03/11 22:51:21
> EOFだけ符号拡張されて最上位ビットが立つ、のかな?
ぼけ。
'a'や'b'はcharに入れても情報が失われないってだけだろ。
charだって整数型だよ
426 :
デフォルトの名無しさん:05/03/11 23:07:41
>>422 肝心なポイントをクランク状によけてるなw
427 :
デフォルトの名無しさん:05/03/11 23:27:20
for (; hoge, fuga;) {
}
のほうがよっぽどすなおだが ;-)
428 :
デフォルトの名無しさん:05/03/12 00:09:15
かすりもしてねえ
つーか投げやりだろ
おまえ
わかってねえなら
かかわってくるな
めいわくだ
まぁまぁおまえら・・・
すなおにわからない所を書けばいいだろ
おとなになれや
さっそく噛み付いてきやがった
ざこまるだしだな
ええ加減にしとけよ
>>422 gotoを頻繁に使うやつは初心者。
開発者としては失格の烙印だね。
ループが2個以上の深い入れ子の場合に限って有用であり、
それ以外はわかりにくくて見る側に喧嘩を売ってるしかいいようがないね。
gcc で↓をコンパイルしたら
最後の2つが1になるのは環境依存ですか?
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
int
main(void)
{
char *p = "%d\n";
printf(p, sizeof(main()));
printf(p, sizeof(NULL));
printf(p, sizeof(time(NULL)));
printf(p, sizeof(void));
printf(p, sizeof(srand(time(NULL))));
return 0;
}
>>432 深い入れ子にしなくて済むようにgoto使っとけ。
435 :
デフォルトの名無しさん:05/03/12 00:23:17
┌┬┬┬┐
―――┴┴┴┴┴―――――、
/.  ̄ ̄ ̄//. ̄ ̄| || ̄ ̄ ̄||| ̄ || __________
/. ∧// ∧ ∧| || ||| || /
[/____(゚_//[ ].゚Д゚,,) ||___||| || <
>>432を迎えに来ました
||_. * _|_| ̄ ̄ ∪|.|. |ヽ. _|| \__________
lO|o―o|O゜.|二
http://pc5.2ch.net/test/read.cgi/tech/1108989422/ | ∈口∋ ̄_l__l⌒l_|_____|_l⌒l_||
 ̄ ̄`ー' ̄ `ー' `ー' `ー'
436 :
デフォルトの名無しさん:05/03/12 00:23:36
なってあたりまえだろ?
437 :
デフォルトの名無しさん:05/03/12 00:25:25
おい、pをどこかで使えよ。
きになってきになって今夜ねられねーだろ!
438 :
デフォルトの名無しさん:05/03/12 00:25:40
そうなの?
sizeof(char)が1で、sizeof(void)も1?
>>437 printf(p, sizeof(main()));
^
sizeof(void)
はgccの拡張だったと思う。
441 :
デフォルトの名無しさん:05/03/12 00:26:15
>>438 あたりまえだろ!
おまえCの基本的な文法さえしらんのか。
444 :
デフォルトの名無しさん:05/03/12 00:29:00
おれが言うほうがあってるに決まってるだろ! ぼけ
445 :
デフォルトの名無しさん:05/03/12 00:30:34
いいや、おれのほうが正しい。おまえのほうがまぬけだ!
c:\home\c-training\naitei\hint.c(13) : warning C4034: sizeof 演算子がサイズが 0 となったオペランドに適用されました。
c:\home\c-training\naitei\hint.c(15) : warning C4034: sizeof 演算子がサイズが 0 となったオペランドに適用されました。
ということで
>>440ですね
413でございます。
代入演算子の事がちゃんと理解できていなかった故の混乱でした。
お手数おかけしました。
448 :
デフォルトの名無しさん:05/03/12 07:15:54
NULLって絶対0って保障されてるんですか?
>>444-445 X 3010:2003
6.2.5
(略)
void型の値の集合は空とする。それは,完全にすることのできない不完全型とする。
(略)
6.5.3.4 sizeof演算子
制約 sizeof演算子は,関数型若しくは不完全型をもつ式,それらの型の名前を括弧で囲んだもの,
又はビットフィールドメンバを指し示す式に対して適用してはならない。
(略)
ということで
>>446ですね
451 :
デフォルトの名無しさん:05/03/12 08:09:34
>>449 そうすっか!安心しました!
ただ、紹介していただいたURLはリンク切れ(?)だったみたいなんで、
また今度行ってみますね! ありがとございました!
452 :
デフォルトの名無しさん:05/03/12 11:35:04
そんなものはない > NULLって絶対0って保障されてるんですか?
453 :
デフォルトの名無しさん:05/03/12 11:35:44
だーかーらー、NULLが0なんじゃなくって0がNULLなんです。,,,ってのはKusakabe先生の有名な解説。
454 :
デフォルトの名無しさん:05/03/12 11:37:30
> 型はintだったりlongだったりvoid *だったりいろいろだけど。
これはうそ
455 :
デフォルトの名無しさん:05/03/12 11:51:03
逆斜線を全角で打ってるようなトンマがよく言うぜw
456 :
デフォルトの名無しさん:05/03/12 11:51:30
> 値が0なのは保証されている。
これは大うそ。ナルポインターの値は0ではない。
0と書いたら、ポインターに代入などされるときに、適切なナルの値に変換されるだけだ。
457 :
デフォルトの名無しさん:05/03/12 12:07:26
値とメモリイメージを混同しているヴァカがいるづら・・・
458 :
デフォルトの名無しさん:05/03/12 12:10:35
メモリーイメージがすなわち値。
そんなこともわからないのかこのボケは。
459 :
デフォルトの名無しさん:05/03/12 12:12:14
つまり、char *型の値で0x0001が入っていて、
それを--して0x000という「値」になったとしても、
それはナルポインターの値と等しい保証はない。
460 :
デフォルトの名無しさん:05/03/12 12:14:15
>メモリーイメージがすなわち値。
真性だな、こいつw
461 :
デフォルトの名無しさん:05/03/12 12:14:46
460は厨房すぎ
とりあえずsageぬるぽ
463 :
デフォルトの名無しさん:05/03/12 12:17:04
メモリーイメージってことばさえ理解できなかったから、
「NULLの値は0」だなんていえるんだろうなあ まったくぼけなやつだ
464 :
デフォルトの名無しさん:05/03/12 12:18:03
0 == -0 とでも思いこんでるんだろ
465 :
デフォルトの名無しさん:05/03/12 12:24:18
-0のビットパターンをもつ環境では、それは「0とは等しくない」わけだから
やはりNULLは0と「値」はちがうだろ ぼけ
ビットパーターンが異なってても、等しければいいんじゃないの?
468 :
デフォルトの名無しさん:05/03/12 12:33:46
根拠と結論が脈絡してねえなw
>>449みたいな厨房が最初に答えるからいけないんだよ
470 :
デフォルトの名無しさん:05/03/12 13:02:14
いいえ。「==」演算子には、ビットパターンが異なるものを「ひとしい」と判断する機能はないです。
471 :
デフォルトの名無しさん:05/03/12 13:03:05
> 逆斜線を全角で打ってるようなトンマがよく言うぜw
「全角」とかいってる時点で厨房だな。こいつ。だめすぎ
472 :
デフォルトの名無しさん:05/03/12 13:04:54
関数の引数の場合は、プロトタイプがなかったり、可変個数の「...」の部分の引数だったり
した場合は、NULLをキャストする意味はありますが、
代入でもナルポインターをキャストする意味がある場面があると聞きました。
どういう場面でしょうか?
ここはCの知識のレベルが高いとききました。まさかこたえらる人がいないってことはないですよね?
質問です、キーを一回押すメッセージを他窓に送るにはどうしたらいいですか?
PostMessage(hWnd, WM_KEYDOWN, 0x41, ?????);
PostMessage(hWnd, WM_KEYUP, 0x41, ?????);
ここまではわかってるのですが、最後の引数の書き方が良くわかりません
>>472 代入ではキャストする意味のある場面は無い。
人がソースコードを見たときの為に,と言う意味はもしかしたらあるのかもしれないが。
>>474 0にしてしまえ。でも本当はスレ違い。Win32APIスレ行け。
477 :
デフォルトの名無しさん:05/03/12 13:23:45
>>473 いや、そんなことはない。==はビットパターンを比べるだけ。
0をナルのビットパターンにするのは別の人のおしごと
478 :
デフォルトの名無しさん:05/03/12 13:24:20
> 代入ではキャストする意味のある場面は無い。
ふふ。その程度の知識なのですね。
479 :
デフォルトの名無しさん:05/03/12 13:26:18
480 :
デフォルトの名無しさん:05/03/12 13:28:25
ナルポインターと
ナル文字と
空文字列の違いをおしえてください。
うちの環境では、
char *p = NULL;
char c = '\0';
char *s = "";
printf("%d\n", p);
printf("%d\n", c);
printf("%d\n", *s);
どれも0ってでましたー
>>477 > 0をナルのビットパターンにするのは別の人のおしごと
当然。
そのことと==の動作に関しては別の問題。
482 :
デフォルトの名無しさん:05/03/12 13:30:56
で、== はビットパターン(つまり値)の比較しかしない
で、ビットパターンが異なる値を比較した時に「異なる」と判断するとは限らない。
484 :
デフォルトの名無しさん:05/03/12 13:36:19
いいや、異なる場合は0になる。Cの基本
>>480 ナルポインター:どこも指していないポインター。
ナル文字:Cでの文字列の終端を意味する文字。
空文字列:文字数0、つまり1文字目がいきなりナル文字の文字列。
ヌルのことナルとか言うな。素人臭くて恥かしい。
ヌル派の人も、ドッペルプンクトと言って通じないじゃない。
int a=1;
float b=1.0;
if(a==b) puts("aとbのビットパターンは同じか?");
ヌルってちょっとエロいですね。
ぬるぽ
>>488 それはaが暗黙のうちにfloatへキャストされていると考えろ。
>>492 通常算術型変換だからdoubleにはならないと思うが。
>>491 暗黙のキャストなんて無い
単なる型変換だ
規格書嫁
495 :
デフォルトの名無しさん:05/03/12 15:49:48
>>484 あんたの脳内規格をCの基本と言われても、こっちにはその規格票がないよw
496 :
デフォルトの名無しさん:05/03/12 15:50:32
>>475 float aho;
aho = 3 / 2;
>>494 スマソ
そうか、キャストはキャスト演算子を使うときだけを言うのか。
>>496 それとNULLポインタとどう関係する?
またはじまた、お互いの脳内仮定がずれてんだよね。
冷静になれよ ( ´,_ゝ`)プッ
500 :
デフォルトの名無しさん:05/03/12 16:03:40
>>498 472 は空ポインタについて質問した
475 は代入の一般則から演繹する形で回答した
496 はその一般則の誤りを指摘した
475 がそれによって 472 への回答を再考するかどうかは 475 の領分であって 496 が関知する問題ではない
>>496 それとこれは同じ。ほらやっぱり意味が無い。
float aho;
aho = (float)(3 / 2);
3/2は1だしahoは1.0だろう
当たり前ジャン
普通
aho = 3.0 / 2
でいいよね
504 :
デフォルトの名無しさん:05/03/12 16:23:02
>>501 おーいバカ、意味のないキャストの例を持ち出して、それを以て全て意味がないとでも言いたかったのか?
>>504 だから475で代入ではキャストの意味がないと言った。
aho = (float)3 / 2は代入時にキャストしているとは俺は言わない。
俺の脳内では代入するときにキャストするというと501のようになる。
506 :
デフォルトの名無しさん:05/03/12 16:42:08
>>505 誤差を考慮する必要が出るかどうかは代入先の型から判断して記述することになる
別にキャスト式が直接的に代入の右辺である必要はない議論だ
char dqn = '\x80';
int ogefin;
ogefin = dqn;
unsignedのバヤイは?
508 :
デフォルトの名無しさん:05/03/12 16:48:32
>>475 #define PORT 0xfffffffd;
*(char *)PORT = 0;
Cのポリシーは精度が保存される方に変換される。
右辺式はfloat>intの優先順位で解釈される
>>506>>508 そんなことすっかり忘れていた。すまん。
で、本題の
>>472の言っていた「代入でもナルポインターをキャストする意味がある場面」を俺にも教えてくれ。
508みたいに左辺をキャストするのは無しで。
511 :
デフォルトの名無しさん:05/03/12 17:14:44
いい加減仕様と実装を混同したような話をするな、堂々巡りだ
514 :
デフォルトの名無しさん:05/03/12 17:42:20
ヌルとナルは別物って聞いたけど
>>514 アナル: 「肛門の」という形容詞
アヌス: 「肛門」という名詞
516 :
デフォルトの名無しさん:05/03/12 18:00:17
> ヌルのことナルとか言うな。素人臭くて恥かしい。
ふつうナルだ。現場に「ヌル」とかいうやつがはいってくると、もぐりだとすぐばれる。
いや、違う、アスホールとケツめど野郎は同じ
518 :
デフォルトの名無しさん:05/03/12 18:02:11
> 暗黙のキャストなんて無い
> 単なる型変換だ
ぼけ、それをキャストっていうんだよ。しろうとがしったかぶりしやがって。
519 :
デフォルトの名無しさん:05/03/12 18:02:48
> そうか、キャストはキャスト演算子を使うときだけを言うのか。
おい...だまされてるんじゃねーよ。
520 :
デフォルトの名無しさん:05/03/12 18:04:43
> 「代入でもナルポインターをキャストする意味がある場面」を俺にも教えてくれ。
おしえない。おしえない。ぜったいおしえない。
521 :
デフォルトの名無しさん:05/03/12 18:06:25
> いい加減仕様と実装を混同したような話をするな、堂々巡りだ
ぼけ。この場合は仕様も実装も同じだろ ぼけ。
ききかじった言葉でしったかぶりするなよ ぼけ
522 :
デフォルトの名無しさん:05/03/12 18:09:58
いくら形だけ真似ても底の浅さはいかんともしがたい
あいつから唯一のとりえをなくした腐臭だけ濃縮 100% のウザさだな
523 :
デフォルトの名無しさん:05/03/12 18:31:21
大学の講義でも「ナル」だったな。
仕事でも「ナル」。(「ヌル」なんていっているまぬけは1人もみかけたことない)
ヌルなんていうのは、ネクラのひきこもり2チャンネラーぐらいでは?
他人と会話しないから、変な思い込みが何十年も続くわけよ。
他人と会話するときも、メイルかチャットで文字なんで、
「既出」も「NULL」も自分の思い込みに気づかない。
1. 「既出」編
「おや、ATOKは 'がいしゅつ' もはいってないのかよ。しかたない登録しとこっと」
(数年経過)
「おい、それはがいしゅつだ」
(一堂 「はぁ?」 状態)
「わ、わざといったんだよ。それぐらいわからんのか!」(ふー、うまくごまかせた)
2.�「ヌル」編
(7年ほどNULLを「ぬる」だと信じこんでいた。でも普段はNULLと書くのでばれなかった)
(ある場面でだれかがNULLと書かずに、読みで「ナル」とかいた)
「はあ? なんのことかたおもった。ヌルだろ?」
(一堂「ナル」だと主張)
「うるせー、プロはヌルっていうんだよ!」(ということにしてしまおう!)
(だんだん相手にされなくなる)
(うーむ、そういうことにしてしまえなかったか、まあいいや。こんどはナルにつっこんで
恥かかないように気をつけよっと...)
524 :
デフォルトの名無しさん:05/03/12 18:37:28
>>523 その職場、平均年齢はどのくらいだ?
それとも年長者が若造の操縦に長けているのか
英語が特殊だな
なんか皆さん一生懸命で何よりですw
527 :
デフォルトの名無しさん:05/03/12 18:45:47
うちはみんなヌルって言ってるよ
平均25歳くらい
528 :
デフォルトの名無しさん:05/03/12 18:48:04
> その職場、平均年齢はどのくらいだ?
30代かな? 平均すると
社長は40代だとおもうが、めったに支社にはこないし、
支社にいるのは25〜28の層がほとんど。
「ヌル」なんていう間抜けなこというやつは1人もみたことない。
二回も言ってるし
かまってちゃんか。春だな
隔離スレとしては機能してるようですな
531 :
デフォルトの名無しさん:05/03/12 18:51:37
532 :
デフォルトの名無しさん:05/03/12 18:52:09
2回が意味不明
534 :
デフォルトの名無しさん:05/03/12 18:55:07
>この場合は仕様も実装も同じだろ
「混同」さんの典型だなw
本スレが無い隔離スレってのもオツなものだ
Cの俺に聞けスレについては目的がもともと隔(ry
ということにしたいのですね
ヘ_ヘ
はい、そうです。
539 :
デフォルトの名無しさん:05/03/12 19:23:08
他人真似も最低of最低レベルだな
また春がきました。
今日はいい週末ですね
542 :
デフォルトの名無しさん:05/03/12 20:07:48
なんなら隔離スレその105建てとくか?
>>523 くだらないことに拘ってるな。
ゼロでいいのに。
544 :
デフォルトの名無しさん:05/03/12 20:28:26
だがゼロではない。常識!
普通「サイファー」だろ
547 :
デフォルトの名無しさん:05/03/12 21:31:59
Visual C++ で使える _splitpath 関数に相当する関数は
Linux ではなんという関数なのでしょうか?
>>547 >>1 GUIなどの標準Cではできないことの質問は使用している開発環境のスレへGo! (←ここ注目)
550 :
デフォルトの名無しさん:05/03/13 01:10:24
base64エンコードのいいサンプルはないでしょうか。
>>550 あります。
Googleで、「base64 エンコード ソース」で検索した先頭のではダメ?
555 :
デフォルトの名無しさん:05/03/13 01:43:49
scanf("%d", &nurupo);
556 :
デフォルトの名無しさん:05/03/13 02:42:29
じゃあbufは「ぶふ」か?
>>555 >5.1
> ...
> すなわちアドレス演算子&を適用した結果がヌルポインターとなるこ ともない。
> またmallocの呼び出しに成功した場合の戻り値がヌルポイ ンターの場合もない
~~
外人用
> That is, the address-of operator & will never yield a null pointer,
> nor will a successful call to malloc.
#include <stdio.h>
#include <stdlib.h>
void ga(void *pp)
{
if (!pp) {
printf("*(%p)~~~~~~~~~> [%p]ががが\n", &pp, pp);
return;
}
printf("*(%p)~~~~~~~~~> [%p]\n", &pp, pp);
}
main()
{
void *p = 0;
ga(p);
p = malloc(1);
ga(p);
}
560 :
デフォルトの名無しさん:05/03/13 10:01:47
>>557 規格では確かにそうなっているが
現実にはそれはリンカのセグメント定義で決めることで
コンパイラの仕様というよりそういう結果になるセグメント定義をするなという
PG に対する縛りってとこがわかってない奴多いよな
561 :
デフォルトの名無しさん:05/03/13 10:12:16
(1) return ((n<1||n>12)?name[0]:name[n]);
(2) return name[(n<1||n>12||n+1)-1];
(1) と (2) って、意味同じなんでしょうか。
>>561 (2)は、||の演算結果がnになり得ることを期待している。従って、巧くない。
return name[(n < 1 || n > 12) ? 0 : n];
程度にするべきかと。
563 :
ya-su:05/03/13 11:25:00
ファイル中の重複する行を削除し、ファイルを上書き保存する
プログラムを作りたいのですが、
ファイルをR+でオープンして、fgetsがNULLになるまでWhile文の中で、
fprintfで書き込みをしようとすると書き込まれません。
同じファイルに読み書きすることは、不可能なんですか?
なんのためのR+なのか良く分かりません。
565 :
デフォルトの名無しさん:05/03/13 11:38:34
>>563 r+ で fwrite ではなく fprintf って聞いた瞬間から嫌な予感がしているが・・・
もちろん fseek/ftell くらいやってるよな?
>>563 普通は、"r"で全部読み込み、
処理後の結果を"W"で書き込むわけだが…。
567 :
デフォルトの名無しさん:05/03/13 11:55:23
行単位の編集ができればいいんならインデックスファイルを作るって手もあるな
ファイルが異常にでかいとか、書き換えはしたくないとか、順序変更もありとか、色々な動機から
568 :
お願いします:05/03/13 12:28:09
ここの空欄に何が入るのか教えてくださいませんか?
#include<stdio.h>
void swap(int q , int p)
{
int a;
a= q;
;
;
}
void main()
{
int x=5,y=2;
printf("x=%d, y=%d\n",x,y);
swap(&x,&y);
printf("x=%d, y=%d\n",x,y);
}
569 :
お願いします:05/03/13 12:29:41
↑訂正
#include<stdio.h>
void swap(int q , int p)
{
int a;
a= q;
ここ;
ここ;
}
void main()
{
int x=5,y=2;
printf("x=%d, y=%d\n",x,y);
swap(&x,&y);
printf("x=%d, y=%d\n",x,y);
}
570 :
デフォルトの名無しさん:05/03/13 12:32:22
無理に書けばこうなるが・・・
*(int *)q = *(int *)p;
*(int *)p = a;
たぶん単位は貰えんと思う
571 :
お願いします:05/03/13 12:38:07
デフォルト名無しさんありがとうございます。助かりました。
572 :
デフォルトの名無しさん:05/03/13 13:35:26
おい、全然助かってないぞw いいのかよw
573 :
デフォルトの名無しさん:05/03/13 13:53:07
>563
FILE *stream;
char buf[1024];
if((stream=fopen("path","r+"))==NULL)
return;
while(fgets(buf,sizeof(buf),stream)){
ここに重複しているかどうかの判定文
fprintf(stream,"hoge");
fflush(stream);
}
574 :
デフォルトの名無しさん:05/03/13 13:53:55
>573
最後に
fclose(stream);
575 :
デフォルトの名無しさん:05/03/13 14:45:15
> ファイル中の重複する行を削除し、ファイルを上書き保存する
uniqコマンドつかえよ ぼけ
576 :
デフォルトの名無しさん:05/03/13 14:47:28
> 無理に書けばこうなるが・・・
ならねーよ。
(1)出題にそもそもミスがある かなりのまぬけ。
(2)それをわからずに2chできく まぬけ
(3)出題ミスだということぐらいはわかるが、それに無理に答えるとこうなる..などとぜんぜんまちがっている解答をしめす おおまぬけ。
577 :
デフォルトの名無しさん:05/03/13 15:52:59
578 :
デフォルトの名無しさん:05/03/13 15:53:42
>>576 ほうら、カッカきてるぞ
今日も元気か、頭?
579 :
デフォルトの名無しさん:05/03/13 16:04:32
すれちがいじゃないことがわからない677はかなりのまぬけ
580 :
デフォルトの名無しさん:05/03/13 16:04:57
577だ
581 :
デフォルトの名無しさん:05/03/13 16:10:38
ワラタ
>>580 どうせなら、「レスアンカー間違えた俺も結構まぬけ」とか言って欲しかった
つまらねえやつだなw
584 :
デフォルトの名無しさん:05/03/13 19:05:28
if (0 <=c && c<=127) とすると、コンパイラが
comparison is always true due to limited range of data type
と警告を出しました。コンパイラは gcc 3.3 です。
自分のプログラム中では char c = -1 などということをしていて、
実際多くの処理系では EOF の値として -1 が試用されていますし、
上の条件判定が常に真になることはないと思うんですが。
コンパイラはなぜこのような警告を出しているのでしょうか?
585 :
デフォルトの名無しさん:05/03/13 19:09:32
実際に以下のようなテストのためのコードを書いてみたところ、
FALSE と表示されました。
char c = -1;
if (0 <= c && c <= 127) printf("TRUE\n");
else printf("FALSE\n");
EOF使うなら、ふつう、intですね
587 :
デフォルトの名無しさん:05/03/13 19:31:53
>>586 あ、そうでした。
でもデフォルトでは char は signed char で、
負の値も格納できるんだと思ってたので、
なんで負の値が格納されてるかも知れないのに
上の条件判定が常に真になるといわれるのか分からなかったんです。
>>584 char が unsigned なら、「0 <= c」が常に真
char が signed なら、「c <= 127」が常に真
EOF はこの件とは関係ない。
589 :
デフォルトの名無しさん:05/03/13 19:51:51
>>588 レスありがとうございます。
ただ && で論理和をとっているので
なぜこれが全体として真になるのでしょうか。
590 :
デフォルトの名無しさん:05/03/13 19:54:02
というか実際に if の条件式が偽になることがあるにもかかわらず、
コンパイラが警告を出すというのはコンパイラが間違ってると
解釈するべきなのでしょうか?
それとも signed char は使うなということなのでしょうか?
signed char を使うと移植性が悪くなる?
どうも gcc 特有の話題で歩きがしてきたので、
ワーニングに関しては gcc スレにいってきます。
お前はアホかと…
592 :
デフォルトの名無しさん:05/03/13 19:58:22
>>584 > if (0 <=c && c<=127) とすると、コンパイラが
> comparison is always true due to limited range of data type
if ((unsigned char)c <= 127)
これだけでいいってこと
せんせい!
if(c <= 0 || c > 0)
でもワーニングになりません。
コンパイラが間違ってますか?
594 :
デフォルトの名無しさん:05/03/13 20:02:35
>>584 if (0 <=c && c<=127)
を
if (0 <=c)
if (c<=127)
とすると、コンパイラがどちらの行で
comparison is always true due to limited range of data type
と警告を出すかやってみてんか。
元の条件判定のどちらかが常に真になっていると思うんですが。
595 :
デフォルトの名無しさん:05/03/13 20:07:00
>>590 おまえさん、2つ勘違いをしているように見受けるが?
・char が signed か unsigned かは処理系定義(つまり、どちらも合法)
・警告は ill-formed ではない(つまり、合法)
>>589 >ただ && で論理和をとっているので
論理“和”?
それはともかく、B が真のとき
A && B = A
A || B = 真
B はどのみち関係ない、という警告なんじゃないか?
>>584 の場合、恐らく c<= 127 が常に真。
>>590 >実際に if の条件式が偽になることがあるにもかかわらず
メッセージ読む限りでは、データ型のとる値の範囲に関する
警告なんじゃないか?条件式全体の話じゃなくて。
テキストファイルを末尾から1行ずつ読み込んでいくには
どうすればよいでしょうか。
seek
>>597 popen()が使えるなら、popen("tail -r your.file", "r")してから順番にfgets()
>>584 signed char c である場合、cの範囲は必ず -127 <= c <= 127 となる。
よって、警告が示している通り、c <= 127 という比較は
cが前述の限られた範囲に関するデータ型のため常に真となる。
つまり、比較するだけ無駄ってことですよ。
そんなバカな
602 :
デフォルトの名無しさん:05/03/13 22:21:15
>>584 です。皆さんありがとうございました。
つまり余計な項を書いてるから「余計だ」って言われてるんですね。
条件式全体に対する警告ではないんですね。
>>596 あ、論理「積」の間違いです。ありがとうございました。
>>600 だから規格書嫁って
5.2.4.2.1 (略)
これらの処理系定義の値は,それぞれの項目の右に示してある値と
同じ符号をもち,その値以上の大きさ(絶対値)をもたなければならない。
− ビットフィールドでない最小のオブジェクト(バイト)におけるビット数
CHAR_BIT 8
− 型 signed char のオブジェクトにおける最小値
SCHAR_MIN -127 // -(2<UP>7</UP>-1)
− 型 signed char のオブジェクトのおける最大値
UCHAR_MAX +127 // 2 7 -1
− 型 unsigned char のオブジェクトにおける最大値
UCHAR_MAX 255
− 型 char のオブジェクトにおける最小値
CHAR_MIN (値は,後で規定する。)
− 型 char のオブジェクトにおける最大値
CHAR_MAX (値は,後で規定する。)
604 :
デフォルトの名無しさん:05/03/13 23:00:08
すみません.質問させてください.
gcc version 3.4.2 を使用しております.
グローバル変数をまとめて書いたヘッダファイルを色々な.cファイルからインクルードするために
#ifdef GLOBAL_DEF
#define GLOBAL
#define GLOBAL_INIT(val) =(val)
#else
#define GLOBAL extern
#define GLOBAL_INIT(val)
#endif
のようにマクロを書けばよいと聞き感動しておりました.
そこで,これを用いてグローバル変数の配列を初期化しようと思い以下のようなものを書きました.
GLOBAL int a[] GLOBAL_INIT({1,2,3,4});
GLOBAL int b[] GLOBAL_INIT(({1,2,3,4}));
a は,4引数のマクロだと思われてしまうようです.
b は,int b[] = (({1,2,3,4})); のように展開されてコンパイラに怒られてしまいます.
なにか良い方法はないものでしょうか?
よろしくおねがします.
605 :
デフォルトの名無しさん:05/03/13 23:25:23
char nurupo(void)
{
return(NULLPO);
}
606 :
デフォルトの名無しさん:05/03/14 00:16:14
>>604 そんな小手先のテクニックに「感動」して無駄な時間を費やさなければよいです
607 :
デフォルトの名無しさん:05/03/14 01:32:49
> ワーニングに関しては
ふ
608 :
デフォルトの名無しさん:05/03/14 02:07:56
> signed char c である場合、cの範囲は必ず -127 <= c <= 127 となる。
なわけねーだろ ぼけ。 しったかぶりするな。
その範囲をあらわすのに「充分な」幅をもっていなければいけないが、
それ以上をあらわすこともある。
609 :
デフォルトの名無しさん:05/03/14 02:10:24
588はかなりのしったかぶりぼけ
> char が unsigned なら、「0 <= c」が常に真
こっちはたまたまあってるが。
> char が signed なら、「c <= 127」が常に真
こっちは大うそ。
もうその話は終わってますから!
あるある探検隊!あるある探検隊!
|| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||
|| ○荒らしは放置が一番キライ。荒らしは常に誰かの反応を待っています。
|| ○放置された荒らしは煽りや自作自演であなたのレスを誘います。
|| ノセられてレスしたらその時点であなたの負け。
|| ○反撃は荒らしの滋養にして栄養であり最も喜ぶことです。荒らしにエサを
|| 与えないで下さい。 Λ_Λ
|| ○枯死するまで孤独に暴れさせておいて \ (゚ー゚*) キホン。
|| ゴミが溜まったら削除が一番です。 ⊂⊂ |
||___ ∧ ∧__∧ ∧__ ∧ ∧_ | ̄ ̄ ̄ ̄|
( ∧ ∧__ ( ∧ ∧__( ∧ ∧  ̄ ̄ ̄
〜(_( ∧ ∧_ ( ∧ ∧_ ( ∧ ∧ は〜い、先生。
〜(_( ,,)〜(_( ,,)〜(_( ,,)
〜(___ノ 〜(___ノ 〜(___ノ
え?signed char c;の値の範囲って
-128=< c =< 127
で決まりじゃないのですか?
そうじゃないときってどんなときですか?
ずっとこう認識してたのですが・・・
もしや、負の数にどの表現を用いるかで違うってこと?
処理系によって違うって意味?
2の補数表現なら-128<=c<=127ですよねぇ・・・。
規格厨うざ
>>615 ああ、そういう意味での話?
でもchar型が8ビットじゃないことも想定することは
そうないですよね、現実的に。
|| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||
|| ○荒らしは放置が一番キライ。荒らしは常に誰かの反応を待っています。
|| ○放置された荒らしは煽りや自作自演であなたのレスを誘います。
|| ノセられてレスしたらその時点であなたの負け。
|| ○反撃は荒らしの滋養にして栄養であり最も喜ぶことです。荒らしにエサを
|| 与えないで下さい。 Λ_Λ
|| ○枯死するまで孤独に暴れさせておいて \ (゚ー゚*) キホン。
|| ゴミが溜まったら削除が一番です。 ⊂⊂ |
||___ ∧ ∧__∧ ∧__ ∧ ∧_ | ̄ ̄ ̄ ̄|
( ∧ ∧__ ( ∧ ∧__( ∧ ∧  ̄ ̄ ̄
〜(_( ∧ ∧_ ( ∧ ∧_ ( ∧ ∧ は〜い、先生。
〜(_( ,,)〜(_( ,,)〜(_( ,,)
〜(___ノ 〜(___ノ 〜(___ノ
>>616 ハァ? 規格厨の何が悪い?
自分規格でももってるの?w
>>1嫁 標準C って書いてあるの読めないの?
規格書が標準だって事が分からないの?
あんたね〜もうちょっと考えてレスしなよ
糞教師やら糞本読んでそれが正しいって思っちゃうクチ?
現規格が壊れてるから信用したくないとか言っちゃう妄想厨?
規格書難しくて読めないとか言うのか?w
おまえがそういう理由言ってみろよw
春だな〜って先にいっといてやるぜ
620 :
デフォルトの名無しさん:05/03/14 10:39:38
とかまぬけなこといってる619は現在の規格がC99だけだということを知らない ;-)
>>584で
>コンパイラは gcc 3.3 です。
とあるので、まあそのへんを汲んであげてもいいじゃないか
だったらgccのスレできけよ
>>584 の時点で「コンパイラが警告出す」って話なんだから
「標準 C ではこうだ!」などと間抜けな突っ込み入れるんじゃなくて
最初から「スレ違い」と指摘すれば済むのにね。
ここでは実装環境の話をしては駄目なのかい?
>>626 そこまでしてここで話をしなくてもいいじゃないか
いや、ここで話をした方がいいだろう
規格厨もまぬけな突っ込みを入れる事が出来て、とても喜ぶだろう。
独習Cポインタの所まで行ったんだけど
このあと飛ばして独習C++にいっちゃってもいいかな?
この後の内容は独習C++の方でかぶっていると
チラッと聞いた事があるので、飛ばしちゃっても大丈夫かな…と思いまして。
「*」を入力するとXを表示し、「1」を入力するとAを表示するプログラムを作りたいのですが、
以下の記述ではそのように表示されません。「*」を入力するとXではなく数字が表示されます。
int num;
printf("Input : ");
scanf("%d",&num);
if(num == *)
{
printf("X");
}
else if(num == 1)
{
printf("A");
}
おそらく、「*」という文字をint型の変数に入れたので*が数字に直され、その数字が表示された
と思うのですが、この記述のどこをいかに修正すれば適切にXと表示されるようになるのでしょうか。
確かにgcc 3.3 だってことを考えても良かったな
だが
>>600は「必ず」って言ってるだろ
だからそれは間違いであることを規格を根拠に指摘しただけ
よって
>>624>>628は見当違いのこと言ってる
ツッコミ入れるところみんな違うよ orz
>>636 gcc 3.3 では「必ず」って事ね。おk
吊ってくる
まぁ、gccでもオプションでchar を unsigned charに出来たりするんで、
必ずって事も無いがなw
あ、
>>600でsigned charでって書いてあるか・・・
638は取り消し;
-127<=じゃなくて-128<=じゃないの?
もうその話は終わってますから!
どこ見てんのよ!!!
>>640 規格ではsigned charの場合、最低限は-127。
>>600はgcc 3.3での事だって言ってんだろ!
gcc 3.3では必ず-127〜の範囲なんだよ!!
それってgccならでは?
それともだいたいそうなの?
だから-128だってば。
実装環境の事なんて知るかよ
>>640 それ"も"正しいということではないかな
>>600では範囲そのものを書いているのではなく、cの範囲において
-127<=c<=127 となるとしているに過ぎない
という事は、
>>584においてsigned charは-128にはなり得ないと?
ある処理の実行速度をミリ秒単位で計りたいのですが
どうやってやるんですか?
100万回くらい実行すれば十分だろ。
>>650 お手元の OS のマニュアルをご覧下さい。
>>652 マニュアルなんてついてなかったんですが
655 :
デフォルトの名無しさん:05/03/14 22:35:33
>
この文体のアフォ, すでに誰にも相手にされなくなってるな! ;-)
何とかの王様を思い出した
|| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||
|| ○荒らしは放置が一番キライ。荒らしは常に誰かの反応を待っています。
|| ○放置された荒らしは煽りや自作自演であなたのレスを誘います。
|| ノセられてレスしたらその時点であなたの負け。
|| ○反撃は荒らしの滋養にして栄養であり最も喜ぶことです。荒らしにエサを
|| 与えないで下さい。 Λ_Λ
|| ○枯死するまで孤独に暴れさせておいて \ (゚ー゚*) キホン。
|| ゴミが溜まったら削除が一番です。 ⊂⊂ |
||___ ∧ ∧__∧ ∧__ ∧ ∧_ | ̄ ̄ ̄ ̄|
( ∧ ∧__ ( ∧ ∧__( ∧ ∧  ̄ ̄ ̄
〜(_( ∧ ∧_ ( ∧ ∧_ ( ∧ ∧ は〜い、先生。
〜(_( ,,)〜(_( ,,)〜(_( ,,)
〜(___ノ 〜(___ノ 〜(___ノ
ここは隔離病棟スレですから!
ヒロシです・・・ヒロシです・・・ヒロシです・・・・・・
660 :
デフォルトの名無しさん:05/03/14 23:46:31
あーうんこ臭ぇ
私だけ?
間違いない
cpuname.c
#define PENTIMU4 0x0007
#define ATHRONXP 0x0008
#define SUPARC 0x0009
int main(){
short Type=CPUTYPE();//CPUの種類を判別する関数
printf("type=%u",Type);
}
↑のようなコードでは0x0009のような定数しか返せませんよね。
SUPARCのような定義したキャラクタ自体を返す簡単なテクニックはないのでしょうか。
>>663 固定の文字列だったら、そのまま文字列を返せば?
const char *cpu_type() {
if (...)
return "SUPAAKU";
if (...)
return "PENTEAMU";
if (...)
return "ASURON";
return "FUMEI";
}
int main() {
printf("type=%s\n", cpu_type());
return EXIT_SUCCESS;
}
>>663 #define SPARC 0
#define PENTIUM4 1
static const char *CPUNAMES[] = {
"Sparc",
"Pentium4"
};
const char *get_cpu_name(int num)
{
return CPUNAMES[num];
}
とか。
667 :
デフォルトの名無しさん:05/03/15 00:45:02
日下部先生の本で調べてみました。
charはsigned charの場合、
規格では少なくとも-127〜+127まであらわせなければいけない(それより広い分にはOK)、
で、たいがいの処理系では-128〜+127をあらせる、
だそうな。
初心者にも分かりやすくていいね。
668 :
デフォルトの名無しさん:05/03/15 00:45:08
>>665 ( ´,_ゝ`)
そんな方法しか思い浮かばないのかよ
生きてる意味ないな
669 :
デフォルトの名無しさん:05/03/15 00:47:03
>>667 なんでそこで「日下部先生の本」なんですか?
gcc 3.3は-127〜127なのか
嫌な制限かけてるな
671 :
デフォルトの名無しさん:05/03/15 00:49:43
うちに4冊ある本で、載ってたのがそれだけでした。
ほかは、柴田ぼーよー、ハヤシはるひこ、たかはしまな です。
すんません入門本しか持ってなくて。のこりの3つには書いてなかったんですよ。
「僕の本」のtypo
673 :
デフォルトの名無しさん:05/03/15 00:50:44
うちの3.3は-128までいくぞ
ヴぉっヴぉヴぉヴぉ
ヴぉいどせんせ〜い!
675 :
デフォルトの名無しさん:05/03/15 00:52:38
せんせいるのどこー?
日下部マンセー
677 :
デフォルトの名無しさん:05/03/15 00:53:26
Kusakabe先生は、先日の卒業生の飲み会に来てくれました。
678 :
デフォルトの名無しさん:05/03/15 00:54:44
ほんとにそれら3つほ本には出てないのですか? 基本的なことなのに。しんじられん。
>600が使用しているコンパイラって何?gcc 3.3?
>>677 君たちは無益な仕事をしているのですね :)
とか言ってくれましたか?w
681 :
デフォルトの名無しさん:05/03/15 01:03:04
あのー、卒業式はすんだけど、まだ学生なんですが ;-)
僕は琉球大なんですが日下部先生がいなくなった後なので残念です
二次元配列って
【列】【行】?
それとも
【行】【列】?
呼び方、どっちが正しいんでしょうか?
>>684 配列の配列名だけで、行列ではない。よって行も列もない。
むむむ・・・
関数内で、
static int a;
extern int b;
と宣言された場合、
それぞれ変数のリンケージを教えて下さい。
688 :
デフォルトの名無しさん:05/03/15 07:04:34
グローバル変数をg_foo
static変数をm_foo
ローカル変数をl_foo
と名づけるのはどうしてだめなんでしょうか?
689 :
デフォルトの名無しさん:05/03/15 07:44:11
mってなんだろー
690 :
デフォルトの名無しさん:05/03/15 08:37:06
(´・ω・`)知らんがな
ログ取りの人、更新を止めたみたいね。
テンプレから消さないと。
>>691 いい加減うんざりしたかな。
>>688 ローカル変数に接頭辞はいらねぇべさ。
それと、static変数はローカルなものとファイルスコープのものがあるわけだがそれはどう分ける?
勿論、mは変。
>>687 教科書嫁。或いはマニュアルなり何なり。調べれば済むこと一々聞くなや。
signed char c = 0x80;
printf("%d", c);
これやると、どんなコンパイラでも-128でるんじゃないの?
695 :
デフォルトの名無しさん:05/03/15 09:39:56
> これやると、どんなコンパイラでも-128でるんじゃないの?
おまえぼけ。たとえばsingnd charが-127〜+127な環境でどうやってかえすんだよ ぼけ
2の補数方式のものだけじゃねーよ ぼけ
エサが食べられて嬉しそう
餌が(何かに)食べられて嬉しそう?
マゾですか?
698 :
デフォルトの名無しさん:05/03/15 10:25:42
>>692 ファイルスコープはm_foo、ローカルはs_fooでだめですかね
っていうかローカルなstatic変数ってみなさん使いますか?
小さくファイル単位で区切られていれば、あまり使わないような気がするんですが。。
>>695 そんな環境ほんとにあんの?
gccでも-128でると報告がでてるぞ
2の補数方式のものだけじゃねーよ
最近の環境では、なにがあるのさ。
>>702 1の補数方式とかも規格上はありうるかも知れないけど、
世界で実際に採用されているのは2の補数だけですから、残念っ!!
>>705 >2の補数だけ
ほう…。
全ての環境を調べた訳ですか?(w
でも、2の補数じゃない環境を最近のものであげられないなら、
事実上、2の補数確定ってことでいいじゃん。
世迷言は何をしながら言えばいいんだ?
>>707 全ての環境を調べなくても、わざわざ2の補数以外を使うメリットがない。
極論を言えば、2進法を使っていないコンピュータが世界に存在するかも知れないけど、
そんなものをわざわざ気にする必要がない。それと同じこと>2の補数
Cの規格って「現実にそんなもんねーよw」で済むようなもんなのか?
誰か次の規格から外しちゃってよ > 2の補数以外
ヒキコモリのかまって君が寂しがって書いてるだけです
無視してあげて下さい
>>712 そもそも、signed char の範囲が -127〜127 になっていること自体、
2進法のコンピュータで、かつ1バイトの型だということを(暗黙の)前提にしている。
3進法(あるいはそれ以上)のコンピュータがあるかも知れないということは全く無視している。
しかも、殆どの処理系で、limits.h の定義が
#define SCHAR_MIN (-128)
などとなっている。
もちろん、規格から僅かに外れることがセキュリティーホールになるなどの重大な事態に繋がる場合は
厳密に考慮する必要があるが、この問題(charの範囲)がセキュリティーホールなどになることはないから、
あえて考える必要は無い。
もし気に入らないなら、char型を使わなければいいだけの話。
強引にプログラミングすれば、charを使わずに文字列処理をすることも出来なくは無い。
今は、3進法のコンピュータなんてありえない。
3つ目の人間がいないと同じぐらいありえない。
>>716 よくそこまで的外れな考えができるものだ
ある意味、すばらしいと思う
10進はふつうにあるが?
716は、ヒキコモリのかまって君が寂しがって書いてるだけです
無視してあげて下さい
>>717 それと同じ理由で、1の補数を使うコンピュータはありえない。
>>718 ただ、(signed) char の範囲が(通常は)-128〜127 だと言っているだけ。
たとえ規格書になくても。
>>719 大昔の歯車式計算機ならありうるけど、今では殆どが2進法。
10進法の処理系も、内部的には2進法で処理している。
0000 0000→0000 0001→0000 0010→0000 0011→0000 0100→0000 0101→
0000 0110→0000 0111→0000 1000→0000 1001→0001 0000→・・・・・・
という感じで。
722 :
デフォルトの名無しさん:05/03/15 17:08:44
はぁ?
716は、ヒキコモリのかまって君が寂しがって書いてるだけです
無視してあげて下さい
まだこの話題かよw
>>721よ。おまえが言ってることはある程度正しいが
わざわざ処理系依存にする必要はないだろ
^^^^^^^^^
「ポータビリティ」って言葉聞いたことあるか?
>>721よ
ついでに間違いを指摘しとく
> charを使わずに文字列処理をすることも出来なくは無い。
「文字列」とは'\0'で終わるchar配列の事だから無理
初心者でも知ってるぞ。もうちょっと勉強してきな
>>724 >「文字列」とは'\0'で終わるchar配列の事だから
'\0'ターミネートされた文字の列
だろ。
726 :
デフォルトの名無しさん:05/03/15 17:45:19
略
main{
struct structure st[10];
printf("%s\n",st[0]->name);
func1(st);
}
func1(struct structure *pst){
printf("%s\n",pst->name);
func2(???);
}
func2(***){
printf("%s\n",###);
}
構造体のアドレスの受け渡しの質問なのですが、
mainから関数func1へ受け渡しするのは上記の通り。
func1から関数func2へアドレスを渡すには???と***に何を入れればいいのでしょうか?
また、func2内でst[0]のメンバnameを表示させるには###に何を入れたらいいのでしょうか。
回答お願いします。
1の補数だと、-0 != 0になるけど
規格厨って普段からそこまで考えてプログラミングしてるのか?
>>724 >わざわざ処理系依存にする必要はないだろ
>^^^^^^^^^
だったら、(signed ) char の範囲を「わざわざ」-127〜127 にする必要もないはず。
そもそも、char で表せる文字の範囲が高々256個だというのは、アメリカが勝手に決めた規格。
他の諸国、特に中国・韓国・日本など、非常に多くの文字を使う国にとっては非常に不便な規格。
ポータビリティーを重視するなら、(極論を言えば)char を4バイトくらいにすべき。
そうすれば、日本語のコード体系が3種類もあって混乱を招くことも防ぐことが出来る。
それに、負数の表現を2の補数に限定したところで、著しくポータビリティーが損ねられることはない。
>「文字列」とは'\0'で終わるchar配列の事だから無理
int 配列で文字列処理を擬似的に行うことは可能(fgetc, fputc等を使えば)。
>>727 それを言うなら、2の補数だと -(-128) == -128 になる。
負数が1の補数のCってどこにあるの?
規格厨の頭の中
規格ってのは、そのコンパイラが存在するかしないかじゃないのに。
735 :
デフォルトの名無しさん:05/03/15 18:11:40
>>725 「で終わる」と「ターミネートされた」の違いが分からない。
説明キボン
>>727 ずいぶんと痛い質問だなw
「」内推測だ。好きなように叩け
「ビット演算の時ぐらいにしか問題にならんだろ
(ビット表現上) -0 == (ビット表現上)0 は真になるのではないか?」
>>729 規格にケチ付けてもしょうがない
> int 配列で文字列処理を擬似的に行うことは可能(fgetc, fputc等を使えば)。
文字および EOF を扱うための int 型
fgetc に渡すのは int 型であり int 型の配列でも文字列でもない
分かってないやつが安易に「文字列」って言葉使うな
>>734 いいこと言った age
匂いだけで御飯は3杯はいけます
>>731 馬鹿はお前だ。
8ビットだと、
-128 = 10000000(2)
-(-128) = 01111111(2) + 00000001(2) = 10000000(2) = -128
>>732 まず存在しない。
余程の暇人が1の補数で負数処理するPCを自作すればありうるかも知れないが。
現実に相手をするのは実装なんだよ
>>737 やっぱり馬鹿だな。
なぜ馬鹿なのかも判らないようだ。
わざわざ解説までしちゃって。
ああそうそう
>>729がおもしろいからもっと叩いてやる
>ポータビリティーを重視するなら、(極論を言えば)char を4バイトくらいにすべき。
CHAR_BIT を知らなさそうな発言だなw
せめて「char を 32 ビットくらいにすべき」って言ってくれw
ちなみに俺は CHAR_BIT に気を遣うことはないヘタレ規格厨さ
ここは標準Cの話をするスレなんだ
実装は関係無い
>>735 規格上は、文字列=char の配列 と定義されているかもしれないから、あえて「擬似的に」と付け加えた。
通常は int 配列を「文字列」と呼ばないことは厨房の頃から知っている。
あたかも文字列のように扱う配列を「擬似文字列」とでも呼べば文句ないだろ。
>>739 何が言いたいのか分からないからちゃんと説明しろよ。
それとも単なる煽りか?
>>740 >CHAR_BIT を知らなさそうな発言だなw
それだって所詮はヘッダファイルで定義されている定数だろ。
>せめて「char を 32 ビットくらいにすべき」って言ってくれw
だから、そのつもりで言っているわけだが。
charで-(-128)==-128なんて2の補数では当たり前の事だし、
計算をする時は当然考慮するだろ。
何、得意毛に指摘してるんだ?
得意毛ってなんだよ>IME・・・
で、1の補数かもしれない事を考慮する人は、
-0!=0になるのを考慮すんの?
二回も馬鹿と煽っただけの香具師の理由が
>2の補数では当たり前の事
まぬけですな
こんな単純な例でも問題になるが
n = -n;
if (n == 0) {
・・・
}
隔離病棟スレとはいえ、酷い有様だな。
実装がこうだからとか言ってる奴は氏ね。
>>749 2の補数で、-(-128)が-128である事を指摘して
いったいどうしたかったんだい?
>>750 n = 0
n = -n;
これでnが-0になる決まりは無いですね
>>735 >「で終わる」と「ターミネートされた」の違いが分からない。
そこに違いはない。
>>754 なんねーの?
本当か?
1の補数で -(0x00)は0xFFなんだが
これを0x00にするって規格で決まってるのか?
「決まりが無い」を「ならない」と解釈するすごい脳内フィルタを搭載した方がいらっしゃるスレはここですか?
1の補数な環境なんて無いんだから、
こんな事、話しても無駄なだけだよ。
とはいえ、そういうマシンにCを実装したとしたら、
-0 != 0になるような気がするなぁ。
規格ではどうなってるのかね。
+0 と -0 が存在するdoubleで実験してみた
-0にはならなかった
もちろん、実装の話だから、さほど意味は無いがね
1の補数のときは、
11111111(2) = 0
とすれば解決。
>>762 (char)0xFFと(char)0x00が区別できないのか・・・
そもそもは誰かが1バイトのchar型が
-127<=c<=127
とかいうへんてこりな仕様をもちだしたのが原因だろ。
gccなら下限は-127だとか言ってた奴いたけど、
結局-128だしな。そしたらとたんに、2の補数とは限らないとか
言い出しやがってさ。一般的な話をしてんだ。
-127<=c<=127 の範囲を最低限保証するという仕様をへんてこりんと言うわけ?
>>763 だから、全てのビットパターンを区別できる2の補数が優勢になった、と思う。
そこから、-128は保障されてないから使うなとかなると、
へんてこりんだな。
それは同意するが、へんてこりんな仕様と言われるのはいかがなものか
極端な話そんなことが気になるなら多倍長整数・多倍長実数ライブラリ使えよって話になるだろうしな・・・
実装こそ現実
>>772 はいはい。そういう話はよそでやってね。
774 :
デフォルトの名無しさん:05/03/15 19:54:19
規格こそ理想。
数の表現が二つある場合、算術演算が通常の計算に合致するように暗黙の変換が行われるもんなんだがなぁ。
正規化って言語レベルの話なんかなぁ。
浮動小数の正規化も勝手にやってくれるのにねぇ。
コンパイラも作ったことも無いくせに
現実を見つめられない規格厨はお花畑にでも逝ってろ。
776 :
デフォルトの名無しさん:05/03/15 20:01:01
規格外との付き合い方が練れてない奴はヒヨッ子
777 :
デフォルトの名無しさん:05/03/15 20:01:34
777
778 :
デフォルトの名無しさん:05/03/15 20:04:30
漏れが1の補数CPUでCを実装するとしたら
定義直後でなにも代入されてないchar(8bit)は
0xFFで暗黙の初期化をしたい
779 :
デフォルトの名無しさん:05/03/15 20:17:39
>>778 勝手に余計なことをするゲイツOfficeみたいなコンパイラは使いたくない
>>760 それはマシンが0と-0を区別するかによるんじゃないの?
Cでそこまで規定してるの?
規定されてないから、1の補数の場合が云々言ってる奴は、
そんな事まで考慮してコーディングしてるのか?って話。
>規格があるから実装
実際は、実装が先の場合が多いがなー
皆に忘れ去られた「絶対値表示」方式。
(´ω`)
書籍として販売されているCプログラミングFAQは
>>1のリンク先の資料と同一ですか?
>>785 あーそうだった。そう考えると gcc ってすごいよな
気になって眠れないので俺が代表して規格を調べたぞ
みんな 6.2.6.2 整数型 を嫁
符号ビットが1の時次の方法を使うみたいだ
・符号と絶対値
・2の補数
・1の補数
-0についての説明するぞ
(1) -0 のビット表現をトラップ表現にするか通常の値であるかが処理系定義
(2) 詳細は省くが -0 を生成するには3パターンしかない
(3) (2)の際に-0を生成するか通常の0を生成するかは未規定
(4) -0をオブジェクトに格納するときに通常の0になるかも未規定
結論 2の補数マンセー
まあベンダーが拡張を行ってユーザーが支持し、他のベンダーも真似をして、
その拡張が規格になるという例は枚挙にいとまが無いし。
そもそも新しい規格は各委員の脳内から出てくるわけでは無い
-127<=が最低限保証されてるってのもどうかな。
2の補数表現以外のケースを想定するならchar型だって
8ビットって決まってるのか?って話になっちまう。
そういう極端に稀なケースを想定したらもともとキリがないって
ことで、-127<=とするのは意味がないことだと思う。
794 :
デフォルトの名無しさん:05/03/15 21:50:46
>>786 そうでなければ entry という予約語があったはず
>>793 ちょっと前のログ読もうぜ。
だから CHAR_BIT だって。最低で8なの。分かった?
ただの基準が違うだけでここまで議論できるやつはある意味
すごいね。
797 :
デフォルトの名無しさん:05/03/15 21:59:03
>>795 いくら喚いてもお願いはお願いだからな・・・
ISOやANSIやJISが「お願い」なのか。やれやれ。
800 :
デフォルトの名無しさん:05/03/15 22:14:18
>>799 じゃ、逆らったらどうなるか聞こうか坊や
801 :
デフォルトの名無しさん:05/03/15 22:18:48
マシン語レベルで自明、
フィジカルシフト、ロジカルシフトがある。
>>800 ねじに例えようか。
ANSIやJISで、ねじの規格はきまっている
規格通りに作った物はパッケージにも記載できる
だが、規格外のねじを作ったらいけないとかいうことは無い
単に、ANSIだのJISだのの規格じゃ無いってだけだ
ANSIやJIS規格のねじがほしけりゃそれを使うし、
それ以外のねじが必要で、ほしけりゃそっちを使う
803 :
デフォルトの名無しさん:05/03/15 22:25:00
>>802 違うよ、ソフトの世界はインチねじ。
先にやってんだから国際標準なんぞ糞食らえ、業界スタンダードだ!
806 :
デフォルトの名無しさん:05/03/15 22:26:21
単発の罵倒語w
日本国憲法すらお願いと言い出しそうな勢いだな
808 :
デフォルトの名無しさん:05/03/15 22:33:23
ご神体じゃねえな
ANSI準拠・JIS準拠を名乗りたいなら守れってことだろ
逆らいたいなら名乗らなければいいだけの話
名乗っておきながら逆らったら下手すると訴えられるかもしれないな
810 :
デフォルトの名無しさん:05/03/15 22:34:36
どいつもこいつも平然と例外規定を設けているな
うるせー、俺が業界標準だ!
813 :
デフォルトの名無しさん:05/03/15 23:01:03
> -127<=が最低限保証されてるってのもどうかな。
規格にそうかいてあるんだからしかたない。 ぼけ
814 :
デフォルトの名無しさん:05/03/15 23:01:58
すみません Cの標準規格では、
関数の引数の最大個数は、最低でもいくつまでサポートしていなければ
いけないんでしたっけ?
どなたかおしえてください。
815 :
デフォルトの名無しさん:05/03/15 23:03:23
> それはマシンが0と-0を区別するかによるんじゃないの?
このぼけ、1の補数方式ということばさえしらんのか ぼけすぎ
>>814 文法上なら2の16乗くらいに制限するな。
構造体使え ぼけ
818 :
デフォルトの名無しさん:05/03/15 23:05:04
おまえら1の補数方式(+0のほかに-0がある)のコンパイラーをつかったことないくせに
えらそうなこというな。
それではちゃんと +1 と -0 はbitパターンがちがうだけでなく、
==でくらべて等しくないんだぞ。しかもこれはCの規格にかなっている。
そんなこともしらんのかぼけ
820 :
デフォルトの名無しさん:05/03/15 23:05:52
> 定義直後でなにも代入されてないchar(8bit)は
ぼけ。定義されてたら値はきまってるだろ ぼけやろうめ
宣言直後といいたいのか このぼけは
821 :
デフォルトの名無しさん:05/03/15 23:06:37
> 皆に忘れ去られた「絶対値表示」方式。
そんな名前はない。ぼけめ。
ちゃんと正しい言い方で言え。
ぼけぼけうるさいよぼけ
823 :
デフォルトの名無しさん:05/03/15 23:07:16
> そんな事まで考慮してコーディングしてるのか?って話
してないおまえが ぼけ。
ふつうしてる。
そもそも、Cの規格が処理系依存だらけなのは、
処理系に合わせてプログラミングをしろという事だ。
スレ違いどっか逝け
ボケの花は綺麗だな
おまえがどっか逝け
828 :
デフォルトの名無しさん:05/03/15 23:16:56
規格は処理系のためにあるのだから当たり前だ
そんなことでブーブー言うのは規格が自己目的化している
言語オタクだけ
誰にいってんの
なんだ急にいつものレベルに下がってるじゃないか
ネタきぼん
831 :
ゆぅ:05/03/15 23:28:16
あのぉ、掲示板などの携帯投稿からの回線特定方法教えてもらえませんか??
困っていることがあるんです…
>>831 www.web110.com
こちらへどうぞ
834 :
ゆぅ:05/03/15 23:36:36
違いますが…
あるサイトに知り合いの事をかかれてまして・・・
835 :
デフォルトの名無しさん:05/03/15 23:40:51
あ、けっきょくだれもわからないのですね? > 規格で
引数の数なんて基本なのに
837 :
デフォルトの名無しさん:05/03/15 23:47:34
なんだおまえらそんなこともわからんのか
839 :
デフォルトの名無しさん:05/03/15 23:51:50
基本を知らない835
引数の数なんて規格上無限で良いじゃん。
でも実装上で制限あるだろうに。
俺は、規格もコンパイラも平等だと思っている
>>814 5.2.4.1 翻訳限界
− 一つの関数定義における仮引数の個数(127)
− 一つの関数呼び出しにおける実引数の個数(127)
localtime() は、何を基準に時間を合わせているのですか?
世界標準時間からの差をライブラリが持っているのですか?
日本でコンパイルしたプログラムをアメリカで実行すると、
日本の時間になってしまうのですか?
SCHAR_MINがPOSIXでどうなってるのか、しらべてみた
、ところ
{SCHAR_MIN}
Minimum value of type signed char.
[CX] [Option Start] Value: -128 [Option End]
~~~
[CX][Option Start] Extension to the ISO C standard [Option End]
The functionality described is an extension to the ISO C standard.
Application writers may make use of an extension as
it is supported on all IEEE Std 1003.1-2001-conforming systems.
但し書きつきで、-128となっており、
~~~
may
Describes a feature or behavior that
is optional for an implementation that conforms to IEEE Std 1003.1-2001.
An application should not rely on the existence of the feature or behavior.
An application that relies on such a feature or behavior
cannot be assured to be portable across conforming implementations.
なんだか、必須条件ではないようなことが書いてあり、
~~~
Strictly Conforming POSIX Application
A Strictly Conforming POSIX Application is an application
that requires only the facilities described in IEEE Std 1003.1-2001.
Such an application:
...
7
For the C programming language,
shall not exceed any minimum implementation limit
defined in the ISO/IEC 9899:1999 standard, unless
the System Interfaces volume of IEEE Std 1003.1-2001 specifies
a higher minimum implementation limit.
~~~
Conforming POSIX Application
ISO/IEC Conforming POSIX Application
An ISO/IEC Conforming POSIX Application is an application
that uses only the facilities described in IEEE Std 1003.1-2001
and approved Conforming Language bindings
for any ISO or IEC standard.
POSIXに厳格に準拠するには、SCHAR_MIN == -127
ふつうに準拠するには、 -127 <= SHCAR_MIN <= -128
のようだ。
なんでPOSIXの話がでてくるんだ
訂正:
ふつうに準拠するには、 -127 以下で任意
-127以上-128以下だと
CXオプショングループ拡張に準拠と書ける、
のかなすみませんwかりません
こういう引用は失礼だよ、URL示せば良いよ。
845ですが
たしかに、引用が、ちょっと見苦しいので
その周辺を、あぼん依頼しときました。
あと、
>>851は、ちがう人です
そんな理由じゃ消されないだろ・・・
すいません。質問なのですが。
#include<stdio.h>
int tasizan(int i, v);
int main()
{
int i, v;
printf("足し算\n一つ目の数字を入力して下さい");
scanf("%d",&i);
printf("二つ目の数字を入力して下さい");
scanf("%d",&v);
tasizan(i, v);
return 0;
}
int tasizan(int i, v)
{
printf("答え\n%d",i+v)
return 0;
}
実行はできるのですが、エラーが出てるのです。
どこを直したらエラーが出なくなるのか、教えて下さい。
エラー E2303 tasizan_pointa_040316.c 3: 型名が必要
警告 W8065 tasizan_pointa_040316.c 14: プロトタイプ宣言のない関数 'tasizan' の呼び出し(関数 main )
エラー E2303 tasizan_pointa_040316.c 19: 型名が必要
*** 2 errors in Compile ***
>>855 ちゃんと、3行目と19行目がヘンだと書いてるじゃないか
もっとも、それd
>>856 僕もエラーがあるのに。。と思いました。
>>857 int tasizan(int i,int v);
で直りました。
ありがとうございました。
質問ですが、
sizeof演算子で構造体のメンバだけを調べたい場合は
どのように書けばいいのでしょうか?
または可能でしょうか?
struct tag_data{
char name[32];
char word[12];
};
たとえばこのような構造体があって
nameのサイズだけsizeofで調べたい場合です。
struct tag_data data;
sizeof(data.name);
の様に宣言した構造体変数から調べる事は出来るのですが、
型名から指定する方法が分かる方がいましたらご教授下さい。
イメージ的にはsizeof(tag_data::name);かなーと試したりしたのですが
駄目でした…。
>>860 sizeof(((struct tag_data *)0)->name)
>>862 今実際試してみて、サイズを得る事が出来ました。
有難うございます。感謝致します。
Googleで1時間以上調べても見つからなかったので本当に助かりました。
(探し方が悪いのかもしれませんが…)
ぬるぽ・・
まぁsizeofはアクセスしないからいいのか・・
昔同じ質問(つーか話題を提供)をしたなー。
>>862の解決法は知ってたけど、もちっとエレガントな解はないかな、って。
結局なかったみたいだけど。
>>864 規格では保証されてないけど
処理系が安全として使っている場合が多いよ。
使ってるコンパイラのstddef.hを覗いて、offsetofの実装を見てごらん。
最初からサイズ取得の場所で変数にアクセス出来るように
設計する方がエレガント。
んー、俺が書いた時には
実際に使用するのとは全然別の場所で、
設定ファイルから読み込んだ値の上限チェックに使おうと思ったんだよね。
使いもしない変数を宣言するのも美しくないし
初期化しないとコンパイラが文句言うだろうしって感じで
なんとか変数を使わないで取得できないかというネタで。
そういう場合は、結局、キャストしてその型の変数に見せかけるしかないわけで。
俺にとってはもう終わった話だから、どうでもいいけど。
そういう時は、あらかじめ配列要素をtypedefしとくなあ。
typedef char tag_data_name[32];
って感じで。
構造体から要素だけ取り出す時にも、
そのまま使えるし。
どれだけ
>>1を読み直しても「標準C以外の話題はアウト」と解釈できない
そういう意味で「標準Cでできないこと」という枠を設けたようには見えない
俺の読解力が足りないんだろうか
872 :
デフォルトの名無しさん:05/03/16 07:58:47
> 引数の数なんて規格上無限で良いじゃん。
はあ? > で良いじゃん
おまえがどう思うかなんか聞いてねーんだよ ぼけ
873 :
デフォルトの名無しさん:05/03/16 08:00:30
> どこを直したらエラーが出なくなるのか、教えて下さい。
scanfを使わないようにする。
874 :
デフォルトの名無しさん:05/03/16 08:01:23
> sizeof(tag_data::name);かなーと
はあ? どこからそんなもんがでてくるんだよ ぼけ > かなー
875 :
デフォルトの名無しさん:05/03/16 08:03:20
> 設定ファイルから読み込んだ値の上限チェックに使おうと思ったんだよね。
ぼけ。そもそもファイルから読み込むときに構造体の先頭位置あわせて読み込むような
やつはぼけだ。
876 :
デフォルトの名無しさん:05/03/16 08:03:57
> どれだけ
>>1を読み直しても「標準C以外の話題はアウト」
としかよめないよな。
877 :
デフォルトの名無しさん:05/03/16 08:10:53
>>875 そもそもファイルから読み込むときに構造体の先頭位置あわさないで読み込むようなやつはぼけだ。
878 :
デフォルトの名無しさん:05/03/16 08:20:57
>>875 日本語が不自由な方は、書き込まない方がよいですよ。
"設定ファイル"には
X_DATA_LIMIT = 100
などと書かれていて、
この"100"が、内部使用のデータの上限を超えてないかチェックするために
「メンバーのsizeof」が必要になるの。
メンバーに直接読み込むのなら、変数が存在するはずだから
それを経由してsizeofを取ればいいだけの話。
その程度のことも理解できない頭の悪さを
あいかわらず見せつけてくれてるね。
さすがだよ。
881 :
デフォルトの名無しさん:05/03/16 08:49:52
> この"100"が、内部使用のデータの上限を超えてないかチェックするために
だったら型名でsizeofすりゃいいだけじゃん
882 :
デフォルトの名無しさん:05/03/16 08:50:38
> メンバーに直接読み込むのなら、変数が存在するはずだから
意味不明。直接読み込むなら変数はいらない。
883 :
デフォルトの名無しさん:05/03/16 08:51:27
1つmallocしてみてしらべたらfreeすればいい ;-)
884 :
デフォルトの名無しさん:05/03/16 08:52:58
たとえば、メンバーが配列でその「最大要素数」を超えていないかとかならわかるが、
sizeofが必要になるのがかなりまぬけなロジックにちがいない。
>>881 どうやって?
>>860は読んだかい?
これ以上頭の悪さを晒すのは
_Bool10種類とstrcasecmpが標準に含まれる規格と
分岐予測ミスが処理速度を遅くする原因にならない最近のプロセッサ
最低この3つを挙げてからにしたほうがいいよ。
>これ以上頭の悪さを晒すのは
>Bool10種類とstrcasecmpが標準に含まれる規格と
>分岐予測ミスが処理速度を遅くする原因にならない最近のプロセッサ
>最低この3つを挙げてからにしたほうがいいよ。
頭悪そう
このスレはボケの森林ですね。
まぁ、
>>860の例で言ったら、
文字配列の大きさを#defineで定義しといて、それで定義・参照するな。
配列サイズ直書きに、sizeofなんか使わないね。
一昨日からCの勉強始めたんだけど、覚える意味あるよね?
Javaとどっち勉強しようか悩んだから複雑な気持ち。
>>890 覚えて絶対に損は無い。
Cを覚えたら、C++も覚えるとJavaを理解しやすくなる。
Cのポインタが一番ネックになると思うけど、Cは(殆ど)全ての言語の基本だから、
何をしていいか分からなかったらまずCの勉強をお勧めする。
localtime() は、何を基準に時間を合わせているのですか?
グリニッジ天安門時間からの差をライブラリ自体が持っているのですか?
日本でコンパイルしたプログラムをアメリカ等で実行すると、
日本の時間になってしまうのですか?
そうそ
>>895 setlocale(LC_TIMEで変更出来るし,処理系によっては環境変数TZを読んで決めていることもある。
アメリカ製(あるいは英語版)のコンパイラを使うと、
localtime()で得られるのはアメリカの時間になるの?
それとも、日本国内でコンパイルすれば大丈夫?
900 :
デフォルトの名無しさん :05/03/16 16:07:53
すいません初心者なんですけど、bmpファイルを読み込んで拡大、縮小するにはどうすればいいですか?
あなたとわたしはすれ違い
標準CだけでBMPを伸縮するんだろ。スレ違いではないぞ。
DDBだと難しいとかなるんでない?
>>900 ・bmpファイルのヘッダ(詳しい形式はググれば分かる)から画像サイズの情報を得る
・ヘッダを飛ばして画像データを読み込む。bmpファイルのy座標は通常のディスプレイ座標と異なり、一番下が0なので注意。
・整数倍に拡大したいなら、
int bmpimage[SIZE_Y][4*SIZE_X];
int expanded[N*SIZE_Y][4*N*SIZE_X];
int i, j, k, l, c, d, r, g, b;
/* bmpimage にbmpファイルのデータを読み込む */
for (i=0; i<SIZE_Y; i++) {
for (j=0; j<SIZE_X; j++) {
r = bmpimage[i][4*j];
g = bmpimage[i][4*j+1];
b = bmpimage[i][4*j+2];
for (k=0; k<N; k++) {
for (l=0; l<N; l++) {
expanded[i*N+k][4*(j*N+l)] = r;
expanded[i*N+k][4*(j*N+l)+1] = g;
expanded[i*N+k][4*(j*N+l)+2] = b;
}}}}
/* bmpimage のヘッダをコピーしてサイズのデータだけ書き換えて expanded のヘッダにして、データの書き出しは y 座標に気をつけて行う */
という感じで出来る。
・非整数倍に拡大したいなら、double 型を使ってピクセルへの色の配分を調節するか、それが面倒なら半端なピクセルを捨てるなりする。
ヘッダファイルのデータ構造は思ったほど複雑ではないから、データ構造通りの構造体を作って読み込めば簡単。
但し、fread で読み込む際に sizeof(構造体) とすると思ったように読み込めないから、ヘッダファイルのサイズを数値で直接指定する。
Windows bitmapだかなんだかわかんないのに無理やりやるのに
感動した!
>>905 試していないけど、動くはず。
今試してみる。誰か何でもいいから bmp ファイル(フルカラーで無圧縮の)キボン。
たまたま動く画像もあるだろうな。
│ _、_
│ ヽ( ,_ノ`)ノ 残念 それは私のおいなりさんだ
│ へノ /
└→ ω ノ
>
>>908 それは gifファイル くらいしかないと思うのだが。
規格上、bmp ファイルは動かないはず。
DIBとDDBとがあって、純CでどのOSでも開けるビットマップはDIB。
プラットフォーム依存で、例えばWindowsのMSPAINTとかが吐き出すビットマップはDDB。
前者の拡張子はdib、後者がbmp
DDBはなんで開けないの?
Device-Dependend Bitmaps デバイス依存ビットマップ
Device-Independend Bitmaps デバイス独立ビットマップ
OSには依存してないじゃん。
916 :
デフォルトの名無しさん:05/03/16 21:31:04
>>914 だな
M$ 発祥というだけ
広まらない理由は G*F みたいなことでもないのに
そこがわかってない人が意外に多いんだね
MacのDDBはPICTだっけ?あれはベクターとドロー両方混在だったような
>>915 こういうのを最悪に利用したのが蓮なんだろうな
>>915 それは画像が「本当に」動いているわけじゃないのだが・・・
見てて酔いそうになった。車酔いをしやすい人はあまり見ない方が吉。
なに?画像がうごいてるわけじゃなかったのか。しらなかったなあ。(棒読み)
>>922 ホントだ。間違ってたよおいら。
DDBって何だ?
>>921 ぼうよみならもっとそれらしいぶんしょうでかいたほうがいいぞ
全クダ 言葉ノ遣イ方ガ成ットラン
>>926 文法チェックならスタック使うとすっきりするかも。
928 :
デフォルトの名無しさん:05/03/17 01:58:52
> このスレはボケの森林ですね。
すみません。よびました?
(ちなみにわたしのみょうじは'もりばやし'です)
929 :
デフォルトの名無しさん:05/03/17 02:49:14
> localtime() は、何を基準に時間を合わせているのですか?
> グリニッジ天安門時間からの差をライブラリ自体が持っているのですか?
いいえ。本初子午線はパリが基準です。ブリテン島みたいな野蛮人の住むところは、
「たまたま時間帯が同じ」なだけです。
>929
カエル野郎キター
932 :
デフォルトの名無しさん:05/03/17 22:17:14
1から100までの自然数を素因数に分解して出力しなさい
誰かC言語でプログラム書いてもらえませんか?
933 :
デフォルトの名無しさん:05/03/17 22:24:50
ここは宿題スレじゃないんで・・・
マルチじゃねえか
> 誰か
だったらおまえが書け
>>932 if (素因数) {
printf("%d ", 素因数);
}
936 :
デフォルトの名無しさん:05/03/17 23:05:18
配列を自作関数に渡す時に、a[5]なら先頭アドレスのaを渡すというのは出来たのですが、
構造体配列、a[5].name などの先頭アドレスを関数に渡したい時はどうすればよいのでしょうか?
>>936 a[5].nameだろ?引数の型はstruct hoge*じゃなくてchar*だからな。
939 :
デフォルトの名無しさん:05/03/17 23:19:36
アンパサンドの書き忘れ?
&(a[5].name)
配列に&は・・・std::stringの可能性もあるか。
941 :
デフォルトの名無しさん:05/03/17 23:27:44
わかりにくくてすみません。要素数5の配列a[0]からa[5]を関数に渡す時、aを渡すと関数内で
a[0]からa[5]までの内容を参照したりできるのですが、それと同じように
要素数5の構造体配列aのメンバ name a[0].nameからa[5].nameを関数に渡し、
a[0].name からa[5].name を参照したり書き換えたりしたいのですが、どのように関数に渡せばよいのでしょうか?
普通の配列を渡すようにa.name としてもダメでした。
942 :
デフォルトの名無しさん:05/03/17 23:29:49
要素数5なのでa[4]まででした。すみません。
>>942 そんなこと無理だと思うけど。
なんでaを渡して、a[i].nameでアクセスしちゃだめなの?
>>943 メンバだけを渡さずに、構造体配列そのものを渡せばよいだけですね。
その通りでした。疑問が解決しました。ありがとうございました。
なんじゃこりゃ
そっとしといてやれ
>>941 void hoge(char *name, size_t size, size_t num)
{
int i;
for (i=0; i<num; i++, name += size)
printf("[%d] %s\n", i, name);
}
:
:
struct nantoka a[5];
:
hoge(a[0].name, sizeof *a, 5);
…って、折角書いたのに!書いたのに!
Tree is Justice
お前ら構造体を丸ごと渡すなよ
NULL はヌル
'\0' はナル って読むと、どっかのサイトで見たんですが、これは正しいでしょうか?
>>949 そのサイトのURLを出せ
話はそれからだ
なるぽ。
>>954 そのサイトを作った人間に根拠を聞けばいいじゃないか。
どこの世界の一般的なのかを。
\0は「ぬるぽちゃー」と最近は読んでる
fgets( buf, 256, stdin ) ;
sscanf( buf, "%[^\n]\0", buf ) ;
これで \n って取れるんですか?
こういう使い方みたけど、このやり方どうなんかなぁって思って質問しますた。
(もしかしたら大丈夫なのかもしれないけど)
規格上保証されてないだろうから、俺はやらない。
もちろん、sscanfでinとoutを同じ領域にする事ね。
[]の使い方は別に普通だし
文字列リテラルにわざわざ'\0'なんて入れないし
そもそも'\n'を取るだけならstrchrとかを使うけどね。
960 :
デフォルトの名無しさん:05/03/18 02:12:17
949 はぼけ
どっちもナルだろ。ナルポインターとナル文字
また現れたか
>>959 ありがとうございました m(_ _)m