C言語なら、俺に聞け! <7>
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001sageジョブス
NGNGあちこちの言語に手を出したが結局極めたのはC言語だけだった。
大体のことなら分かるからオレに聞け。
だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。
・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・前スレ C言語なら、オレに聞け! <6>
http://piza2.2ch.net/test/read.cgi/tech/999617524/
0809デフォルトの名無しさん
NGNGあとcallback関数をメンバ関数として作りたいのですが
可能ですか?
0810
NGNGせめて何行目でエラーがでるのかぐらい書け!!
だいたい clコマンド直接使ってる奴なんてお前ぐらいだぞ。
VisualStudioからプロジェクト作ってコンパイルしろよ!
0811807
NGNG今自宅からなので周りに友達が居ません。
>>810
エラーは全く出ません。
コンパイルはちゃんと通ります。
でも、実行すると構文エラーと出てしまいます。
VC++でプロジェクト作って実行すると問題なく通ります。
gccは実行できる環境が現在無いために不明。
0812デフォルトの名無しさん
NGNG> printf("足し算1〜5、引き算6以上\n");
って書いてあるけど、このソースだと5を入力すると引き算になっちゃうよ。
重箱の隅につきsage
0813デフォルトの名無しさん
NGNGVCなら返り血を明示的に書かなければ勝手にintになるので
多分間違っているだろうが、main()の前にintかvoidと書いてみたらどうだ。
0814807
NGNGどう考えても私にはわかりませんので、
学校にいって教授に聞いてみます。
お騒がせしました。
0815
NGNGそれでだめならフリーのコンパイラ使え。LSIC86とかな。
LSIC86はただのCだから変数宣言を最初になおせよ。
C++使いたいならbolandのやつ使え。
0816デフォルトの名無しさん
NGNG> SVGAのBIOSを呼び出したいというだけです。
PC-UnixでSVGA BIOSなんて動かんよ。
SVGAlibでも使え。
0817デフォルトの名無しさん
NGNGその質問の答えは、何のためにcallback関数を作りたいのか
を聞いてからだなー。
なにすんの?
0818デフォルトの名無しさん
NGNG実行時に構文エラーって良く分からんな。
0819デフォルトの名無しさん
NGNG> コンパイルはちゃんと通ります。
> でも、実行すると構文エラーと出てしまいます。
エラーメッセージを Copy & Paste しましょう。
手元の VC6 で試してみたけど、コマンドラインからコンパイルできたし、実行もできたぞ。
0820デフォルトの名無しさん
NGNGレスありがとうございます。
例えば以下のように、
A B C
1 1.0 2.0 3.0
と格納されているとき、fgets()を使って行ごとに読み、
別のテキストファイルに入力すると、
1.0 2.0 3.0
と書き込まれます。この後、例えばB列のデータのみを
取り出すとか、処理した結果を別のExcelファイルのC列
に書き込むなどの方法を教えてください。
0821デフォルトの名無しさん
NGNGまず「〜などの方法」ではなく、必要な処理をリストアップすべきだな。
ひとつの関数でいろんなことをまとめてやろうとせずに、単純な処理を
行う関数を部品として作成して。それらを組み合わせて最終的な目的が
果たせるようにする。
たとえば、B列のデータを取り出すためには、まず指定した列のデータを
取得する関数を作らなけりゃならない・・・・、
って、この調子で説明したら先が長くなるなぁ・・・
まず最終的に実現したい機能をリストアップ。
それからだ。
0822デフォルトの名無しさん
NGNG0823821
NGNG文字列系の標準ライブラリなんて最近つかってなかったんで、はなから
頭に無かった。
配列とポインタとstrstr()が理解できれば、B列取り出すのは難しくないはず。
0824デフォルトの名無しさん
NGNGまずAWKでやってみて、それで荷が勝ちすぎるようならPerlを使ってみれば。
Cの練習なのでなければ、わざわざCを使って不自由な思いをする必要はない。
0825デフォルトの名無しさん
NGNGただあんまり出来はよくなかった気がする。
0826デフォルトの名無しさん
NGNGsscanfでいいやん。
0827デフォルトの名無しさん
NGNG0828デフォルトの名無しさん
NGNGunsigned b;
signed c;
a = -1;
b = a;
c = b;
とやった場合、c==aとなることは保証されてる?
0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNGVCだったら
\Program Files\Microsoft Visual Studio\VC98\CRT
に入ってるよ。
他の環境は知らん。
0831デフォルトの名無しさん
NGNGサンクス。
入門書を読み終わった後の段階として、
標準ライブラリのソースコードを読もうかと思って。
0832デフォルトの名無しさん
NGNG一言逝っとくと、VCのランタイムのソースは汚いよ。
0833デフォルトの名無しさん
NGNGSetLocalTime関数を使用しています
Helpを見るとSE_SYSTEMTIME_NAME 特権を有効にしなければならず、
この特権を割り当てるには、AdjustTokenPrivileges 関数を使いますが、
AdjustTokenPrivilegesのパラメータの意味がまったくわかりません
教えていただくか、別の方法を教えてください
0834デフォルトの名無しさん
NGNG0835744
NGNG739で同じ質問しただろ。
答えてやってるのに見もせずに同じ質問するな。
仕方ないからもっかい書いてやるけど、
管理者アカウントでログインすれば設定できるはずだ。
要するに一般ユーザーにはシステム時刻を変更する権限がないんだよ。
0836744
NGNGあぁ、それから。
システム時刻変更の特権を割り当てるには云々って書いてるけど、
ユーザーの権限を変更できるのは管理者だけなんで。
一般ユーザーのログインでやっても失敗するから、そこんとこお間違いなく。
0837デフォルトの名無しさん
NGNG行うプログラムが知りたいです。誰か教えてください。全然わかんないです・・・
0838デフォルトの名無しさん
NGNG解かるなら、試しにここに簡単でいいので書いてみてください。
0839ドキュンD1
NGNGmain()
{
double a,b,c,d,e;
int i;
scanf("%lf %lf %lf",&a,&b,&c);
d=((a-b)/c)+1.0;
i=d;
printf("%lf %d \n",d,i);
}
このプログラムで
2.0 1.7 0.1 と入力すると4.000000と4が出力されるのですが、
1.9 1.6 0.1 と入力すると4.000000と3 となるのは何故なの?
0840デフォルトの名無しさん
NGNG後者の演算の結果は4よりわずかに小さいので、intの変数に代入する際に
切り捨てられて3になります。
正確に4.0にならないのは、浮動小数点の演算誤差のせい。
0841デフォルトの名無しさん
NGNGごめんなさい。選択整列法、挿入整列法、どちらもどんなものかわかりません・・・
0842デフォルトの名無しさん
NGNGじゃああきらめて留年しろ。
0843デフォルトの名無しさん
NGNG1.宿題で出すのだから授業で説明したか教科書に載っている
2.この板でも一週間に一度は誰かが尋ねるくらい FAQ なことなので、
google などで検索すれば概念、仕組みからソースコードまで手に入る。
3.宿題は宿題スレで訊ねれ
宿題見てやるよ
http://pc.2ch.net/test/read.cgi/tech/1003838158/
0844839
NGNGレスありがとうございます。
0845デフォルトの名無しさん
NGNGポインタの理解に苦しんでいるのですが、
char (*(**hoge[0])[1])
せんぱい方はこう言うのも簡単に脳内変換出来ちゃうんでしょうか
それともこんな宣言はあまりしない方がいいですか
0846デフォルトの名無しさん
NGNG#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
int i;
double d;
long l;
i = atoi(argv[1]);
l = atol(argv[2]);
d = atof(argv[3]);
printf("%d %ld %f",i,l,d);
return 0;
}
上のプログラムは、参考書に載っていたもの
ですが、コンパイルして実行すると強制終了されてしまいます。
本には『コマンドライン上で整数、long型の変数、浮動小数点数
を入力してください。すると、これらの値が画面に再度表示されます』
と、書いてあります。
どのように使うものなのでしょうか?
また、コマンドラインとは何か?といった事が
全然わからないので、それについて分かりやすく
説明されているページをご存知でしたら教えていただきたいです。
0847_
NGNG0848846
NGNGいろいろと、いじってみた結果
実行することができました。(と思います…)
MS−DOSプロンプトから実行する際に
スペースで区切って『1 2 3』と入力した上で実行
したらできました。気合と勘なので
まだ、何がなんだか理解していませんが…
でも、なんかわかりそうな気がしてきました。
いろいろやってみます。
0849846
NGNG別に 1 2 3 じゃなくってもできるんですね。
3つの値をわたさなければいけないということなのかな?
3つ未満の時は強制終了で、3つ以上の時は
実行されるけど反映されるのは最初の3つのみ…
また、こんがらがってきた…
0850デフォルトの名無しさん
NGNGhoge.exe 1 2 3
としたとき、argv[0]には"hoge.exe"(へのポインタ)が入っていて、
argv[1]には"1"が入ってる。で、コマンドラインの引数が足りないとき、
846ではargv[3]は、メモリ上の変なところを指してるんで
強制終了する(そもそもargv[3]なんてない)。
つーか、こんなサンプルが載ってる本なんて捨てちまえ。
0851デフォルトの名無しさん
NGNG#include<stdio.h>
int main(int argc, char *argv[])
{
int i;
for(i=0;i<argc;i++) printf("%d:%s\n",i,arg[i]);
return 0;
}
WebでC言語入門とか検索したほうがよいと思われ。
0852851
NGNG× for(i=0;i<argc;i++) printf("%d:%s\n",i,arg[i]);
○ for(i=0;i<argc;i++) printf("%d:%s\n",i,argv[i]);
0853846
NGNG今、C言語入門ページ巡りを
しているところです。
なんか、何か1つわからないことがあって
それがわかれば、今まで疑問に思ってきたことが
理解できそうな…そんな感じです。今。
がんばって勉強します。
ちなみに、現在使用している参考書は『独習C』です。
0854デフォルトの名無しさん
NGNG>char (*(**hoge[0])[1])
コンパイラ通るの?
0856855
NGNG・・・・でいいんですか・・・・?
0857デフォルトの名無しさん
NGNG構造体のアドレスでなく値を代入していると
思うんだけど私が間違ってるのか?
*でもついていればアドレスという説明はわかるんだけど。
0858デフォルトの名無しさん
NGNG676が間違ってる。
0859デフォルトの名無しさん
NGNGたしかに。受けてる関数の引き血もintだしnumの宣言もint。
んで戻り値は〜構造体型。構造体丸投げは多少問題アリですが・・・
それにしても今更ですな。
0860デフォルトの名無しさん
NGNG0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNGハァ?
0863はじめの二歩
NGNGとりあえず文法レベルは分かったつもりですが、
まだライブラリ等の知識はあまり無い、という段階です。
Cでの不定長文字列についての質問なのですが、文字列を加工して
返すような関数を作る時、普段はどうしていますか?
もちろんプログラムの目的によっても違うでしょうが、日常的
にはどうしているか、という話です。
1. strncat,snprintfのように、バッファのサイズを引数で
指定して、あふれた分は切り捨てる。
2. fgetsのように、バッファに収まらない時は次回の呼び出しの
ときに返す。
3. バッファは呼び出し先の関数でmalloc()で確保し、バッファへの
ポインタを返す。free()は呼び出し元が行う。
p=hoge();
if(p!=NULL){
puts(p);
free(p);
}
という感じで。
4. 専用の文字列ライブラリを使う。
5. GC(聞きかじりですが)を利用。
1.を除けば一番無駄が少ないのは3.だと思いますが、malloc()は
恐いとよく脅されるので、3.のようなプログラムの書き方でも
大丈夫なものなのか、質問してみたかったのです。
もっとも小心者はJavaでも使うのが正しいのかも知れませんが。
0864デフォルトの名無しさん
NGNGユーザの手入力とかそういう入力データ系は 3
かな。
2は、プログラムであふれたかどうかを判断して、処理を書かないといけないので
普通はつかいません。
4も、使うところでは使われています(qmailやdjbdnsで有名なdjbの人とかね)
5は、3や4を使う場合の応用編なんだけど、とりあえずは忘れていていいよ。
0865デフォルトの名無しさん
NGNGいちいち考える必要がなくなるし。
あと、WindowsAPIがらみとか、渡されたバッファが足りないときは
エラーを返す、ってパターンもあるね。
0866デフォルトの名無しさん
NGNG0867初心者
NGNG0868デフォルトの名無しさん
NGNG日本語すらまともに使えない奴にはどっちも無理。
0869デフォルトの名無しさん
NGNG文字列一回出すためだけにいっぱい書くの嫌ならC。
.exeファイルが作れなくても泣かないのならJava。
0870デフォルトの名無しさん
NGNGカルチャーショックを受けている漏れなのですが、最近のOSでは
自動変数というかスタックはどのくらい使ってもOKなんでしょうか?
Windows 2000やLinuxで開発する場合の目安(?)が有れば教えてください。
ファイル読み込みのバッファとして1MBぐらい豪気に使ってもいいのか、とか。
0871デフォルトの名無しさん
NGNG100Kを越えた時点でふつう、馬鹿かと思う。
0872デフォルトの名無しさん
NGNG0873デフォルトの名無しさん
NGNG古典的なUNIXなら無限、というかユーザーリミットに
あたるまで。物理セグメントのないUNIXマシンが多かった。
freeやreturnで再利用されて合計値が下がるのでむしろ好ましい。
0874870
NGNG>871
数十KBぐらいなら、普通の組み方として許されますか?
あと、大きめの構造体を渡す時に参照渡しにするのは、
今でもやりますよね?
0875デフォルトの名無しさん
NGNGLinuxは古典的な配置のはず。
0876デフォルトの名無しさん
NGNGたぶん例えで言ってると思うんだけどツッコミ。
>ファイル読み込みのバッファとして1MBぐらい豪気に使ってもいいのか、とか。
今日びのOSはファイルをキャッシュするから
わざわざ大きなバッファを使うメリットはほぼゼロだと思う。
0877870
NGNGいや、本気で言ってました……。
1byteずつ読んでも一向に構わないんですね?
0878876
NGNG1 byteとかいう極小単位の場合は実装によると思います。
インラインやマクロで関数が実装されていれば実質的に
ポインタ操作と大して変わらないので。
常に非常に高速なアクセスが要求されるとか、作業に必要でないなら
最低限のバッファ(作業場)程度がいいんじゃないでしょうか。
私はそう考えているんですけども、、、。
0879デフォルトの名無しさん
NGNGすることがあるので注意。
今時のOSならファイル読み込みはメモリにマップしちゃうのが楽だと思われ。
0880デフォルトの名無しさん
NGNGマッピングだとワークエリアとして書き込んだときに元データが壊れるから嫌い
いや、俺それで大ミスしたことあるから
0881デフォルトの名無しさん
NGNG3は動かなくないはですが、あんまり良くないですね。
malloc()とfree()を別の関数でやると、それぞれの関数の汎用性(独立性)が下がるんで。
realloc()をうまく使えば、もっと方法がありそうですが。
0882デフォルトの名無しさん
NGNG0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNGものすごい勢いで最適化したりするの?
0885デフォルトの名無しさん
NGNG0886デフォルトの名無しさん
NGNG0887デフォルトの名無しさん
NGNGいいところもあれば悪いところもある。
ただ、確実にgccよりはいいね。
vector Cとか言うのが最適かすごいらしいが。
0888仕様書無しさん
NGNGこの本どうですか?
使用されてた方や知っている方がおられましたら感想聞かせてください。
0889デフォルトの名無しさん
NGNGハヤシハルヒコ
0890デフォルトの名無しさん
NGNG必読
そのあとで林晴彦読むと、ヘタレっぷりがよく分かる
0891デフォルトの名無しさん
NGNGジサクジエン ゴクロウサン(ワラ
0892888
NGNGハヤシハルヒコを買えということ?
>>890
そうですか。今会社の研修で使ってるのですが、
プログラミングの勉強はじめてなんで、この本で勉強を
したことが私の基礎になりそうで気になっていたので安心しました。
この会社を研修本にしてる私の会社はある程度見所ありそうですかね?
0893仕様書無しさん
NGNG0895888
NGNGなんだよ自作自演て。
掲示板をそんな見方しか出来ないのか。
人間が小さいな、ド厨房さん。
0896デフォルトの名無しさん
NGNGC言語でプログラムを書くにあたって便利なツールは何がありますか?
0897デフォルトの名無しさん
NGNGUNIX
0898デフォルトの名無しさん
NGNGEmacs
cflow
警告メッセージをきちんと読む心がけ
0899デフォルトの名無しさん
NGNGman2html
grep
find
窓な人なら迷わずcygwin
0900デフォルトの名無しさん
NGNG0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNG少し休むことも必要だぞ?
0903デフォルトの名無しさん
NGNG何でK&Rの感想で林が出て来んだよ
それに10分も後に辻褄ぼろぼろのレスつけてんのも変だしな 自作自演クサクサ
0905デフォルトの名無しさん
NGNGできればC言語で学べる本がいいです。お願いします。
0906デフォルトの名無しさん
NGNG0907デフォルトの名無しさん
NGNGそもそも sleep() は標準ライブラリ関数ではないので、環境を明記しないと答えられないと
思われ。
0908デフォルトの名無しさん
NGNGPOSIXらしいよ。
レス数が900を超えています。1000を超えると表示できなくなるよ。