トップページ⇒tech
983コメント281KB

C言語なら私に聞いてYO! 49

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問してYO!
むしろ質問する前にWEBで検索するのが常識だYO!

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

コンパイラを探しているなら >>2 を見てYO!

上記を逸した場合の結果は激しく未定義とするYO!

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/

前スレだYO!
http://pc3.2ch.net/test/read.cgi/tech/1041127646/
0002デフォルトの名無しさんNGNG
( ゜Д゜)ポカーン・・・
0003デフォルトの名無しさんNGNG
      __     
     l⊆⊇`ヽ ≡ ヤホー----イ
     (´�D`Lノ ≡   
    m=○=mノ) ≡ もうスレ立ってた気がしる〜
    _/_/(「_ノニコ ≡
     ( (0)=(__)0) ≡(´⌒(´⌒;;
0004デフォルトの名無しさんNGNG
>>3
嘘だろ?
800以降は確認したけど・・・
0005デフォルトの名無しさんNGNG
>>1
立てる前に確認しませう
http://pc3.2ch.net/test/read.cgi/tech/1042640474/l50
つーわけで>>1は削除依頼だすやうに
0006デフォルトの名無しさんNGNG
>>5
スレ立てたのなら現行スレに報告しろよ
00075NGNG
>>6
それは立てた香具師に言ってくれ
0008sssNGNG
sss
0009デフォルトの名無しさんNGNG
>1=6
おまえのチェックミスを棚に上げんな
0010デフォルトの名無しさんNGNG
>>9
禿同。>>1はアフォ。早く削除依頼しなさい。
0011デフォルトの名無しさんNGNG
>>9=10
自作自演でした。テヘッ
0012デフォルトの名無しさんNGNG
>>12
自作自演でした。
0013デフォルトの名無しさんNGNG
>>12
見ればわかります
0014デフォルトの名無しさんNGNG
void func(char **);

main()
{
char a[100][100];

func(a);

return 0;
}

void func(char **a)
{
}

↑のようにやったらプログラムが暴走したんですが
対処法はいかに?
0015デフォルトの名無しさんNGNG
void func(char a[][100])
0016劉邦NGNG
C言語を応用できる言語は何ですかね?
0017デフォルトの名無しさんNGNG
http://www.st.rim.or.jp/~phinloda/cqa/cqa17.html
読んどけ。
0018デフォルトの名無しさんNGNG
PHP
0019劉邦NGNG
>>18
PHPやったことないんですが・・ほんとに応用できるのですか?
0020デフォルトの名無しさんNGNG
int a = 4.3;
abs(3.5);
とかのミスってlintで検出できますか?
0021デフォルトの名無しさんNGNG
>>16
まあ、当然のことですけど
C++
0022デフォルトの名無しさんNGNG
http://www.tru64unix.compaq.com/docs/i18n/japan/Prog_Gd/LNTCHPXX.HTM#idc-12nov-51
0023デフォルトの名無しさんNGNG
C言語の感覚で書かれたC++はクソコード
0024デフォルトの名無しさんNGNG
>>23
誰もそんなことは聞いていない。
0025デフォルトの名無しさんNGNG
C++はオブジェクト指向なのになんでCが応用できるのかと小一時間(略
0026劉邦NGNG
逆にCに応用できる言語は何ですか?
0027デフォルトの名無しさんNGNG
awk
0028デフォルトの名無しさんNGNG
C++
0029デフォルトの名無しさんNGNG
C++言語の感覚で書かれたCはクソコード
0030デフォルトの名無しさんNGNG
>>23
誰もそんなことは聞いていない。
0031デフォルトの名無しさんNGNG
結局、CとC++は、繰り返しや比較などが同じなだけであって
設計方法は全然違うわけだな。
0032デフォルトの名無しさんNGNG
>>22
ありがとう。でもそこに書いてあることをほとんど
やってくれなかった。
0033豚キムチNGNG
質問!!
C言語ってDVDなどにあるプロテクトもC言語に一種ですか?
0034_NGNG
教えてください

Cでsnprintfを自作することになりました。
参考になる資料とかありましたら教えてください。
フリーで使えるソースが何処かに落ちていると良いのですが。
0035デフォルトの名無しさんNGNG
>>34
VC++ならCRT\SRCフォルダに。
0036_NGNG
>>35
レスどうもです。
VC++見てみたのですが、うーん難しい事してるんですね。
FILEポインタの中身なんて、いじった事無いです。
これprintf系で汎用的に使う為にこんな感じで実装してるのかなー?
そのまま使いたいところだけど、多分ライセンスで引っかかりそう・・・
0037デフォルトの名無しさんNGNG
http://pc3.2ch.net/test/read.cgi/tech/1042640474/l50
頑張って―(謎)
0038デフォルトの名無しさんNGNG
>>34
マルチいくない!
0039デフォルトの名無しさんNGNG
>>36
つーか、なんで...

> Cでsnprintfを自作することになりました。

なんてことやってんの ?
0040デフォルトの名無しさんNGNG
win上でgccを使っているのですが、
*.libのファイルを*.oなんかに変換できますか?
0041デフォルトの名無しさんNGNG
>>40
別に *.lib のままでいいのでは?
何か不都合でもあるのん?
0042デフォルトの名無しさんNGNG
お答えありがとうございます。
ファイルフォーマットが認識されない、といわれたので。
単に対応していないだけなのでしょうね。
まあ、至急必要なものでもないですし。。。
0043デフォルトの名無しさんNGNG
>>42
あ、すまん。
*.a じゃなくて *.lib か。
なるほど。
分離ってできたっけかな...。
0044デフォルトの名無しさんNGNG
>>42
win 上の gcc とは何者で、その *.lib はどっから持ってきたものかを書けよ。
0045デフォルトの名無しさんNGNG
これからC言語を始めてみようという初心者です。
LSI CってのをDLしてみたんですが、使い方がよく分かりません。
参考書買ってみたんですが動かし方については詳しく載ってませんでした。
どなたか詳しく教えていただけませんか?
0046デフォルトの名無しさんNGNG
lsc ファイル名
以上
0047デフォルトの名無しさんNGNG
ごめん、うそ>46
lcc ファイル名
lcc.exeにちゃんとパスを通すこと
あと、_lccも自分の環境に合わせて編集すること
あとは、read.me読めば書いてるよ
0048デフォルトの名無しさんNGNG
えっと・・・
まだよくわからないんですが、
MS-DOSを開きますよね。
lcc filename
しますよね。
次は何をすれば動きますか?
0049デフォルトの名無しさんNGNG
>>48
エラーメッセージが出なければ、もう何もしなくていい。
005045NGNG
やりかたは分かったんですが、
コマンドまたはファイル名が正しくありません
とでます。
どうすればいいですか?
しつこくてすいません。。。
0051デフォルトの名無しさんNGNG
>>50
MS-DOSのコマンドラインから

SET PATH=%PATH%***

と入力して

lcc filename

としてみてください。***の部分はパス名(C:\...\LCC\BIN;)です。
ちなみにBINはBINARY(二進)の略で実行可能ファイルが入ったフォルダの
名前として常識です。わかりましたか?
0052デフォルトの名無しさんNGNG
>>50
51ですが追伸です。参考になればいいのですが、_lccファイルです。

# LSI C-86 compiler's configuration file

-DLSI_C
-XC:\LSIC330C\BIN -LC:\LSIC330C\LIB -IC:\LSIC330C\INCLUDE -T -O
-acdos.obj $LSICOPTS
&#Command line argument will be inserted here
-lknjlib -ldoslib -v
0053デフォルトの名無しさんNGNG
うぜぇ
Cそのものとは関係ねえ事書くな
0054デフォルトの名無しさんNGNG

    ∧ ∧___  ダッコ♪
   /(*゚ー゚) /\
 /| ̄∪∪ ̄|\/
   |        |/
     ̄ ̄ ̄ ̄

0055デフォルトの名無しさんNGNG
>>54
大人しくしていなさい。
0056デフォルトの名無しさんNGNG
セグメンテーション違反ですってなんですか?
0057デフォルトの名無しさんNGNG
>>56
変なとこに書き込んだりしたときに良く出る。
005856NGNG
どこが間違ってるのかさっぱりわからんです...
0059デフォルトの名無しさんNGNG
変なとこをかいたりしたときに良く出る。
0060デフォルトの名無しさんNGNG
>>58
セグメンテーション違反は一番良く見るバグだと思うので、
頑張って間違った箇所を探しませう。

・配列の添え字が変な位置を指しているかどうか
・ポインタの扱いが間違っているかどうか

の2箇所を重点的に調べましょう。
0061デフォルトの名無しさんNGNG
>>59
それはコアダンプ。
006256NGNG
>>60
ありがとうございます。
がんばって探してみます。
卒論間に合うか不安。。。
0063デフォルトの名無しさんNGNG
>>62
・・・デバッガ使えよ・・・
006456NGNG
>>63
!?そ..それはいったい....?
emacsとかについてるやつですか?
0065デフォルトの名無しさんNGNG
>>64
gdbとか
006656NGNG
>>65
emacs見てみたらgdbなるものを発見いたしました!
しかし英語表記のため使いかたがいまいちわからぬ。
調べてみます。。。
0067デフォルトの名無しさんNGNG
memsetでdouble型の配列の値を全てdouble x;
にすることはできますか?
0068デフォルトの名無しさんNGNG
>>67
できない。
0069デフォルトの名無しさんNGNG
了解!!
0070デフォルトの名無しさんNGNG
デバッガという言葉も知らない奴が卒論までにgdbを使えるわけがない。
0071デフォルトの名無しさんNGNG
デバッガgdbの簡単な使い方。

まずプログラム作成 hoge.c
#include <stdio.h>

main(){
int *a = NULL;
*a = 0;
}


コンパイル時に -g オプションをつける
gcc -g -o hoge hoge.c
実行プログラムをgdbの引数に指定
gdb hoge

gdbのプロンプトが出たらrunを実行
(gdb) run
フォールトエラーなどが出たら、理由と場所を教えてくれる。
Program received signal SIGSEGV, Segmentation fault.
0x8048468 in main () at hoge.c:5
5 *a = 0;

終了するときはquit
(gdb) quit
0072デフォルトの名無しさんNGNG
初歩的な質問で申し訳ない。

ファイルからコンソール画面に一行一行読み込んで表示するという、
超基本的なプログラムを書いてみました。
そこで質問なのですが、今のままでは、改行は何も表示されない空白で表されますよね。
この改行部分に「----ここは改行です-----」といったメッセージを表示したいのですが、
どうすればいんでしょう?とりあえず自分が書いたものを↓に。

#include <stdio.h>
void main(){

  FILE *fp;
  char a[20];
  fp = fopen("text.txt" ,"r");

  do{
    if (fgets(a ,20 ,fp) == NULL){
      printf("//////終わりです//////\n" );
      break;
    }else{
      if (a == ""){ ★★★問題の箇所です
        printf("-----ここは改行です-----");
        printf("%s\n" ,a);
      }else
        printf("%s\n" ,a);
      }
  }while(1);
    fclose(fp);
    return;
}
0073デフォルトの名無しさんNGNG
>>72
if(a=="") を if(*a=='\0') に変更すればいいのでは?
0074デフォルトの名無しさんNGNG
>>72
まず、fgets() って読み込んだ改行をそのまま a[] に入れちゃうから、

printf("%s\n", a) なんてやると、一行毎に空行が入るけどいいの ?

あと、要件として行が改行のみなら、"----ここは改行です-----" と表示すると言うのなら、>>73 でいいけど、「何も表示されない空白」の代わりに"----ここは改行です-----" と表示すると言うなら、ちょっと難しいぞ。
0075デフォルトの名無しさんNGNG
>>72
if (strlen(a))
a[strlen(a) - 1] = '\0';

ってのを付け加えた方がいいかも。
0076デフォルトの名無しさんNGNG
if (strcmp(a, "\n") == 0)
にすればええんでない?
まぁ簡単に
if (a[0] == '\n')
でもいいか。

あとは
・改行の場合はわざわざ a を表示しようとする必要は無い
・do-while じゃなくて、while 内で fgets を使ったので構わない。
・fp が NULL かどうかのチェックは入れる癖をつけておくが吉。
・最後の行にのみ改行が無い場合があることを考慮するべし。
ってとこでしょうか。
0077デフォルトの名無しさんNGNG
>>72
#include <stdio.h>
int main()
{
 FILE *fp = fopen("text.txt", "r");
 char a[20];

 while (fgets(a, 20, fp) != NULL) {
  if (a[0]=='\n')
   printf("-----ここは改行です-----\n");
  else
   printf(a);
 }
 printf("//////終わりです//////\n" );
 fclose(fp);
 return 0;
}
0078デフォルトの名無しさんNGNG
>>77
printf(a); と printf("%s", a); は違う。
007977NGNG
>>78
ごめんうっかりしてた。
printf(a)はprintf("%s", a)に読み替えて。

>>72
あなたのコードを見て思ったことを書きます。
だいたい>>76さんが言ってくれてるけど。

・fgetsは改行も読み込むのでprintf("%s\n",a)でなくprintf("%s",a)。
・0回以上の繰り返しのときは基本的に, do-whileでなくwhileを使う。
・文字列の比較はstrcmpを使う。a==""としても文字列の比較ではなく
 文字列のアドレスの比較が行われるだけで無意味。

あと>>77のコードでも19文字ジャストの行を読み込むと誤動作します。
19文字ジャストの行を読むと, 次回のfgetsで改行文字だけを読み込む
ので, 文末の改行と空行との区別がつかなくなるためです。
a[]の配列を十分大きくとることで簡単に解決します。
0080デフォルトの名無しさんNGNG
> printf("%s", a)

漏れは fputs(a, stdout) のが好きだ。
0081デフォルトの名無しさんNGNG
72です!皆さんのご指摘でうまく動くようになりました。
質問の箇所だけではなく、他の様々な部分まで指摘してもらって、感謝してます。
判定文ごとwhileの中に入れろとか、>>77さんの19文字ジャストでおかしくなる・・・とかの話は、
読みながらハタと手を打ってしまいました。

>>80
速度面で有利とか、エラーでにくいとか、そういったことが何かあるんですかね?
単に好みの問題でしょうか。
0082デフォルトの名無しさんNGNG
速度は大抵fputsのほうが速いだろう。
必ずじゃないけど。
0083デフォルトの名無しさんNGNG
教えてください!
return (
x1 >= x2+width2 || x1+width1 <= x2 ||
y1 >= y2+height2 || y1+height1 <= y2
) ? false : true;
ってどういうことですか??
0084デフォルトの名無しさんNGNG
>>83
if(x1 >= x2 + width2) return false;
if(x1 + width1 <= x2) return false;
if(y1 >= y2 + height2) return false;
if(y1 + height1 <= y2) return false;
return true;

と同じだよ。多分2つの領域の重なり判定と思う。

008583NGNG
ふむふむ
確かゲーム系で、当たり判定のところっぽい関数だったからそうなのかも!
「||」って、「OR」だったと思うのですが、三項演算子って順々に判定してfalseやtureを返すんですか?
なんか質問部分がわかりにくいーー・・・
0086デフォルトの名無しさんNGNG
>>85
> 三項演算子って順々に判定してfalseやtureを返すんですか?

三項演算子 xxx ? yyy : zzz は、単に xxx の値の真/偽によって yyy か zzz を返すだけ。

順々に判定するのは、|| (論理 OR 演算子) の方。

xxx || yyy は、xxx が真なら yyy を実行しないで 真 を返す。
(短絡演算で、ググッてくれ。)
008783NGNG
ありがとう!ググってきましたー。なるほど。よくわかりました
お世話になりました!
0088デフォルトの名無しさんNGNG
Cで書いたプログラムなんですが、コンパイルは通るのに実行するとエラーが起こります。
デバッグ(と呼んでいいのかどうか分かりませんが)したいのですが、
どのように行うのでしょうか。
コンパイラはgccをMS-DOS上(MinGW)で使っています。
0089デフォルトの名無しさんNGNG
>>88
そんなのソースださないと分かるわけ無いだろ。
せめてどうエラー出るのか書けや。
0090デフォルトの名無しさんNGNG
>>89
やはりソースによって変わってくるのですね。
一般的にどのようにやっていくのかお聞きしたくて、書き込みました。

エラーは、エラーログを作成しています。というメッセージと共に
プログラムが強制終了します。
0091デフォルトの名無しさんNGNG
>>90
> エラーは、エラーログを作成しています。というメッセージと共に
> プログラムが強制終了します。

.... で、そのエラーログとやらはあるのか ?
0092デフォルトの名無しさんNGNG
プログラムを少しづつ削っていって、エラーが出なくなったら直前に
削ったところが、エラーに関係するところだ。大抵は、
0093デフォルトの名無しさんNGNG
つーか、エラーログ出てるなら読めよとりあえず(w
0094デフォルトの名無しさんNGNG
>>88
gdb(gcc用のデバッガ)ないの?
なければprintfとassertと根性でバグ捜せ。
0095デフォルトの名無しさんNGNG
>>91>>93
エラーログの読みかたわからないです。スマソ
実行したフォルダを探しても該当するようなファイルが見つかりません。
>>94
gdbというものは落としてすぐ使えるでしょうか?
探してみます。明日提出の課題なんです。
>>92
やはりそれですか・・・

皆さんどうもアリガ�d
0096デフォルトの名無しさんNGNG
>>95
おいおい、システムのエラーログに記録されとるんだろ。
実行フォルダには無いぞ。
0097デフォルトの名無しさんNGNG
>>96
見方教えてください。
お手数かけてほんとスマソ
0098デフォルトの名無しさんNGNG
>>97
だから、OSは何なんだよ(藁
何も情報書かずに推測するスレか、ここは。
恐らくLinux系だろうけど、君じゃ無理だ多分。その様子だと。
0099デフォルトの名無しさんNGNG
>>98
>>88 もアフォだけど、お前も相当だな。

> コンパイラはgccをMS-DOS上(MinGW)で使っています。

素の MS-DOS はエラーログなんか記録しないだろうから、どうせ Windows の MS-DOS プロンプトじゃねーのか ?
どうせ MAP ファイルなんか見れないんだから、素直に >>92 か >>94 の2行目に従えよ。
0100デフォルトの名無しさんNGNG
100desuyo
0101デフォルトの名無しさんNGNG
>>77
> printf("-----ここは改行です-----\n");

printf("-----ここは空行です-----\n");
■ このスレッドは過去ログ倉庫に格納されています