トップページ⇒tech
1001コメント276KB

C言語なら、ぬるぽに聞け! Part 〈53〉

■ このスレッドは過去ログ倉庫に格納されています
0001ぬるぽNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限Googleで検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo!
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

コンパイラを探しているなら >>2-13 を。

上記を逸した場合の結果は激しく未定義だゴルァ!!

  ∧_∧
 ( ´∀`)< ぬるぽ

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
0446デフォルトの名無しさんNGNG
<<443
 低レベルな人は黙っていてください。
0447デフォルトの名無しさんNGNG
>>445
 http://pc2.2ch.net/test/read.cgi/tech/1040220302/
 GO!
0448400NGNG
あまり盛り上がらないので、寝落ちします。
お騒がせしました。
0449デフォルトの名無しさんNGNG
>>444
未定義、不定の挙動を把握することはデバッグ時に大いに役立つぞ。
0450デフォルトの名無しさんNGNG
いや、変に盛り上がってると言えなくも無い
0451デフォルトの名無しさんNGNG
つか、>>418 の
> Unix系の場合
こーゆー寝ぼけた発言に対して誰か突っ込んでやれよ。
0452デフォルトの名無しさんNGNG
>>437
その考え方は危険だよ。
0453デフォルトの名無しさんNGNG
>>451
むしかえすと、また低レベルな人は黙っていてくださいと言われますよ?
0454333NGNG
>>334
一応実行後一時停止するようになってるのですが・・・
>>335
はい。コンパイルOKという表示がでています。
>>336
windowsでLSI-86試食版3.3
に「C言語を始めよう」というソフトを
組み合わせて使っています。

始めはフォントが黒いせいで見えないのかと思ったのですが
選択範囲を指定して選択してみても反転しない
のでどうも表示されていないようです。

どうか教えてください。
0455400NGNG
>>447さん
 どうもサンプル拾ってきました。
 差し戻さずリトライすれば良いようですね。

 こんなこと自宅でテストすれば良いのですが、環境がありませんので
皆さんのお知恵を拝借させていただきました。ありがとうございます。

>>451さん
 何が寝ぼけているのか解りません。
 論点を説明願います。
 OSではなく石レベルの話だと言いたいのでしょうか?
 
0456デフォルトの名無しさんNGNG
もういい、もういい、この手の話は

   糸冬
0457デフォルトの名無しさんNGNG
>>418
char a[5] がリターンアドレスに重なっており、
なおかつ、リターンアドレスの上位8bitがたまたま0だったとする。
Intel 系のCPUでは、a[5]の所は下位8ビットなのでそこに0を書くと
はまるが、Motorola 系のCPUでは、そこは上位8ビットなので、
0x00 を書いても運良く助かるってこと。
Intel系やMotorola系以外のバイトオーダーを使うCPUもあるので、
環境に激しく依存する。
0458デフォルトの名無しさんNGNG
<a[5]
>a[4]
0459400NGNG
>>457さん
どうも。
 で 終わり。
0460デフォルトの名無しさんNGNG
>>454
確実に表示はされているはず。
printfの後にfor文で無限ループすれば?
0461デフォルトの名無しさんNGNG
>>421 こんなのはどうですか。
#include <stdio.h>
#include <time.h>
int WaitTime(time_t*timeAdd,time_t waitTime)
{
time_t nowTime;
time(&nowTime);
if(*timeAdd+waitTime<=nowTime){time(&(*timeAdd));return 1;}
return 0;
}
int main(void)
{
time_t wait10,wait100;
time(&wait10);time(&wait100);
for(;;)
{
if(WaitTime(&wait10,1))printf("%s",ctime(&wait10));
if(WaitTime(&wait100,10))break;
}
return 0;
}
0462デフォルトの名無しさんNGNG
>>461 だめです。
0463デフォルトの名無しさんNGNG
sleepってlinuxしかつかえないの?

#include <stdio.h>
#include <time.h>
/* 時間がnow+10になるまで待ってnow+10を返す */
time_t mysleep10sec(time_t now){
   time_t t;
      
   while ((t = time(&t)) < now + 10){
   }
   return t;
}
int main(void)
{
   time_t t;
   char *s;
   s=calloc(1,256);
   /* 10の倍数秒になるまで待つ */
   for (time(&t); t%10!=0; time(&t)){
   }
      
   s = ctime(&t);
   printf("%s\n", s);
   for(;;){
      t = mysleep10sec(t);
      s = ctime(&t);
      printf("%s\n", s);
   }
   return 0;
}
0464デフォルトの名無しさんNGNG
>>463
FreeBSDにもあるよ。
以下、FreeBSDのman 3 sleepから抜粋

>STANDARDS
> The sleep() function conforms to ISO/IEC 9945-1:1990 (``POSIX.1'').

標準関数じゃないね。
0465デフォルトの名無しさんNGNG
Cygwinのmanに無かったからちょっとびっくりした

$ man 3 sleep
No entry for sleep in section 3 of the manual
0466デフォルトの名無しさんNGNG
>>463
WindowsにはSleepってのがある。

>>465
nanosleep(セクション2)は?
0467461NGNG
>>462
どこがダメですか?
0468デフォルトの名無しさんNGNG
>>467
とりあえず無限ループ+最後にifならdo{}while使えば?
0469デフォルトの名無しさんNGNG
指定した時間待つ関数と表示する関数は分けた方がいいと思う。
0470デフォルトの名無しさんNGNG
>>467
time(&(*timeAdd)); が意味不明、間違えじゃないけど
time(timeAdd); でいいのでは?
0471461NGNG
>>468 for(;;)以外使ったこと無かったので。分かりました。
>>469 ? 分かれてないですか?
>>470 確かにそうですね。
0472デフォルトの名無しさんNGNG
とりあえずビジーループするクソなソースを貼るのはやめろ。
0473デフォルトの名無しさんNGNG
(int main, int argc, char **argv)
{
(printf, "hello C");
return 0;
}

こういう言語仕様だったら見た目がもっとカッコイイソースが書けたのにね。
0474デフォルトの名無しさんNGNG
forの構文がどうたら言ったたヤツか?
いい加減にスレ違い、板違いなんで消えろ
0475デフォルトの名無しさんNGNG
>>473 どうせならこうしろ
((int main) ((int argc) (char **argv))
(printf "hello C")
(retrun 0))
0476デフォルトの名無しさんNGNG
>>475
イイ!!
そういう感じのコンパイラ作ってみるよ。
0477デフォルトの名無しさんNGNG
(((int) (main)) (((int) (argc)) ((char) (*)(*)(argv)))
((printf) ("hello C"))
((retrun) (0)))
0478デフォルトの名無しさんNGNG
>>473
lispで我慢してろ。Cに手を出すな。
0479デフォルトの名無しさんNGNG
#define BEGIN {
#define END }

並に、氏んでいいよ。
0480デフォルトの名無しさんNGNG
括弧が多いとlispかよ(プ
0481デフォルトの名無しさんNGNG
>>466
cygwinでは
manは無いけどsleep()は何故かあった。
しかもなにもインクルードしないのに使えてしまって不思議
sleep(1)は1秒止まるし
0482デフォルトの名無しさんNGNG
>>477
(((( ;゚Д゚))) ガクガクブルブル
0483デフォルトの名無しさんNGNG
非常にスレ違いかもしれんが、基本教えて・・

MS-DOSプロンプトの話なんだが、Cを実行した後の大量のデータがほしぃ場合、
スクロールしてしまって、始めの方のデータ見れない・・
これどうやってみるんだろ?
0484デフォルトの名無しさんNGNG
>>483 ファイルに書く
0485デフォルトの名無しさんNGNG
>>483
出力をファイルにリダイレクトして、後から見れ。
0486デフォルトの名無しさんNGNG
ケコーン(w
0487デフォルトの名無しさんNGNG
リダイ・・・やめた
0488デフォルトの名無しさんNGNG
foo.exe > a.txt

で、画面に出力する内容をa.txtに保存する。

foo.exe >>a.txt

で、a.txtにどんどん追加する。

がんがり。
0489デフォルトの名無しさんNGNG
>>484,485

詳しくやり方を教えてください・・・スマソ
0490デフォルトの名無しさんNGNG
>>489
>>488
0491デフォルトの名無しさんNGNG
> hoge | more
で1ページずつみれるよ。
0492デフォルトの名無しさんNGNG
>>483
×:Cを実行した後の大量のデータがほしぃ場合
○:コンパイルエラーの最初の方のエラーを見たい場合
0493デフォルトの名無しさんNGNG
>488

できました。ありがとうございます!
0494デフォルトの名無しさんNGNG
Cの書籍としてよくでてくるK&RはCを勉強する過程で買っておいたほうがいいんですか??
0495デフォルトの名無しさんNGNG
>494

人によります。

漏れはおすすめしない。
0496デフォルトの名無しさんNGNG
まあ損はないだろうが俺は不要だった。
0497デフォルトの名無しさんNGNG
今まで読んだことがないです。

むしろ、アルゴリズムとデータ構造の本を読んだほうが幸せになれることも……
0498デフォルトの名無しさんNGNG
>495
お勧めはなんですか?
0499デフォルトの名無しさんNGNG
>>498
どっちかて言うとA定食の方が美味しいよ。安いしね。
0500デフォルトの名無しさんNGNG
>>481
printfだってstrcpyだって(ヘッダーファイルを)インクルードしなくても使えるだろ。C++じゃあるまいし。
0501デフォルトの名無しさんNGNG
今日ってまだ4/1だっけか?
0502デフォルトの名無しさんNGNG
>>500
4月バカはもう終わりましたよ
0503デフォルトの名無しさんNGNG
>>502
もしかして宣言しないと関数を呼び出せないと思っている?
0504デフォルトの名無しさんNGNG
(・∀・)キュンキュン
0505デフォルトの名無しさんNGNG
くらえ!
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>504
0506デフォルトの名無しさんNGNG
16進数の44を10進数の44と変換したいんですが
いかようにすればよろしいのでしょうか?
何分厨房ではございますがご教授のほど
おながいいたします。
0507デフォルトの名無しさんNGNG
意味不明
0508デフォルトの名無しさんNGNG
>>506
16進数の44を10進数に変換したいの?
0509デフォルトの名無しさんNGNG
>>508サソ

16進の44を10進数に変換といことではなくて
16進の44を10進で44としたいのです。
16進で55があったら10進では85ですよね?
そうではなくて例え、16進で44というデータが
あっても、それを強引に10新の44と
プログラムに思いこませたいのです。

わかりづらい説明ですが、おながいいたします。。。
0510デフォルトの名無しさんNGNG
int func(int val)
{
return ((val & 0xf0) >> 4) * 10 + (val & 0xf);
}
0511デフォルトの名無しさんNGNG
じゃあ0xfeとかだとどう変換したいんだろう?
ナゾ。
0512デフォルトの名無しさんNGNG
>>510サソ
アリガトンゴザイマス
カンゲキ・・・
シフトかぁ。。。

>>511サソ
なんかしんねぇけど
A-Fは入ってこないというナゾの仕様なんです。
0513デフォルトの名無しさんNGNG
もう寝るね(=^-^)/~~
0514デフォルトの名無しさんNGNG
はえーよ
0515デフォルトの名無しさんNGNG
BCDのことではないのか
0516デフォルトの名無しさんNGNG
>>512
プログラムは何を根拠に入って来るデータを16進だと判断するの?
0517デフォルトの名無しさんNGNG
しらねぇ奴、知恵のねぇ奴に限ってあれこれ騒がしいな。
0518デフォルトの名無しさんNGNG
あれこれあれこれ
0519512NGNG
>>516サソ
ダンプファイルがありまして、
それを関数に渡すんですが
その関数が10進で来ることを予期しており
ヘキサじゃダメというだけの理由でございます。
0520デフォルトの名無しさんNGNG
動的なメモリで作った配列があり、
中身を保持したまま配列の数を5000から5005などに増やしたいときは
いったん別に仮配列を用意してコピーしてから元配列を開放、
また新たに元配列にメモリを確保して仮配列からコピー
という方法しかないのでしょうか?
0521デフォルトの名無しさんNGNG
なぜ、仮配列を新配列にしないの?

char *foo = malloc( 5000 ) ;
...
{
char *neon = malloc( 5005 );
memcpy( neon, foo, foolength );
free (foo);
foo = neon;
}
0522デフォルトの名無しさんNGNG
単に、新しい動的メモリを作って、そこにコピーすれば?

配列確保→新しい配列のポインタ取得
古い配列 → 新しい配列 にデータ転送
古い配列解放
古い配列のポインタを指す変数=新しい配列のポインタ

または、manpage realloc
0523デフォルトの名無しさんNGNG
なぜ realloc を
0524522NGNG
キャ……
0525デフォルトの名無しさんNGNG
reallocでダメなのかな
0526522NGNG
こういう感じじゃないの?

www9.plala.or.jp/sgwr-t/lib/realloc.html
0527520NGNG
>>521
>>522
>>523
reallocなんて関数があったのを始めて知りました。
ありがとうございます。
0528520NGNG
>>525
>>526
書き込んでる間に書き込みが‥‥
ありがとうです。
0529デフォルトの名無しさんNGNG
Cのソースとか見るとたまにputsを使ってるのを見かけますが

puts関数の存在意義って何ですか?
Printfで全て間に合うような気がしますが・・・

0530デフォルトの名無しさんNGNG
>>529
速度は?
0531デフォルトの名無しさんNGNG
Printfは絶対に無(ry爆
0532デフォルトの名無しさんNGNG
>>530
わずかにタイプ速度が(ry
0533デフォルトの名無しさんNGNG
>>531
printfね・・・

>>532
タイプの速度ってだいたい
一個なら1秒も変わらんし
複数ある場合はほとんどコピペじゃないのか?
0534デフォルトの名無しさんNGNG
で、実行速度は?
0535デフォルトの名無しさんNGNG
puts(s);
printf("%s\n", s);

だったら puts を使うなあ。
0536デフォルトの名無しさんNGNG
>>534
putsの方が速い。
でも処理速度が問題にならなくて、別の箇所でprintf使ってるなら
俺ならprintfで統一する。
0537デフォルトの名無しさんNGNG
529君検証して答えるべし。速度は?
530==534は、本質に切り込む問いかけしているぞ。
ま、なんだ。
勘のイイ奴なら何をどう調べればよいか分かるもんだが。
0538デフォルトの名無しさんNGNG
大は小を兼ねると言ってもそれは機能面だけの話で、
多機能さを実現するためのコスト(printfの場合は書式の
解決処理ね)が、無駄というか、邪魔になる場合がある。

でもって、printfは処理が遅くて、putsは早い。
数百回の処理じゃ違いは体感できないが、何十万回も
繰り返し処理する場合は、その差が顕著になる場合があるよ。
0539デフォルトの名無しさんNGNG
何十万回もputs呼ぶなら、
コンソールのスクロールの方が
圧倒的に遅くなると思ふ。
0540デフォルトの名無しさんNGNG
コンソールのスクロール? とつっこんでみる。
0541デフォルトの名無しさんNGNG
> /dev/nullと書こうと思ったがおまいには > NUL がお似合いだ

0542デフォルトの名無しさんNGNG
コンソールに大量にログ文字列出力しといて、性能遅いとか
ほざく技術者がいっぱいいるのですが、あんたら馬鹿ですか?
トオモウ事が多いです…
0543デフォルトの名無しさんNGNG
>>542
思うだけじゃなくて、本人に家。
0544デフォルトの名無しさんNGNG
質問です。
1行目にデータ件数を書いて、2行目以降にデータを記述したファイルから、
乱数で出した数字番目の行のデータを取り出して表示させたいのですが、
fgetやfscanfを使って繰り返し読み込ませて目的の行まで進める、
という方法以外に何かいい方法ないですか?
0545デフォルトの名無しさんNGNG
>544
・一気に全部読んで、改行をキーにして探す。
・一行のデータ量が固定なら、計算で長さを出す。で、ファイルポインタを移動させる。
・データ構造を工夫する。
・その他。(他のレス待ち含む)
■ このスレッドは過去ログ倉庫に格納されています