1 :
デフォルトの名無しさん :
03/06/20 20:51
2 :
デフォルトの名無しさん :03/06/20 20:51
>>2 【ライセンスや機能などに問題あり】
って、それぞれ、何処に、どんな問題があるの?
スレ立てお疲れぇぃ
5 :
デフォルトの名無しさん :03/06/20 23:26
>>3 それぞれ調べてくれ
そしたら、次のスレからテンプレに書き込める
>>7 入力ファイルがないね。
これでどや?
gcc -O2 kare.c
>>1 .log
上げたはずなのに
>>9 のsageに負けてしまった…(T_T)
上がってた…(?o?)
sage と書いても上がらないだけで、 下がるわけではない。
>>13 漏れが
>>8 を書いた直後にスレが上がって無かったし
(すでに
>>9 までは書き込まれていたのも確認済み)
後から書いたスレの方がタイムスタンプが若かった事もあったので
タイミングによっては、上がらない事もあるのかと思って
>>11 を書いたの
でも、上がって無かったのは、その時だけだったようで
>>12 …(略
15 :
おしえてください :03/06/21 01:16
前スレ、最後の方、えらい事になっていますが、 実際の話、Cってそんなに難しいんですか?実を言うと、別会社でJavaをやっていました。 でも、どしょっぱつから、3人のプログラマーの一番偉いところをまかされて、いやになり、やめました。 他のスレには、市販で売っている(私が呼んだような入門書)を理解できていれば、Cで組めるものは、何でも組めると書いてありました。 それは、極端な例だと思いますが、実際のところ、C言語って、そんなに難しいのですか?
>>15 難しくはない、と思う。確かにクセはあるけど。
絶えず今扱ってるこのブツはメモリ上でどう表現されるかを
意識しながらプログラムすればそんなに難しくない。
ただし、Javaと違って危険な操作からプログラマを守ってくれないので(OSが守ってくれる場合もある)、
間違ってそういう操作をしてしまったらとたんにデバッグが泥沼になることがある。
この辺が厄介といえば厄介かな。
追加。 あと細かいことができる代わりにプログラマがかなりの部分の 面倒を見てやらなきゃいけない。たとえばヒープに取ったメモリ(malloc等)は プログラマがケアしてやらなきゃいけない。 Javaみたいにガベージコレクションをしてくれないので、すぐにメモリがリークする。 ま、標準ではないもののGCのライブラリはあるんでそっちを使えば楽できるけど。
Java からなら C++ やった方が楽かも。
コンピュータの動作原理を知らないと どんな言語使ってもバグった時に困る
20 :
おしえてください :03/06/21 01:39
>>16 >>17 さん、どうもありがとうございます。
前スレで、scanfについて質問したのですが、scanfだけで、
もっとCは深いみたいな、レスがたくさんついていたので、
不安になってしまいました。
中には、標準入力からの関数は自作するなんてレスまでありましたが、
標準入力関数を自作するなんてことはできるんですか?それとも、既存の関数を拡張して
作ると言う事なんでしょうか?
コンピュータの動作原理を知ってても 使用言語がブラックボックスの塊だったらバグった時に困る
23 :
デフォルトの名無しさん :03/06/21 01:42
scanfは自分しか使わないプログラムを書くときに使っている。
>>21 そうなんだよ。VBとかさ。
煽るわけじゃないけどたまにどうしようもない時がある
さんざん調べたらIEのバグだったりしてションボリ
>>20 scanf()系は基本的にフォーマットされたデータを処理する為にあるので
文字列の解釈や代入に使うべきではないです
と言うか、それを無闇に使ってバグを起こすから
使ってはいけないと言われている訳であって…
後は、周囲の人と適当に合わせて使うか使わないか判断すればOKです
まぁ、他人と合わせると殆どの場合は使わない方にいくと思いますが…
26 :
おしえてください :03/06/21 01:51
>>23 さん、
では、仕事で標準入力関数を使うときは、どうしているのですか?
まさか、アセンブラみたいな感じで、自分で作るんですか?そんなに難しいなら、
とても無理だと思います。既存の関数を拡張して、標準入力関数を作るんですか?
28 :
デフォルトの名無しさん :03/06/21 01:53
>たとえばヒープに取ったメモリ(malloc等)は >プログラマがケアしてやらなきゃいけない。 >Javaみたいにガベージコレクションをしてくれないので、すぐにメモリがリークする。 突っ込みどころ満載だな。 本当にCで仕事してるのかね。
30 :
デフォルトの名無しさん :03/06/21 01:53
>>26 例えばscanf("%d",&n)はおきまりのfgets+sscanfで
31 :
デフォルトの名無しさん :03/06/21 01:56
32 :
おしえてください :03/06/21 01:56
>>26 さん、どうもありがとうございます!
やはり、元からある関数を使うんですね。それを聞いて、とても安心しました。
自分で、ゼロからつくるのか!?と思ってしまい、こりゃとてもじゃないぞ、と思っていたのです。
それと、回答をくれた皆さん、どうもありがとうございました。おかげさまで、何とかやっていけそうです。
33 :
デフォルトの名無しさん :03/06/21 01:56
最近C言語を勉強した者なんですが何か問題だしてもらえませんか? あんまり難しいのは分かりませんが・・
35 :
デフォルトの名無しさん :03/06/21 01:58
>>33 宿題スレにあるのを片っ端からやってみれば?
>>28 よう分からんけど
void *p1,*p2,*p3;
p1=malloc(…);
p2=malloc(…);
p3=malloc(…);
:
free(p2); //解放しても使えない
って意味だと思う
つーか、俺も別におかしくないと思うけど?
>>27 その結論に行くまでがとてもとても苦労するのよ
40 :
デフォルトの名無しさん :03/06/21 02:00
>>28 は何につっこみたいんだ?
普通のこと言ってるだけだろ
41 :
デフォルトの名無しさん :03/06/21 02:01
>>38 void *p;
p=malloc(...);
.....
p=malloc(...);
free(p);
これの方がいいと思う。先に確保した領域を見失ってメモリリーク
42 :
デフォルトの名無しさん :03/06/21 02:02
>>20 scanfは変な動作をすることで有名な関数でプロは使わないというのは前スレの通り。
存在理由は昔書かれたプログラムとの互換性を取るためでしかない。
確かに便利な関数なので入門書ではよく使われるけどね。
他にもプロが使わないとされてる標準関数はgets(これは異論があるかも)、strtokがある。
前者はバッファオーバーフローの危険があるし、後者はバッファを破壊するから。
ま、どちらも使い捨てのプログラムでは使うこともあるけど、製品レベルでは使わない。
ちなみにこれらも存在理由は互換性のため。
標準入力関数を一から自作することは、いわゆる標準Cの範疇ではまず無理。
OSとのインタフェイスはCの規格の範囲外だから。
ただし、getcharやfgetsをベースにしてよいのであれば作れるよ。
だから既存の関数を拡張して作るという意味では作れる。
Cは深いといえば深いのかもしれないけど、言語仕様そのものは小さいので、
文法自体はさほど難しくはない。Javaを使ってたのならその辺はまず問題ない。
# つーてもポインタ・配列・関数ポインタの宣言周囲りの変な構文はあるなあ。あれは癌だ。
# パズルとしては面白かったけど。
>>28 ぜひ突っ込んでくれ。いや煽ってるのではなくどこが間違ってるのか知りたい。
どうせくだらない揚げ足とりだろ、
>>28 よ。
>たとえばヒープに取ったメモリ(malloc等)は
>プログラマが開放してやらなきゃいけない。
>Javaみたいにガベージコレクションが不要メモリの開放をしてくれないので、
>すぐにメモリリークが起こる。
とか言いたいんだろうけど、そんなもんわざわざ突っ込んでたら
円滑なコミュニケーションがとれんぞ。
言いたい事は伝わってるだろう。
>>43 できないできないと言っているが、
じゃあ何を使って作るのだ?
たとえばintを入力する場合どのように書くのだ?
手抜き無しの安全なコードで頼む。
揚げ足とりじゃない。 大幅に間違ったことはいってないが、正しいことも言ってない。 初心者が聞いたら誤解をまねくし、問題の本質をついてない。
>>44 28ではないが、17の文章は
メモリがプログラマは悪くないのに勝手にリークするような感じを受ける。
>>45 そういう意味なのかな…。わざと解放しない場合もあるよ。
だから解放するとかfreeするとか書かないで「ケアする」と書いたんだけど。
# つか、これに触れると変な箱の議論になりそうなんであとは静観しよう
scanfでここまで話が盛り上がるとは・・・
>>47 &&28
何か懐かしいな…
その議論(標準入出力ネタ)、漏れ、何年か前に、この板でやった事あるよ
つーわけで、生暖かく見守ってあげるので、心おきなく争って下さい
>>48 >大幅に間違ったことはいってないが、正しいことも言ってない。
そういうのは「突っ込みどころ満載」とは言わんよ。
だったら正しい問題の認識を提示してやればいいのに
>45みたいな意味じゃないよ。てか
>変な箱の議論になりそうなんで
それを知ってるのくらいなのに>17みたいな表現を初心者にしなさんな。
>>52 いや、漏れももう勘弁。
56 :
デフォルトの名無しさん :03/06/21 02:16
挑発しないで最初から指摘してやればよかったのに。
自分が突っ込まれるのが怖いのでしません。
なんかスマソ
59 :
おしえてください :03/06/21 02:16
>>43 さん
どうも、大変分かりやすくて助かりました。Javaとそのへんは、あまり変わりないと聞いて、
あんしんしました。
GCがあるからメモリ管理が「無用」というミスリードをする 馬鹿教本は纏めていってよし。「無用」じゃなくて「負担が 少ない」だけなのにね。
>>55 なるほど了解。確かに誤解を与えかねない表現でした。
ただ言い訳をさせてもらうならば、あの文脈はJavaの
ガベージコレクタとの対比として出したので云々。
ヒッコミマス
まあスーパーハカーの俺ならscanfを使っても安全なプログラムに仕上げられるけどな。
>>53 相手方が標準入出力を特定のメモリの位置にすれば出来ると抜かして
(つまり、stdout or stdin を特定の位置に決めてしまう)
漏れは馬鹿馬鹿しくなったので、その時点で降りました
言うまでも、ありませんが、相手方が言ってる事は
Cコンパイラを作る事であって標準入出力を作る事では無い
>>63 int i;
fread(&i,sizeof(int),1,stdin);
標準入出力なんて所詮はputchar(), getchar()に皮を被せただけの物さ。
>>69 はいはい、分かったから、がんがって作ってみ
みんなプログラムを載せて、論より証拠みたいなことを する香具師はいないのか?
>>71 世の中出来る事と出来ない事がある
で、出来ない事を出来ると言う香具師に限って証拠は見せない
ちなみに、何作らせたいの?
73 :
デフォルトの名無しさん :03/06/21 02:42
>>72 文字列を連結する関数をお願いします・・・
月曜日までの課題なんです(>_<)
>>73 #include <string.h>
#define renketsu(dst,src) strcat(dst,src)
>>73 renketu( char *str_a, char *str_b ){
strcat(str_a,str_b);
}
みなさんスレ違いにも関わらずありがとうございました(>_<)
ヷ〳〵〳〵〳〵〳〵〳〵〳〵
>>76 文字列の連結くらい、幾らでもあると思うけど
何で、そんなに早く見つけられるんだろう…
さては、おまいさん、タイ○(以下スレ違いの為、割愛)
さて73の宿題はどう評価されるのかな。
あえて冗長にかくのが自然に見せるテク まちがっても *p++とか書いてはいけない
char *strneko(char *dest,const char *src) { strcpy(strchr(dest,'\0'),src); return dest; }
まぁ課題だからstrcatは使っちゃいけないんだろうな renketu( char *str_a, char *str_b ){ strcpy( str_a+strlen(str_a), str_b); }
>>83 俺ならstrchr()の変わりにstrlen()を使う
まぁ、特に、と言うか、全く意味無いけど
かぶった…(T_T)
もしも標準ライブラリを書くことになったら、一部だけきちんと書いて、あとは
>>83-84 としちゃうけどまずいかなぁ?
出欠大サービス size_t strlen( char *src ) { size_t ret=0; while(src[ret]!='\0')ret++; return ret; } char *strcpy( char *dst, const char *src ) { size_t cnt=0; while((dst[cnt]=src[cnt])!='\0')cnt++; return dst; }
みんな優しいな。 スレ違いの質問なのに。
ワロタ
出血が… strlen( const char *src )が… パッと見た目だけで、こんなにもミスが…
92 :
デフォルトの名無しさん :03/06/21 03:14
質問があります。 変数の寿命はわかるんですが(例えばローカル関数なら returnされるまで)、定数の寿命も同じなんですか? void func(*char) { char = "2ch"; } これはNG?
constつければ書き換えられる心配がないことが分かるけど、 それよりもつけないとconstを指すポインタを(そのままでは)渡せなくなるんだよね。 これを指摘された時は目から鱗が落ちた。
>>92 NG
変数名は?charにポインタは入れられないよ
何から説明するべきなのだろうか…
>>94 すみません思いっきりまちがえてますた
こうですた。
void func(*char str)
{
str = "2ch";
}
また間違えた・・・ void func(char* str) { str = "2ch"; }
「定数の寿命」というのもよくわからん
>>97 *の場所がおかしい
strには"2ch"の先頭アドレスが入るけど、それではなんの意味もない。
void func(char **str)
{
*str="2ch";
}
>>99 "2ch"がメモリのどこかに確保されて、
strにそのポインタが渡されるんですよね?
そのポインタはいつまで使えるんだろう?ということです。
文字列リテラルは永久に不滅です
リテラル文字列の寿命はプログラムが始まってから終わるまで。 というか、ずっと。 あと、リテラル文字列を変更されて欲しくないので void func(const char **str) { *str="2ch"; } として欲すぃ。
なにを作りたいのか知らないけど、戻り値にすればいいのに。標準ライブラリのstrerrorみたいに。
>>101 どっかに"2ch"と書かれた領域があって、
funcに突入したときにstrがその領域を指すように初期化される。
で、funcを抜けたとき
・"2ch"と書かれた領域はそのまま存在する。
・strそのものは寿命がなくなる
君の言ってる「ポインタ」が"2ch"が書かれた領域のアドレスのことなのか
strそのもののことなのか判然としない。前者ならプログラム開始から終了まで、
後者ならfuncに突入した直後からreturnするまで。
最近は文字列定数とは言わないのか
>>100 むーそうなるんですか。
*が2つ出てくるとちょっと難しいっす。じゃfuncを呼び出す側は
char *str[100];
func(str);
printf(str);
なんでしょうか。
>>102 そうなんですか。定数はどこに登場させても
プログラム開始時には領域を持っているのですか?
それとも領域が確保されるのはその関数が呼ばれた時だけど、
スタック領域に積まれるわけではないということですか?
func(&str); でも str=func(); でも良いけど str=DEFINED_2CH; が良いと思う
>>108 それじゃポインタの配列でしょ。
char *str;
func(&str);
ポインタのアドレスを渡すの。
>>108 > スタック領域に積ま
自動変数じゃないもん
#自動変数がスタックに積まれると決まっているわけじゃないというつっこみは勘弁
>>108 char str[100];
func(&str);
printf("%s\n",str);
まず、 「そのポインタは今どこを指してるのか」を意識しながら考えたほうがいいぞ
何をやってるのだろうか…つー訳で首吊ってきます
うあー皆さんありがとう。 もう少し考えて出直してきます。
>>117 一体何をつくっているの?
多分もっとよい方法があると思うんだけど・・・・
まぁ、おそらく、こうしたいのだろう… void(char *str) { strcpy(str,"2CH");//文字列は直接代入出来ない } char str[100]; func(str); printf("%s",str);
>>118 作ってるものが分からないのに、
よい方法があるとか言うな!
>>118 いや、何をというわけではなくて単に、
どこかで使われた文字列定数が、いつどこに確保されて
いつまで保ってるんだろうと思いまして。
>>120 少なくとも戻り値 void な状況で
こういうことをする必然性はないのぅ。
戻り値が別にあるのであれば、
こういうことをすることもあるかもしれんが。
各社コンパイラのC99への準拠っぷりが気になる
そういや
>>108 に書いた、
>そうなんですか。定数はどこに登場させても
>プログラム開始時には領域を持っているのですか?
これに関してはどうなんでしょうか?
ものすごい見当はずれな疑問だったらすみません。
一般的にデータ領域とかいうところに置かれるんじゃなかったか? で、読みとり専用だったりすると書き換えようとしてあぼーん しったかで書いているんだけど・・・
メモリマップをみれば
それもそうですね。 ということで、見ました。 funcが呼ばれる前に "2ch"が既にあるようです。
>>125 コンパイラ依存だったと思う
例えば"2CH"なら'\0'まで含めて4バイトなので
ものによっては、そのまま即値データと置かれてる可能性もあるし
>>127 さんの言われるとおり、
読取り専用(なければ読み書き)のデータ領域の可能性もあるし
奇想天外な方法で確保している可能性も否定できない
(間違ってたらスマソ)
文字列リテラルならアドレスを得ないことはないと思うので、必ずメモリー上に置かれるんじゃないかなぁ。
>>131 そう言われれば、そんな気がしなくもない…
文字列リテラルはデータセグメント(メモリ)内に置かれる。
ていうか実装依存です。だからって書き換えちゃダメだけどね
いや、データセグメントって言うのは、処理系依存の話しだし…
ああ、やっと
>>104 >>110 の意味がわかりました。
char* str;
ってのは、charへのポインタを格納する変数だから
そのアドレスを渡すのだね。
だから当然、funcでは引数は **strだし、代入するには
その引数の中身(アドレス値)である *strなんだ!
ひとりレベルの低いレスですまんこ。
>>135 実装依存と処理系依存は意味違くない?自信ないけど
>>137 データセグメントはCPUが扱っているものだから処理系依存
(x86系だとCS,DS,ES,SS等々ありますが、DSが存在するかは処理系依存)
で、実際に<どうやってリテラルを保存するのか決めるのは
コンパイラだから実装依存
ISO 9899-1999 6.2.4.3 ... 静的オブジェクトはプログラム実行中つねに存在し スタートアップに先立って初期化される。 6.4.5.5 ... (文字列定数は)静的な配列として 文字列を格納するのに適切なサイズで初期化される。 ...
何か、書き方が悪かったので訂正 データセグメントはCPUが扱っているものだから処理系依存 (x86系だとCS,DS,ES,SS等々ありますが、 DSが存在するかは、そのCPUに依るので処理系依存) で、実際に、リテラルを保存するのはコンパイラだから実装依存
>>136 ちょうどstrtolの第二引数がそんな感じ。
142 :
デフォルトの名無しさん :03/06/21 07:02
C++の話になるけど、継承をしたときに クラスの種類を文字列定数のアドレスで判断してたら STLのVECTORでクラス作ったら文字列定数のアドレス変わってたんだけどそういうもんですか? ちなみに判断するときは return "C2ch"; ってやって返ってきたアドレスで if(GetName() == "C2ch") とかやってます。
143 :
デフォルトの名無しさん :03/06/21 07:08
>>142 同じ文字列リテラルが区別されるかどうかは処理系依存だから、
vector云々関係なくそのコードはまずい。
145 :
デフォルトの名無しさん :03/06/21 09:01
なんでCスレはC++スレと比べてこんなに伸びが良いのだろう 未だC++に移行できないウニクス野郎ばかりだからだろうか・・・
0からC++を勉強するヤツは少なくて、 0 → C → C++ ↓ ↓ 脱落 脱落 的なことになるからじゃねーの?
人生の敗北者でも使えるC 人生の敗北者では使えないC++
>>142 "C2ch" ってリテラルは 1 つだけとは限らない。
んな事いう香具師もいるのか。
頼むから業務系で頑張ってくれ。
平気でアドレス比較していることも信じがたいが C++の話になるけどとか言いながら話し始める142の神経が信じられない。
痛い目にあったのを道具のせいにして自分の散漫さを反省しないやつが 嫌いになりそうなものってとこに共通点があるような気がしたんだ
まぁ、
>>142 は単なるアフォとしても
>>140 がとにかくイタい。
知ったかはいかんのだよ、知ったかは…
154 :
デフォルトの名無しさん :03/06/21 11:56
一日たった110円であなたのお店やホームページの宣伝をします!
貴方のお店&サイトを効果的に宣伝できます!
お店の足取りが悪い・・・。私のサイトにはあまり人が来ない・・・。などお悩みの方は、
ぜひおすすめです。手軽&簡単しかも日本中に宣伝できますので、
大幅なアクセスアップが期待できます。
[料金について]
1日110円で宣伝&クーポン券の発行が出来ます。
年間契約で申込された場合、40,000円になります。
6ヶ月契約で申込された場合、25,200円になります。
3ヶ月契約で申込された場合、12,600円になります。
http://www.c-gmf.com/h17103.htm (ビジネスパートナーも募集中。稼げます!)
ぜひ一度お試しになってみてはいかがでしょうか?
cgiboy.com ウザ
157 :
デフォルトの名無しさん :03/06/21 12:48
ASCII文字列があって、その文字列が数字のみで構成されていたら数値に変換、 1文字でもアルファベットや記号などを含んでいたらとりあえず0を返すような 関数を作りたいのですが、どのやり方が一番効率がいいのでしょうか? atoiだと"12a"と入れても12と返って来てしまうので困っています。 やはり1文字1文字解析しながら条件分岐などさせて変換するしかないでしょうか?
>>131 void foo()
{
char str[] = "2ch";
}
とした場合、str は foo に入る度に初期化される。
このとき、文字列リテラルを4バイトの即値として扱って
str を初期化するように最適化される場合がある。
確か VC++ 6.0 でそうなってるのを見た気がする。
もちろん、アドレスをとらないといけないような場合は
そういうことはしないと思うけど。
159 :
デフォルトの名無しさん :03/06/21 12:55
for (s = t; *s; s++) if (!isdigit(*s)) return 0; return atoi(t);
>>157 isdigit で確認しつつ一文字ずつ解析しながら
自分で変換するのが一番いいかと。
面倒なら、isdigit で全体が数値のみで構成されてる事を確認して、
あとは atoi 使って変換したのでもいい。
実行速度効率的には二度手間だけど、
コーディングの手間としてはこっちの方が楽かも。
int f(char*s){return strspn(s,"0123456789")==strlen(s)?atoi(s):0;}
s + strspn(s,"0123456789") == '\0' ? atoi(s) : 0; こんなかんじでできないかな?
s[strspn(s,"0123456789")]?atoi(s):0; こうか?
少しずつトリッキーになりつつあるな・・・
s[strspn(s,"0123456789")?0:atoi(s);
しまった、]で閉じてない(w
空の文字列わたすとどうなるんだ?
168 :
デフォルトの名無しさん :03/06/21 13:28
>>157 先頭の符号や空白はOKならばstrtolを使え。
long func(char *s)
{
long n;
char *endp;
n=strtol(s,&endp,10);
return *endp?0L:n;
}
引数はconst char *sの方がいいか
皆さんありがとうございます。そのまま使ってしまいましたが こんな感じになりましたがどうでしょうか?一応動きます。 標準関数知らなすぎました(汗)。 int main() { char buf[15]; int ch = '\n'; fgets(buf, sizeof(buf), stdin); if(strchr(buf, ch) == NULL){ fprintf(stderr, "バッファを越えました\n"); exit(1); } buf[strlen(buf)-1] = '\0'; printf("%d\n", convertInt(buf)); return 0; } int convertInt(char *string) { char *s; for (s = string; *s; s++){ if (!isdigit(*s)) return 0; } return atoi(string); }
171 :
デフォルトの名無しさん :03/06/21 13:37
172 :
デフォルトの名無しさん :03/06/21 13:39
173 :
デフォルトの名無しさん :03/06/21 13:40
>171 ラインエディタで行数指定して行の追加、削除などを考えているので 負の数は一応使わないということで0を返すように統一してあります。
どうすれば、ULONGLONG 型や、__int64 の数字を文字で表示できますか? ULONGLONG ull; char s1[50]; ull = ( ULONGLONG ) ~0; wsprint( s1, "%u", ull ); で変換すると、s1 は「4294967295」で、UINT 型の最大値が表示されてしまいます。 デバッグで見ると、ull はちゃんと ULONGLONG 値の最大値が入っている… どなたか知っている方、お願いいたします。 もちろん sizeof( ULONGLONG ) の値は 8 です。 OS:Windows98 SE
>>174 ならエラー値は負数にすればいいのに・・・
177 :
デフォルトの名無しさん :03/06/21 13:44
>>175 スレ違い・・・・
long longならスレ違いでもないんだけど。
180 :
デフォルトの名無しさん :03/06/21 13:50
>>179 違いますが
ULONGLONGや__int64なんて型は標準にはないんだからここで聞くのはスレ違い。
そんなものコンパイラのマニュアルのprintfのページに載っていると思うけど。
一番肝心なコンパイラの名前を書かないでOSの名前だけ書くとは
buf[strlen(buf)-1] = '\0'; なにこれ?
>>182 意味ないけど文字列の終わりの'\0'の'\0'を載っけたいんだろ?
それにこうじゃねーの?
buf[strlen(&buf)-1] = '\0';
>>182 多分fgetsで書き込まれた改行文字を取り除きたいんだと思う。
>>183 (-_-;)
185 :
デフォルトの名無しさん :03/06/21 14:01
改行消しだと思うよ。
>>183 意味あるだろ。
strlenが何を返すか考えろ。
たとえばbufが空の文字列だったときとか。
>186 bufが空文字列ということはありえない。ちょっと上のifを見れば分かる。
>>187 悪い。
別にbufが空の文字列のとき誤作動とか言いたいわけじゃなくて、
183が理解出来てないようだから一番簡単な例を示しただけ。
>>170 strchr(buf, '\n')と直接\nを書いた方がいいと思う。
p = strchr(buf, '\n'); if (!p) ... *p = '\0';
>176 確かに。プログラム全体に関わるかもしれないので考え直します。 >189 一回しか使ってないのでそのほうがよさそうですね。 やっぱり何も入力しないでEnter押したときはconvertIntに渡さないで 事前にチェックしてexitとかしたほうがいいでしょうか?
違うところで聞いてみます。 レスサンクス
"%u"ってint型を表示するんじゃないの?
>>193 %u = unsigned int
%lu = unsigned long int
%llu = unsigned long long int (C99)
static const unsigned long long int a = 0;
extern const unsigned long long int a;
>>192 VC++なら__int64は%I64d
Boomerangをインストールしたんですが、解析のしかたが分かりません。 特にexeファイルを解析したいです、どうすればよいでしょうか?
通報しますた
受理しますた
201 :
デフォルトの名無しさん :03/06/21 17:00
Cpad for LSI C-86を使ってるんですが、 以下のようなエラーメッセージが出てコンパイルできません。 原因も全然分かりません。誰か教えてください。助けてー!!! "lcc: can't exec: cpp: No such file or directory"
>>201 まずgccをダウンロードしてきてください。
203 :
デフォルトの名無しさん :03/06/21 17:06
204 :
デフォルトの名無しさん :03/06/21 17:07
206 :
デフォルトの名無しさん :03/06/21 17:13
>>205 ・・・・エロリンクしかないんですけど・・・・・
208 :
デフォルトの名無しさん :03/06/21 17:22
>>207 できましたー!!!次はどうしたらいいんですか???
次にCpadとLSI C-86を捨てます。
210 :
デフォルトの名無しさん :03/06/21 17:26
それで・・・、なんか.exeを実行するんですか???
最後にgccでコンパイルして出来上がりです。
212 :
デフォルトの名無しさん :03/06/21 17:32
んんんん・・・できない・・・もう一度cpadを解凍して、コンパイラをgccに するってこどですか???
213 :
デフォルトの名無しさん :03/06/21 17:47
だれかー・・・・おしえてくださーい!!!!!
>>212 207のリンク先のDownloadからMinGWを落として解凍すれば使い方も一緒に全部入ってるはず。
215 :
デフォルトの名無しさん :03/06/21 17:55
全部英語でほとんど意味不明なんですけど、 その辺は自助努力ってことですか??? ギャビーン・・・・
216 :
デフォルトの名無しさん :03/06/21 17:59
>ギャビーン・・・・ ってなんですか?なんとなくガーンって感じはするんですけど。。。
217 :
デフォルトの名無しさん :03/06/21 18:04
英語は読めない・・・・助けてくれます!?・・・ ガーン
>217 パス通して gcc hogehoge.c
>>218 パスてなんですか?
だれにパスするの?
はぁ〜
>>219 どこまで知れば、目的に達成できるのか、もうちょっと調べてから
質問してくれないのカナー。
釣りにしては長いな
釣りじゃなくて漁です。大漁の予感がします。 今網を巻き戻してるところなのでもう少し待ってください。
223 :
デフォルトの名無しさん :03/06/21 18:33
hogehoge.cなんて解凍してもできないっす・・・
224 :
おしえてください :03/06/21 18:38
borlandC++コンパイラをおとして、BCPadをおとして、設定すれば良いだけの話しです。
225 :
おしえてください :03/06/21 18:39
なんで、みなさんは、難しいコンパイラを、教えるのですか?
勉強のため。 効率を重視するときはIDEを使います。
俺は勉強がすんでいるからわざわざ難しいコンパイラなんて使わないけどね。
228 :
デフォルトの名無しさん :03/06/21 19:40
C実践プログラミングという本に符号付き整数を右シフトした場合、シフトしてあいた部分には符号ビットと同じものが入ると書かれていたんですが、 符号付きでかつ負数を右シフトした結果は処理系依存ですよね?あいた部分が1で埋められると決まっているわけではないですよね?
処理系依存です
230 :
デフォルトの名無しさん :03/06/21 19:59
sdkってなんの略?
232 :
デフォルトの名無しさん :03/06/21 20:02
>>229 ですよね。ありがとうございました。
ごく一般的な例を示しただけなのかな。表形式で決めつけた書き方をしていたんだけど・・・
コンパイラに難しいとか簡単だとかあるのか? VisualStudioが使いにくいとかgdbがとっつき難いってのは判るが。
漏れの本にも、 doubleの精度は約13桁です って書いてある。
235 :
デフォルトの名無しさん :03/06/21 20:55
#include<stdio.h> char search(char*,char*); main() { char moji1[81]; char moji2[81]; printf("店の姫の名前をカキコんでみてネ。(ただし、80字以内にしないとお仕置きよん♪)"); scanf("%s",moji1); printf("やりたい姫の名前をここに挿れてっ。お・ね・が・い♪"); scanf("%s",moji2); if(search(moji1,moji2)==0) { printf("殿!お探しになってた姫は在籍しております。\nお急ぎくださいませ!"); } else { printf("殿!今日お探しになってた姫は休みをとっております。\nまた別の機会にご来店ください。よろしくおながいします。") } }
236 :
235の続き :03/06/21 20:58
char search(char*x,char*y) { char* a,b; int s; b=y; while(*x!='\0') { while(*y!='\0' && *x!='\0') { if(*x==*y) { s=0,x++,y++; } else { s=1,x++; } if(s==0 && *y=='\0') { retrun 0,break; } if(s==0 && *x!=*y) { y=b; } } } return 1; }
>char* a,b; は char* a; char* b; という解釈でおながいします。
239 :
デフォルトの名無しさん :03/06/21 21:06
>>238 それよりもなんの目的でソースを貼ったんですか?
char*a, b論外 strcmp
なんかウゼえコーディングだな
C言語覚えたてでウキウキなんだろう。そっとしておけ。
おまえら滅ぶよ
struct a{ struct b{ int com; }mac; }homepage; int hiroyuki44; homepage.mac.com/hiroyuki44 いや、べつに意味は無いんだけど…。
>246 あぼ〜んだよ(w
248 :
デフォルトの名無しさん :03/06/21 23:24
C言語覚えたてといえば、覚えてから一度も共用体なるものを使ったことないけど 誰かいる。 unionって今はじめて打ったよ。 あと。#if #elseとかも一度もない・・・
>>246 &&247
良く見るけど、そのアドって何なの?
>>249 名前欄にfusianasanと入力するんだよ。
こう?
ヷ〳〵〳〵〳〵〳〵〳〵〳〵
>>248 union は使わんなぁ。
でも、#if #else は結構使うぞ。
255 :
デフォルトの名無しさん :03/06/21 23:52
>>253 VC++に#if #elseと似たような機能があるよ。
指定した行や関数を無効にするようなものが。
256 :
デフォルトの名無しさん :03/06/21 23:54
でも、式で操作できないよ。
union便利だよ。
前の現場で変なunionの使い方してて、 たった1個のDBの項目長が変わっただけで大量の修正orリコンパイルを 余儀なくされたよ。 相当メモリを節約したいか、同じ領域を無理やり違う型ですぐに見たいときでもなきゃ 使うもんじゃないな。
制御系やるとたまに使うな>union
>>260 初めて使った union は union REGS regs; ダターヨ。
>>261 俺もだ。
VRAM 操作するときに使っターヨ。
>>248 エンディアン変換する時には激しく便利だな。
>union
別に union いらん気もするが。 void change_int_endian(int *value) { char tmp; char *c = (char*)value; tmp = c[0]; c[0] = c[3]; c[3] = tmp; tmp = c[1]; c[1] = c[2]; c[2] = tmp; }
>>265 それだとintのデータしか扱えなくて汎用性がない。
既存のソースの改修や、同じ関数内で変換したい場合は以下のようにする。
union {
unsigned long Dword;
unsigned short Word[2];
unsigned char Byte[4];
} data;
data.Dword = hoge;
/* Big Endian */
BigEndiadn = (unsigned short)((data.Byte[0] << 24) | (data.Byte[1] << 16) | (data.Byte[2] << 8 | data.Byte[3]) );
ふと思ったんだが union hoge{ short s[2]; int i; } uni; uni.s[0] = 1; uni.s[1] = 0; printf("%d", uni.i ); ってやったらさ、65536って出るよね。
>>266 CHAR_BITSが8じゃなかったら?
そこまでやるんだったらフツーに char* つかえばいいような気がするが。
>>266 それってBig EndianでもLittle Endianでも同じ値になる?
BigEndiadn = (unsigned short)((data.Byte[0] << 24) | (data.Byte[1] << 16) | (data.Byte[2] << 8 | data.Byte[3]) ); …アフォだ、真性の。
>>271 short と long のキャスト間違えただけだろ。
あのシフト演算してる内容はムチャクチャに見えるんだが。 アフォだ、真性の。
>>271 &&274
アフォで短小で包茎で早漏って言いまちたね
アフォで(略)って言った方がア(略)なんでちよ
そう、ママに教わりまちぇんでちたか?
ビッグエンディアンとリトルエンディアンの定義を 逆に覚えてしまっているのか。
>>278 ああ、最後の1行だけに対する煽りだったんだね。スマソ。
ところで今 pc.2ch.net 見えますか?
281 :
デフォルトの名無しさん :03/06/22 02:07
284 :
デフォルトの名無しさん :03/06/22 02:21
char c[3]; とかにscanfなどで絶対2文字以上入れさせない為にはどうしたらいいですか?
>284 別な入れ物用意する。
>>284 ループを使って1文字ずつ入れていけばいいんじゃない?
scanf("%1s", c);
scanfを、もとい、C言語を使わなければ良い
printf("絶対2文字以上いれないでください\n"); これを加えるだけでオッケー
fgetsとsscanfを使う
>>290 「そうは言っても体は正直なもので3文字以上
入れられたがってるようじゃがのぅ。フォッフォッフォッ。
どれどれ、ひとーつ、ふたーつ、みぃ〜〜〜っつ」
scanf("%1s", c); などを使った時、 scanf("%1s", c); //一回目の入力 scanf("%1s", c); //2回目の入力 とした時1回目に余った文字が2回目のほうで入ってしまうのですがこれは回避できないんでしょうか?
>>284 まずは法律の整備から。
まあ法律を破る人はいるから絶対に防ぐのは無理だけど。
295 :
デフォルトの名無しさん :03/06/22 02:36
fseek(stdin,0,SEEK_END);
>>298 俺の持っている環境だけで動いても意味ないし・・・
釣りでしたか。
>>295 だめだったけど・・・・
環境はLinux+gcc
>>302 man rewind してみたら?
多分使うタイミングを間違えているよ。
>>303 デバイスに対してfseekやrewindを使った場合についての記述はない。
呼ぶタイミングは二度のscanfの間
漏れ BSD だが。特に問題なし #include <stdio.h> int main(int argc, char**argv) { char c; scanf("%c", &c); rewind(stdin); scanf("%c", &c); printf("%c\n", c); return 0; }
fflash(stdin)
いくら長い文字列を入力しても、二度目のscanfの時に入力待ちになれば成功なんでしょ?
私も試してみたのですがWINXPとVC++でrewind(stdin);は使えました 今は使えないのですが本当はUNIXで実行させたいのですが・・・ やっぱり関数使わないと無理なんでしょうか・・・?
>>309 rewind は UNIX な環境であればおそらく存在するんではないか?
なんかマズいの?
fgetsとsscanfを使えとあれほど すごい釣りだなぁ
scanf()はネタが尽きないね。
>>310 存在するか否かの問題ではないだろ・・・
rewind(stdin)で入力バッファをクリアできるかどうかが問題なんだろ。
fscanf, scanf() の "%c" つかえば医院じゃないかな?この場合は。
こんなんどうですか? scanf("%c",&a); b = a; while(a != '\n'){ scanf("%c",&a); } scanf("%c",&c);
316 :
デフォルトの名無しさん :03/06/22 03:17
getchar()仕え
317 :
デフォルトの名無しさん :03/06/22 03:18
EOFの判定めんどい
>>313 んーと a.out < /dev/random
ってことですか?
>>322 >>309 は期待通りに動いたという意味で「使えました」と言ったんだろ。
それを存在するかしないかという意味で解釈して
>>310 と言ったんだろ。
つか
>>320 はヤヴァイ感じがする。もう寝たほうがいいぞ。
みんな名無しでよく流れが分からないのだが。
> キーボード バッファをクリアするには、既定でキーボードに関連付けられている標準入力ストリーム (stdin) を引数に指定して rewind 関数を使用します。 これ
次の質問は、標準入力がキーボードであるか、 違うものであるかを見極める関数の使用方法だな
釣りは魚の役をやる香具師がいないと成り立たないからなw
あー、乗り遅れた!
調べもしないで凄む
>>320 はどこに行ったんでしょうか?
334 :
名無しさん@Emacs :03/06/22 12:26
我流でやってる初心者ですが 下のプログラムを実行すると処理が全部終ったあとにSegmentation Faultになります。 どこがまずいんでしょうか #include <stdio.h> void get_output_fd( char *argv ,FILE *out_file ){ out_file = fopen("outputfile","w"); } int main ( int argc, char **argv ){ FILE *out_file; (void) get_output_fd( argv[1], out_file ); fclose( out_file ); return (0); }
>>334 fopenの戻り値がget_output_fdを抜けたところで行方不明になるから。
書くならFILE *get_output_fd(void); outfile=getoutput_fd();とする。
336 :
デフォルトの名無しさん :03/06/22 12:49
>>334 自作関数get_output_fdの引数の意味がわからん!
自作関数get_output_fdの戻り値でout_fileをメインに返すかout_fileを
グローバル変数で宣言しないとfclose( out_file );が機能しない!
さらに戻り値型の括弧は(void)特に必要がないかと思うけど・・・
STLのstringを使ってみました。 int i=123; string ss=i; としたとき、ssに数字の123の文字が入ってくれません。 単に数字を文字列にしたいだけなんですが、どうすればいいのでしょうか。
>>334 void get_output_fd(char *argv, FILE **out_file)
{
*out_file = fopen("console.txt", "w+");
}
int main(int argc, char **argv)
{
FILE *out_file;
get_output_fd(argv[1], &out_file);
fclose(out_file);
return(0);
}
初心者ですが 、これでエラーがでます。 なぜでしょうか。 #include <stdio.h> main() { printf("t"); }
340 :
デフォルトの名無しさん :03/06/22 13:09
メイン関数の戻り値方がない。 さらにはコンパイラによったらメイン関数でもプロトタイプを 宣言しろといってくる「ポンコツ」が存在する。
というわけで340じゃないが #include <stdio.h> void main() { printf("t"); } #include <stdio.h> int main() { printf("t"); return 0; } どっちかにすんだな
342 :
デフォルトの名無しさん :03/06/22 13:34
大漁〜♪大漁〜♪
int を char にするだけでもいいのでおながいします。
(char)
それだとわけわかんない文字になってしまうのですが・・・。
このスレで聞いていることの方が分からない。
C系の質問スレってここじゃないの?
>>349 あーごめんなさい。
あとまじでありがとうございます。困ってたので助かりました。
>>337 C板的に回答するなら
int i = 123;
char buf[256];
sprintf( buf, "%d", i);
と言った所か?
板じゃなくてスレ
>>339 #include <stdio.h>;
の「;」がぬけてますよ。
鼻毛登場
びっくりするほどユートピアだな
ふーん。
エラーと警告の区別がつかない初心者
>>354 ありがとうございました!!!
それで逝けました
役立たずの負け惜しみですか?w 354さんありがとうございました!! 残りは氏ね
#include <stdio.h>; 何度も見たなぁ。これが通るコンパイラって多いのかな。
C FAQすら読まずに知ったか回答する人は氏んでもいいと思う。
>>361 340, 341も答えているのに、酷い香具師だな。
>>363 違うだろw
C FAQすら読まずに質問する人
の間違いだな。
>>3 誰彼のアレも強制オナニーのようなものなのだろうか?
>>5 真・脳力者の芽美たんのオナニーがよかった
>>6 佐伯由美子(虜)の自慰調教のシーンが良かった。
>>9 とらハ2でみなみがオナるところ萌え〜。
>>10 とらハ2でみなみがオナるところ萌え〜。
>>15 >>16 自慰・自慰〜覗きの報酬〜・自慰2・自慰☆すぽっと(キャンディソフト)
みせたがり(ZERO)
「fu・shi・da・ra」「mi・da・ra」(ミンク)
P.S.@1・2・3(ウラン)
自慰倒錯(ティンカーベル期待の新作)
>>417-418 >>20 >>22 「女のこの仕組み」(りびどー)のおまけCD
>>29 夜勤病棟の恋
>>43 同人でもいいですか?虎の穴に「奴隷志願」
>>52 夜想文化祭で香澄、真由美、園子、智代の4人にオナニーシーン有るょ。
>>54 >>55 放課後マニアクラブは全員やってて良かったなぁ。
>>60 『風色のロマンス』で主人公の部屋でエロ本を見つけオナってる処を見つかちゃった
>>63 「緋色の姉妹」で二人いる。
>>74 ブライディアでダリアにオナニーさせるシーンは凄く良かった
有り得ない誤爆スマソ 吊ってくる
オナニー見てるだけなんてもの足りないだろ
パターン1 客「こういうの作ってください」 技術者「はいできました」 パターン2 技術者「俺こういうの作りたい」 技術者「できたー」 どっちの技術者が本気で開発「やりたい」と思ってると思う? どっちが本気で開発の楽しさを「感じてる」と思う? だから漏れはオナーニ好きなんだYO! 本人が自ら求めてる様がいいんだYO!
肝心なとこを忘れてた。 パターン1がセクースで パターン2がオナーニな。 で、別に俺はエロゲメーカーでもないし個人的に作る力量もなし。 さて、印刷もしたし、中古屋にいってくるか…。
>>372 オナニーが好きなんじゃなくオナニーしか出来ない香具師
while(1){ scanf("%d", &n); switch(n){ ・ ・ ・ } } というやつだと、入力を間違ったりすると(↑とかBS)無限ループにはいってしまいます。 その対処法などがありましたら、ぜひお教えください。
scanfの返り値をチェックしとけ
377 :
デフォルトの名無しさん :03/06/22 17:15
fgets()を使う
i378
難波「486よ486が安くなるのよ!」 時代だねぇ。
380 :
デフォルトの名無しさん :03/06/22 18:56
#include <iostream.h> void main() { double a,b,c; cout << "わり算の余りを求めます。" << endl; cout << "わられる数を指定してください。" << endl; cin >> a; cout << "わる数を指定してください。" << endl; cin >> b; c=a%b; cout << a << "÷" << b << "の答えは" << c << "です" << endl; } このプログラムがどうしてもエラーになります。 どこが悪いのでしょうか?
1. % は実数に使えない 2. a % b は a ÷ b じゃない 3. スレ違い
383 :
デフォルトの名無しさん :03/06/22 19:00
>>380 C++のプログラムはここではありません。
しかも、#include <iostream.h>ってヘッダーファイルではないので
#include <iostream>です。CとC++を混同してませんか?
C++スレで聞かれても困るけどな。
>>380 答が出てるしスレ違いなんだが、一般的に「エラーが出る」というのは、
どういうことなのか詳しく述べないとダメよ。
・何をしたときに
・どんなエラーが出たか(メッセージをコピペする)
これくらいは最低限必要ね。
386 :
デフォルトの名無しさん :03/06/22 19:27
Cを最近勉強し始めた者です。 scanfで半径を入力し、半径*半径*円周率(n)で面積を求めたいんですが、 入力された数値が2だったら4nみたいに表示できませんか? 文字と数字の掛け算ってできますか?
>>386 数字も文字の内。
文字は整数だからかけ算できる。
>>386 printf("%dn",hankei1*hankei2);じゃだめなの?
389 :
デフォルトの名無しさん :03/06/22 19:33
あっ、それもそうですね。 でも、もし半径がrを入力されたら・・。ということを 考えたら掛け算したほうがいいかなと思ったんです。 ↑>>入力された数値 すみません。文が変でした。数値だけではなく、文字も考えます
>>389 2 2なら4nで、r 5なら5rnとか表示させたいの?
391 :
デフォルトの名無しさん :03/06/22 19:37
#defin n 3.14
392 :
デフォルトの名無しさん :03/06/22 19:38
やっぱり円周率を#とします。 2と入力されたら4#、 rと入力されたら#r^2こんな感じです。
>>392 それならscanfを使ってはいけないと思うよ・・・・
あ、半径なんだからどちらも同じだ(恥
395 :
デフォルトの名無しさん :03/06/22 19:41
確かにそうでした・・・。 どうもありがとうございます。
はじめまして。 C言語を勉強しようと思うのですが、 どういう勉強方法がよろしいですか?? アセンブラも覚えた方がいいのですか?
まいっちんげまちこ
既にプログラミングが出来るのなら何からはじめても大丈夫だろうが、 そうでないなら内容が少なすぎるのではないかと思うくらい 簡単な本を買うのがいいと思う。 何でも覚えた方がいいが手広くすると挫折する可能性も高くなる
>>398 ありがとうございます。
400ゲットしていいでつか?
ダメ
あーあ。ダメって言ったのに…
403 :
悩める獅子座 :03/06/22 21:20
ポインタを使う意義ってなに? 今はPCの性能がインフレ気味だから全部グローバル関数にしちゃっても なんら問題ないと思うんだけど。。。 俺ってアフォ?ポインタの存在意義教えて
支離滅裂
>>403 BASICの様なコードを書きたいならそれでもいいよ
>>403 むしろ性能が低いほうがグローバル変数を使う意義があるのだが…
余計なパラメータの受け渡しのコードがなくなるんでその分速くなるのだが。
事実昔は、リエントラントに気を使わないでよい再帰関数は高速化のために
グローバル変数を積極的に使ったものだ。
グローバル変数を使う弊害ってのは、関数の独立性が損なわれることにある。
無論、リエントラントな関数だとグローバル変数を使ってパラメータの受け渡しをすると、
破綻するしな。
パラメータをいちいち書かずに済むので楽だと考えがちだが
(おれも新人の頃はそうだった)いざ、そのパラメータの値がおかしくてバグが露見した場合、
どこでおかしな値を設定しているのかわからなくなる。
それでなくても関数の独立性が低いので少しでもその関数を直すとその影響が
コード全体に波及して保守しづらいことこの上ないコードになるぞ。
だからPC、というか計算機の性能が上がった今では多少の性能は無駄にしても、
保守性を重視してグローバル変数は原則として使うな、ということになっているのだ。
以上のことはポインタを使うとか何とかということと関連のない話だ。
ポインタの本質は物を指せるということだ。物というのはメモリ上の実体な。
これを使わないとかけないコードは多々ある。一番いい例がリンクトリストだ。
もうひとつ、でかい物をパラメータとして渡すと性能が落ちるので、
その代わりにでかい物のありか(ポインタ)をパラメータとして渡すという使い方もある。
さらに物のありかを指しているので、関数はその物にいろいろいたずらをするという
使い方もある。君が言うグローバル変数で云々というのはこの最後の使い方しか見てない。
>>403 PCの性能が良くなったからポインタの存在意義がなくなった
と言ってるのか?
つまり昔は意義があったってことか?
どんな意義があったのかは知らないが、それがポインタの存在意義じゃないのか。
>>408 うわ。恥ずかしい。ごめんなさいです。
文意がつながらないから勝手に脳内で読み替えてしまったらしい。
Cにグローバルでない関数はあったか?
>>410 あえて言うならstaticな関数、かなあ。
グローバルの定義にもよるけどな。
内部関数か・・・
>>403 それとポインタ・・・いやコンピュータの性能とどう関係あるんだYO!
内部関数なんて言い方はしないかも・・・なんとなく使ってきたけど。
414 :
デフォルトの名無しさん :03/06/22 22:27
確かにポインターは使われなくなったけど、たまに、Cをマスター=ポインターが使える と勘違いしてるやつは何でも間でもポインター使ってみんなに、嫌がられるんだよ。 アスタリスク2つまでなら許せるけどそれ以上はいや!
>確かにポインターは使われなくなった なったのか?
416 :
デフォルトの名無しさん :03/06/22 22:35
418 :
デフォルトの名無しさん :03/06/22 22:41
#include <stdlib.h> ↑これはstrcmpを使うときに必要なんか?それともatoiか?? 違うサイトの解説見てたら乱数を発生させるときに必要とか・・・ でも乱数なんて入ってないし どれなんだYO!
419 :
デフォルトの名無しさん :03/06/22 22:43
>>417 言語自体が使わない流れ!
javaとか会社では新規にCでプログラムはしばらくしてないがcの仕事が新規で
くればハードの性能が上がってるので理解しやすくポインターを使わずに書く。
>>418 atoiもrandもsrandもstdlib.hだが、strcmpはstring.h
424 :
デフォルトの名無しさん :03/06/22 22:48
>>421 C++はクラス型もポインターは便利なので使う。それ以外はなるべく控える。
425 :
デフォルトの名無しさん :03/06/22 22:49
426 :
デフォルトの名無しさん :03/06/22 22:50
>>419 JavaでOSがかけるか。ドライバがかけるかボケ。
と思ったのだった。その昔にたようなことが言われてて、
PrologでOSを書いちゃったことがあってみんな仰天したがなw
アプリだけならCはいらんかもしらんな。
要は使うべきところを間違っちゃいかんという事だ。
Cを使うならポインタ使わないと書けない・書きづらいことがあるんで使うでしょ。
つかCに限らず、いまどきの言語はみんなポインタあるだろ。 JavaだってVBだってあるだろ。
アプリってなんだか楽しそうでうらやましい。
>>428 Cと同等のポインタが使える言語ってそんなにないと思うけど。
Javaは基本的にオブジェクトの参照のみだし。VBはよくしらん。
Cには参照がないんだよな。他の処理系では処理系が縁の下でやってることを、
Cではプログラマがポインタを使って明示的にやるようになってる。
ポインタが使えないと、標準関数使えないよ。
参照もポインタも本質は同じようなもの。 文法がちょっと違うだけだよ。 その本質を見失うと厄介なバグに悩まされるよ。
>>403 以降のスレをみる限り
ポインタを理解してない香具師って、意外と多そうだね…
「参照」という言葉が C++ で使われてるものと その他の言語で使われてるものとで違う、 ということに関して触れる人が少ないのが残念だ。 Java などで使う「参照」というものは 実のところ C++ の「参照」と「ポインタ」を足して 2 で割ったようなものだ。 1. 初期化だけでなく、代入できる(C++ のポインタの特徴) 2. あるオブジェクトの実体そのものではなく、 実体を参照するものである(C++ のポインタと参照の特徴) 3. アドレスのようなものを操作することができない(C++ の参照の特徴) 特徴 2 は重要で、うっかりすると 違うものだと思ってたものが実は同じ実体を参照していた、 なんてことにもなる。 C++ では値とポインタ、参照で型名が変わるのでその可能性を常に意識するけど、 Java だと参照しか使うことができないのでつい忘れてしまうことがある。
main() char *p func(&p); void func(char **p){ *p = ..... } これで大丈夫ですか?解説お願いします。
>>434 何が違うのかわからん。
JavaとC++の言語仕様の些細な差をいってる?
どれも、参照という、別のところにある実体を指すものという
概念の範疇から越えていない。
同じ実体を指してることがあるのも、当たり前だと思うが。
>>435 グッドグッド
>>435 何をやりたいのか知らないが、おそらくもっといい方法がほかにある。
>>436 だから、参照という言葉をみんな使ってるけど、
それぞれでその言葉の指している意味が違ってては
議論になんないよ、ってこと。
>>439 分かってる人には通じる。
しかし、議論してる中にはよく分かってない人もいる。
こういう人たちには通じない。
具体的にどの書き込みが分かってないの?
442 :
デフォルトの名無しさん :03/06/23 00:21
明らかに 〜 すら 〜 ない。 ってなんかおかしくね?
おかしくない。
>444 いや、おかしい(反語)
例えば
>>430 は「Cには『参照』がない」と言ってるけど、
この「参照」ってのは何を指してんでしょね。
「他の言語での『参照』と同一の定義を持つ仕様が存在しない」
って、そんなもんは別に珍しくもない話だし、
「他の処理系では処理系が縁の下でやってる」とかも大げさで、
ポインタと「参照」にそんな大袈裟な差はない
(今は「実体の参照」に焦点を置いているので、
ガベージコレクションの話は置いておく)。
ポインタで十分「参照」の機能を果たせるし、
それを実現するのも非常にたやすい。
これは「『参照』がない」と言えるのだろうか?
その答えは「『参照』の定義による」としか言いようがない。
>>446 あーまあ、そうね。確かに書いてて「言葉の定義ちゃんとしないで議論にならねえな」と思ってた。
頭にあったのは字面としての参照でしかなかった。
>ポインタで十分「参照」の機能を果たせるし、
>それを実現するのも非常にたやすい。
もちろんその通り。でもあくまでポインタを値渡ししてるに過ぎない、
ともいえるわけで、言葉遊びにしかならんなこれじゃw
というか、それぞれの言語で「ポインタ」だとか「参照」だとかその他様々な概念が、
重なるところも大きいけど微妙にずれてるから、きちんと定義しないと議論にならないね。
Pascalにもポインタはあるけど、Cの意味でのポインタじゃないし、
さらにPascalには参照もあるけどC++の参照とは違うし、
Rubyには参照しかない、とかいってもC++のとは違うし。
この種の定義を厳密にしないと話が全然進まないのは、このスレではできないよなあw
スレ違いになってきたし、この辺で。
ポインタなんて理解しちまえば所詮ただの変数(ポインタ変数)だからな。 ポインタを使わずに書かれた冗長なコードと、 ポインタを使ってすっきりしたコードと、 理解しやすいのがどっちかは明白だと思うが。 …といっても、こないだダブルポインタを使いたい場面があったが、 さすがに気が引けたのでほかの手段を使った。 どうしてもダブルポインタをつかうような場面でもなかったし。
文字列をコピーするにはどうしたらいいですか?
strcpy
ポインタ=アドレス+型
>>449 うーん、じゃあ1行目を読み替えてくれ。
「アドレスなんて理解しちまえばただの値に過ぎないからな。」
…まぁ、言いたい事はわかってくれ。
わからなかったらそれでいい。自分の文才のなさを嘆くだけだから。
ダブルポインタって一般的な用語? double*のことじゃないよね?
>>454 まあ、言いたい事は何となくわかってる。
** のことだろうけど、一般的な用語じゃないと思われ。
>>455 一般的な用語かどうかは知らないが、個人的に好きな表現ではないな。
ポインタの中のポインタ
箱の中のちっちゃい箱
マトリョーシカ
ポインタ型変数へのポインタ 値:ポインタ 変数:ポインタ型変数 とを区別するとこんな感じか。
略してポインポイン
上司「おい!お前なんでここでポインポイン使うんだよ!」 部下「いやですね、それはここで受け取ったポインタの値を変えるので、 ポインポインじゃないといけないんですよ」
ポインタへのポインタは使いたく無いって香具師に限って a[b[c[d]]] のような使い方するんだよな…
>>466 へーそんなんはじめてみた。
会社で漏れ以外にCやる奴がいないせいか。
#include<stdio.h> int main(void){ char input[81]; FILE *FP1,*FP2; if((FP1=fopen("kazu.txt","r")==NULL) { printf("読み込みファイルが開けません。"); return 1; } if((FP2=fopen("kazu2.txt","w")==NULL) { printf("書き出しファイルが開けません。"); return 1; } while(fgets(input,81,FP1)!=NULL) { fprintf(FP2,"%s",input); } return 0; } 実行できないんですがどこか変ですかね・・
>>469 「実行できない」とはコンパイルできないって意味か?
二番目のifの括弧がちゃんと閉じてないぞ。
最初のifもだ。
>>470 できましたーありがとうございます(´∀`)
エラーメッセージを欲嫁。
たまたま今回は出してきたソースをエディタに貼り付けて整形してみておかしいと思ったのでわかったけど。 「実行できない」だと漠然としてて何ができなかったかわからない。 おれの感覚だと「実行できない」は「実行させてみたけど例外が起きた/core dumpした」って感じだな。 少なくともコンパイルエラーが起きた、という感じがしない。 これは「感じ」の問題なんで議論しても始まらないんだが、質問を書くときは ・何をした(どこで詰まったか) ・期待していたことは何か、どう期待と違っていたか ・エラーメッセージが出ているのならばそれをコピペ(大量に出てるときは無理か…) くらいは書いて欲しい。なんかついさっきも同じようなことを言った覚えがあるがw これも以前書いた覚えがあるが、一般的にコンパイル時に文法エラーが出てきたときは、 コンパイラが指摘してきた行の一つ前にエラーがあることが多い(経験則)。
476 :
デフォルトの名無しさん :03/06/23 15:07
初心者で入門書見ながらやってるんですが 携帯のプラン別料金対応表プログラムはどう作れば良いんでしょうか・・? scanfでやってますが scanf(%d", &timeA,&timeB); これじゃだめ? プラン一個だけはできても他がバグちゃうんだけど
>>476 ここはお前のような低脳がくるとこじゃねえよ。
お前みたいな無能もいらない。
479 :
デフォルトの名無しさん :03/06/23 15:54
scanf("%d %d", &timeA,&timeB);
480 :
デフォルトの名無しさん :03/06/23 16:02
>>457 .458.459.460
業界標準はボインボインです。
481 :
mathmania ◆uvIGneQQBs :03/06/23 16:32
#include<stdio.h> int main(void){ char s[8]; scanf("%s",s); return 0;} のコードからできる実行ファイルの入力待ちで 123456789 とかを入力してはいけないといいますが、 scanfで、余分なデータを捨てる、ということはできるんですか?
>>481 単に文字列として受けるのならstdinに対してfgetsを使えばいいんじゃないでしょうか。
484 :
mathmania ◆uvIGneQQBs :03/06/23 16:41
やはり、安定した実行をするにはchar s[256]; ぐらいしかないですか?
485 :
mathmania ◆uvIGneQQBs :03/06/23 16:42
うを、 新着レス取得しそこなった。 Thanks to [483]
安定した実行を求めるのにscanf使用か・・・
488 :
mathmania ◆uvIGneQQBs :03/06/23 16:44
Re:>486 それもそーだ。
最近 scanf ネタ大杉。
>>488 ところで、"%7s"だと"abc def"と入力した場合、abcしか読み込まれないけどいいの?
491 :
mathmania ◆uvIGneQQBs :03/06/23 16:48
Re:>490 良くないかもしれない。 この場合はgetsかな?
もともとscanf("%s",s)なんだからいいんだろ
C FAQ を書いた人も可哀想だな
scanf と gets は(ry
>>492 scanfの%sを使うとそうなるけど。という意味でかいたの。
482で書いたことが無視されているんだけど・・・
scanf("%7[^\n]",s);
498 :
mathmania ◆uvIGneQQBs :03/06/23 16:54
文字リテラル(文字定数に関する質問。 #include<stdio.h> #include<string.h> int main(void){ char *s={'a','b','c',0}; *s+=1; puts(s); return 0;} のコードからできる実行ファイルは、正常に実行できますか?
char *s={'a','b','c',0}; これってコンパイル通るの?sが配列でないんだけど・・・・
>>498 char *s={'a','b','c',0};
↓
char s[]={'a','b','c',0};
>>501 そうすると今度は配列名に代入しようとしてエラーになるな(笑)
おっと、間接参照していたか。
504 :
mathmania ◆uvIGneQQBs :03/06/23 17:07
もうひとつ、 #include<stdio.h> #include<string.h> int main(void){ char *s="abc"; *s+=1; puts(s); return 0;} からできるプログラムはbbcを出力できますか?
文字列定数を(ry
>>504 処理系によっては出来るかもしれないが、
文字列定数の変更はC言語の仕様で許されていない。
次のネタ質は何かな? o(^-^)o
508 :
mathmania ◆uvIGneQQBs :03/06/23 17:22
#include<stdio.h> main(void){ char a[]={27,91,33,31,109,61,62,63,27,91,30,109,0}; puts(a); return 0;} を、DOS,UNIXで、それぞれコンパイルして、それぞれ実行すると、それぞれどうなりますか?
「常にmemcpyではなくmemmoveを使え。」 基地外かと思った
511 :
mathmania ◆uvIGneQQBs :03/06/23 17:32
[508]の訂正 #include<stdio.h> main(void){ char a[]={27,91,51,49,109,61,62,63,27,91,48,109,0}; puts(a); return 0;} //hexとdecがごっっちゃになってるもので。。。
エスケープシーケンスか。MSDOSではよくやったが コンソールしだいだろ
ていうか、聞く前に自分でやるとかしないのかね
514 :
mathmania ◆uvIGneQQBs :03/06/23 18:36
大きな整数(符合無し)を使ってプログラムを書いてみたいのですが、 C言語で、 フラグレジスタのキャリーフラグに相当するものってありますか?
ほにゃらら。
あるわけがない
517 :
mathmania ◆uvIGneQQBs :03/06/23 18:52
皆さん、どうもありがとう。 それでは、どっかの板で会いましょう。 栗上がりの処理は自分でしろと。
符号なし整数を足し算したときにキャリーがたつかどうかの判定は こんな感じでできたと思う。 carry = UINT_MAX - a > b;
逆だ… × carry = UINT_MAX - a > b; ○ carry = UINT_MAX - a < b;
厨質問でスミマセソ 7bitコードをSJISコードに変換したいのですが どうすればいいのかがまったくもってチソプソカソプソで ございます。 ご教授のほど承りたく候。。。
表をつかうなり好きにすれば。
そもそも「7bitコード」ってなによ。
>>520 そこら辺にあるソフトで一発変換。
というか、そんくらい検索したら分かるのでは?
>>520 テーブル作ってもたかだか256bytesだなw
>>526 ダウト! コード示せないくせにシッタカかよ
バイナリが256バイトで済むわけがない
529 :
デフォルトの名無しさん :03/06/24 00:11
そんなに大した質問じゃないんですけど、 皆さんは、hello,worldをコーディングするのに何秒かかりますか? なんとなく測ってみたら15秒・・・。自身あったのに・・・
188 バイトあれば十分なんじゃないの?
531 :
デフォルトの名無しさん :03/06/24 00:27
cで g(x,y)=(√f(x,y)-√f(x+1,y+1))二乗 + (√f(x,y+1)-√f(x+1,y+1))二乗 の計算をするにはどうすればいいでしょうか? さっぱりわかりません
#include <math.h> double g(double x, double y, double (*f)(double, double)) { return pow(sqrt(f(x, y)) - sqrt(f(x + 1, y + 1)), 2) + pow(sqrt(f(x, y + 1)) - sqrt(f(x + 1, y + 1)), 2); }
533 :
デフォルトの名無しさん :03/06/24 00:49
mallocを使うべき場面がいまいち分かりません。 サイズが不確定な文字列を格納するときなんかに使うんですか?
malloc を使わないで、領域を確保する場面の方が稀れ。 数バイトとか数個の配列ぐらいか
文字列とか 線形リストとか 木とか ハッシュとか、
>>534 ありがとうございます。
mallocを使って領域を確保するのが普通なんですか。
やはりメモリリークを避けるためなんでしょうか?
何にしろ習慣づけて損はない様なので、意識して使う様にします。
>>532 error:「外部シンボル'_main'が未解決」
ってなっちゃうんですが・・・
>>538 オプション -c を付けてコンパイルする。
-Gとか
>>538 hello world とプロンプトに出力プログラムを書いてから、出直してきて下さい。
mainをいれると 宣言の構文エラーってなっちゃうんですよ
おまいらは入門以前の奴に冷たいのね。 俺もだが。
入門以前の人はとりあえず本か HP でも読めや。 ここはそういうの読んでも分からんものを聞くとこや。
#include <math.h> main() double g(double x, double y, double (*f)(double, double)) { return pow(sqrt(f(x, y)) - sqrt(f(x + 1, y + 1)), 2) + pow(sqrt(f(x, y + 1)) - sqrt(f(x + 1, y + 1)), 2); } こんなんです
そんな初歩的なことも勉強する気がなく、 しかも丸投げスレがあるというのに探しもせずに、 ただただ自分の為だけにスレを汚す香具師に 親切にする必要はない。
>>547 No!!!!!!!!!!!!
ネタなの?
もしかしてg(x,y)の意味も分かってないんじゃね−の?
はい なんのこっちゃわからんです
ネタでないとしたら、一度もCで動く(というかコンパイルできる)プログラムを書いたことないんだろうな。
提示されている式だけじゃプログラム実行できないんだけど それすら分かってないんだろうな。
名無しさん5!5!!5!!!
どうすりゃ実行できるんですかね…
祭だ祭りだ〜〜〜
>>555 GO!GO!!GO!!!をモジッて5!5!!5!!!って言っているのかと思ったら、
レスの番号の事だったのね。
応援されてるのかと思った。
561 :
デフォルトの名無しさん :03/06/24 01:50
>>531 今すぐ24時間営業の本屋さんへ行って、
買えるだけのCの入門書を買って、
そこに書いてあることを完全に理解して、
それから大きな崖に突き当たること。
Cの勉強以前の問題。 まずは解析学の初歩からじゃねーの?
やっぱりよくわからないっす 画像処理のフィルタの式だったんですけど・・
ゲーム系専門学校の方でつか?
いえ ただの情報科の学生っす
>>564 >画像処理のフィルタの式
それならビットマップを用意しないと
俺は
>>537 が変なことを言っているのをながさない。
なんか いつも教科書の出版社のホームページからおとしたプログラムを 先生が配った.pgm画像で実習してるんですけど フィルタだけ変えろとレポートをだされて…さっぱりっていう状況で
こんなとこで聞くより、友達か先生にでもキケ
もう君にはアドバイスできないからageなくていいよ
>>569 > ・・・・・・・・・教科書の出版社のホームページからおとしたプログラムを
> ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
> フィルタだけ変えろ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
573 :
デフォルトの名無しさん :03/06/24 05:33
574 :
デフォルトの名無しさん :03/06/24 06:01
main関数から呼び出したvoid hoge()の関数内で途中でmainに戻るにはどうしたらいいでしょうか? returnとか使ってもいいんでしょうか?
朝っぱらからありがとうございました
>>577 妙なこと教えるなw
まあlongjumpは覚えておいて損はないけど。
setjmp/longjmp はヘルプで見た事あるけど使った事無いな。 どういう時に使うんだ?
例外処理もどき
>>580 Cプログラマは、例外処理を行儀の良いsetjmp/longjmpのようなものだと考えることができるだろう。
プログラミング言語C++第三版より
・・・・だそうだ。行儀の悪い例外処理を記述するのに使えるらしい。
ヌルほど。
そんなつもりはなかったのに ガッ されてもた。
>>580 関数内でBASICのGOSUB・RETURN相当の事をするときに、
配列を使ったスタック+setjump/longjump+マクロでやった事がある。
Cでやる意味はあんまりないな
589 :
デフォルトの名無しさん :03/06/24 13:06
func(){...} は void func(void){...} であると解釈しても良いのですか?
590 :
デフォルトの名無しさん :03/06/24 13:08
オマエニハAAツキヲクレテヤル
( ・∀・)
と ) | | ガッ
Y /ノ | |
/ ) .人
_/し' < >_Λ∩
(_フ彡 V`Д´)/
/ ←
>>588 >>589 だめ
int func(void){...}
>>590 あ、値を返すんですね、ありがとうございました。
>>590 違う。
int func(...) {...}
だ。
>>592 確かに呼び出すところより上で定義したらそうなるか・・・
いつもプロトタイプではvoidとし、定義では空にしているから・・・
>>591 というわけで
>>592 が正解だ。
例えばコマンドライン引数からもらってきた文字列を グローバル変数としてとっておくとき、その配列は mallocにしますか?それとも適当に十分大きな 配列を用意しますか?
>>594 グローバル変数を使わない。
使っても、アドレスをポインタ変数に代入するだけで
データのコピーは行わない。
>595 そっかー。ありがとうございます。 それじゃ、ファイルから(.iniとか)文字列を読み込んで それをいくつかのモジュールで使いたいときは? グローバル変数にする?main関数のローカル変数にする? そしてそれは適当に十分な大きさの配列にする? mallocで確保する?
597 :
デフォルトの名無しさん :03/06/24 21:22
メインルーティンからサブルーティンに引数として(ポインタを)渡す。
>>594 argvを渡すだけで充分。argvの差すものをコピーする必要はない。
領域確保は場合によってmalloc使ったり使わなかったり
>>596 サイズが判っている場合はmain()のローカルな配列。
そうでなければmain()のローカルなポインタ。
サブルーチンにはそれを渡す。
>598 ありがとう。言われてみればたしかにそうすね。 >600 サイズは不定です。 main()のローカルなポインタを宣言しておいて、 ファイルから読み出すサブルーチンにそのポインタを渡して、 サブルーチン側で mallocする、ということですか?
アホか・・・
アホですみません…
きっとargvもmallocする必要が出てくるぞwwwwwwwwwww
>604 は?氏ねよヴォケ
>>605 まぁまぁ無能なんだからヘコヘコしとけ。
偽者だろうけど
608 :
デフォルトの名無しさん :03/06/24 23:37
scanfで ユーザーが思わぬ数値、文字列を入れた場合エラーになるよね。 それってどうやったら解消できるんですか?
エラーにはならん
610 :
デフォルトの名無しさん :03/06/24 23:39
え、じゃぁあれはなんなんですか?
>>610 >ユーザーが思わぬ数値、文字列を入れた場合
scanf()は定型以外の場合は使うな
>>610 前スレとこのスレを全部読め。
scanfはもううんざり。
614 :
デフォルトの名無しさん :03/06/24 23:47
scanfの代わりにfgets printfの代わりにfprint
616 :
デフォルトの名無しさん :03/06/24 23:51
ねたじゃないもん。 まじれすだよ
ネタじゃないだろ。 stdoutとstderrを使い分けないのか?
619 :
デフォルトの名無しさん :03/06/25 00:01
#include <stdio.h> int main(void){ int a,b,c; printf("y=a*xの値を求めます。aの値を入力してください。\n"); scanf("%d",&a); for(b=0;b<11;b++){ c=b*a; printf("yが%2dの時xは%2dです。\n",b,c); } }
>>619 printf("yが%2dの時xは%2dです。\n",b,c); //文意からcとbが逆
621 :
デフォルトの名無しさん :03/06/25 00:59
double 型の2次元配列 u0[N0][M0], u1[N1][M1] (N0≠N1, M0≠M1) を宣言した上で、 u[0][n0][m0] = u0[n0][m0], u[1][n1][m1] = u1[n1][m1] となるような 3次元配列 u[][][] を作ることは可能でしょうか?
622 :
デフォルトの名無しさん :03/06/25 01:21
無理じゃない?
623 :
デフォルトの名無しさん :03/06/25 01:38
Visual studio.netのC、C++ で、画像を表示させるプログラムをオリジナルで作らなきゃいけないんですが。 作っていただけますか? あと、参考プログラムの説明をするために、一行一行説明文を入れなきゃいけないんですよ。 で、それって、どこでお願いすればやっていただけるでしょうか? 昼までなんですけど。。。 どこでお願いしていいのかわからないのでここに書かせていただいたのですが。
625 :
デフォルトの名無しさん :03/06/25 01:41
>>621 どの様に使いたいかにもよるが、
こんな形で良いのなら、p[][][]として扱える
double p00[5], p01[5] ;
double p10[4], p11[4], p12[4] ;
double p20[4] ;
double *p0[] = { p00, p01 } ;
double *p1[] = { p10, p11, p12 } ;
double *p2[] = { p20 } ;
double **p[] = { p0, p1, p2 } ;
627 :
そんな低レベルな話よりも :03/06/25 01:43
Name: strangeworld-honten.com Address: 210.136.172.68
最近、とある掲示板で、 「初心者はコンピュータの基本的な事項を勉強してから言語を学んで貰いたい」 と言う趣旨の書き込みに、 「そんな事を学んで、どうなるの?」 みたいなレスされてるのを見たんだげど、 最近のヤシって、CPUがプログラムをどう読み込んで実行するか、 と言う事すら調べないの?
それに気を使わなくてもいいように高級言語があるんだけど 「気を使わなくてもいい」のと「知らなくてもいい」のはちがうんだけどね ドライバーは車の仕組みがブラックボックスでも構わないけど エンジニアが知らないのは致命的なのは車もコンピュータも同じ
そんなものは金属線をどうエネルギーが伝播するか学ばないと データストリームは理解できないというようなアホな話だ 計算機利用者は必要がなければそれが歯車式計算機で実行されるか 未来の化学式コンピュータで実行されるかなど知らなくてよい
でもCやるなら、 実行モジュールがメモリにロードされて実行されるあたりのことをちょっとしらないと 動的リンクとかしてコアはいたりしたときわかんなくなるんじゃないかな
知るべきことはあるだろ。 まぁCPUの本当の動きを思い描いている香具師なんてそうはいないだろ。 十年以上も前のCPUをモデル化して、なんとなく理解の助けにしているだけ。 仮想メモリがどう動いているかなんていうのは、多くのプログラマにとっては無用な知識。 でも変数やデータが、メモリ空間上にどういう規則でおかれるかというのは知るべきこと。
>実行モジュールがメモリにロードされて実行されるあたり
それはOSの仕事の話
>変数やデータが、メモリ空間上にどういう規則でおかれる
それはプログラミング言語で規定されている話
>>632-633 でも分かる様にハードウェアの知識など必要ないということだ
そんなこといったら
>>629 だってハードなんて一言も言ってないよ。
オレは概略位は知っておくべきかと思う。 やたら細かい所までは知らなくても、おおよそのイメージが出来るか、出来ないかは、 多少なりともプログラム言語の理解に差があると思う。
メモリ空間の表現は言語だけで決まるものじゃないだろ。
>>635 「CPUが」と言っているだろう「CPUが」と。
CPUがデータ要求して命令をフェッチして…、
はまさにCPU設計の話だ
>>637 仕様書を見てみな。その起源が既存のハードウェアに
依存しているかに関らず、細かく言語で規定しているから
誰がハードの話なんかしてるんだよ。そんな事いったら原子の話になっちゃうだろ アホか?
メモリとディスクではアクセス速度に大きな違いがあるなんていうのはハードに起因する基礎知識で プログラマが知っておくべきことじゃないか?
非常に重い処理を作る時は結構そういう知識が役に立つ。
>>640 ディスクもメモリだがな。
なぜ違いがあるかなど知る必要はないだろ、問題はデバイスによって
違うということだけだ。そしてその違いは必ずしも
ハードウェアだけの問題ではない。
バグった時、パフォーマンスが気になる時、組み込みの仕事が来た時 などなど役に立つ というか必須
ま、この場合ポインタや配列のことを言いたいんだろうな。 メモリ空間というものを意識して理解いていけと。
>>643 それはハードウェアにも関る場合が多いだろうが
今回の話とは関係ない。
そんなことよりscanfの話しようぜ
>>646 便利だよな。このスレには毛嫌いしている粘着がいるが
どんどん使おうぜ。どうせ今やちょっとした物はGUIなんだ。
心得てない奴らの想定外の使用など気にすることはないぜ
そんなことよりバッファオーバーフローの話しようぜ
それよりはスタックオーバーフローの方が
そんなことよりfree()の話しようぜ
free(NULLPO);
くだらない保護機能があるCPUには困ったもんだぜ 周りを侵略するのは男の本懐だからな。 どんどんオーバーフローしようぜ
そんなことよりぬるぽの話を
656 :
デフォルトの名無しさん :03/06/25 05:27
>>656 の解説のページ
このデカ文字とブリンク、どこかでみたことがあるぞ。おいおいとつっこみたくなるような内容が多かったような・・・・
659 :
デフォルトの名無しさん :03/06/25 07:55
Linux(レッドハット)のファイル構造体のメンバおしえてくれませんか? stdio.hに書いてないもんで・・・
>>659 FILE使ったソースコードをcppすればわかる
>>659 FILEのメンバーを知りたい時ってどんな時だ!?
ファイルディスクリプタを得たいならfilenoを使え(もちろん標準関数ではない)。
>>626 ありがとうございます。
今回は行列のサイズがp0[30][75], p1[20][50] のサイズなので、
forループとnewかvectorクラス使います (C++コンパイラ使用)
664 :
デフォルトの名無しさん :03/06/25 11:49
#include <stdio.h> #include "CScreen.h" CScreen scr; void main(void) { int ten[7][7]; char name[6][7]; printf("1人目の氏名入れて(7文字以内)"); LOCATE(2,6); rewind(stdin); scanf("%s",name[0]); LOCATE(20,20); printf("%sさんの国語の点入れて ",name[0]); LOCATE(17,6); scanf("%d",&ten[0][0]); /*省略させてもらいます*/ LOCATE(20,20); printf("2人目の氏名入れて(7文字以内)"); LOCATE(2,8); rewind(stdin); scanf("%s",name[1]); /*省略させてもらいます*/ プログラム自体はできてるんですが質問があります。 char name[6][7]; の宣言はnameという変数名の箱を6個で、1箱7文字まで入るという意味で合ってるんでしょうか? scanf("%s",name[0]); で7文字以上打ってもname[0]には7文字しかはいらないから printf("%sさんの国語の点入れて ",name[0]); では7文字までしか出力されないはずだと思うのですが 8文字以上出力されてしまいます。 なぜでしょうか?
> の宣言はnameという変数名の箱を6個で、1箱7文字まで入るという意味で合ってるんでしょうか? 違います、7文字(6文字+NULL終端)までしか入れちゃダメ、という意味
??とりあえずおちつけ、オレ。 ではchar name[6][7]; の[7]は本当はそれ以上も入ってしまうって ことですか? /\⌒ヽペタン / /⌒)ノ ペタン 慌てるな ∧_∧ \ (( <; `щ´>∧_∧ / ⌒ノ(・ω・ ;)⊂⌒ヽ .(O ノ ) ̄ ̄ ̄()__ ) )_)_) (;;;;;;;;;;;;;;;;)(_(
入りません、入れちゃダメ でもその管理はコンパイラはしてくれません、 プルグラマが責任持て
わかりました ∧_∧ ( ´・ω・) みなさん、お茶が入りましたよ・・・・。 ( つ旦O と_)_) 旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦
scanf()の使用をやめ、 入力をfgets()で行い文字数制限はsscanf()(或いはsprintf())で行えばよい。 #勿論、fgets()でも文字数制限はできるが。
670 :
デフォルトの名無しさん :03/06/25 14:57
4バイト以上の入力を制限するなら fget(hoge, 3, stdin); って感じですか?
671 :
デフォルトの名無しさん :03/06/25 14:58
>fget(hoge, 3, stdin); じゃなくて fgets(hoge, 3, stdin); でした・・・
672 :
デフォルトの名無しさん :03/06/25 14:58
fgetってなに
673 :
デフォルトの名無しさん :03/06/25 14:59
遅かった。ち。
>>674 どこかおかしいですか?
>>670 の場合、制限というよりは無視といったほうがいいですね。
おかしくないと思うが?
改行とヌル文字の2バイトを余分に加えるべし。
fgets(hoge, n, stdin); でn-1の長さの(\0を除く)文字列を取り入れるんじゃなかった? だとしたら…
合ってるのでは
fgets()で制限すると、残りを読み捨てる為にもう一度fgets()を呼ぶ羽目になる。 それくらいなら、1行を安全に確保するようにして、残りを文字列処理すればいい。 つーところかな。 まぁ、>677は恥を晒したわけだが。
fgets は改行も格納するわけだが。 まぁ、それよりも余分に読み込んだ方がいいわけだが。
「わけだが」うざい
改行格納したとしてもn-1の長さに収まるからね…
fgetsの第二引数は最低でも1024U。これ常識。
char * fgets(char *str, int size, FILE *stream); The fgets() function reads at most one less than the number of characters specified by size from the given stream and stores them in the string str. Reading stops when a newline character is found, at end-of-file or error. The newline, if any, is retained. If any characters are read and there is no error, a `0' character is appended to end the string.
intだったか・・・・size_tだとばかり・・・・ そうか。0渡すと面倒なことになるんだ。 じゃあ1024
>>682 改行を格納するのは、ファイルから読み込んだ時だよ。
標準入力の時は、改行は格納しない。
>>689 そんなことないYO (^_^;)
改行を格納しないのはgets
>>689 #include <stdio.h>
int main()
{
char buf[1024];
fgets(buf, sizeof buf, stdin);
printf("[%s]\n", buf);
return 0;
}
で
123
[123
]
となるのだが。
>>689 標準入力もファイルも同じファイルストリーム
fseekでファイルポジションを戻した後、 fwriteで書き込むと、そこにあったものが上書きされます。 これを上書きではなくて、挿入にするにはどうすればいいでしょうか。
>>693 挿入したい部分より後ろをメモリに読み込む。
挿入したいデータを書き込む。
その後ろに先ほどメモリに読み込んだものを書き込む。
ポインタ変数に、指定したアドレス値を入れることってできますか? もしできるなら、どうかその方法をお教えください
>>695 何を言っているんだろう・・・・
定数を入れたいのか?
int *p=(int *)0x015689EF;
0以外はこんな風にすればできると思うけど。
giko(); を int giko(void); とか言ってるヴァカがいるスレはここですか?
どのレスに対していってんのかわかんね
宣言と定義の区別も付かないヴァカがいるスレはここですか?
しかも関数プロトタイプだと extern giko(); じゃないと警告されるような。
C言語のみOS依存なしで、擬似スレッドを実現することって可能でしょうか? たとえば、 void a() { while(1) { printf("a"); SwitchThread(); } } void b() { while(1) { printf("b"); SwitchThread(); } } void main() { MakeThread(&a); MakeThread(&b); while(1) SwitchThread(); } があったとして、それぞれSwitchThread()で 実行が切り替わるようなことをしたいのですが、 SwitchThread()をどう作ればいいのやら…
そういうのは、setjmp,longjmpで実装するのが相場。
たしかRubyはそうだったような
FILE マクロでもないのに全て大文字にした理由が分からない
構造体が struct list { char data ; struct list *nextptr ; } ; と宣言されていて struct list *p = NULL ; とした状態だと p->nextptr これもNULLポインタになるんでしょうか?
709 :
デフォルトの名無しさん :03/06/26 11:38
>>708 pはNULL
それを->を使って参照してはいけないYO!
710 :
デフォルトの名無しさん :03/06/26 14:36
>>708 やってみてよ。
p->nextptr ←オブジェクトもないのにどこをさしてんの?ってこと。
実行すると見つけることが出来ずエラーを起こす。
∧_∧ ( ´∀`)<ぬるぽ
∧_∧ ( ´∀`)< ガッ
713 :
デフォルトの名無しさん :03/06/26 16:45
インラインアセンブラの話なんですが. Cのある関数からインラインアセンブラのラベルにジャンプするにはどうすればいいのでしょうか? 以下のような場合です. asm(" MYLABEL: movl ...(ここでの処理) "); int main(){ ... //ここからジャンプしたい } アセンブラはgasです. ちなみにmain内に以下のように記述してもダメでした. asm( "movl %0 %%eax\n" "jmp %%eax\n" :: "g"((void *)MYLABEL) : "ax" ); MYLABELが未定義である,というエラーが出ます. どうやら同じasm("");内のラベルしか参照できないようです. どなたかご教授お願いします.
>>713 >>1 GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo!
>>713 ソースの構造がよく分からないがBcc32では下は通る
#pragma inline
int main(){
asm{
xor ax,ax;
label1:xor bx,bx;
}
goto label1;
return 0;
}
717 :
デフォルトの名無しさん :03/06/26 17:10
>>716 ありがとうございます.
通るのはラベルが同じmain()内にあるからではないでしょうか.
とりあえずやりたいことは,
ある関数から外部にある(関数内ではない)インラインアセンブラのコードにジャンプする
ことです.
どうにも必要な構造なのか、関数化する事はできんのか
>>717 外部にあるインラインアセンブラという意味が分からない
インラインアセンブラなのだから何かの関数に
埋め込まれているのではないのか?
>>718 スタックフレームを変化させずに呼び出したいのです.
sage間違えました・・
>>719 inlineというのはCの関数内に記述するからそう呼ばれるのではないのですか?
それともインラインアセンブラは必ずどこかの関数内に記述しなければならないのでしょうか?
>>719 それはアセンブラに展開してから埋め込みでもしないと無理じゃないか?
別の位置に記述したいというだけならばdefineマクロが使えるか知らん
>>721 「Cの関数内に記述」と「どこかの関数内に記述」は同じかと。
ファイル内ということならそもそもコード以外のところは無理だろう
スレ違いな質問に対しても親切ですね。
ビット処理って、具体的にどんな用途があるんですか?
>>713 素直に
__asm__("jmpl MYLABEL");
で通らないかい?
726 :
デフォルトの名無しさん :03/06/26 18:09
画面中央に■を表示して、 Yを押したら上に、Gを押したら左に、Hを押したら右に、 Bを押したら下に1マス分移動するプログラムを作りたいんですが、 アルゴリズムはどうしたらいいでしょうか? 思いつかないのでヒントお願します。
727 :
デフォルトの名無しさん :03/06/26 18:10
>>726 アルゴリズムなら726が答えだと思うけど。
728 :
デフォルトの名無しさん :03/06/26 18:13
いや、もっと詳しく考えてみたいんです。 一度消してから空白を入れたりバックスペース、改行などを 駆使したらできますか?
729 :
デフォルトの名無しさん :03/06/26 18:16
>>729 ぐ、具体例をなにか挙げてくれたら嬉しいです。
>>731 たとえばコンフィグ画面などで、項目のON/OFFをチェックする際に
項目の数だけフラグ変数を用意するよりも、変数を1つだけ用意して
各ビットのON/OFFで判定できたら、嬉しくないですか?俺は嬉しい。
全てONなら ~0、全てOFFなら 0 を代入するだけで済んでしまう所も
嬉しい。
大人には嬉しいという感情がないんだよね。
737 :
デフォルトの名無しさん :03/06/26 20:23
#include <stdio.h> void main(){ int a,i; a = 500000; for( i=1 ; i=24 ; i++ ){ a = a*1.1; } } コンパイルすると おそらく不正な代入、'i'に代入した値は使われていない とエラーが出ます どこに問題があるのでしょうか? 時間経つとやる気が萎えるので早めにレスくれたらありがたいっす
i=24
>>737 for( i=1 ; i=24 ←ここ ; i++ ){
あぁ・・そっか・・・おれってほんとばかだな・・・ そこ実行する条件でしたね・・・よく終了する条件と勘違いしてしまいます 鬱堕詩嚢 レスサンクスでした
分かっていたらなんで
>>740 のような発言ができるんだ・・・
i=24なんてやったら無限ループだ
== が比較だ
いまいちわからんけどおれがアフォなんか・・・ 出直してきます
746 :
デフォルトの名無しさん :03/06/26 21:01
C言語でビット処理は具体的にどのような用途があるのですか?
748 :
デフォルトの名無しさん :03/06/26 21:17
>>737 Cのint型は2バイトじゃなかったけ?確か6万5千・・・しか入らないよ!
C++のint型はCPUのビット数になる
javaのint型は4バイトです。
749 :
デフォルトの名無しさん :03/06/26 21:18
752 :
デフォルトの名無しさん :03/06/26 21:24
>>746 画像データのRGB 2の8乗255階乗の下位8ビットに文字情報を埋め込んだり、
通信データの各OSI参照層のビット操作など色々・・・
754 :
デフォルトの名無しさん :03/06/26 21:50
>>754 Cのint型は2または4バイトであると定義されてる。お前の環境では4バイト
かも知れないが、顧客では古いマシンを使ってるところがあるので、2バイト
で使うんだよ!
常識だろ!!!
なるほど
757 :
デフォルトの名無しさん :03/06/26 22:00
>>754 747,752と748はレスした相手が違うんだが
758 :
デフォルトの名無しさん :03/06/26 22:01
>>755 どこで定義されているんだよ(;´Д`)
760 :
デフォルトの名無しさん :03/06/26 22:05
762 :
デフォルトの名無しさん :03/06/26 22:08
ANSI Cに決まってんだろ! 関数辞典の一番初めでも見てみろ!
>>760 貴様、神に向かって世界観が狭いとは無礼にもほどがあるぞ
764 :
デフォルトの名無しさん :03/06/26 22:15
intは4バイトと決めうちしてよい。
765 :
デフォルトの名無しさん :03/06/26 22:18
intは割り込みだと思っておいたほうがよい
米国の標準化団体の規格票が手元にないくせにANSI, ANSIとしきりに喚くドアフォは痛杉
つーか、原文読めない奴に限って(以下略)。
正直にJISと言えないクソばかり
769 :
デフォルトの名無しさん :03/06/26 23:08
画面中央に■を表示して、 Yを押したら上に、Gを押したら左に、Hを押したら右に、 Bを押したら下に1マス分移動するプログラムを作ってください。 できたら漏れの次に天才。 明日の夜に回答を出します。
int のサイズは実行環境の構造に適した自然な大きさである、と定義されている。 具体的なサイズまでは規定されていない。
この課題はどこかにあったけど、漏れには分かった。 ふん、俺しか分からないだろう
main() { int a[2]; int *p, *tmp; p = &a[0]; tmp = p; *p = 10; p++; *p = 20; p = tmp; printf("%d, %d\n", *p, *(p++)); } これを実行すると、10, 20 とでると思ったのに、20,10とでちまいまつ。 なんででしょうか?
関数の引数がどの順番で(ryってやつか?
仮引数の評価順は不定だからね。 それに後置インクリメントじゃますます意味がない。 printf("%d, %d\n", *p, *(p+1));
776 :
デフォルトの名無しさん :03/06/26 23:32
漏れの環境では10,10になった
printf("%d, %d\n", p[0], p[1]);
Cのint型は2バイトじゃなかったけ?確か6万5千・・・しか入らないよ! C++のint型はCPUのビット数になる javaのint型は4バイトです。
780 :
デフォルトの名無しさん :03/06/27 00:09
Cは何系ですか?
>779 2カイメダヨ( ´д)ヒソ(´д`)ヒソ(д` )ヒソ
intは最低でも64ビット
int のサイズは実行環境の構造に適した自然な大きさである、と定義されている。 具体的なサイズまでは規定されていない。
Tintin のサイズは実行環境の構造に適した自然な大きさである、と定義されている。 具体的なサイズまでは規定されていない。
渋谷系
すくなくともshortとintは16ビット From K&R
いつの時代の話やら。 おっと、K&Rの時代か。
時代は関係ないだろ あほ?
もまえら何回ループしてるんだよ
>>789 while( 1 )
{
/* 処理 */
}
とかなってたりして(w
791 :
デフォルトの名無しさん :03/06/27 03:11
char *a; int b; a = malloc(1); b = strlen(a); とした時にbが5となるのはなぜでしょうか? 絶対にaの長さ+4になるのですが意味が分かりません どなたか分かる方いらっしゃいませんでしょうか?
>>791 aに無いも代入してないからたまたま6バイト目に'\0'があったんだろ
>>791 絶対になるとは限りませんよ。
まずstrlenが何をする関数か知ってますか?
与えられたポインタから'\0'が出てくるまでのバイト数を返す関数です。
そして、mallocで確保した領域には何が書かれているかわかりません。
あなたが5というのが出てきたというのはaが指す先から6文字目に'\0'があったのでしょう。
無論mallocで確保した領域を越えた不正アクセスになってます。
794 :
デフォルトの名無しさん :03/06/27 03:21
単純にバグ
プログラマじゃないが、訳わからん納期持って来たやつ。 (((( ;゚Д゚))) ガクガクブルブル
796 :
デフォルトの名無しさん :03/06/27 03:56
誤爆スマ・・ソ
798 :
デフォルトの名無しさん :03/06/27 12:28
_, ._ (・∀・) ファイルが開けないんです
_, ._ (・∀・)チャックが開かないんです
801 :
デフォルトの名無しさん :03/06/27 15:16
一通りK&Rを読み終えたら、なにを作ったら勉強になりますか? どっかで、自分でコンパイラを組めば勉強になると聞きました。
一通りK&Rを読み終わった程度の人に コンパイラを組めば勉強になると言った人もアレだが、 それを信用する人もアレだぞ。 何か自分の作りたいものを作れば良い。 何かのツールでもいいし、ゲームでもいいし。 そうやっていろいろやってれば、自然と勉強になる。
805 :
デフォルトの名無しさん :03/06/27 15:52
int x[3][2] = {{1,2},{3,4},{5,6},}; const int (*xp)[2] = x; // 警告 const int (*x_p)[3][2] = &x; // 警告 // typedef int int_pair_by_int_array[2]; int_pair_by_int_array a[3] = {{1,2},{3,4},{5,6},}; const int_pair_by_int_array *ap = a; // 警告 const int_pair_by_int_array (*a_p)[3] = &a; // 警告 // typedef struct { int a, b; } int_pair_by_struct; int_pair_by_struct b[3] = {{1,2},{3,4},{5,6},}; const int_pair_by_struct *bp = b; // OK ←どうしてこいつだけOK?(MinGW環境でつ) const int_pair_by_struct (*b_p)[3] = &b; // 警告
806 :
デフォルトの名無しさん :03/06/27 15:57
_bool, BOOL, Bool どれが正しいの?
>>803 そか?
コンパイラやインタプリタはすごい勉強になるよ。
>>805 > int x[3][2] = {{1,2},{3,4},{5,6},};
> const int (*xp)[2] = x; // 警告
C ではこういう時にはキャストが必要になる。
C++ だといらないんだけどね。
>>808 べつに市販品なみの物を作るってわけじゃないし、
小さいものなら数百行程度でできるから、ちょうどいい教材だと
おもうけど。
Basicインタプリタなんて、32kbもあれば動いてたわけだしな
813 :
デフォルトの名無しさん :03/06/27 18:19
>>809 そんな書き方する人いるの?
見にくいよ!
814 :
デフォルトの名無しさん :03/06/27 18:20
>>805 int x[3][2] = {{1,2},{3,4},{5,6},};
const int (*xp)[2] = x;
なんでこれで警告がでるんだろう・・・・
VC++6.0ではxpを使いさえすれば警告はでないよ(/W4つきで)
xを操作すればxpが指す先のものが変わる場合があるからか?
816 :
ひよこ名無しさん ◆YFbiU3aPps :03/06/27 18:35
質問: 注釈文にすることを「コメントアウト(comment out)」って言いますよね。 じゃあ、逆にコメントから外すことは何て言うんですか?
817 :
デフォルトの名無しさん :03/06/27 18:37
818 :
デフォルトの名無しさん :03/06/27 18:52
ベホイミ
警告の内容は?
"コメントアウトしてたの元に戻す"
821 :
デフォルトの名無しさん :03/06/27 19:26
コメントイン
822 :
デフォルトの名無しさん :03/06/27 19:29
コメントを外す。 てか C に関k(略
>>822 > printf("差 = %lf\n", a-b);
なんだよこれ(´Д`;)
printfに%lfなんてねーよ(´Д`;)
%lfはないというのは間違いかも。 doubleに%lfは不適切
やっぱり%lfはないな。long doubleは%Lf
>>825 規格には%lfというのはないだろう。
printfのプロトタイプはint printf(const char *, ...);だから、
floatは格上げされてprintfにdoubleが渡る。
もしもlong doubleなんてものがある処理系だったら、
%lfとかいうものがあるかもしらんね。
>>827 long doubleはANSI CにあるYO!
で、それは%Lf
>>816 (コメントアウトの逆)
uncommentかもしんない
ちなみに、"opposite of comment out"で探してみた
830 :
デフォルトの名無しさん :03/06/27 20:48
return 0; をちゃんと書いたほうがいいといわれ、 書いてるんですが、いつも未定義のシノルと出ます。 Why?
831 :
830@バカ :03/06/27 20:48
シノル→シンボル
>>830 未定義のシンボルって多分リンク時のエラー。
return 0;は関係ないと思う。
833 :
デフォルトの名無しさん :03/06/27 21:12
>>806 C99 のことなら、
× _bool
× BOOL
× Bool
◯ _Bool
typedef なら全部可。
834 :
名無し@沢村 :03/06/27 21:27
>>1 「C言語ならおれに聞け」って、C言語についてわからないことがあって質問するとう行為がおれには理解できんね。
例えば量子の動きがわからないとかDNAの構造がわからないとか言うんだったらわかるよ。
それらは自然がつくったもので、これから人間が解明していくものだからね。
しかしC言語は人間がつくったもので、それは公知のものだから、それが100%理解できんということは、おかしいだろうが!?えっ!?おまいらよ!?
> 量子の動き ワロタ
>>837 「C言語」を「数学」に置き換えて読んでみたらどれだけナンセンスかわかるわなw
数学は純粋に人間の頭だけの人工的な世界なのに、未解決の難問がいくらでもある。
別に連続体仮説とかそういうの持ち出さなくても数学が理解できないとか苦手という人は山ほどいる。
あ、別におきかえんでもナンセンスさはわかるか。
おれは冗談だと思って読んだけどw
>>830 retrun 0; とか書いてるに1票。
>>839 それだとsyntax errorだろう。未定義のシンボルになるには、
retrun(0);
などと書いてるんじゃないかな。
>>840 それだな。
C++ならエラーになるんだろう(宣言無しの呼び出しで)が、Cだと宣言は必須じゃないしな・・・
出戻で格好つけるのはオジン臭い
今どきオジンなんていわんよ
あんな不自然なものはないと思うけどな・・・
>>844 科学じゃなくて、それを記述するための道具だろ?
847 :
デフォルトの名無しさん :03/06/27 23:27
>>847 char panel[Y][X*MOJI]={のYとX*MOJI
849 :
デフォルトの名無しさん :03/06/27 23:31
私は数学は発端となった代数学や幾何学以来 つねに自然科学の最も抽象化された分野であると思う その成果が余りにも生活感覚から離れているために それを忘れがちなだけなのではないか?
いい加減、スレ違い板違いな半端知識披露ヤメイ
>>847 Tabなら移動って書いてあるから、その代わりに複数のキーを割り当てて縦横に動けるようにすればいいんじゃないの。
852 :
デフォルトの名無しさん :03/06/27 23:34
実行すると表示される A[ ] B[ ] C[ ] D[ ] E[ ] F[ ] も削除するにはどのようにしたら良いでしょうか
全体的なプログラムがあまりよく分からないので、 カーソルが縦横に動く原理だけでも今理解したいのです。
X*MOJIは必要だろ・・・ 初歩の初歩だ。
>>855 すみませんでした。
どうもありがとうございます。
move()の中でx,yの値をいじっている。 これをベースにup()、down()、right()、left() という関数をつくればいい。
>>834 量子もDNAも数学も人間が勝手に作った概念だよ
おまえさん、自然と人工の境がまるで解ってないな
つーか、沢村なんかの相手すんなよ
861 :
デフォルトの名無しさん :03/06/28 00:27
上のリンク逝ってみたが、
何がなんだか俺には分からん。
ESC[pl;pcHってどうやって記述すんだYO!
少なくとも
>>852 には理解できないだろう。
どうすんだこのやろ
>>861 printf("\033[1;1H");
863 :
デフォルトの名無しさん :03/06/28 00:34
\033の意味は? 覚えないといかんのか?
>>863 ASCIIでESCは27 それを8進数にすると33
だから\033
865 :
デフォルトの名無しさん :03/06/28 00:36
Cの標準ライブラリに付属の sin(),cos(),tan() と同じ関数を1から作りたいのですが 何処かに、詳しいコメント付きソースは無いですか? 知ってる方は教えて下さい
テーブル作って終了
#include <stdio.h> int main(void){ char a; int b,c; b=1,c=1; a=getchar(); if('a'=='y'){ c++; printf("\033[b;cH"); } } わけわかんなくなってしまいました。 多分、180度逆の方向に・・・。 思いっきり叩いてください。
>>865 glibcなり、FreeBSDのソース見れ
>>867 もしかしてbやcが展開されると思った?
そういうときはprintf("\033[%d;%dH",b,c);とする。
エスケープシーケンスに触れた事ないヤシも居るのか…。 時代の差かなぁ〜…。
>>870 そうだったんですか。
気を付けます。
でも、まだ間違いがてんこもりの予感
>>872 EnglishなCommentがたーくさん
>>874 実際のソースが見つからないんですけど、
どのソースのアーカイブに含まれてるんでしょうか?
>>875 sin.cをfindして出てこない?
VC++にもその名前ではないんだよね・・・
どなたか、
>>867 の間違いを教えていただけないでしょうか?
それを参考にしたいのですが。
自分が至らないばかりに・・・。
すみません。叩きまくってください。
ないね・・・
ファイル名がわからん。ないはずないと思うんだけど。
>>878 > if('a'=='y'){
>>870
>>877 cygwinのソースから探してるんですけど
それぞれの関数の本体らしきソースは出て来ません
と言う訳で、どのソースにsin()等の本体があるか知ってる方は教えて下さい
int a 中略 if(a=='y'){
セミコロン忘れた
>>880 ちなみに俺は869じゃないから。
>>878 とりあえず、エスケープシーケンスでググッてみ。
cygwinの違うアーカイブで見つかりました じっくり、ソースを読んでみます
#include <stdio.h> int main(void){ char a; int b,c; b=1,c=1; a=getchar(); if(a=='y'){ c++; printf("\033[%d;%dH",b,c); } } どうもです。あれからちょっと変えてみたんですが、全く 実行されません。ヽ(`Д´)ノ
自分はセンスないなぁ。 こんなにアドバイスもらってるのに・・・鬱。 がんがろ
>>886 ちゃんとエスケープシーケンスをサポートするコンソールで実行しているか?
890 :
デフォルトの名無しさん :03/06/28 01:41
ファイル入出力で ioctl関数を使用してカーネルバッファリングの バッファサイズを強制的に0にして ファイル入出力の時間を計測せよ. カーネルバッファリングのバッファサイズを0にするために, ioctl関数をどのように使用すればいいですか?
>>890 とりあえず所定の環境のスレで聞くことじゃな。
893 :
デフォルトの名無しさん :03/06/28 02:07
>>891 ここがいいとおもったんですが,
どの板ですか?
>>893 板はここでいいが、スレは適切でない。
もしUNIXならUNIXプログラミングスレへ。かなり雰囲気悪いけど。
>>886 b と c をもうちっと大きな値にして、
その後に何か表示してみるといいかと。
int a = 0, b = 0; は良くても int a = b = 0; は良くないと聞いたのですが、 どこが問題なのでしょうか?
>>897 bが未定義
初期化の=と代入の=は違うよ。
int b; int a=b=0; これならOK
なるほど。 サンクスです。
int a, b; a = b = 0; 普通こうする
>>901 そういえば最近、そういう書き方してないな。
a = 0;
b = 0;
こうやって、必ず分けて代入してる。
int a; memset(&a,0,sizeof(int));
int a; a-=a;
int a; a ^= a;
int a; a %= a;
int a; a&=0;
int a; a=strlen("");
int a; a = atoi("0");
int a; a="910get"[6];
int a; a = !1;
>>902 とか言いながらfor(a = 0, b = 0;なんちゃってな
int a; a = &a - &a;
int a; a='-'-'-';
int a; a = 3["915"];
int a; a=a>a;
int a; a=stderr-stdin>>stdout-stdin>>stderr-stdout;
int a; a=(int)fopen("*.*","w");
int a 0;
int a;
a=~((unsigned)-1
>>1 )-INT_MIN;
int a; a=printf("");
>>918 おいおい、それでファイルが作れちゃうOSもあるぞ。
エスケープシーケンスに対応したコンパイラってどんなのが ありますか?教えて下さい。 ↑のコードを実行してみたいので
しまった。さげてしまいました
>>925 エスケープシーケンスは実行環境依存。
コンパイラの問題じゃないのでスレ違い。
環境依存っすか? WinXPでBCC55使ってるんですが、 無理ですた。
>>925 windows2000/xpのコンソールでは、
エスケープシーケンスは使えないみたい。
APIを使うしかないね。
APIですか。 #include <stdio.h> int main(void){ int a,b,c; b=1,c=1; a=getchar(); if(a=='y'){ b++; printf("\033[%d;%dH",b,c); } else if(a=='b'){ b--; printf("\033[%d;%dH",b,c); } else if(a=='g'){ c--; printf("\033[%d;%dH",b,c); } else if("a=='h'){ c++; printf("\033[%d;%dH",b,c); } printf("\n\n↑ yボタン\n↓ bボタン\n"); printf("← gボタン\n→ hボタン\n"); } このソースのどこを変えたら・・・鬱
931 :
デフォルトの名無しさん :03/06/28 15:53
保守
>>930 定期的に登る話題だな
"猫でもわかる"でぐぐれ。
>>925 即席 & 処理系依存
#include <stdio.h>
#include <windows.h>
#include <conio.h>
int main(void)
{
HANDLE hOut;
COORD new_coset = {0, 0}, old_coset = {0, 0};
DWORD dwResult;
int c;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
do{
if(SetConsoleCursorPosition(hOut, new_coset) == 0) return(-1);
if(WriteConsole(hOut, "○", 2, &dwResult, NULL) == 0) return(-1);
c = getch();
if(c == 'y') new_coset.Y--;
if(c == 'b') new_coset.Y++;
if(c == 'g') new_coset.X--;
if(c == 'h') new_coset.X++;
if(SetConsoleCursorPosition(hOut, old_coset) == 0) return(-1);
if(WriteConsole(hOut, " ", 2, &dwResult, NULL) == 0) return(-1);
old_coset.X = new_coset.X;
old_coset.Y = new_coset.Y;
}while(1);
return(0);
}
適当でスマソ
935 :
ビル・ジョブス :03/06/28 17:05
久しぶりに日本に帰ってきました。 皆さんお元気そうで何よりです。(^^)
936 :
デフォルトの名無しさん :03/06/28 17:27
ひさしぶり
938 :
デフォルトの名無しさん :03/06/28 17:32
>>937 このスレのPart1をたてやがった大馬鹿者。
939 :
デフォルトの名無しさん :03/06/28 18:09
>>933 完璧です!どうもありがとうございます。
ちなみにC歴はどのくらいなんでしょうか?
940 :
デフォルトの名無しさん :03/06/28 18:09
>>939 教えてあげないよ♪ジャン byポリンキー
942 :
デフォルトの名無しさん :03/06/28 18:28
C言語でリアルタイムキー入力をするために関数は何をつかえばよろしいでしょうか。OSはlinuxです。アドバイス御願い致します。
>>942 スレ違いだが教えてやろう。system("stty raw"); すればいい。
あとは犬板なりunix板なりunixスレなり行ってくれ。
944 :
デフォルトの名無しさん :03/06/28 18:32
犬板???
945 :
デフォルトの名無しさん :03/06/28 18:35
大阪
946 :
デフォルトの名無しさん :03/06/28 18:47
int a; a+=~a+1;
int a; while(a=rand());
int a; _asm { mov a,0 }
int a; #define a 0
int a; a<<=(sizeof(int)*CHAR_BIT-1);
953 :
デフォルトの名無しさん :03/06/28 22:18
次スレ立てていい?
あ、だめだ。
立てたい
959 :
デフォルトの名無しさん :03/06/28 23:57
intとかdoubleなどの最大値、最小値は、どうやって知ることが出来るの?
960 :
デフォルトの名無しさん :03/06/28 23:58
>>959 limits.hやfloat.hで定義されているマクロで
963 :
デフォルトの名無しさん :03/06/29 02:23
つるべのちんこ見ちまったよ(;´Д`)
tちんこのためにまじめな顔して、お見苦しい映像があり申し訳ありませんでしたとか誤ってるアナウンサー萌え
(∩д∩)
うめたて
1000取ったこと無いんでとってもいいですか?
各スレ1000ゲットはアクセス規制の対象となる場合があります
main(int argc, char *argv[]) という引数で、 **argv, *argv, argv[], argv は、それぞれ何を表しているんですか?
>>973 こんなサイトあったんですか・・・ありがとうございましった!!
今日から1日1回 ∧_∧ ( ´∀`)< ぬるぽ
イチニチイッカイ
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←
>>975
∧_∧ ( ´∀`)<
ぬゑぽ
漏れもガッしていいですか?
カウン
トダ
ウ
ぬるぽ
part60に追い越される前になんとしてでもこっちを埋めるんだ!
埋め立てですかぁ〜
ヌヒよ。
∧_∧ ( ´∀`)< ぬるぽ
誰かマジでスレ立てろよ…
このスレがまた 61 の避難所になったりするんだろうか。
それはそれで素晴らしい事です。
∧_∧ ( ´∀`)<
/__β ヽ_
[ `↓´] | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/ ←
>>992 (_フ彡 /
∧_∧ ( ´∀`)<埋め立てぬるぽ
995 :
デフォルトの名無しさん :03/07/09 08:44
9 9 5
996
9 9 7
999
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。