C言語なら、俺に聞け! <8>
■ このスレッドは過去ログ倉庫に格納されています
0001凡才ハカー
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言語なら、オレに聞け! <7>
http://pc.2ch.net/test/read.cgi/tech/1003418249/l50
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG>C++のライブラリはスレッドの事は関知してないんでそ?
Cのライブラリの間違い? というかCのライブラリですらWindows
なんかではスレッドセーフになっている場合がある。
Javaなんぞと違ってC/C++はスレッドについては実装によって異なるだけ
0155デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1003674814/
0156デフォルトの名無しさん
NGNG> C++のライブラリはスレッドの事は関知してないんでそ?
ANSI C++ にはスレッドに関する規定がない、というのが正しいかな。
最近の処理系だと、ライブラリ側でスレッドセーフな関数を一部提供しているのが普通。今時の
ライブラリだと、operator new あたりはふつースレッドセーフ。
0157デフォルトの名無しさん
NGNG#include<stdlib.h>
int shortest(int, int) ;
int main(void)
{
int m, n, x ;
printf("Input m:") ;
scanf("%d",&m) ;
printf("Input n:") ;
scanf("%d",&n) ;
if( m<0 || n<0)
{
printf("error! m or n is less than 0.\n") ;
exit(1) ;
}
x = shortest(m, n) ;
printf("The number of shortest paths from (0, 0) to (%d, %d) = %d\n",m,n,x) ;
}
int shortest(int m, int n)
{
int s ;
printf("called ===> number of shortest paths(%d, %d)\n",m,n) ;
if(m==0 || n==0)
{
printf("return <=== number of shortest paths(%d, %d) = 1\n",m,n) ;
return 1 ;
}
else if(m>=0 && n>=0)
{
s = shortest(m-1,n) + shortest(m,n-1) ;
}
printf("return <=== number of shortest paths(%d, %d) = %d\n",m,n,s) ;
return s ;
}
あえて再帰処理で作りました。
0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNGお前みたいな奴がいるから困るんだ (涙
0161デフォルトの名無しさん
NGNG組み込みなら許すかも。
>>158
環境依存だから、環境を書くように。Win32 なら Sleep(), UNIX なら sleep(), usleep() あたりか。
0163デフォルトの名無しさん
NGNGネタとしても面白くないな。逝って良し。
0164デフォルトの名無しさん
NGNGって、大した誤差はでないだろうな藁
0165デフォルトの名無しさん
NGNGclosedir()をコメントアウトすると、無事に?終了します
0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNGLSIC86をダウンロードしたのはいいのですが、
テストのためにマニュアルにのっている
hello.c というプログラムをコンパイルしようとしたところ
hello.c 1: can't open: stdio.h: No such file or directory
とエラーが出てしまいます…。
マニュアルで綴りや設定の仕方など見直したのですがわかりません。
すごく初歩的な質問で申し訳ないのですが、
どなたかよろしくお願いします…。
0168デフォルトの名無しさん
NGNGINCLUDE環境変数をちゃんと設定した?
確か必要だったような気がする
0169デフォルトの名無しさん
NGNGここがLSIC86の初期設定を解説しているから読んでみそ。
http://www.sting.co.jp/mag/comp.htm
0170デフォルトの名無しさん
NGNG>>168-169さん、ありがとうございます。
INCLUDE環境変数というものが何かよくわかっていないのですが
>>169さんの紹介してくださったページ通りに設定はしてみました。
やはり同じエラーが出てしまいました…。
関係ないかもしれませんが、Win98SEを使っています。
Win95/98対応と書いてあったのですが、
SEには対応していないのでしょうか…?
0171あきじん ◆jx8Uh8fk
NGNG↓これとか使った方がいいよ。
http://www.borland.co.jp/cppbuilder/freecompiler/index.html
0172横やり
NGNG>169のページ見たけど
> -XC:\LSIC86\BIN -LC:\LSIC86\LIB -IC:\LSIC86\INCLUDE -T -O
となります。
のあたりだろ
0173デフォルトの名無しさん
NGNGWin98SEでも動作するよ。現にオレのWin98SEマシンでも動いた。
多分、ファイル_LCCの記述にタイプミスがあるんじゃないかな?
もう一度よく見直してみてくれ。
INCLUDE環境変数はCコンパイラがインクルードファイルを見つける
ときのパスを記述したもの。入門書を読めば大抵は前半部で
解説があると思う。
で、171氏が指摘しているようにLSIC86でなければいけない
特別な理由でもない限り、Borland C++を使った方がいいと
思うぞ。
0174デフォルトの名無しさん
NGNG>>171さんのところのをよく読んでみているところですが、
>>172
> -XC:\LSIC86\BIN -LC:\LSIC86\LIB -IC:\LSIC86\INCLUDE -T -O
はちゃんと直したんですよ…。
うーん。
設定するときにC:\CONFIG.SYSとC:\AUTOEXEC.BATを
書き変えたのですが、元々文字が書いてあったのでそれに書き足しました。
マニュアルには「…と書いてください」とあったのですが
元々C:\CONFIG.SYSとC:\AUTOEXEC.BATは空ファイルなのでしょうか??
0175167
NGNGもう一度_lccを見直してみることにします。
でも、別に特別な理由があるわけではなくて
LSIC86を最初に見つけたというだけなので
>>171さんのところのコンパイラをダウンロードしてみます。
どうもありがとうございました!
0176あきじん ◆jx8Uh8fk
NGNGそれよりもAUTOEXEC.BAT変更したら
再起動しなきゃ駄目だよ。SHIFT+再起動でも駄目。
じゃ頑張ってね。
0177デフォルトの名無しさん
NGNGregister char *p;
として、このpは内容が0xffであるようなメモリのアドレスを格納したとします。
そして
if(*p == 0xff){
}
とこれを判定しようとしました。これって真にならないんですか?
0178デフォルトの名無しさん
NGNGif(p == (char*)0xff)
これだったら真になるよ。
0179デフォルトの名無しさん
NGNGデバッグ中に変数の値見ても*p=0x000000ffって表示されます。(VC++)
0180178
NGNG0181デフォルトの名無しさん
NGNG符号拡張で、*p == -1 になってるんじゃない?
0182デフォルトの名無しさん
NGNG>>181
あ、きっとそれです!
0xffとではなく(char)0xffと比較しないとダメなんですね?(^^;
どうも有り難うございました。
0183デフォルトの名無しさん
NGNGif (*p == (unsigned char)0xff)
こうすればどうよ?
0184あきじん ◆jx8Uh8fk
NGNGコンパイルの時にwarning出なかった?
いっぱい出るからって無視しちゃ駄目だよ(w
0185デフォルトの名無しさん
NGNG有り難うございます。今試したところ
if(*p == (char)0xff)が正解でした。
pがchar*なのでこれにあわせてcharでないとダメと言うことでしょう。
>>184
いっぱいでるから無視してました(w
たぶんでてるかも。
0186183
NGNG激迂闊なオレ。回線切って、アキバに新設された公開首吊り場
に逝ってきます。
海よりも深く反省し、心から謝罪と賠償を(以下略)
0187一部ですが
NGNGコンパイルできないです。
スマソ
char *txt = "今日は大変良い天気です。1012abアイウaiu012";
char *p = txt;
if (isalpha(p)!=0) printf("%c===>半角英字\n",p);
else if (isdigit(p)!=0) printf("%d===>半角数字\n",p);
else if (IsKigouS(p)!=0) printf("%c===>半角記号\n",p);
alphabet.cpp(98) : error C2664: 'isalpha' : 1 番目の引数を 'char *' から 'int' に変換できません。 (新しい機能 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。
0188デフォルトの名無しさん
NGNGこう直してみてください。
isalpha(p) -> isalpha(*p)
0189デフォルトの名無しさん
NGNG何がしたいの?文字列の一番目の文字を判定したいのか?
文字と文字列の違いは分かってる?
0190187
NGNGとりあえずコンパイルはできました。
ありがとう。
0191デフォルトの名無しさん
NGNGどうやって排他処理をすればよろしいのでありましょうか?
0192デフォルトの名無しさん
NGNGセマフォ、クリティカルセクションなど。
0193191
NGNG調べてまいります。ありがとう。
0194191
NGNGhttp://www.remus.dti.ne.jp/%7Etom3/multi_thread_basic.html
http://www.hlla.is.tsukuba.ac.jp/%7Eyas/coins/dsys-1998/1999-01-26/pthread-sync.html
http://www.ncad.co.jp/%7Ekomata/c-kouza17.htm
0195デフォルトの名無しさん
NGNG0196デフォルトの名無しさん
NGNGRubyだけで十分。
0197デフォルトの名無しさん
NGNGRubyのライブラリをCで書く為にCを勉強し始めている俺は、
Ruby厨としては、失格なのか?
0199デフォルトの名無しさん
NGNGundefined reference to `crypt' って (−_−)
プロの皆さんは何を使ってますか、高い強度は必要ではないです
>>195
自分はタコだけど、メモリにグッっと近づいた感じは触ってて気持ち良いよ
生産性を論じてるならアレだけど
VB、Java、Perl辺りをやっていた
0200199
NGNGUltraFastって言うのを頂きました (^^v
0201デフォルトの名無しさん
NGNGPerlの入門書を薦められ、
その前にCを触っておくべきだと
言われたのですが
どうでしょう?
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNGC言語の存在ってPascalに近づいてきたかもね、
つまり、教育用言語。
Windowsで実行してない?UNIX系じゃないと実装されてないよ。
0205デフォルトの名無しさん
NGNGというか、Perlがよく分からないのでCです。はい。
0206デフォルトの名無しさん
NGNGfn(char* a){
}
int main(){
fn(A);
}
とした時
fn の a 指す値は
*a 〜 *(a+4) は全部 \0 になるの?
0207デフォルトの名無しさん
NGNGなる、と思う・・・
0208デフォルトの名無しさん
NGNGmain内に
fn("\0\0\0\0");
と書いたのと同じだもん。
文字列操作とか大変じゃないですか?
フォームから送られてくるデータの項目ごとの分割とか。
(Perlではハッシュでかんたん。)
何か美しい解決法があれば聞きたいです。
0210login:Penguin
NGNG0211デフォルトの名無しさん
NGNGそういうのは全部ライブラリでなんとかしたり、
データベースに突っ込んでなんとかしたりするから平気です。
0212デフォルトの名無しさん
NGNGK&R読んだことないの?
Bの次。が有力。
0214デフォルトの名無しさん
NGNGありがと
じゃあ、文字列の最後を \0 2個にしたいときは
#define A "abcde\0"
ってすればいいですよね
0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNGBCPLの頭文字とったのがB言語で、
ダブルにその次ってことでCらしい。よくわからんけど。
次はPか。ピー言語。なんか嫌っ('Д`;)
0217デフォルトの名無しさん
NGNGありがとございました
0218 f
NGNG興味があったのでB言語について。
文法的にはほぼCですな。
BとCって何が違うんですか?
ポインタがないとか?
0219デフォルトの名無しさん
NGNGざっと読んでみた。
ポインタはあるみたい。というか、型は整数しかなくて、キャストしなくても
* 付ければポインタとして扱われているように見える。
0220デフォルトの名無しさん
NGNG{
char *szFindPoint;
char *szFileName;
if(strlen(FullPath)>MAX_PATH)
return NULL;
else
{
szFindPoint=strchr(FullPath,'\');
while(szFindPoint){
szFileName=szFindPoint;
szFindPoint=strchr(szFindPoint,'\');
}
}
if(!szFileName)return FullPath;
else
return szFileName;
}
こいつを実装とやらをしたいんだけどスタックとかから教えてください
0221デフォルトの名無しさん
NGNGまずは日本語を勉強しましょう。「実装とやら」と言われても、何のことやら分かりません。
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNG意味不明。
0224デフォルトの名無しさん
NGNG0225デフォルトの名無しさん
NGNGszFileName=szFindPoint;
このようにさっき変えた。
そろそろスタックとかやりたいYO
0226デフォルトの名無しさん
NGNG0227デフォルトの名無しさん
NGNG>>220さんはスタックってなにか知ってるのかな?
0228デフォルトの名無しさん
NGNGめもりに一個ずついれてくんだろ?
0229デフォルトの名無しさん
NGNG0230
NGNGスタック、リスト、キュー、どれもメモリー確保して格納する作業ですが?
出直しておいで。
0231デフォルトの名無しさん
NGNGセインセイにいいつけられた?
0232デフォルトの名無しさん
NGNGwhileつかって、ひとつひとつ
if(FullPath[i]='\\'&&mblen(FullPath[i-1],2)!=2)
とかやったほうがいいとおもう?
0233デフォルトの名無しさん
NGNG(スタティック)どーせならひたすら低級路線
で行こうとおもっただけアル
0234デフォルトの名無しさん
NGNGC言語の「標準ライブラリ」を極力使わずに、自作ライブラリを作りたい
ということだろ。
で、手始めにpath nameの分解をしたいと。
大方、mainのargvでわたされたファイルパス名を分解しようという動機だろう。
とりあえず、strlen使ってたら、<string.h>必要になるから、
そこも自作しなさい。
あとmblen() なんてだれもしらん。
0235デフォルトの名無しさん
NGNGstrchr()もだめだね。
0236デフォルトの名無しさん
NGNGでさぁ、どっかのHPにstrchrの定義が
あって、char *strchr( ,int)だったんだけど
あれって実体を返すうーーー、いいのだ。
VCLにはExtractFileNameがあるけど、あれは実体を
返すの?それともポインタかなぁ。もうっかい見てみるからナ!
0237いかりや長介
NGNG0238デフォルトの名無しさん
NGNGそれとも64バイト目をヌル文字って考えながらプログラム
することがプログラマの使命なのですか?
0239デフォルトの名無しさん
NGNG掟です。
0240デフォルトの名無しさん
NGNGchar *ptr;
/* 処理 */
if(hoge != NULL && strlen(hoge))
と書いていますが、これは正しいでしょうか。もしNULLならstrlenは
判定されませんか。(僕の環境では大丈夫です)
また、時々重複freeしちゃうダメっぷりなので
if(hoge){
free(hoge);
hoge = NULL;
}
こんな感じであっちこっちに散りばめてるのですが、これはドキュソですか
変な事聞いてごめんなさい、、、、
0241スシばっか食ってるNewBee
NGNG0242デフォルトの名無しさん
NGNG&&の処理順序は保証されているし、そのような書き方はよく見かける
後者のfreeについてはそういうマクロなり関数なりを用意しとけ
0243デフォルトの名無しさん
NGNGfree() のことなんだけど、>>242 さんみたいにマクロ定義するのが一般的です
#define free_safety(v) if(v){ free(v); v=NULL; }
ただし注意して扱わないといけないんだけど、
こうやってるとハマるんだよなー。。。
char *ptr = some_ptr;
/* some long long loooong proc. */
free_safety(ptr);
ptr には NULL が代入されるけど some_ptr には NULL が代入されないんで、
そこからどんなバグが生成されるやら(笑い
0244デフォルトの名無しさん
NGNG二重 free() するのは厳禁だが、条件反射的に
if (hoge) {
free(hoge);
hoge = NULL;
}
と書くと、今度は free したポインタを参照するバグに出くわすと思うぞ。これは検出しづらいから、
ムチャクチャにタチが悪いバグになる。
どこで、いつ malloc() して、どこで、いつ free() するのかを良く考えてプログラミングするのが先。
その上で防衛的に NULL 代入するようにするのはアリだと思う。(俺はやらないけど)
0245デフォルトの名無しさん
NGNG安心しましたです、出来る方の言葉を聞きたくて(^-^*
でももっと本を読まないと
何故かCよりgdbばっかり触ってるような(鬱
早速マクロにしますです
0246デフォルトの名無しさん
NGNGなるほど!、次にはまるのはそれの様な気がします(^-^; コワ
やっぱり人間GCよろしく適当に散りばめるのはヤバイんですね
構造がつかめて無いのは仰るとおりです。
0247デフォルトの名無しさん
NGNG真面目な話、GC 使うという選択肢はアリだよ。
http://www.hpl.hp.com/personal/Hans_Boehm/gc/
0248デフォルトの名無しさん
NGNGどうすればいいの?誰かおしえて。
0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNG出来たら英語に翻訳してくれると尚良し
0251デフォルトの名無しさん
NGNGその変換するプログラムをおしえて欲しいのよ。
0252デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています