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

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
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");
0102デフォルトの名無しさんNGNG
厨質問で申し訳ないのですが

while(fgets(buf, 256, infp) !=NULL){
hoge = atoi(buf);
printf("hoge=%d\n",hoge);
}

とやりますと、全部のhogeが0となってしまいます。
読みこんだファイルは4行に渡る30バイトほどの
テキストファイルなのですが・・・

どなたかご教授オネガイイタシマス。
0103デフォルトの名無しさんNGNG
>102
入力ファイルの内容を晒してみ?
0104デフォルトの名無しさんNGNG
>102
printf("%s",buf);
でちゃんと、bufに文字列読み込まれてるか確認してみる。
103の言うとおり、どんな入力ファイルやねんやろ・・・
atoi関数の使い方もわかっていますか?
0105デフォルトの名無しさんNGNG
103,104サソ
アリガ�dございます。

テキストファイルを
345504
45454
3920
5503
こんな感じに直したらできますた。
文字が入ってたのがいけなかったのでしょうか?
atoiを使う際に"x"などの文字が混入していた際に
無視する方法ってあるのでしょうか?

ほんと厨ですみませそ。。。
0106デフォルトの名無しさんNGNG
あるプログラムを作成しました(長いので載せれません)。
そのプログラムはある配列変数の要素を小さく設定した時は
問題なく動いてくれるのですが、大きくするとsegmentation Failureがでます。

gdbをつかってデバッグしました。そしたら、
(gdb) core a.out.core
Core was generated by `a.out'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libm.so.2...(no debugging symbols found)...done.
Reading symbols from /usr/lib/libc.so.4...(no debugging symbols found)...done.
Reading symbols from /usr/libexec/ld-elf.so.1...(no debugging symbols found)...
done.
#0 0x80489ab in main ()
(gdb) where
#0 0x80489ab in main ()
#1 0x8048506 in _start ()
となり、何行目に問題があるのか?という情報は教えてくれません。
どこがおかしいか、長年の経験のある皆様にお聴きしようと思ったしだいです。
助けて下さい。
0107106NGNG
(gdb) where
#0 0x80489ab in main ()
#1 0x8048506 in _start ()
が問題なんですよね?
これってどういう意味ですか?
0108デフォルトの名無しさんNGNG
どんなプログラムかも配列をどういうふうに使ってるのかも要素数をどの程度にしたのかもわからないのに答えろというのか・・・
0109デフォルトの名無しさんNGNG
>105
atoi()はスペースと+-以外の文字とぶつかるとそこで終了しちゃいますよ
もしかしたら、文字を取り除く関数があるかもしれないけど
自分で取り除くコード書いたほうが柔軟性あっていいかもしれないですね
0110106NGNG
>>108
じゃーのせます。
連続投稿なるけどごめんなさい、どこが悪いか全く分りませんので
enumとmainだけとりあえず載せます

#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

enum {
MAX_NODE = 87381, /* 自分で計算 (( pow(4,MAX_DEPTH) -1 ) / 3) */
MAX_RES = 81, /*ネットワーク内のリソースの種類*/
MAX_DEPTH = 9, /*木の深さ*/
MAX_SIM = 100, /*シミュレーション回数*/
REPEAT = 2 /*繰り返し数 シミュレーション数*/
};


0111106NGNG
main()
{
int i,j,k,query,query_number,num_reg,sum_query_number,sim_num,sum_num_reg,num_resource[MAX_RES],node[MAX_NODE][MAX_RES],rt[MAX_NODE][4][MAX_RES];
double adv_num_reg,adv_query_number;
FILE *outp;

srand((unsigned int)time(NULL));
sum_query_number = 0;
sum_num_reg = 0;
for( sim_num = 0 ; sim_num < REPEAT ; sim_num++ ){
/*ノードの登録を初期化*/
node_initialize(node);
/*ルーチングテーブル初期化*/
rt_initialize(rt);
/*リソース数を決定*/
for(i=0; i<MAX_RES; i++){
num_resource[i]=(int)(num_normalcurve() + 0.50);
/*printf("%d\n",num_resource[i]);*/
}
/*各ノードごとの各リソースの登録情報をセット*/
distribute(node,num_resource);
/*MATRIX表示*/
/*print_matrix(node);*/
for(k=0;k<MAX_SIM;k++){
/*QUERY決定*/
query = query_produce();
/*printf("query %d\n\n",query);*/
/*routing開始*/
route(query,node,rt);}
0112106NGNG
query = 3;

/*count the number of the query 3*/
query_number = count_qnum(query,rt);

/*rt表示*/
/*print_query(query,rt);*/
sum_query_number += query_number;
printf("query_number %d",query_number);

/*ノードAの登録数*/
num_reg = sum_reg_num(rt);
sum_num_reg += num_reg;
printf("registration_number %d",num_reg);
}
adv_query_number = (double)(sum_query_number) / (double)(REPEAT);
adv_num_reg = (double)(sum_num_reg) / (double)(REPEAT);

printf("adv_query_number %f",adv_query_number);
printf("adv_num_reg %f",adv_num_reg);

}
0113デフォルトの名無しさんNGNG
70〜140MBもスタックに取るつもりかよ
0114106NGNG
>>113
そこが問題ですか?enumんとこですよね?
0115cccNGNG
★http://www6.ocn.ne.jp/~endou/index2.html★
      ★こんなサイト見つけました★
0116106NGNG
age
0117デフォルトの名無しさんNGNG
>>116
何だよ、解決したんじゃなかったのか?
スタックに取りすぎだっつってんの

int i,j,k,query,query_number,num_reg,sum_query_number,sim_num,sum_num_reg,num_resource[MAX_RES],node[MAX_NODE][MAX_RES],rt[MAX_NODE][4][MAX_RES];

これがどれほど巨大なメモリを必要とするかわかる?
0118106NGNG
>>117
どうやったらいいのでしょうか?
main関数から変数をおいだせばいいのでしょうか?
配列をなくせばいいのでしょうか?

enumは関係ないのですか?
0119デフォルトの名無しさんNGNG
まず第一にバッファの使い方を見直すべし
んな巨大な配列が本当に必要なのか?
どうしても必要ならmallocなり何なりでヒープに取るべし

enumの値を配列サイズに使ってんだから関係あるに決まってる
0120106NGNG
>>119
分かりました。
配列を変更するのは難しそうですので、
別の変数を直して行きます。
mallocとか勉強します
0121デフォルトの名無しさんNGNG
ぷろぐらむの実行がいつまでたっても終らん。
実行を早くする基本は何?
0122デフォルトの名無しさんNGNG
>>121
プロファイラ使え。
0123デフォルトの名無しさんNGNG
>>109さそ
ありが�dございます

while(fgets(buf, 256, ifp) !=NULL){
for(i=0; i<strlen(buf); i++){
if(isalpha(buf[i])){
こんな感じでアルファベットだったらbufからその文字を省くといった
仕様にしたいのですが、bufからその文字だけ省くことなんて
可能なのでしょうか?

再度の糞厨質問ですいません。
ご教授オネガイイタシマス。
0124デフォルトの名無しさん NGNG
VC++買おうと思って製品情報見てるとVisual Studio .NETのページに行っちゃうんですが
Visual Studio .NET て何ですか?
0125デフォルトの名無しさんNGNG
>>124
VB,C#,VC++が全部入り
0126デフォルトの名無しさんNGNG
11万円もするよぉ!うわぁーぁぁん
0127デフォルトの名無しさんNGNG
ある4つほどの配列をファイルに書き込もうとして、
fwriteを使って書き込みました。
別のプログラムでそれを読み込もうとしてfreadで読み込んだのですが、
読み込んだ配列の中身が途中から0になってしまっています。
具体的には
a[130][100],b[100][30],c[100],d[30]を書き込んで
読み込んだaおよびbが途中から0になっていました。
けれどもcとdは正常に読み込めていました。
エラーチェックはしていますがエラーは出ていません。

プログラムも見直していますが、さっぱりわかりません。
どなたかご教授願いまつ。
0128デフォルトの名無しさんNGNG
>>126
ほんとに全部要るのか?
0129デフォルトの名無しさんNGNG
>>121
実際のものより小規模なモデルを作り、プログラムが正しく動作しているかを検証する。
各処理の実行時間を調べて、時間がかかっている部分を高速化する。
(但し、複雑になるような高速化は避ける。)
いくつかの規模のモデルを実行して、時間を測定し、実際のモデルでどれだけ時間が
かかるかを見積もる。
時間がかかり過ぎるようなら、別のアルゴリズムを探す。
別のアルゴリズムが見つからなければ、複雑な高速化に取り組む。
それでも時間がかかり過ぎるなら、プログラムを作ることの意義を見直す。
0130デフォルトの名無しさんNGNG
>>123
省いた後、隙間を詰める。
もしくは、省く文字以外を別バッファにコピーする。
0131デフォルトの名無しさんNGNG
>>123

#include <ctype.h>を追加して、

char tmp[256], *src, *dst ;

for ( src=buf, dst=tmp; *src; src++ ) {
  if ( isdigit( *src ) || *src=='-' || *src=='+' )
    *dst++ = *src ;
}
*dst= '\0' ;
hoge= atoi( tmp ) ;

但し、これだと "-1 2 +3" が "-12+3" になってしまうから
それいう可能性があるなら加工しる!

123で、"アルファベットだったらその文字を省く" って言ってるから、
if ( !isalpha( *src ) )
  *dst++ = *src ;
のほうがいいかな。
0132デフォルトの名無しさんNGNG
先頭の空白は無視するというatoiの仕様を利用して、余計な文字をスペースに置き換えたら?
0133デフォルトの名無しさんNGNG
「アルファベットだったら」じゃなくて「数字か+,-でなかったら」の方がいいと思うけど。
0134デフォルトの名無しさんNGNG
>>127
ファイルサイズが期待した通りになっているかを確認。
ファイルの中を見てみて、0が書かれているようなら、
fwrite、そうでなければ読み込みがfreadを見直す。

たぶん、二次元配列のサイズ計算が間違えているんだと思う。
途中からとかではなくて、実際にどこから0が書かれているかを
調べるのもいいと思う。(地道なことをちゃんとやらんと)
0135デフォルトの名無しさんNGNG
>>127
読み込むときも書き込むときもバイナリモードにした?
あ、UNIX系なら関係ないけど。
0136デフォルトの名無しさんNGNG
>>128
全部いらなくても、商利用したいときとか…

ところで、シェアウェアって、やっぱ商利用?
0137デフォルトの名無しさんNGNG
>>136
そりゃそうでつ。
0138127NGNG
細かい訂正ですが、b[100][32]でd[32]でした。

>>134
カエレ!(・∀・)とか言われそうですが、
ファイルサイズの計算はどうすればいいのでしょうか・・・
バイナリファイルの中身はどうやって見ればいいのでしょうか・・・バイナリエディタですか?
二次元配列のサイズ計算というのがよく分からないのですが・・・
今いろいろと検索していますがよく分かりません・・・

aはa[30][0]から0になっていて、bはb[7][6]から0になっています。

>>135
WindowsのCygwinってやつでやってます。
一応fopenにはwbやrbはちゃんと書いているので
大丈夫だと思います・・・
0139デフォルトの名無しさんNGNG
Visual C++ .NET Standard
買おうと思いますがどう思われますか?
VBは弄った事あります
0140デフォルトの名無しさんNGNG
スレ違い祭りか?
0141デフォルトの名無しさん NGNG
Visual C# .NET
Visual C++ .NETて何が違うんですか?
0142デフォルトの名無しさんNGNG
>>138
Cygwin なら
ls -l ファイル名
でファイルサイズが見れますよ。

バイナリファイルの中身は
dump ファイル名 | less
(less でなく more でもいいです。お好きなほうを)
で見れます。
0143デフォルトの名無しさんNGNG
>>141
C#とC++という時点で違う。
0144デフォルトの名無しさんNGNG
>>138
> ファイルサイズの計算はどうすればいいのでしょうか・・・
printf("%d", sizeof a);
もしくは
sizeof(aの型) * 130 * 100
として計算。あとはバイナリなんで、a, b, c, dを全部足せばよい。

> バイナリファイルの中身はどうやって見ればいいのでしょうか・・・バイナリエディタですか?
バイナリエディタもしくは16進ダンプするツールを探す。
なければ作れ。(簡単だから)
予想では0は書かれていないと思う。

> 二次元配列のサイズ計算というのがよく分からないのですが・・・
> (略)
> aはa[30][0]から0になっていて、bはb[7][6]から0になっています。
c, dは大丈夫で、a, bが駄目というんで、二次元配列の扱いが間違えているんだと思う。
fwrite()のところで3000や1350という数を渡してしまっている。
3000は130 * 100 を 30 * 100にしてしまっているとか…
0145デフォルトの名無しさんNGNG
>>139
いいんじゃない
0146127NGNG
>>142
>>144
ありが�d。
とりあえずプログラムもう一度見直して
ファイルの中身見たりしてみまつ。
0147デフォルトの名無しさんNGNG
>>139
Visual C++ .NET Standard は
最適化が無くて、できた実行ファイルも配布禁止だったような。
完全に学習用なんで、それでもいいんなら買ったんでいいんでは?
0148デフォルトの名無しさんNGNG
>>137
自明というわけでは無い気がしますけども…
0149デフォルトの名無しさんNGNG
>>147
フリーなら配布可でつ。
0150127NGNG
デキタ━(゚∀゚)━!!!!
>>134,>>144両氏指摘のように、
原因はfwriteおよびfreadの書き込み、読み込み数指定が間違っていたようです。
プログラムでは
fwrite(a,sizeof(double),input*middle,fp)
といったように書いていたのです。
inputとmiddleはdefineであらかじめ定義してありました。
特にinputは
#define input aho+bakaといった形で・・・
今まで本当に知らなかったのが恥ずかしいくらいなのですが、
この状態でinput*middleってやるとaho+baka*middleってことになるんですね・・・
てっきりahoとbakaの和がinputに入るんだとばかり思ってました・・・
#define input (aho+baka)で解決しますた。(´・ω・`)

書き込みから間違ってることが判明したので、
25時間かけたデータを取り直しまつ・・・(´・ω・`)

>>144氏の言うとおり、出力ファイルのサイズはsizeof(double)が8だったので
8*(130*100+100*32+100+32)=130656Byte が正しかったのですが、
質問時の出力ファイルは28kByteくらいでした・・・
今考えると8*(31*100+7*32+6+100+32)=27696Byte だったのですね・・・

みなさまありがとうございますた。ご迷惑おかけしますた。逝ってきまつ。
0151デフォルトの名無しさんNGNG
>>150
お疲れ様
0152デフォルトの名無しさんNGNG
(´-`).。oO 150は経験値が1上がった
0153139NGNG
>>147
ありがとうございます。
Visual C++ と Visual C++ .NET の違いは何でしょうか?
0154デフォルトの名無しさんNGNG
>>147
マジで!?
箱には・・・

「学習用を目的とした製品となります。
 商用製品など、本格的なアプリケーションの開発は、
 Visual Studio .NET Professional 以上の製品をお勧めいたします。」

・・・と、あるけど・・・?
あくまで、お勧めであって・・・
ダメとはどこにも書いてないっぽい。
今から、もうちょっとマニュアル読んでみる。
0155デフォルトの名無しさんNGNG
staticってなんれすか?
0156デフォルトの名無しさんNGNG
静電気
0157デフォルトの名無しさんNGNG
>>155
自動変数をstatic領域に配置することだよ
static int a;
とかって宣言すると、その関数終了しても内容の保持が保証されるのです
0158デフォルトの名無しさんNGNG
>>157 ( ゚д゚)
0159デフォルトの名無しさんNGNG
>>157
つーことは
static int foo(void);
と言う関数は、static領域に配置されるから内容の保持が保証されるけど
int foo(void);
と言う関数は、内容の保持が保証されないのですね?
0160デフォルトの名無しさんNGNG
void analysis(int ch)
{
static int repeat_count = -1; /* < 0 は無効値 */
int i;
if (ch == 'F' || ch == 'R' || ch == 'L') {
if (repeat_count < 0) repeat_count = 1;
for (i = 0; i < repeat_count; i++) {
switch(ch){
case 'F': forward(); break;
case 'R': right_turn(); break;
case 'L': left_turn(); break;
}
}
repeat_count = -1;
} else if (isdigit(ch)) {
if (repeat_count < 0) repeat_count = ch - '0';
else repeat_count = repeat_count * 10 + ch - '0';
}
}

丁寧に説明してくらさい。
0161デフォルトの名無しさんNGNG
>>159
関数は変数なんですね?
0162154NGNG
>>147
ってことで、ザッと見てみたが・・・
どこにも、作ったバイナリの配布を禁止してる下りもないし、
また、商用アプリを作ってはダメって下りもない。
あくまで推奨。お勧め。

作ったバイナリ配布しても、
シェアソフト作ってもOKっぽいぞ。
0163デフォルトの名無しさんNGNG
>>159
( ゚д゚)< ポカーン
0164デフォルトの名無しさんNGNG
>>157
サンクス!
0165デフォルトの名無しさんNGNG
>>160
たとえば"15FR160L"という文字列があったとき,
それを先頭から一文字づつanalysisに渡すと,
forwoard()が15回, right_turn()が1回,
left_turnが160回, の順で実行される。

staticの解釈はこの場合>>157で合ってるから, あとは自分で追ってみれ。
0166デフォルトの名無しさんNGNG
>>159
static の関数は同じファイルの中からしか
直接呼び出すことが出来ないんじゃなかったっけ?
0167デフォルトの名無しさんNGNG
>>160の
>/* < 0 は無効値 */
ってコメントは的外れと思うのは気のせい?
0168デフォルトの名無しさんNGNG
if (repeat_count < 0) repeat_count = 1;  ここか?
0169デフォルトの名無しさんNGNG
>>165
サンクス!!
0170デフォルトの名無しさんNGNG
else if (isdigit(ch)) {
if (repeat_count < 0) repeat_count = ch - '0';
else repeat_count = repeat_count * 10 + ch - '0';

コメント風に解説おながいします。
0171デフォルトの名無しさんNGNG
>>167
ん?なんで?
数字が何桁続くかわからないから、下から4行目の
if ( repeat_count < 0 )
の行で1桁目なのか2桁目以降なのかを判定するためでしょ?

カキコする前にreloadしてみたら >>170 の答えにもなってた。
0172デフォルトの名無しさんNGNG
>>170
>isdigit(ch)
chのアスキーコード値が数字の文字かどうかの判別

>ch - '0' 
文字0のコード値で引く
0173デフォルトの名無しさんNGNG
>>172
あたりまえじゃん
0174デフォルトの名無しさんNGNG
>>173
?
0175デフォルトの名無しさんNGNG
>>171
>>172
サンクス!!!
0176デフォルトの名無しさんNGNG
横突っ込みでスマソが
>>172
そんなコメントは書くなよ
0177デフォルトの名無しさんNGNG
>>171
スマソ、完全にボケてました
コピペしたから気づかんかったけど
/* 0 は無効値 */
ではなく
/* < 0 は無効値 */
だったんですね…首吊ってきます
0178171NGNG
>>177 まだ生きてる?
なるほど。
確かに -1 ってハードコーディングしてるんだから
/* -1 は無効値 */
のほうが読みやすいかも知れませんね。
0179デフォルトの名無しさんNGNG
>>177
見間違えは誰でもあるYO まあまあ気を落とすなw
0180デフォルトの名無しさんNGNG
>>160
これってこの前オレが書いたやつじゃん。
ちなみにあのコメントはrepeat_countが負の値をとらないよって意味。
だから-1かどうかではなく、負かどうかの判定になっている。
0181デフォルトの名無しさんNGNG
つか、NULL を無効値にすればいんじゃ・・・?
数字検出時に何桁目なのかを意識しなくても

if ( isdigit(ch) )
  repeat_count = repeat_count * 10 + ch - '0' ;

で済むし。
但し、入力が "0R"とかの場合に>>160とは挙動が変わってしまうが。

まぁ、他人の課題にそこまで考えてやる必要ないし。気ぃ悪くしたらスマソ。
0182デフォルトの名無しさんNGNG
>但し、入力が "0R"とかの場合に>>160とは挙動が変わってしまうが。

まさにこれが負値を無効値にしてる理由じゃないの?
0183デフォルトの名無しさんNGNG
>>181
どこから突っ込んで欲しいの?
0184180NGNG
>>181
理由は、>>182 さんの言っている通りです。
-の入力は流石にないだろうけど、0はあるだろうと思って。
質問には書いてなかったんで、どちらでもいいと思いますが。

あと、同じ人?って書いたのもオレです。
0185182NGNG
まぁ前処理で0はカットできるけどね。
ちゃんとassertなりで0を受け付けないと表明するなら
>>181もアリかも。あと0->NULLだけど逆は必ずしも真ならず。
0186デフォルトの名無しさんNGNG
>>185
何でNULLは突っ込んで
挙動が変わるのは"R"等であって
"0R"等ではない事に突っ込まないかな…
0187デフォルトの名無しさんNGNG
gccのライブラリファイルのリンクトラブルは
どうやって解決するのがいいんでしょうか?
よく,-L,-lのオプションが足りないと,
undefined reference to `xxxxx'
と文句いわれるけど,
そのファイルがどのライブラリにあるとか,
どうやって調べたらいいんでしょう?
0188デフォルトの名無しさんNGNG
>>187
nm
0189デフォルトの名無しさんNGNG
>>187
grep
0190182NGNG
>>186
0を無効値にするってことは, ふつう無効値チェック部分の,
if (repeat_count < 0) repeat_count = 1;
を,
if (repeat_count == 0) repeat_count = 1;
と書き換えることを含意するんじゃないの?
0191デフォルトの名無しさんNGNG
130-133サソ
アリガトウゴザイマシタ

while(fgets(buf, 256, ifp) !=NULL){
for(src=buf, dst=tmp; *src; src++){
if(! isalpha(*src))
*dst++=*src;
}
*dst='\0';
hoge = atoi(tmp);
printf("hoge = %d",hoge);
fprintf(ofp, "%d\n", hoge);
}
ご教授頂いたように修正したところ
無事仕様とおりに動きました。
0192デフォルトの名無しさんNGNG
質問なのですが
引数で渡したファイルに
バイナリで書きこむとは
どういったことなのでしょうか?

例えば32という2バイトを32と1バイトにして
書きこむといわれたのですが・・・
あまりにも意味がわかっておりません。

どなたかご教授お願い致します。
0193デフォルトの名無しさんNGNG
>>192
fopen() で "wb" モードで開け。
char 型の変数に 32 を代入して fwrite() で書け。
終わったら fclose() で閉じろ。
0194デフォルトの名無しさんNGNG
>>192
とりあえず >>127-150 あたりを読んでください。
0195デフォルトの名無しさんNGNG
>>162
そうだったんだ...。
VC5の頃はダメって書いてあったと思うので、
特にいいって書いてないだけでも
ダメなんだと思い込んでしまったのかも。
0196デフォルトの名無しさんNGNG
age
0197デフォルトの名無しさんNGNG
>>157
> 自動変数をstatic領域に配置することだよ

それって自動変数じゃねーだろ。
(今時誰も書かないけど、auto ってキーワードもあるし...。)

> static int a;
> とかって宣言すると、その関数終了しても内容の保持が保証されるのです

グローバル変数/関数のスコープには触れなくて良いのか ?
0198デフォルトの名無しさんNGNG
auto って書いてた時期ってそもそもあるの?
K&R の時代のことはよー知らんのだが。

>>155
1.関数の外に書いた変数や関数につけた場合
その変数や関数の名前がそのファイル内でしか通用しなくなる。

2.関数の中の変数につけた場合
その名前が関数の中でしか通用しないことを除いて
グローバル変数と同様の扱いになる。
(つまり、初期化は実行前に決まる値でしか行えず、
 初期化を省略すれば 0 で初期化される。
0199デフォルトの名無しさんNGNG
staticとグローバルはメモリまわりでちょっと違うんじゃなかったか?忘れたが
0200デフォルトの名無しさんNGNG
>>198
> auto って書いてた時期ってそもそもあるの?
> K&R の時代のことはよー知らんのだが。

最近の香具師は、規格も知らんのか ?
(まあ、普通は省略できるから気にしなくてもいいんだが。)

>>199
>>198 の 2. の意味では、まず同じ。(よほどひねくれた実装は除くが...。)
逆に、同じ静的変数でも初期化指定子がない (or 0 で初期化) 場合と、0 以外で初期化する場合で異なるメモリセクションに配置する処理系は多い。
0201デフォルトの名無しさんNGNG
>>198
そもそも、日本語で自動変数って
autoを直訳しただけだからね…
0202198NGNG
>>200-201
auto ってのがあることくらい知ってるけどさ、
でも、使ったことないんで。
いや、とりあえず使ってみたことはあるが。
register もそうだなー。
VCとか無視するって書いてるし。
0203デフォルトの名無しさんNGNG
autoって書くのって時代遅れっぽぃ?
0204デフォルトの名無しさんNGNG
>>197
>それって自動変数じゃねーだろ。
>(今時誰も書かないけど、auto ってキーワードもあるし...。)
そういわれたらそうかも(^^;
へんないいまわしだw
staticで宣言した瞬間にautoじゃなくなるもんね
>グローバル変数/関数のスコープには触れなくて良いのか ?
うーん、staticってなんでしか?って聞いてる人にあんまり難しいこといってもなぁ〜
って思いまして。

つまるところは内容が保持されるってことがいいたい。

そうすると、スコープの話になりますね・・・

>>(今時誰も書かないけど、auto ってキーワードもあるし...。)
う〜ん、C始めて、8年やけど、いまだかつてautoキーワード使ったこと無いわw
使うことってあるの?
0205デフォルトの名無しさんNGNG
registerは要るよ! ほんとに速くなるか良く知らないけど
0206デフォルトの名無しさんNGNG
volatileは要るよ!
0207デフォルトの名無しさんNGNG
>>205
ん〜大概のコンパイラは最適化の段階で勝手にregisterつかってくれるんじゃないの?
0208デフォルトの名無しさんNGNG
registerは最適化のヒントにしかならない。本当にレジスタ使って
くれるかどうかはわからない。
x86のようなレジスタが少ないCPUならなおさらその傾向が強い。
0209デフォルトの名無しさんNGNG
>>204
ソースを見やすくする為に使う
取り敢えず、最優先したい変数はregisterを使い
レジスタに割り当てて欲しくない変数はvolatileを使い(←正しい使い方と違うけど)
レジスタが余ってる場合にはレジスタに割り当てて欲しい場合はautoを使えば
ソースを見た時に、明示的に優先するべき変数が分かるようになる
ちなみに、省略された変数は、一時的なもので最終的には使わない予定の変数
0210デフォルトの名無しさんNGNG
そんなにごちゃごちゃ書いてたら
鬱陶しいことこの上ない(w
0211デフォルトの名無しさんNGNG
見やすくするためにautoやvolatileなどの機能を伴う(とされている)
修飾子を使うのは誤り。するべきは変数名の工夫、コードの構成。
0212デフォルトの名無しさんNGNG
autoは使わない w
registerは優秀なコンパイラを使っていれば必要ないんじゃない?
volatileは・・・・それを必要とするほど高度なプログラムを俺は書いたことがないw

俺は上の三つは使ったことないな。signedも使ったことないかも
0213212NGNG
みんなは外部のファイルから参照される関数の頭にexternをつける?
俺はデフォルトでexternになっているからつけないんだけど。
プロトタイプにはつける人もいるみたいだから。
0214デフォルトの名無しさんNGNG
>>213
漏れはつけない。無駄だと思ふ。
0215デフォルトの名無しさんNGNG
無意味といえば単項演算子の+もauto同様、無意味だよな。
0216デフォルトの名無しさんNGNG
extern int i; /* 宣言 */
void foo()
{
  :
  i++; /* 参照 */
  :
}
int i ; /* 定義 */

これをstaticでやりたい場合はどうするの?
ファイル内でしか通用しないのだから
普段は宣言無しで定義を一番上に書く事にしてるんだけど
出来たら、それは、それで少し便利かなと…
0217デフォルトの名無しさんNGNG
int* p;
p=malloc(sizof(int), 100);
で動的に確保したpの配列要素数を調べるにはどうすればいいでしょう?

sizeof(p)ならsizeof(int *)がもとまってしまいます...
もちろんサイズ100ってわかってるのになんで?ってのは
なしでおねがいします.
0218デフォルトの名無しさんNGNG
>>217
出来ない。いじょ。
0219デフォルトの名無しさんNGNG
>>217
その100を覚えておけばいいだろ
0220デフォルトの名無しさんNGNG
>>217
http://www.catnet.ne.jp/kouno/c_faq/c7.html#27
0221217NGNG
>>218
そうですか...

>>219
そういわれると基も子もありません...

>>220
今からよんできます.
0222デフォルトの名無しさんNGNG
>>216
一応
static int i; /* 定義 */
にすればできる。

でも、そういうのはできるだけ一箇所で済ませたいと思うけどね。
2箇所で整合性とらなあかんのは面倒。
関数の場合は前方参照問題とかあるから
static でもプロトタイプ宣言するのは有意義だけど、
変数では滅多にそういう問題ないから不必要っしょ。
0223デフォルトの名無しさんNGNG
>>221
要するに、何か変数に保存しときんしゃいってこと。
0224217NGNG
>>223
どうもありがとうございます.

単純に考えたら...
お恥ずかしい限りです

0225219NGNG
>>221
覚えておけばいいってのは、変数に入れておけばいいという意味なんだが、伝わらなかったか。
0226デフォルトの名無しさんNGNG
>>225

>>225
そこまで頭がまわりませんでした...

文字どおり”覚えておけ”ってことだと解釈してもうた
0227219NGNG
>>217
ところで、mallocの引数はひとつだよ。
callocでも意味上では引数の順番が逆だな
0228216NGNG
>>222
ありがとうございます
関数だと駄目なので、変数も駄目だと思い込んでたんですけど
変数の宣言はexternで良かったんですね
0229デフォルトの名無しさんNGNG
>>228
> 関数だと駄目なので、変数も駄目だと思い込んでたんですけど

何で駄目だと思ったんだ?
プロトタイプに extern とか書いたのか?

#include <stdio.h>
static void hoge();
int main()
{
  puts("main");
  hoge();
  puts("main");
  return 0;
}
static void hoge()
{
  puts("hoge");
}
0230デフォルトの名無しさんNGNG
>>228
> 変数の宣言はexternで良かったんですね

よくない。
いや、悪くないが、気持ち悪い。
関数内でも、変数は頭に宣言するだろう。
変数を後ろに宣言する何の必要があるのか?
0231デフォルトの名無しさんNGNG
「元も子も」じゃなかったけ?勘違い?
0232デフォルトの名無しさんNGNG
>>231
元金と利子だからな
0233デフォルトの名無しさんNGNG
032 #なんだかnandaka
038 #あそこがasokoga
214 #むず痒いmuzugayui
314 #なんでだろnanndedaro
286 #なんだか切ないnanndakasetsnai

↑こんな感じの複数行のテキストファイルがあり、
このファイルを引数で渡すと
数字のみファイルに書きこむプログラム
(#以降はコメントのようにみなす)を
作成していたのですが、変更があって
032 #なんだかnandaka
ne #あそこがasokoga
214 #むず痒いmuzugayui
↑のように数字以外のものがあっても
変換する必要性が出てきました。
今まではisdigit()で済ませていたのですが
それでは2行目の"ne"が弾かれてしまいます。

そこでどのようにすれば#以降を弾きつつ
先頭行の数字以外のデータを書きこむように
できるのかをお教え頂きたくカキコしております。

ほんと厨房で長々と乱文でスイマセソ
5教授お願い致します。。。
0234デフォルトの名無しさんNGNG
>>233
書き込むって何に書き込むんだ?
文脈から判断できない
メモリーか?
0235234NGNG
ああ、わるい。ファイルか。
0236234NGNG
>>233
strchrで#までの長さを求める。
なければ行末までとする。
0237236NGNG
言い方が悪いな。
strchrをうまく使って長さを求める。
strcspnを使ってもいいけど
0238デフォルトの名無しさんNGNG
isdigitの代わりにisgraphをつかう
023910000NGNG
C言語でいまCGI作ろうとしているんですが
とりあえず文字表示するだけとかやってみたわけなの
printf("<HTML>");みたいに。
それをコンパイルしてXREAってトコロにUPしてみたの
だけど・・動かないの・・・EXEをCGIにリネームしてUPしたのに。
・・・・なにがわるいんでしょう・・・??
0240236NGNG
>>239
・コンパイルした環境がxreaと違うから
・Content-Typeヘッダーを出力していないから
0241デフォルトの名無しさんNGNG
>>239
EXEとか言っているあたりWindows上でコンパイルしたな・・・・
xreaはLinux(CPUはIntel系)だから。
024210000NGNG
printf("Content-type:text/html\n\n");
こんなん付けていましたが・・・ダメでした・・。
環境はVCなんです。・・うーぬ。
レスありがトン。
0243デフォルトの名無しさんNGNG
トクトクでコンパイルしたものをXREAにアップすれば動くかも
024410000NGNG
Windowsじゃだめなのですか!!
それは気付かなかった・・っていうか知らなかった〜
Linux対応にするにはどうすればいいか、わかります・・?
0245デフォルトの名無しさんNGNG
>>233
strtok(バッファの内容を改変してもいいとき)
もしくは strchr(よくないとき)を使う。

>>242
: の後は空白を空ける。
printf("Content-type: text/html\n\n");

>>244
Linux 上でコンパイルする。
0246デフォルトの名無しさんNGNG
>>245
他のバッファにコピーするならsscanf(src,"%[^#]",dest);こんな感じかな?
0247デフォルトの名無しさんNGNG
>>244
自分とこでLinux環境整えてそこでコンパイル、が一番楽なんじゃないかなぁ…
Cygwin使えばWIN上でLinuxバイナリ作れる?
ttp://www.sixnine.net/cygwin/cygwin-doc/devel/cygwin-to-linux-cross-howto.html
024810000NGNG
Linuxヵー自分全然わかんないッス・・・。
まだ遠い道なのかな・・。
0249セグメントフォルトNGNG
レンタル鯖でCGIするなら、やっぱperlとかの方がいいっしょ。
実験用に自前鯖つくるか
0250デフォルトの名無しさんNGNG
*.cgi の中身ってどんな言語?
ってか、コンパイルされた状態なの?
テキストソースなの?
0251デフォルトの名無しさんNGNG
>>250
実行できるなら何でも。
0252デフォルトの名無しさんNGNG
>>239のことなら>>239を読めば分かると思うけど・・・

> C言語で
> それをコンパイルして
0253252NGNG
そういう意味か・・・

標準入出力と環境変数にアクセスする機能があれば言語は問わない。
Cで書かれたものならもちろんコンパイルしないとだめ
0254251NGNG
>>252
確かにそういう意味かもしれんな...。

>>251 に補足するなら、サーバが許可してない形式のは実行できなかったと思う。
インタプリタ言語なら、もちろんインタプリタがサーバに置いてないと実行できない。
ホームでインタプリタを自前でコンパイルして使うという手もあるが...。
0255デフォルトの名無しさんNGNG
const struct ABC {int i;} a;
struct ABC b;

ってすると、なんで a しか定数にならないのー?
型限定子なのに
0256デフォルトの名無しさんNGNG
書き換え不能なstruct ABC型のaだからじゃない・・・
何がおかしいんだろ・・・
0257困った1 ◆tr.t4dJfuU NGNG
int findpos(char s[], int lim)
{
 int i;

 for (i = 0; s[i] != '\0' && i < lim; i++)
 {
  ;
 }
 if (i == lim)
 {
  while (i >= 0 && (s[i] == ' ' || s[i] == '\t'))/*�@*/
  {
   i--;
  }
 }

 return i;
}

�@の条件が常に偽になるのはなぜなのでしょう?
0258デフォルトの名無しさんNGNG
free()でsegmentation faultが発生するんですが考えられる原因は何でしょうか
0259デフォルトの名無しさんNGNG
>>258
・mallocで得た領域でない。
・既にfree済み。
0260デフォルトの名無しさんNGNG
const struct ABC {[?[struct]?] int i;} a;
0261困った ◆tr.t4dJfuU NGNG
「困った1」ではなくて「困った」でした。スマソ。
0262デフォルトの名無しさんNGNG
>>257
常に偽になるわけないでしょ。
findposに与える引数を工夫してみな。
0263デフォルトの名無しさんNGNG
>>259
それ以外にも、ポインタとかの使い方間違えてて、メモリ管理がぐちゃぐちゃになってるとか...。
0264デフォルトの名無しさんNGNG
>>230
>変数を後ろに宣言する何の必要があるのか?
関数でも変数でも定義や参照の後ろで宣言するのは意味無いし
0265258NGNG
>>259,263
1)でした...
静的に確保した領域を開放しようとしてました.
どうもありがとうございました.
0266デフォルトの名無しさんNGNG
>>255
それで正常です。
構造体の定義の部分に const をつけても、
その構造体変数を作ろうとした場合に const になるわけではありません。
定義の部分でついでに定義した構造体変数が const になるのです。

常に const になって欲しいんならこんな感じで。
typedef const struct __ABC {int i;} ABC;
ABC a = { 0 };
ABC b = { 5 };
0267困った ◆tr.t4dJfuU NGNG
>>262
ありがとうございます。
その方向で工夫してみます。
0268デフォルトの名無しさんNGNG
>>198
再帰関数を書いたときにauto変数であることを明示するために書いたことがある。
0269デフォルトの名無しさんNGNG
>255
>const struct ABC {int i;} a;
だと
const struct ABC a;
でって、ABCがconstになるわけじゃないですからね。
そもそも、型を定数にしてなんかいいことある?

あえてするなら
struct ABC {const int i;};
かな?

0270デフォルトの名無しさんNGNG
sizeof honyaraと、sizeof(honyara)って何か違いますか?
0271デフォルトの名無しさんNGNG
don't worry.
0272デフォルトの名無しさんNGNG
>>270
#define honyara honya + ra
後は自分で考えませう
0273デフォルトの名無しさんNGNG
>>269 です。
んー、簡単なプログラムかいて、色々実験してみたんだけど、
結果は、同じになります。
あんまり悩む事じゃないのかな??
0274デフォルトの名無しさんNGNG
>>272
それは、そんな定義する奴の方が悪いと思うけど。
0275デフォルトの名無しさんNGNG
>>273
じゃ↓を試してみ
#define honyara 7 + 11
printf("%d\n",sizeof honyara );
printf("%d\n",sizeof(honyara));
0276デフォルトの名無しさんNGNG
型に対してsizeofするときは括弧が必要なんじゃなかった?
0277デフォルトの名無しさんNGNG
>>274
それは同意だが、>>270は、何が違うのか聞いてるので…
0278デフォルトの名無しさんNGNG
>>277
だからと言ってそんな変な例を出してどうする。

sizeof 単一式
sizoof(型名)

と言うだけのことだろ。規格書ぐらい読めよ。
0279デフォルトの名無しさんNGNG
>>275さん、どうもです。
なるほど、この場合だと結果は違いますね。

自分の環境だと、
printf("%d\n",sizeof honyara );
これは、15になって、
こちらは、
printf("%d\n",sizeof(honyara));
4になりました。

後者は、sizeof(int)をあらわしてると思うのだけど、
前者はなんだろう?
うーむ、、、、考え中...
0280デフォルトの名無しさんNGNG
>>278
>sizoof(型名)
>規格書ぐらい読めよ。
プッ
0281デフォルトの名無しさんNGNG
>>279
型名に()が必要と言うのは
#define honyara int
や
typedef int honyara;
の場合
0282デフォルトの名無しさんNGNG
>>278
そうか?俺は勉強になる良い例だと思うが・・・

ところで単一式なんて単語定義されてたっけ?
0283デフォルトの名無しさんNGNG
>>279
sizeof 7 + 11 は ( sizeof 7 ) + 11
sizeof( 7 + 11 ) は sizeof( 18 )
で、あなたの環境の場合 sizeof 7 も sizeof 18 も4だったって事
0284デフォルトの名無しさんNGNG
>>281
つまり、一般的には(typedefしない時などは)、両者は同じであるというわけですか?

正直、わかったような、わからないような。
なんだか釈然としないですょ。
0285デフォルトの名無しさんNGNG
>>283
なるほど!
非常によくわかりました。

カッコつけることで、優先順位あげてるわけか。
理解しますた。
みなさん、どうもありがとうございました。
0286デフォルトの名無しさんNGNG
>>284
いつでも括弧をつけていれば間違いない。
俺は変数に対してはあまり括弧をつけないけど・・・
0287デフォルトの名無しさんNGNG
>>284
要は、honyaraの正体を知ってる時は、どっちを使っても構わないが
honyaraの正体を知らない時は()使えって事
また、honyaraの正体を知ってても変更する(される)
可能性がある場合も()使えって事
0288デフォルトの名無しさんNGNG
俺はいつもつけるようにしてるな、
つけないとワードとワードが2つ連続して並んじゃってなんか居心地が悪い

hage + sizeof hoge + huge
        ↑ここに何も無いのがキモイ
0289デフォルトの名無しさんNGNG
ところで
sizeof(i++)
のように、変数を変化させる事を書いた場合の
ふるまいって、どうなってるの?
0290デフォルトの名無しさんNGNG
sizeofの中味は評価されないんじゃなかった?
i++の型だけが使われて、iの値は変化しないと
0291デフォルトの名無しさんNGNG
>>289
変数の大きさに変数の中身は関係ないんじゃ?
0292291NGNG
ああ、i++が実行されるかどうかということか。
どうだろ・・・
0293289NGNG
手持ちのコンパイラは全て変化しないけど
これが、保証済みだったら良いけど
未定義や処理系定義だったら怖いでふ…
まぁ
#define i j++
とかアホな宣言しなければ良いんですけどね…
0294デフォルトの名無しさんNGNG
C++/C99の規格では、(C99の可変長配列を除いて)オペランドは評価されない。
となってる。
0295デフォルトの名無しさんNGNG
#include<stdio.h>
main()
{
putchar(126);
}

だと ~ が表示される.(~のコードが126だから)
しかし 。 のコードは130のはずなのに,

#include<stdio.h>
main()
{
putchar(130);
}

と打っても結果が表示されません.これに関して,130〜159までが表示されないみたいなんですが,なぜなんでつかー??おせーてくらさい.
0296デフォルトの名無しさんNGNG
130のコードが'。'では無かったから
0297デフォルトの名無しさんNGNG
>>295
isgraph()で調べてみたら。
スペース以外の表示可能文字なら0以外を返す。
0298デフォルトの名無しさんNGNG
>>295
。 は 161(0xA1) だと思います。

129(0x81) 〜 159(0x9F) はSJISでは2バイト文字用の
文字コードなので、単独では何も表示されません。
0299デフォルトの名無しさんNGNG
putchar はコードを文字に変換出力しますが,その逆(文字をコードに)をしてくれる命令はありますか??
0300296NGNG
誰も突っ込んでくれない…鬱
0301デフォルトの名無しさんNGNG
勉強になります.ここはレベル高杉ですね
0302デフォルトの名無しさんNGNG
ぼけのレベルがですか?
0303レゴ其の二NGNG
助けて下さい。
#include <iostream.h>
#include<stdio.h>

void main()
{
FILE *fp;
fp=fopen("素数−実行結果.txt","a");
int i, j ,f,n=1000,c=0;
// 1から1000までの数の素数を求める
// i, jはループ変数
// fは一回でも割り切れたら1。
// 一度も割り切れなかったら0。
for(i = 2; i <= n; i++) // i(==2,3,4,..,1000)について調べる。
{
f = 0;
for(j = 2; j < i; j++) // j(==2,3,...,i)で割ってみる。
{
if(i % j == 0) // あるjで割り切れたらfは1。
f = 1;
}
0304レゴ其の二NGNG
if(f == 0){// iを割り切るjがなかった場合
cout << i << "は素数です。" << endl;
c++;
}
}
printf("%d個です。",c);
}

素数を表示するプログラムなんですが、
実行結果をテキストファイルに出力するにはどうしたら良いですか?
教えて下さい。御願いします。
ちなみに、コレを実行しても、作成されたテキストファイルは白紙になってしまいます。

0305デフォルトの名無しさんNGNG
>>299

printf( "A=0x%02x\n", 'A' ) ;
0306デフォルトの名無しさんNGNG
てっとり早くやるなら、そのプログラムの名前をtestとしたら、
test > hoge.txt
ってしたら、いいんじゃねーか?
面倒くせーから、まともなやりかたは、他の人に聞いてくれ。
0307デフォルトの名無しさんNGNG
>>303-304
お前最悪。
マルチポストかよ。

氏ね。
0308レゴ其の二NGNG
実行結果をテキストファイルに出力する仕方を教えて下さい。
御願いします。
なかなかうまくいかないんです。
0309デフォルトの名無しさんNGNG
マルチポストなのでIP抜いて通報しますた
0310レゴNGNG
マルチポストってなんですか?
0311デフォルトの名無しさんNGNG
>>310
複数のスレッドに同じことを投稿する違法行為。
知らなかったじゃ済まされないのが犯罪。
0312レゴNGNG
すいません。
いえ、あちらの方に、MFC限定と書いてあったので、
書き込んだ後で、違うかも知れないと思って、こっちに来たんです。
だから、他には投稿してないです。
0313デフォルトの名無しさんNGNG
ム板はやたらスレが細分化されてるからなあ。
マルチポストと移動の違いが分からない罠。
0314デフォルトの名無しさんNGNG
>>312
ならそう書けよ……
0315レゴNGNG
迷惑掛けてしまったみたいで恐縮なんですが、
どうしたら、うまくテキストファイルに出力できるか、
教えて下さい。御願いします。
0316デフォルトの名無しさんNGNG
>>312
マルチポストが何故いけないのかちゃんと調べておこうな。

>>313
移動はちゃんと移動したと書いてある。
マルチポストと勘違いされるのを防ぐのにな。
0317名無しさん@3周年NGNG
「レゴは
 素直に
 単位を
 落とせ。」
0318デフォルトの名無しさんNGNG
向こうにレス付いてたよん。
0319デフォルトの名無しさんNGNG
>>312
>書き込んだ後で、違うかも知れないと思って、こっちに来たんです。
1、書き込む前に確認する
2、移動する時は、必ず、移動すると元スレに書き込んでから移動する
以上、基本ですので憶えて置きなはれ

追記
反省してるならMFC限定スレにも謝っておく事
0320デフォルトの名無しさんNGNG
>>303
それは C++ だが、ここは 「C 限定」 なんだよな。
0321レゴNGNG
316>>
はい、分かりました。

317>>
単位というか、研究室に入れなくなってしまうんです。

0322レゴNGNG
fprintfの使い方分かる方、教えて下さい。
0323デフォルトの名無しさんNGNG
>>322
>>1読んだ?
0324レゴNGNG
読んだんですけど、C言語というと、C++も入ってるんですかね?
違うけど、言葉的に入ってると思ったんですが。違うのでしょうか?
間違ってたら、すいません。
0325レゴNGNG
FILE *fp,*fc;
fp=fopen("素数−実行結果.txt","w");
int i, j ,f,n=1000,c=0;
// 1から1000までの数の素数を求める
// i, jはループ変数
// fは一回でも割り切れたら1。
// 一度も割り切れなかったら0。
for(i = 2; i <= n; i++) // i(==2,3,4,..,1000)について調べる。
{
f = 0;
for(j = 2; j < i; j++) // j(==2,3,...,i)で割ってみる。
{
if(i % j == 0) // あるjで割り切れたらfは1。
f = 1;
}
if(f == 0){// iを割り切るjがなかった場合
cout << i << "は素数です。" << endl;
c++;
}
}
printf("%d個です。",c);
fc=fclose("素数−実行結果.txt","w");
と入力したのですが、エラーが出てしまいました。
0326デフォルトの名無しさんNGNG
>>324
はっきり言われないとわからないか。
>>1 の 2 行目は呼んだか?

あと、C と C++ は全然別言語だ。
0327レゴNGNG
fprintfを使った方が簡単に出来るのですか?
もしかして、両方使わないといけないんですかね?
0328レゴNGNG
326>>
はい。
自分で色々調べたり、先輩に聞いたんですけど、
ここまでしか分からなくて。
本当に頭悪くて、すみません。
0329レゴNGNG
それでは、失礼します。
0330デフォルトの名無しさんNGNG
>>328
まずfopenとfprintfとfcloseの使い方をおぼえたほうがいいな。

なんでfpにファイルをオープンしたポインタを代入してるのにcoutに出力してんだ?
fpをまったく使わない時点でおかしいと思わないのか?
0331レゴNGNG
えっ?
fpに出力ですか?
coutは、使わないんですかね?
初めに素数を表示するプログラムが完成した後で、
テキストファイルに出力出来るようにしようとしたので、
分からなくなったんです。
ちょっと、いじってみます。
0332デフォルトの名無しさんNGNG
C++相談室 part14
http://pc3.2ch.net/test/read.cgi/tech/1041328679/l50

こっちに来れば俺が懇切丁寧に教えてやるが
0333デフォルトの名無しさんNGNG
>>330
優しいね…
>>331
C++として組みたいならXXstream使え(XXは自分で探せ)
何が簡単で、何が簡単ではないかは、使う人の考え方次第
それにネットで検索すればfprintf()の使い方なんて簡単に見つかる
そして、ルールは守れ。
何処で聞けば分からなければ、この板のルールの↓を守って
>あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。
http://pc3.2ch.net/test/read.cgi/tech/1043159083/
に書きこんでれば、一発で誰かが答えてくれる問題だった
まぁ、今更書いたところで、答えてくれる香具師がいるかは分からんが…
取り敢えず、>>330が付き合ってくれてるので
Cに直した答えを教えてくれるかも知れないが
C++にしたいのなら明日あたり↑のスレで聞いてみ
0334333NGNG
>>332
今日は優しい人が多いね…
0335デフォルトの名無しさんNGNG
いつからレゴはC++になったんだ?
0336デフォルトの名無しさんNGNG
>>335
>>303 の 「助けて下さい。」 のすぐ次の行から。
0337330NGNG
>>333
いやま、スレ違いだし、ヒント以上を出すつもりはないんで(w
引き取ってくれるスレがあることだし、この辺で。
0338233NGNG
>236 >238 >245サソ
アリガ�dございますた。

アドバイス頂いておいて何なんですが、
正直strchrを使って"#"以降を弾くのかわかりません。。。
ほんと糞厨ですみませんが、もう少し
5教授頂きたく思います。
お手数お掛け致しますが宜しくお願い致します。
0339デフォルトの名無しさんNGNG
C言語の、多分基礎のところだと思うんですけど質問します。

int AAA = BBB != CCC ? DDD:EEE ;

この1行を要約すると、

if( BBB==CCC ) int AAA = DDD ;
else int AAA = EEE ;

ということでよろしいのでしょうか?
0340デフォルトの名無しさんNGNG
int AAA;
if( BBB!=CCC ) AAA = DDD ;
else AAA = EEE ;
0341339NGNG
>340さま
ありがとうございました。m(__)m
0342デフォルトの名無しさんNGNG
>>338
1. 一行読み出す
2. #の位置を探す
3. 見つかれば、そこまでを書き出す
4. 見つからなければ、全部書き出す

でできます。
一文字ずつ読み出す場合はこういうことできないんですけどね。
一文字ずつ読み出すと何度も読み出し作業があって遅くなるので、
一度にある程度読み出すことが多いです。

まぁ、一文字ずつ読み出す場合であれば、
isdigit とかの関数を使わずに
'#' かどうか判定するのが一番真っ当なやり方でしょうね。
0343超初心者NGNG
C言語の長所と短所を教えてください。
0344デフォルトの名無しさんNGNG
>>343
長所: 簡潔であること。
短所: 簡潔すぎること。
0345338NGNG
>342サソ
アリガ�dございます

相変わらず糞厨なもので。。。
3. 見つかれば、そこまでを書き出す
4. 見つからなければ、全部書き出す
上記3.4のコーディング方がわかりませぬ・・・
まじオワッテルって感じなんですけど、
御教授願いたく再度ペコーリでございます。
0346デフォルトの名無しさんNGNG
>>345
3. 位置の差を使って fwrite
4. fputs
何で分岐するかは strchr のヘルプを見れば分かるはず。

fgets で一行読み出そうとしても、
バッファが小さいと一度に一行全部読み出せるとは限らないので、
その対処をする必要があります。
全部読み出せたかどうかは最後が改行かどうかで分かります。

具体的な形については、全部自分でやってください。
0347246NGNG
>>345
>>246じゃだめ?確認していないけど。
一行読んだものを格納するバッファとは別にもうひとつバッファをつくってそこにsscanf
0348デフォルトの名無しさんNGNG
>>346
位置の差を取るくらいならstrcspnを使えばいいじゃん
0349デフォルトの名無しさんNGNG
'#'を探して見つかったらその位置とその次に'\n'と'\0'を置く。
0350デフォルトの名無しさんNGNG
行バッファなんか要らないじゃん。
fopen(fpin=入力、fpout=出力)
while(!feof(fpin)) {
fgetc(cに1文字読む);
if(c=='#') {
fputc('\n',fpout);
while(!feof(fpin)) {
fgetc(cに1文字読む);
if(c=='\n') break;
}
}
else {
fputc(cの1文字を書き込む,fpout);
}
}
両file close
exit(0);
0351デフォルトの名無しさんNGNG
次スレ
http://pc3.2ch.net/test/read.cgi/tech/1042640474/l50
0352デフォルトの名無しさんNGNG
>>351
氏ね
0353山崎渉NGNG
(^^)
0354デフォルトの名無しさんNGNG
山崎渉も氏ね
0355故・山崎渉NGNG
(××)
0356デフォルトの名無しさんNGNG
>>355
ワロタ
0357 NGNG
C言語が全然分かりません(>_<)
どうしたらいいですか(>_<)
0358デフォルトの名無しさんNGNG
ほうじ茶を飲むといいですよ (-:
0359 NGNG
C言語でほうじ茶のプログラムを書く方法を教えてください(>_<)
0360 ◆nonoGOIeGg NGNG
         /
∋8ノハヽ8∈ | 
  ( ´�D`) < こーするのれす
          | 

printf("ほうじ茶のプログラム");
0361デフォルトの名無しさんNGNG
C言語でいい参考書ありませんか?やさしいCとC言語スタートブックは読んだのですが
次になにを読めばいいのか迷っています、それともはやめにC++の方に移った方がいい
のでしょうか?
0362デフォルトの名無しさんNGNG
>>361
こちらへどうぞ
http://pc3.2ch.net/test/read.cgi/tech/1041595397/l50
0363デフォルトの名無しさんNGNG
>>362
ありがとう
0364デフォルトの名無しさんNGNG
ど素人な質問でスミマセン。
ファイルから1バイトおきにデータを読み込みたいのですがうまくいきません
なぜこれではダメなのでしょうか?

FILE *fp;
char ch;
.......

while(!feof(fp)){
ch=fgetc(fp);
putchar(ch);
fseek(fp, 1L, SEEK_CUR);
}
0365デフォルトの名無しさんNGNG
FILE *fp;
char ch;
.......

while(!feof(fp)){
ch=fgetc(fp);
putchar(ch);
fgetc(fp);
//fseek(fp, 1L, SEEK_CUR);
}
0366デフォルトの名無しさんNGNG
> while(!feof(fp))

終了条件がこれはマズイだろ。
0367デフォルトの名無しさんNGNG
文字を数値に変えるのはatoiとわかりました。
数値を文字に変えるのはitoaですか?
0368デフォルトの名無しさんNGNG
はい
0369デフォルトの名無しさんNGNG
aprintf()
0370369NGNG
間違い。
sprintf()
0371デフォルトの名無しさんNGNG
>>364
fgetc の戻り値で終わってるかどうか確かめましょう。
また、fgetc の戻り値は int なので int で受け取りましょう。
0372MSDNのサンプルから引用NGNG
FILE *stream;
char buffer[81];
int i, ch;
................

/* 最初の 80 バイト文字を読み出し、"buffer" に格納します。*/
ch = fgetc( stream );
for( i=0; (i < 80 ) && ( feof( stream ) == 0 ); i++ )
{
 buffer[i] = ch;
 ch = fgetc( stream );
}
...................
037334NGNG

1週間位前から、snprintfを実装してた者です。
本日作成終了しました。とりあえず感想等を書いてみます。

文字列フォーマット後のサイズを計算して、
オーバーフローしないなら、
内部でvsprintfを呼ぶ様に実装しました。
でも、何箇所か精度の甘い部分が残りました。
変換指定子g,Gはeかfのどちらかに変換されるらしいけど、
どちらに変換されるか判らないからサイズは大きい方で
計算したり、フラグ#は最小フィールドが指定された時には、
サイズがフィールド幅足す2なのか、最小フィールド幅内に含めるのか等

他の人には簡単なのかも知れないけど、
私には難しかったです。そしてめんどくさかった。
0374デフォルトの名無しさんNGNG
strtok使ってみたら?
0375名無し@沢村NGNG
>>373
ヌヒよ、それは実装とは言わないぞ。
ヌヒよ、それは単に作成というぞ。それは単なる関数だからな。
ヌヒよ、実装というのは関数ではなくインターフェイスを定義することだ。
0376デフォルトの名無しさんNGNG
>>372
なんでfread使わないんだろう…
0377デフォルトの名無しさんNGNG
実装って、定義されたインターフェイスに対して
実際の処理内容を与えることじゃないの?
0378デフォルトの名無しさんNGNG
>>376
CRLF -> LF
0379378NGNG
勘違いした。
0380デフォルトの名無しさんNGNG
>>375
377 の言う通りだ。
お前それじゃ、本物の沢村より DQN だぞ。
0381デフォルトの名無しさんNGNG
>>380
>>375が本物であるかも知れない罠
0382デフォルトの名無しさんNGNG
>>381
本物ならあんな文の書き方しないよ。
修行が足りないね。
0383ひとりでぷよぷよNGNG
1 6
2 7
3 8
4 9
5 10
↑これを
(a=1;a<6;a++){
(b=a;b<=10;b+=5)
printf("%d",b);
printf("\n");

こうじゃなくて12345と数字の順番に表示させていくにはどうしたらいいですか
0384デフォルトの名無しさんNGNG
>>386
聞く前に動くコードを出せ
0385デフォルトの名無しさんNGNG
>>383
printf("12345\n678910");
0386デフォルトの名無しさんNGNG
>>383
何をやりたいのか見当がつかん。
どういう出力結果が欲しいんだ?
0387386NGNG
>>384
ごめん、コードはまた今度な。
0388 NGNG
>>386
俺が思うに、1 6\n2 7\n3 8・・・と表示してゆくのではなく、
1から5までを表示したあとに一番上の行間で戻って少し右にずらし6から10までを表示したいんだと思う。
0389388NGNG
× 行間で
○ 行まで
0390ひとりでぷよぷよNGNG
1 6
2 7
3 8
4 9
5 10
↑これを
#include <stdio.h>
int main(void){
int a,b;
for(a=1;a<6;a++){
for(b=a;b<=10;b+=5)
printf("%3d",b);
printf("\n");
}
}
こうじゃなくてああ
0391デフォルトの名無しさんNGNG
1 6
2 7
3 8
4 9
5 10
↑こういった出力結果が欲しいだけなんか?
だったら
int i;
for (i=1; i<=5; i++)
 printf("%d %d\n", i, i+5);
これでええやん。
0392388NGNG
>>391
それだと1 -> 6 -> 2 -> 7という順で表示されるから嫌なんだと思う。
カーソルを移動させるための関数が必要だな。標準にはない。
0393391NGNG
>>392
俺も当初そう思ったんだけど,
>>390を見る限り1 -> 6 -> 2 -> 7と表示させようとしてるような。
0394まさかこんなオチ?NGNG
1 2
3 4
5 6
7 8
9 10
0395388NGNG
>>393
「こうじゃなくてああ」と書いているから違うコードがほしいんじゃない?
0396デフォルトの名無しさんNGNG
エスケープシーケンス
http://kasai86.infoseek.livedoor.com/dos/esc.htm
0397391NGNG
>>395
あ, そっか。ごめん。
0398デフォルトの名無しさんNGNG
strtokはワークエリアが一つしかないので、だぶって使ったら
ダメだということです
0399デフォルトの名無しさんNGNG
なんの話だ
0400デフォルトの名無しさんNGNG
>>399
よう分からんけど、>>398の環境で
同一プロセス内のスレッドが複数ある時の話じゃないか?
0401デフォルトの名無しさんNGNG
「Java 謎+落とし穴」のp50参照
0402デフォルトの名無しさんNGNG
C言語って関数内関数が使えないはずですよね?
gccだと通っちゃうんですが。何故?
0403デフォルトの名無しさんNGNG
>402
gccが独自拡張してるからだYO!
-ansi -pedantic-errors
の、「ANSI準拠以外認めない」オプション付けたらエラーになる筈

ところで
>59、61
の掛け合いに激しくワラタんだが、
反応ないのをみるに、これって激しく既知のネタ?
0404デフォルトの名無しさんNGNG
Not Found.
0405デフォルトの名無しさんNGNG
>>403
知らなんだ。イイ! ね。
特に作業用の引数が必要な再帰関数使うときとか。
0406402NGNG
>>403
サンクス

というかなんで標準Cじゃ使えないんだよヽ(`Д´)ノ
スコープがちょっと違うだけだろうが!
0407デフォルトの名無しさんNGNG
配列の範囲チェックを省きたいんですけど、
こんなのありなんでしょうか?

struct aaa
{
int d1[10];
int data[10];
int d2[10];
};

aaa l;
l.data[-1]=1; //d1[9] //anti bad_alloc
l.data[-2]=222; //d1[8] //anti bad_alloc
0408デフォルトの名無しさんNGNG
>>407
添え字に負数入れてもコンパイラはエラー吐かないんだな。びっくりした
a[n] == *(a+n) と解釈されるから当然といえば当然か。
0409デフォルトの名無しさんNGNG
>>403
-pedanticまでつけなくてもいいんじゃないか?(笑)
以前試しにつけたら、//コメントはおろか標準にない関数をつかっただけでもエラーになった気がする。
0410デフォルトの名無しさんNGNG
>>407
C++使い?
0411デフォルトの名無しさんNGNG
>>406
>というかなんで標準Cじゃ使えないんだよヽ(`Д´)ノ
一見簡単そうだが、意外に厄介な問題が潜んでいるので・・・
0412デフォルトの名無しさんNGNG
>>411
まともな関数内関数の実装はスタックフレームにも影響あるからね。
C++やJavaのメソッド内クラスみたいな制限つきでも十分便利なのにな。
0413デフォルトの名無しさんNGNG
>>287
亀レスで悪いが...

> 要は、honyaraの正体を知ってる時は、どっちを使っても構わないが
> honyaraの正体を知らない時は()使えって事

と言うより、

#define honyara honya + ra

なんて宣言する奴が悪い。普通...

#define honyara (honya + ra)

って宣言するだろ。

>>280
規格書も読めないんだね。 ぷぷっ。
0414デフォルトの名無しさんNGNG
>>413
> #define honyara (honya + ra)

> って宣言するだろ。

このくだらないつっこみのために遅レスしたの?
0415デフォルトの名無しさんNGNG
>>413
> #define honyara (honya + ra)

> って宣言するだろ。

#define honyara ((honya) + (ra))
0416デフォルトの名無しさんNGNG
>>414
>このくだらないつっこみのために遅レスしたの?
規格書を読んでいた為ではないかと。
0417デフォルトの名無しさんNGNG
>>414
あんたの意味なし煽り突っ込みよりマシかと。

>>415
趣味の差かと。
念には、念を入れると言う考え方もあるけど、俺はマクロ側で () 必須にするのが好み。

>>416
それもあるが、毎日 2ch 見てるわけじゃないし...。
0418デフォルトの名無しさんNGNG
>>417
>俺はマクロ側で () 必須にするのが好み。

#define a(b) (b * 5)
printf("%d\n", a((4 + 8)));

という意味だったら死刑。
0419デフォルトの名無しさんNGNG
>>418
まあ、話の流れからわかるでしょ ?

「マクロの定義側で」と書いた方がいいか...。
0420デフォルトの名無しさんNGNG
>>417
煽ったつもりはないですけど。
煽っているのは>>413の方でしょ。
0421デフォルトの名無しさんNGNG
>>420
これ (=このくだらないつっこみのために遅レスしたの?) 書いといて...

> 煽ったつもりはないですけど。

と来たか...。

>>413 で煽りがないとは言わんけど、>>280 は見てんのかなぁ。
0422デフォルトの名無しさんNGNG
>>421
驚いたので感想を書いただけです。
亀レスでなければ驚きもしないですけど。
くだらないという表現がまずかったでしょうか。
0423デフォルトの名無しさんNGNG
>>422
> 驚いたので感想を書いただけです。

マジなのか、ネタ (だと思いたいが) なのかわからんけど。
まああんたみたいな奴も世の中にはいるということはわかった。

> 亀レスでなければ驚きもしないですけど。

自分で亀レスって書いといてなんだけど、2日と17時間ぐらいが、驚くほど亀レスか ?
君と違って、毎日 2ch 見てる香具師ばかりじゃないんだよ。

> くだらないという表現がまずかったでしょうか。

相手に対して、「くだらない」と言う表現がまずくない場合があるとでも思ってんの ?
0424デフォルトの名無しさんNGNG
2chだからね。
0425デフォルトの名無しさんNGNG
>407
1.構造体のメンバが宣言順にアドレス増加方向で並ぶのは保証されている
2.配列内の要素はアドレス増加方向で並ぶことが保証されている
3.アドレス演算は+で増加方向、-で減少方向が保証されている
だが、
4.構造体の中身が隙間無く並ぶことは保証されていない
に引っかかって誤動作することがあると思われ。

sizeof(int)=4,sizeof(short)=2として、
struct mix{
 short a[1];
 int b[1];
 short c[1];
};
だと、恐らくmix.c[-3] != mix.a[0]になると思う。
ただそれよりも何よりも、そんな危険な匂いのするコード個人的に嫌だw
0426デフォルトの名無しさんNGNG
>>423
あんな書き込みでは2日と17時間でも驚くよ。
大抵は思っても書き込んだりはしないんじゃないかな。
0427426NGNG
要は2日と17時間経ってからレスしたことに驚いたんじゃなくて、あんなレスを2日と17時間も経ったあとにしたことに驚いたということ。
0428デフォルトの名無しさんNGNG
>>426
ハイハイ、わかりました。
0429デフォルトの名無しさんNGNG
>>428
わかればいい。
0430デフォルトの名無しさんNGNG
二次元配列を引数にとるにはどうすればいいんですか?
int dat[100][100];
void func(int *param);
main(){
  func(dat);
}

のようにやっても、うまくいきません。
void func(int** param);でもだめでした。
教えてください。
0431デフォルトの名無しさんNGNG
-3じゃなく-4かもね、それ。
0432デフォルトの名無しさんNGNG
>>430
void func(int param[][100])
void func(int (*param)[100])

0433デフォルトの名無しさんNGNG
>>430

void func(int param[][100]);
0434デフォルトの名無しさんNGNG
ありがとうございます。
でもそれだと、要素数が100に限定されてしまいませんか?
0435デフォルトの名無しさんNGNG
>>434
限定される。
ポインタの指すものの大きさが分からないとだめだろ。
0436デフォルトの名無しさんNGNG
>>425
そもそも配列の範囲外へのアクセスは保証されないよ。

>>429
しつこい、お前等ウザイからどっか逝け。

>>430
void func(int param[][100])

多次元配列の最上位の次元以外の範囲は省略できない。
0437デフォルトの名無しさんNGNG
よくわかりました。どうもありがとうございました。
0438デフォルトの名無しさんNGNG
>>436

int data[100 +2], *p;
p = data +2;

とすれば、p[-2], p[-1] が有効に使えるね。
0439デフォルトの名無しさんNGNG
>>437
こうやればできる。

#include <stdio.h>

#define ELEMOF(array) (sizeof (array) / sizeof *(array))

void func(int* param, int n)
{
 param[n * 3 + 6] = 3; /* a[3][6] = 3;
}

main()
{
 int a[10][20];
 func(*a, ELEMOF(*a));
 printf("%d\n", a[3][6]);
}
0440デフォルトの名無しさんNGNG
あ、コメント閉じるの忘れてた。
 param[n * 3 + 6] = 3; /* a[3][6] = 3; */
0441デフォルトの名無しさんNGNG
それだと2次元配列の見易さや配列の大きさについての
情報が無くなるから・・
void func(int *param,int n){
/*nは1列の要素数*/
 *(param + 3 * n + 6) = 3;
}
と大差ないと思われ。
これなら通ることは恐らく>430も確認済みと思う。

関係ないが、関数の中にマジックナンバーを仕込むのは
サンプルコードでも止めて欲すぃ・・
0442デフォルトの名無しさんNGNG
>>278==413
>sizoof(型名)
>規格書ぐらい読めよ。
規格書読む前に、アルファベットの綴りを覚えろよ
0443デフォルトの名無しさんNGNG
>>442
typo ぐらいでがたがた言うな。
0444デフォルトの名無しさんNGNG
>>443
エラそーに能書きを垂れる時にミスったらアカンやろ
0445デフォルトの名無しさんNGNG
>>441
数字だと瞬間での同一性の確認が得られるから、
こういうサンプルではマジックナンバーもアリかと思って。

あと、もし第二要素数の異なる二次元配列を扱うのであれば、
それと大差ないのは仕方がないんじゃないかな。
まぁ、
#define INDEX2(n2, a, b) ((a) * (n2) + (b))
とかして
param[INDEX2(n, 3, 6)] = 3;
とでもすればいいかと。
もちろん要素数固定ならこんなことする必要ないんだけどね。
0446デフォルトの名無しさんNGNG
>>417
>>415 が趣味の差かよ!!
0447デフォルトの名無しさんNGNG
age
0448デフォルトの名無しさんNGNG
>>442
ルパーン お前をタイポする〜〜
0449デフォルトの名無しさんNGNG
>>448
タイポしてないじゃん
0450初心者NGNG
#include<stdio.h>
#include<stdlib.h>
int main (void){
int k,nsize;
int *pnVar;
printf("確保する大きさ");
scanf("%d",&nsize);
pnVar= (int *)malloc(sizeof(int)* nsize);
printf("%dバイトの領域を確保しました\n",4*nsize);
for(k=0;k<nsize;k++);
pnVar[k]=k*10;
for(k=0;k<nsize;k++);
printf("pnVar+%d=%p pnVar[%d]=%d\n",pnVar+k,k,pnVar[k]);
free(pnVar);
return 0;
}
何故かエラーがでます。
授業の板所を間違えて写してしまったのでしょうか
どなたか対処法をおねがいします。
マロック関数です
0451デフォルトの名無しさんNGNG
お前はその前に日本語を学びなおせ。
for文の後にいきなりセミコロンがあるが、それはどうなのよ?
0452デフォルトの名無しさんNGNG
↑お前ね、煽り方がふるくせんだよ。 ジジイかよ
0453デフォルトの名無しさんNGNG
Stack overflowと言うエラーは何ですか?
0454デフォルトの名無しさんNGNG
>>452
ヒソヒソ( ゚o゚)ヤダァ(゚o゚ )ネェ、キイタ?( ゚o゚)オクサン(゚o゚ )アラヤダワァ
0455木下NGNG
大学の研究でいきずまってるんですけど。助けてください。
まず仕事の数を入力して次に仕事の内容を入力して次に仕事別に分けたいのだけどどうしたらいいの?
ちなみに仕事は丸ブローチ加工、角ブローチ加工、キーみぞ加工の3種類です。
0456デフォルトの名無しさんNGNG
マロック関数ですか。
なんだか新鮮ですな。
0457デフォルトの名無しさんNGNG
>>455
バカ?
0458デフォルトの名無しさんNGNG
>455
質問が漠然としてるな
いまいちわからない
研究にかかわってない人間でもわかるように質問して
0459デフォルトの名無しさんNGNG
>455
マイコンで旋盤制御でもやるつもりか?
お手製のNC旋盤
0460デフォルトの名無しさんNGNG
>450
少しおちついて考えればすぐ解ると思うが、

for(k=0;k<nsize;k++);/* k が nsize になるまで空回り*/
pnVar[k]=k*10;/* ここでは k は nsize と同じ値になっている*/

となっている。
451じゃないが、for文直後のセミコロンはいったい何なんだと小3分ほど(w
0461デフォルトの名無しさんNGNG
>>450
intの大きさをsizeof(int)と書いているところもあれば4と決めつけているところもあるね。
あ、エラーとはなんの関係もないよ。
0462木下NGNG
include<stdio.h>

void main()
{
long sum=0;
short ten[10],i,n;

printf(“仕事数の入力(10個以内):”);
scanf(“%2d,&n);
for(i=0;i<n;++i){
printf(“%2d個目の仕事の入力:”,i+1);
scanf(“%s”,&ten[i]);
sum=sum+ten[i];
}
if(?){
printf(“丸ブローチ加工です。\n”);
}
}
ここで()のなかの条件式がわかりません。仕事の内容を入力する時にmと入力されれば
”丸ブローチ加工”です。と表示したいのです。初心者なのでよろしくおねがいします。
0463デフォルトの名無しさんNGNG
>>462
まずは全角のダブルクォーテーションをなんとかしろ。
次に、なんでshortに文字列を入れようとする?
0464木下NGNG
charにすればいいんですか?
0465デフォルトの名無しさんNGNG
>462
sumって何に使うの?
0466デフォルトの名無しさんNGNG
>>465
アムロの(ry
0467デフォルトの名無しさんNGNG
木下君のやりたいことを想像してみよう
0468デフォルトの名無しさんNGNG
>>467
オリンピックで金メダルを取ること。
0469デフォルトの名無しさんNGNG
下記のようなプログラムを作成中の厨房です。
/* int hoge */
while((hoge = fgetc(fpin)) !=EOF){
if(hoge=='#'){
fputc('\n',fpout);
while(!feof(fpin)){
hoge=fgetc(fpin);
if(hoge=='\n') break;
}
}
else {
fputc(hoge,fpout);
}
}

*fpoutの示すファイルにバイナリで書きこみたいので
fwriteを使いたいのですが、いまいち使い方が
わかりません。特にfputc('\n',fpout);のところです。
'\n'をどのように引数で渡せばよいのでしょうか?
糞みたいな質問で申し訳ありませんがよろしくお願い
致します。
0470デフォルトの名無しさんNGNG
>>469
http://www.bohyoh.com/CandCPP/C/Library/index.html
ここみろ
0471デフォルトの名無しさんNGNG
>>469
> fputc('\n',fpout);
fwrite(&'\n', 1, 1, fpout);
でも、1文字書き込みたいだけならfputcの方がいいと思うが...
0472デフォルトの名無しさんNGNG
>>471
> &'\n'
これはCなのか?
てか、"\n"でええやん。
0473デフォルトの名無しさんNGNG
>>453
スタックがオーバーフローするエラー。

スタックってのは
自動変数(関数内で普通に定義した変数)、
関数の引数、関数の呼び出し元のアドレスなどを
保存しておくところ。

オーバーフローってのは、容量オーバーすること。

つまり、
1. 自動変数が大きすぎる・多すぎる
2. 関数呼び出しが深すぎる
って時に起こるエラーです。
普通は再帰関数の終了条件が満たされなくなるようなバグがあったときか、
3次元以上の配列を確保したが予想以上に大きくなってしまった、という時に起こります。
0474サンコンNGNG
初心者で,数値計算[円周率]のプログラムをC言語でつくりたいのですが
何をしたらいいかわからず,何か参考になるネタはありますか?
0475デフォルトの名無しさんNGNG
>>474
http://www1.coralnet.or.jp/kusuto/PI/super_pi.html

これに似たものを作る
0476デフォルトの名無しさんNGNG
>>474
円周率を求める
http://www.kumei.ne.jp/c_lang/intro/no_48.htm
円周率πの計算
http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/p/pi.html
モンテカルロ法による円周率の計算
http://hp.vector.co.jp/authors/VA014765/pi/montecalro.html
0477デフォルトの名無しさんNGNG
>474
検索すればその手の例題は結構あります。
0478サンコンNGNG
みなさんありがとうございやす。
0479デフォルトの名無しさんNGNG
言うと殴られちゃうぬるぽってC言語のNULLのことじゃないんですよね??
0480デフォルトの名無しさんNGNG
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /<<479
0481デフォルトの名無しさんNGNG
ミナサン
ご回答ありが�dございます。

while((s = fgetc(ifp)) !=EOF){
if(s=='#'){
fwrite("\n", 1, 1,ofp);
while(!feof(ifp)){
s=fgetc(ifp);
if(s=='\n') break;
}
}
else {
fwrite (&s, 1, 1, ofp);
}
}
上記のように直したのですが
ファイルにはNULLしか入ってないっす・・・
まじ厨でもうしわけないのですが
ご教授お願い致します。
0482デフォルトの名無しさんNGNG
>>481
fwrite を使うか fputc を使うかで
バイナリかテキストかは切り替わらないので、
どっちを使っても問題ありません。

というか、
 fwrite (&s, 1, 1, ofp);
は危険な(環境依存な)コードなので
fputc 使って下ちぃ。
0483デフォルトの名無しさんNGNG
>>482サソ
ご丁寧な回答ありが�dございます。

fputcを使うべしとのことですが
fputcはバイナリで書きこむことが
可能なのでしょうか??
0484デフォルトの名無しさんNGNG
>>482
環境依存なの?
0485デフォルトの名無しさんNGNG
>>481
CPUはなんだ? なんとなくx86系じゃないような香りがする。
0486デフォルトの名無しさんNGNG
>>484
int型のs(多分fgetcを受ける変数なんでintなんだろう)を
*(char*)&s;
と評価したときの値は環境に依存するよ。
fwrite(&s, 1, 1, ofp);
なんてやってる場面はまさにそれ。
0487481NGNG
ぐぉーーなんか複雑だぁ。
CPUは・・・?よくわかりますぇん。。。
OSはUNIX、ソラリスであることは
間違いないっす。

fputcじゃーバイナリでカキコは無理なんで
しょうか・・・
0488デフォルトの名無しさんNGNG
>>487
するとsparcかな。エンディアンしらねえや(w
でも書いたファイルがヌルだらけという状況からいって、
ビッグエンディアンっぽいね。

ともかくその場面ではfwriteを使うんじゃなくて、fputcを使うべし。
fputcは文字をストリームに書く関数というよりは、
一バイトストリームに書く関数って感じなので、バイナリ書けるよ。
0489デフォルトの名無しさんNGNG
何か「バイナリ」という言葉を勘違いしている予感。
というか、何をしたいの?
#があるとその行のそれ以降のものを消すコード、
というのなら最初ので合ってるような気が。
0490487NGNG
>>488-499サソ
アリガトウゴザイマス

確かに漏れバイナリわかってません。。。
32#more
44#baka
nanoka #utsuda
↑こんな感じのテキストファイル読み込んで
(#以降はコメントの扱いとして省く)
バイナリでファイルに書きこむっていう
プログラムを作っています。

putcでバイナリで書きこめるのであれば
私の仕様でもダイジョウブなんでしょうか?
最近夢にバイナリが出てきます。
鬱です。
0491デフォルトの名無しさんNGNG
>>490
32 とか 44 とかをバイナリで書き込むんですね?
でも、nanoka とかバイナリもテキストもないと思いますが
どういう仕様にしたいのでしょうか。
0492487NGNG
>>491サソ
アリガ�dゴザイマス!

おっしゃる通りでして
"nanoka"はそのままカキコで
OKであります。

32やら44をバイナリで書きこみたい
のです。

ご教授お願い致します。
0493デフォルトの名無しさんNGNG
>>492
300get#300geto-
という場合はどうなんでしょう?

何にせよ、fgets で一行読み込んでから処理する方が楽な気がします。
0494デフォルトの名無しさんNGNG
age
0495492NGNG
>493サソ
fgetsのほうがよいですか。。。
while(fgets(buf, 256, ifp) !=NULL){
for(src=buf, dst=tmp; *src; src++){
if(*src == "#")
*dst++=*src;
}
*dst='\0';
こんな感じでいけますかねぇぇ。。。
0496デフォルトの名無しさんNGNG
atoi って知ってる?
0497デフォルトの名無しさんNGNG
aoiなら知ってる
0498デフォルトの名無しさんNGNG
ぬ★ぽなら知ってる
0499492NGNG
hoge = atoi(tmp);
でしか?
0500デフォルトの名無しさんNGNG
走査していって数字が見つかれば atoi、
見つからなければ1文字出力、
を続けていけばいいんじゃない?
0501デフォルトの名無しさんNGNG
>498 フセジ カコワルイ
0502492NGNG
>500サソ
500ゲトの暁にそのコード書いて
くださひ。。。
もうアタマがオーヴァーヒートして
だめぽ。。。
0503デフォルトの名無しさんNGNG
ヒント挙げすぎちゃったかなと思ってるくらいなのに...。
0504492NGNG
>>503
ソウナンデスヨネェ
まだC言語触って2週間なのに・・・
こんなん漏れに与えるヤシがおかすぃ。
ほんとおながいしますっ!
0505デフォルトの名無しさんNGNG
>>504 ほらよ。行数多すぎとか言われたんで入るように手を加えた。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char * argv[]) {
  char s[512], *p;
  FILE *ifp, *ofp;
  if (argc != 3) {
    fputs("usage: hoge <in> <out>\n", stderr);
    return 0;
  }
  ifp = fopen(argv[1], "rb"); ofp = fopen(argv[2], "wb");
  if (!ifp || !ofp) {
    perror(NULL);
    return 3;
  }
  while (fgets(s, sizeof(s), ifp)) {
    if (p = strchr(s, '#')) *p = '\0';
    else if (p = strchr(s, '\n')) *p = '\0';
    if (isdigit(*s)) {
      int i = atoi(s);
      fwrite(&i, sizeof(i), 1, ofp);
    }
    else
      fputs(s, ofp);
    fputc('\n', ofp);
  }
  fclose(ofp); fclose(ifp);
  return 0;
}
0506デフォルトの名無しさんNGNG
>>505
32 行までな。
0507デフォルトの名無しさんNGNG
どなたか文字列指数をdouble型へ変換する最も効率の良い方法しりませんか?

"3e-5" を 0.00003とする場合など。

お願いします!!
0508デフォルトの名無しさんNGNG
double a;
sscanf("3e-5", "%g", &a)
0509507NGNG
>>508
ものすごくあっさりできるのですね。
ちなみに反対の変換はfcvt()でOKでしょうか?
0510デフォルトの名無しさんNGNG
>>509
sprintf()
0511507NGNG
>>510
了解しますた。
ありがとうございました。
0512504NGNG
>505サソ・・・
ふぉんとにありが�dございます。
家に着いたらそこには宝があったよー!!
(゚д゚)ウマー(゚д゚)ウマー(゚д゚)ウマー
とりあえずケコーンしてくだはい。
0513504NGNG
あ、当方、29歳女、バツ2です。





・・・などとプロフィールを勝手に書いてみるテスト・・・
0514デフォルトの名無しさんNGNG
printfをラップしたいのだが、訳あってvprintfは使えないとき、
int myprintf(const char *format, ...){
 return printf(?????);
}
こんなことは出来ないよねえ。
可変個引数をとる関数とva_listをとる関数はセットで用意しておくべき物なの?
0515デフォルトの名無しさんNGNG
>>514
質問の趣旨がわからないんだけど・・・。
0516デフォルトの名無しさんNGNG
>>513
29じゃ、すでに女じゃないな
0517デフォルトの名無しさんNGNG
>>516
淑女です
0518デフォルトの名無しさんNGNG
質問なのですが、
文字をそのままにして計算させることは可能でしょうか?たとえば、
double a=1.2, b=2.3, c, d;
d=a+b+c;
で、“d=3.5+c”と計算させたいのです。
0519デフォルトの名無しさんNGNG
誰か教えてください!出来れば、leap=で始まっている2ヶ所を関数にしたいんですが、どうしたらいいでしょう?
そうじゃなくてもこれをもっと短くする方法ってありますかね?

#include <stdio.h>
main()
{
static int days_data[13]={0,31,28,31,30,31,30,31,31,30,31,30,31},Feb=28;
int i,days1,y1,m1,d1,days2,y2,m2,d2,leap,lapse,ydays;
printf("初めの年月日を入力してください : ");
scanf("%d %d %d",&y1,&m1,&d1);
printf("終りの年月日を入力してください : ");
scanf("%d %d %d",&y2,&m2,&d2);
leap=(y1%4==0 && y1%100!=0)|| y1%400==0;
days_data[2]=Feb+leap;
days1=d1;
for(i=1;i<m1;i++){
days1+=days_data[i];
}
leap=(y2%4==0 && y2%100!=0)|| y2%400==0;
days_data[2]=Feb+leap;
days2=d2;
for(i=1;i<m2;i++){
days2+=days_data[i];
}
ydays=0;
for(i=y1;i<y2;i++){
leap=(i%4==0 && i%100!=0)|| i%400==0;
ydays+=365+leap;
}
lapse=(ydays+days2)-days1;
printf("経過日数は%d日です\n",lapse);
}
0520デフォルトの名無しさんNGNG
>>514
printfのラップはなかなか難しい。
ttp://swig-jp.dyndns.org/doc1314-2/Varargs.html
0521505NGNG
>>513
一瞬ドキッとしたじゃねえかゴルァ(w
0522デフォルトの名無しさんNGNG
>>519
int isleap(int y1)
{
 return (y1%4==0 && y1%100!=0)|| y1%400==0;
}
0523518NGNG
放置??他スレで聞くYO!
0524デフォルトの名無しさんNGNG
>>523
2 時間もしないうちにそれを言うか?
可能か不可能かと言われれば可能だろうけど、自分でインタープリタ作る事になるよ。
0525デフォルトの名無しさんNGNG
>>519
元年1日(西暦)を1日(延べ日数)とした時の
西暦から延べ日数(i)への変換法(y=year,m=month,d=day)
if(++m<4)y--,m+=12;
i=365*y+y/4-y/100+y/400+306*m/10-428+d;
0526518NGNG
>524
書きこんだ時点では結構回転早そうだったので・・。
朝までにプログラム作る必要があったので急いでたのでつ。
他スレ逝って来ました。レスサンクスでした。
0527デフォルトの名無しさんNGNG
そろそろテストが始まるのでage
0528デフォルトの名無しさんNGNG
ヒロユキ氏ね 俺が、>>1のスレでプロキシー奇声すんな〜
     int
      ┏━━━━━┳━━━━━┳━━━━━┳━━━━━┓
char    ┃           ┃           ┃           ┃           ┃
      ┃     1     ┃     2     ┃     3     ┃     4     ┃
      ┃           ┃           ┃           ┃           ┃
      ┠─────╂━━━━━┻━━━━━┻━━━━━┛
      ┃           ┃
      ┃     2     ┃
      ┃           ┃
      ┃     3     ┃
      ┃           ┃
      ┃     4     ┃
      ┃           ┃
      ┗━━━━━┛
       列*
      ┏━━━━━┳━━━━━┳━━━━━┳━━━━━┓
行**   ┃  [0] [0]  │  [0]  [1]  │  [0] [2]  │  [0] [3]  ┃
      ┠─────┼─────┼─────┼─────┨
       ┃           │           │           │           ┃
      ┠─────┼─────┼─────┼─────┨
       ┃           │           │           │           ┃
      ┠─────┼─────┼─────┼─────┨
       ┃           │           │           │           ┃
      ┗━━━━━┷━━━━━┷━━━━━┷━━━━━┛
 
0529デフォルトの名無しさんNGNG
お前のせいでな〜大事なヒトと話できなかったんだYO!
       列*
      ┏━━━━━┳━━━━━┳━━━━━┳━━━━━┓
行**   ┃  [0] [0]  │  [0]  [1]  │  [0] [2]  │  [0] [3]  ┃
      ┠─────┼─────┼─────┼─────┨
       ┃  [1] [0]  │  [1]  [1]  │  [1] [2]  │  [1] [3]  ┃
      ┠─────┼─────┼─────┼─────┨
       ┃  [2] [1]  │  [2]  [1]  │  [2] [2]  │  [2] [3]  ┃
      ┠─────┼─────┼─────┼─────┨
       ┃  [3] [1]  │  [3]  [1]  │  [3] [2]  │  [3] [3]  ┃
      ┗━━━━━┷━━━━━┷━━━━━┷━━━━━┛




       列*
      ┏━━━━━┳━━━━━┳━━━━━┳━━━━━┓
行**   ┃  [0] [0]  │  [0]  [1]  │  [0] [2]  │  [0] [3]  ┃
      ┠─────┼─────┼─────┼─────┨
       ┃  [0] [4]  │  [0]  [5]  │  [0] [6]  │  [0] [7]  ┃
      ┠─────┼─────┼─────┼─────┨
       ┃  [0] [8]  │  [0]  [9]  │ [0] [10] │  [0] [11] ┃
      ┠─────┼─────┼─────┼─────┨
       ┃  [0] [12] │ [0] [13] │ [0] [14] │  [0] [15] ┃
      ┗━━━━━┷━━━━━┷━━━━━┷━━━━━┛

0530デフォルトの名無しさんNGNG
 折れが、作ったアスキーアートだ・・・。使ってくれ
0531詭弁の特徴のガイドラインNGNG
1:事実に対して仮定を持ち出す
    「犬は子供を産むが、もし卵を生む犬がいたらどうだろうか?」
2:ごくまれな反例をとりあげる
    「だが、時として尻尾が2本ある犬が生まれることもある」
3:自分に有利な将来像を予想する
    「何年か後、犬に羽が生えないという保証は誰にもできない」
4:主観で決め付ける
    「犬自身が哺乳類であることを望むわけがない」
5:資料を示さず自論が支持されていると思わせる
    「世界では、犬は哺乳類ではないという見方が一般的だ」
6:一見関係ありそうで関係ない話を始める
    「ところで、カモノハシが卵を産むのは知っているか?」
7:陰謀であると力説する
    「それは、犬を哺乳類と認めると都合の良いアメリカが画策した陰謀だ」
8:知能障害を起こす
    「何、犬ごときにマジになってやんの、バーカバーカ」
9:自分の見解を述べずに人格批判をする
    「犬が哺乳類なんて言う奴は、社会に出てない証拠。現実をみてみろよ」
10:ありえない解決策を図る
    「結局、犬が卵を産めるようになれば良いって事だよね」
11:レッテル貼りをする
    「犬が哺乳類だなんて過去の概念にしがみつく右翼はイタイね」
12:決着した話を経緯を無視して蒸し返す
    「ところで、犬がどうやったら哺乳類の条件をみたすんだ?」
13:勝利宣言をする
    「犬が哺乳類だという論はすでに何年も前に論破されてる事なのだが」
14:細かい部分のミスを指摘し相手を無知と認識させる
    「犬って言っても大型犬から小型犬までいる。もっと勉強しろよ」
15:新しい概念が全て正しいのだとミスリードする
    「犬が哺乳類ではないと認めない限り生物学に進歩はない」
16:反論の代わりに詭弁ということにしてすます。
    「それは詭弁です。いいから詭弁なんです。」
0532デフォルトの名無しさんNGNG
質問ですが、文字列

"\t\t\tABCD\t\t\t\t1234"

とあって、
char *buf1;
char *buf2;
sscanf("\t\t\tABCD\t\t\t\t1234\t\t","%s%s",buf1,buf2);

とするようなコーディングでbuf1にABCD、buf2に1234と入りますか?
他に簡単に格納する方法がありますか?
0533デフォルトの名無しさんNGNG
>>532
> buf2に1234と入りますか?

試してみればわかる。
0534533NGNG
sscanfを使う前に、mallocでも使って領域を確保しておけよ。
0535532NGNG
>>533
今コンパイラがなく、机上でコーディング考えてるんで…。
お願いします。
0536533NGNG
>>535
入るけど、>>534。
0537532NGNG
>>536
了解しました。
ありがとうございました。
0538 ◆vZrORbBkXs NGNG
#include <stdio.h>
main()
{
int y,m;
int c[13],d[13];
long z,n,k,r;
int kara,made,i;
printf("A.D. ");
scanf("%d",&y);
printf("Month ");
scanf("%d",&m);
printf("n");
printf(" SUN");
printf(" MON");
printf(" TUE");
printf(" WED");
printf(" THU");
printf(" FRI");
printf(" SATn");

d[1]=31; d[2]=28; d[3]=31;
d[4]=30; d[5]=31; d[6]=30;
d[7]=31; d[8]=30; d[9]=30;
d[10]=31; d[11]=28; d[12]=31;

0539 ◆vZrORbBkXs NGNG
if(((y%4==0)&&(y%100!=0))||(y%400==0))d[2]=29;
c[1]=0;
for(i=1;i<11;++i){
c[i+1]=c[i]+d[i];
}

z=y-1601;
k=z/4 - z/100 + z/400 +1;
n=365*z+k+c[m];
r=n%7;

kara = 1-r;
while(kara<=d[m]){
made=kara+6;
if (made>d[m])
made=d[m];
for (i=kara; i<=made; ++i){
if (i<=0)
printf(" ");
else
printf(" %5d",i);
}
printf("n");
kara+=7;
}
printf("nn");
}

これを修正して欲しいのですが(全部表示されない月があります)
0540 ◆vZrORbBkXs NGNG
事故解決しました

× d[10]=31; d[11]=28; d[12]=31;
○ d[10]=31; d[11]=30; d[12]=31;
0541デフォルトの名無しさんNGNG
man 2 openでopen関数について調べてみると、同名の関数がふたつ出てくるんですが、
Cでも関数のオーバーロードができるんですか?

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/open.2.html
0542デフォルトの名無しさんNGNG
>>541
Cでは、いわゆるオーバーロードはできません。
これは可変長引数。printfみたいな。
0543デフォルトの名無しさんNGNG
>>542
あーなるほど。可変個の引数ですか。
確かにfcntl.hでは三番目は...となっていますね。
flagsによって三番目の引数があるかないか判断しているのかな。

ありがとうございました。
0544超初心者の名無しNGNG
超超初心者です。
あるソフトのパッチを当てるのに
バイナリデータの変更で
0000E76A: 56 3b

と書いてあるのですがどういういみですか
0545デフォルトの名無しさんNGNG
>>544
本当に初心者ですね。
聞くべきスレッドを間違えるなんて。

スレ違いどころか板違いか。
0546超初心者の名無しNGNG
追記 
別のパッチでは 
004167: 10 00
とADRESS部分が6文字なのですが?
エデッターでどう入れればいいのでしょうか
0547デフォルトの名無しさんNGNG
エデッターって何ですか?
0548デフォルトの名無しさんNGNG
>>546
int main(void) {
FILE *fp;
fp = fopen("hoge", "w+b");
fseek(fp, 0x4167, SEEK_SET);
fwrite("\x10\x00", 2, 1, fp);
fclose(fp);
return 0;
}
0549デフォルトの名無しさんNGNG
30歳代。
会社員だと思っていたが、5万円程度でもう納得したい。
参加するためにはクレジットカード番号を入力したが、男性(約20万円)を購入する。そして、負けだと思っていた。
入金されるゲームということもあり、軽い気持ちでは解約できないし。
インターネット上でギャンブル。
どうすればよいか。
http://www.kokusen.go.jp/jirei/data/200112_3.html
0550デフォルトの名無しさんNGNG
可変個の引数を取る関数の中で、与えられた引数の個数以上に読むのはまずいですけど、
少なく読むのはかまわないですよね?
0551デフォルトの名無しさんNGNG
yes
0552 NGNG
超怒素人です。
�@のexeで取得した変数アドレスを
�Aのexeから入力して変数の値を取得したいのですがうまくできません。
何故でしょうか?

�@---------------------------------
#include<stdio.h>
int main(void)
{
int a;
long *pnt;
printf("数値を入力して下さい:");
scanf("%d",&a);
pnt = &a;
printf("変数のアドレス:%d\n",pnt);
printf("そのアドレスに格納されている値:%d\n",*pnt);
}
�A---------------------------------
#include<stdio.h>
int main(void)
{
int a;
long *pnt;
printf("変数のアドレスを入力して下さい:");
scanf("%d",&a);
pnt = a;
printf("そのアドレスに格納されている値:%d\n",*pnt);
}
0553デフォルトの名無しさんNGNG
ポインタ変数の値が別プロセスで有効な保証は無い、というかまず無効
0554デフォルトの名無しさんNGNG
どうしよう...共有メモリとかの概念とか
物理アドレスと仮想アドレスとかの概念を教えた方がいいのだろうか...
0555デフォルトの名無しさんNGNG
そもそも何がしたいんだろう・・・
0556550NGNG
>>551
ありがとうございました。
0557デフォルトの名無しさんNGNG
39という文字が書かれたテキストがあって
この場合の"39"って2バイトですよね?
これを1バイトの39にパックしろって
指令されたんですが、
1.パックってなんですか?
2.パックを実現する方法(関数等)
上記2つに関してご教授下さると幸いです。

以上、初心者ですが宜しくお願いします。

>>552って
printf("変数のアドレス:%p\n",pnt);
じゃダメなんすかね?
0558デフォルトの名無しさんNGNG
"39"という文字列を39という値にしろということだと思うけど・・・
atoi、strtol、sscanf

アドレスを手動で入力させるのってかなり無理がある。
0559558NGNG
1バイトならsscanfだと面倒か・・・intの変数に入れた後にcharの変数に入れ直さなければならないから。
0560デフォルトの名無しさんNGNG
fscanf(fp, "%2d", &inum);
は、いくらなんでも冗談として、

1の質問は指示した人間にするべきかと。
余りに一般的で汎用的な言葉だけに、
その相手がどんなつもりで「パック」と言ってるかわからん。
#尤も、「おまえそんなこともわからないのか」と言われる覚悟が必要だけど。
0561デフォルトの名無しさんNGNG
Packed BCDにしろって意味ではないかと。
一桁4bitで表現するので、0x39となる。
C言語の標準関数にはないです。

とはいえ、>>560 の言う通り一度確かめた方が確実。
0562デフォルトの名無しさんNGNG
>>561
パック十進数?
二桁なら12bit必要じゃない?
0563デフォルトの名無しさんNGNG
ありがとうございました。
0564デフォルトの名無しさんNGNG
成績処理プログラムの作り方を教えてください。できれば具体的に
プログラムを書いてくださるとありがたいです。
0565デフォルトの名無しさんNGNG
>>564

#include <stdlib.h>

int main(int argc, char **argv);

void getSeisekiData(void);
void calcHyouka(void);
void putKekka(void);

int
main(int argc, char **argv)
{
getSeisekiData();
calcHyouka();
putKekka();
return EXIT_SUCCESS;
}
/* それぞれの処理をこの後に書けば完成w */
0566557NGNG
>>558-562サソ
ご回答ありが�dです。
>>563
話しおわらさんといてや

int ENZAN (FILE *fp,char x,char y )
{
char z;
x&=0x0F;
x<<=4;
y&=0x0F;
z=x | y;
fwrite(&z, sizeof(z),1,fp );
}
↑こんな感じの処理をパックって
言うもんだと思ってました・・・
0567561NGNG
>>562
もっと詳しく説明してくれ。
昔にも、それBCDちゃうみたいなこといわれて、
調べ直したことがあったんだけど、
結局、どう解釈が違っているのかわからんかったんで。
0568564NGNG
>>565
ありがとうございます。
0569562NGNG
>>567
二桁で8bit、それに符号4bit、併せて12bit。
違うかな。
0570デフォルトの名無しさんNGNG
>>569=562
1バイトにパックってことだから、符合は考慮しないんでないの?
#寡聞にして、符号付BCDの実例を知らないんだけど。
0571デフォルトの名無しさんNGNG
・・すみません、これどうやるのですか?

キーボードをでたらめ出鱈目に打つとき、英字(A-Z, a-z)
、数字(0-9)、その他の文字の出現頻度を数えなさい。
Ex.) I am a student. Hello %Enter → a = 2, d = 1, e = 2

初心者であんまりわからないのですが
0572デフォルトの名無しさんNGNG
/* 取り敢えず、こんなもんでどうでしょ。 */
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char**argv);
int
main(int argc, char **argv)
{
int count[256];
int ch;

while (ch = getc() != EOF) {
count[ch]++;
}
/* 問題は出力方法 */
return EXIT_SUCCESS;
}
0573デフォルトの名無しさんNGNG
>>572
配列の0での初期化は?
0574デフォルトの名無しさんNGNG
GUIアプリケーションをLinuxで開発したいと思うんですが、
どんなライブラリを使えばいいんでしょうか?
どれがお勧めのライブラリなんでしょうか?
0575デフォルトの名無しさんNGNG
>>574
>>1 を読んでないだろ。
0576デフォルトの名無しさんNGNG
>>575
スマソ。別スレに逝きます・・・
0577572NGNG
>>573
あ、ぼけてた。
面倒だから
static int count[256];
で。
0578デフォルトの名無しさんNGNG
>>577
出力方法はこんなんでどうでしょ。

for (i = 0; i < 256; i++) {
 if (isprint(i)) {
  printf("%c: %d", i, count[i]);
 }
}
0579デフォルトの名無しさんNGNG
>>578
改行しないと醜いかと。
0580デフォルトの名無しさんNGNG
>>579
おー、忘れてたよ。
0581デフォルトの名無しさんNGNG
>>580
スレ違い。
0582580NGNG
ごめん、ちょっと書いてみたくなっただけ。
0583デフォルトの名無しさんNGNG
今ユーザー関数作成で困っております。
仕様:テキストファイルを読み込み
行数毎に異なった処理を行い
バッファにぶちこむ。

for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++)
上記のようにすれば行数は数えることが
可能ですよね?
int cntに代入された数値を利用し
switch (cnt){
case 1:
printf("(゚д゚)ウマー\n");
break;
case 2:
printf("(・A・)イクナイ\n");
break;
といった感じにしたのですが
cntを関数に引数で渡すにはどのように
すればよろしいのでしょうか?
初心者でご迷惑お掛けいたしますが
ご教授お願いいたします。
0584デフォルトの名無しさんNGNG
>>583
関数の定義の仕方がわからんということか?

void uma(int cnt) {
 switch (cnt){
 case 1:
  printf("(゚д゚)ウマー\n");
  break;
 case 2:
  printf("(・A・)イクナイ\n");
  break;
 }
}

とか定義しといて

for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++) {
 uma(cnt);
}

でいいんじゃないの。それともこういうことじゃない?
 
0585583NGNG
>>584さん
ありがとーございます!
なるほど、こうやって定義するんですねぇ。
勉強になります。

cntが1だったら
(゚д゚)ウマーが出力されるのか。
すげー。関数すげー。
関数(゚д゚)ウマー
0586デフォルトの名無しさんNGNG
forを
for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++)
という形で使えるやつが、

な ん で 関 数 定 義 が わ か ら な い ん だ ? !
0587デフォルトの名無しさんNGNG
>>586
for は極めたが関数定義はまだ習っていないか理解が不十分。
で充分説明つくじゃないか。
0588デフォルトの名無しさんNGNG
>>586-587
BASICからCに入ったので、(自分で定義する)関数というものを知らなかったに100ペリカ
したがって、mainはおまじないで、main以外の関数は一切なし。
しかもgotoを多用したスパゲッティプログラムだ!
0589デフォルトの名無しさんNGNG
Cから始めたけど、2000行程度なら関数はmainだけにするYO!
0590デフォルトの名無しさんNGNG
>>589
逝ってよし。
0591デフォルトの名無しさんNGNG
>>590
オマエモナー
0592デフォルトの名無しさんNGNG
>>591
そんな義理なし。
0593デフォルトの名無しさんNGNG
>>592
義理チョコしかもらえないんですか
0594デフォルトの名無しさんNGNG
義理チョコももらえませんが何か?
0595デフォルトの名無しさんNGNG
。・゚・(ノД`)・゚・。
0596デフォルトの名無しさんNGNG
int main(){
  //略
  return 0;
}

この最後に返してる0ってなんに使うの?
子プロセスとしてプログラム動かしたら
wait(&state)とかでstateに入る数値になるの?
0597デフォルトの名無しさんNGNG
>>596
そこまで予想がついてるのなら、wait()のmanを見ればすぐ分かるよ。
statusの値そのものじゃなくて、#include <sys/wait.h> で定義されるマクロ
WEXITSTATUS(status) の値がmainの戻り値になる。
0598でふぉるとのななしさんNGNG
Cでネットワークプログラミング勉強できるサイト教えてらさい
0599デフォルトの名無しさんNGNG
>>598
http://www.CdeNetworkProgramming.ne.jp/
0600デフォルトの名無しさんNGNG
http://www.agemasukudasai.com/bloom/
0601デフォルトの名無しさんNGNG
>>597
waitとか出てくるのスレ違いちゃうんか?
0602デフォルトの名無しさんNGNG
wait持ち出すんならvoid main()でもそれが直接問題になったりせん罠
0603デフォルトの名無しさんNGNG
>>596
main()からのリターン値でコマンドが成功したか、どうか判断する!
0604デフォルトの名無しさんNGNG
>>596
>この最後に返してる0ってなんに使うの?

結論から言う、それはあんたが決めることだ

さもないとあんたの書いているアプリを使いに来る者
全員に聞いてまわる羽目になる
0605デフォルトの名無しさんNGNG
二次元配列p[3][10]のポインタって
*p[3]?*p?
0606デフォルトの名無しさんNGNG
それの先頭を指すポインタなら、(*p)[10]
0607デフォルトの名無しさんNGNG
p+1はp[1][0]になる?
0608デフォルトの名無しさんNGNG
>>607
p[1]になる。
0609608NGNG
違う違う。*(p+1)がp[1]になる。
0610608NGNG
p+1なら&p[1]だ。
0611デフォルトの名無しさんNGNG
p[1][1]は何になる?
0612デフォルトの名無しさんNGNG
pの型をTとするならT&だな
0613デフォルトの名無しさんNGNG
p+1はp[1]だろ
0614デフォルトの名無しさんNGNG
p[0]+1 は &p[0][1] ?
0615デフォルトの名無しさんNGNG
sizeof(p[0])+p
0616int no_nameNGNG
いきなりですが、携帯電話(ちなみにJ-phone)で見れる関数リファンレ
ス(というか簡単な文法)のサイトあれば教えてもらえませんか?
0617デフォルトの名無しさんNGNG
>>616
カンニング野郎晒しage(W
0618デフォルトの名無しさんNGNG
>>616
携帯電話で開発するのですか?
0619int no_nameNGNG
>>617
15年前は自分で考えたよ。

>>618
「例のtelnet」てシェルにもアクセスできるの?
0620デフォルトの名無しさんNGNG
man の内容を加工して表示する CGI を作るとか...。
0621int no_nameNGNG
>>620

深よみしすぎ(苦笑
オレはman読む方が早い。

昔と違って時間がないの!(笑
0622デフォルトの名無しさんNGNG
>>621
プロトタイプだけまとめて自分宛にメールしたら?
0623int no_nameNGNG
>>622

いいこと言うねェ。

なぜオレがそれをやらないか(笑
これは時間がないわけじゃない。
0624デフォルトの名無しさんNGNG
ノノノノ
( ゚∋゚) ハッ!
0625デフォルトの名無しさんNGNG
http://rec.ncos.co.jp/cgi-bin/errorfrmC.cgi?0

どう?
0626デフォルトの名無しさん NGNG
http://www.belution.com/miwaki/developer/lsic86.shtml
のインストールのステップ3の方法が分かりません
0627デフォルトの名無しさんNGNG
>>626
無理せずにVisual C++ .NETを買いましょう。
0628デフォルトの名無しさんNGNG
■ Step 3 : autoexec.batの書き換え
これか?
今autoexec.batなんか使わないだろ
2000やxpならシステムのプロパティでPATHを設定する



0629デフォルトの名無しさんNGNG
これだ
http://www.lsi-j.web.sh.cwidc.net/product/lsic/2000inst80.html
0630デフォルトの名無しさんNGNG
>>625
左側にある
2482 [e161]char は遅い
のリンク先
解説の
「普通の人の処理時間 370msec」って何?
悪いけど、笑ってしまいました。
0631デフォルトの名無しさんNGNG
>>630
上のプログラムのコメントを見れ。
0632デフォルトの名無しさんNGNG
次のようなソースをmain文と一緒に書いてコンパイルして実行すると
「このプログラムは不正な処理を行ったので強制終了されます。」
といじめられます
それともただ単に僕がバカなだけなんでしょうか?
void shell_sort(int *array,int num)
{
int i,j,h;
int val;
num-=1;
for(h=1;h<=num/9;h=3*h+1)
;
for(;h>0;h/=3)
{
for(i=h;i<num;i++)
{
val=array[i];
for(i=i;j>=h&&array[j-h]>val;i-=h)
{
array[j]=array[j-h];
}
array[j]=val;
}
}
}
ご教授願います
0633デフォルトの名無しさんNGNG
>>632
配列の範囲を超えて書き込んでいないか調べる。
0634632NGNG
>>633
if(array[num]!=NULL)
{
printf("領域破壊");
array=NULL;
exit(1);
}
みたいなカンジでOKですか?
0635デフォルトの名無しさんNGNG
>>634
arrayの要素はintなのになぜNULLと比較する?
なぜarrayにNULLを代入する?

調べるってのは自分の頭を使って調べるんだ。
0636632NGNG
>>635
ごめんなさい
自分の中で「領域外の要素=NULL」だと思っちゃってるんで
もし領域外の要素を使っていたらarrayにNULLを代入して
終了するってつもりだったんですが
確かに今ちゃんと考えれば実引数の内容を変える事に
なっちゃうんだからマズイですよね
0637デフォルトの名無しさんNGNG
拙い点は他にもある。
次の辺りを抑えておくといいと思う。
・領域外かどうかの判断方法
・NULLの型
・コンパイラの警告Lvとその内容
・ソースを客観的に読む
0638632NGNG
>>637
それでさっきから気になってたんですけど
NULLって何型なんですか?void型?
常識的なことも分からなくてすみませんです
0639デフォルトの名無しさんNGNG
>>638
(void *)型
0640デフォルトの名無しさんNGNG
>>638
Cだとvoid *にキャストされた0ということが多い。
C++だとキャストなしにvoid *を他の型のポインタに代入できないから単なる0だけど。
0641デフォルトの名無しさんNGNG
NULL をポインタ型以外の文脈で使用した場合、未定義の動作になる。

数値の 0 とポインタ値の 0 (NULL) は別物なので注意。
0642632NGNG
(void*)型かぁ
何かの本でvoid*型は何でも代入できる汎用的な型だけど
その分色々問題もあるとか読んだ気がします
でもやっぱりそれを使いこなせてこそプログラマーなんですよね
0643デフォルトの名無しさんNGNG
>>642
別に問題なんかないと思うけど??
0644デフォルトの名無しさんNGNG
使いこなせた上で欠点を言えるのが真のプログラマ。
欠点が言えないのはただの盲目。
0645デフォルトの名無しさんNGNG
>>632
夜釣りは危険
0646デフォルトの名無しさんNGNG
>>642
正確に言うと void * 型は、関数型を除く、あらゆる型への
*ポインタ*を代入できる型。
0647632NGNG
>>643->>646
そうなんですかー
確かmallocの戻り値の型はvoid*ですよね
前にキャストしてmallocを使ってるのを見たことあるんですけど
あれは意味があるんですか?

0648デフォルトの名無しさんNGNG
>>647
キャストしないと警告出るから。
0649デフォルトの名無しさんNGNG
>>647
昔はvoidがなかったからmallocの戻り値の型をchar *にしていた。
だからキャストしていたんだけど、今はstdlib.hさえインクルードすれば必要ない。
あと、C++だとキャストが必用だったかな。
0650デフォルトの名無しさんNGNG
>>649
> あと、C++だとキャストが必用だったかな。

その理由は >>640 に書いてあるよ。
0651デフォルトの名無しさんNGNG
>>649
> あと、C++だとキャストが必用だったかな。

つーか、C++ だったら new 使えよ。
0652デフォルトの名無しさんNGNG
#include<stdio.h>
って書きますが、stdio.の後のhって何の意味があるんですか?
ググってみても、stdioの意味は解説してあるんですが、.hの意味を解説しているページは見当たりませんでした。

あと、int main()をよく目にしますが
なぜmain()の前にintをつけるのですか?
付ける理由がわかりません。
初歩的な質問とは思いますがよろしくお願いします。
0653デフォルトの名無しさんNGNG
>>652
> stdio.の後のhって何の意味が
stdio.hというファイル名をもつファイルをインクルードしろと言う命令だから

> intをつけるのですか?
intの場合は省略可能だが、わかりやすくするため。
0654デフォルトの名無しさんNGNG
>>652
でもintをつけた場合はreturnしないとダメ
0655デフォルトの名無しさんNGNG
> でもintをつけた場合はreturnしないとダメ
ダウト。
0656デフォルトの名無しさんNGNG
C99厨のおでまし。
0657655NGNG
ANSI C でもそうなっていますが。
0658デフォルトの名無しさんNGNG
>>657
ハァ?
C++と勘違いしてねーか?
0659デフォルトの名無しさんNGNG
main{}をBCC32(最新版ではない)でコンパイルしたら「関数は値を返すべき」と警告が出たと思ったが・・・・・
0660デフォルトの名無しさんNGNG
>>654-659
[0が返る]ようになったのはC99/C++からだが、
C90でも [ホスト環境へ返る値が未定義] になるだけだろ?
0661デフォルトの名無しさんNGNG
>>652
ただの拡張子。
自作ヘッダならべつに.hである必要は無し。
0662デフォルトの名無しさんNGNG
655 じゃないが、65 はダウトだぞ。
return で値を返すかどうかは、関数の型指定の int を省略したかどうか
とは関係がない。
main() と int main() は結局一緒だろう。
0663662NGNG
> 655 じゃないが、65 はダウトだぞ。

65 じゃなくて 654 ね。
0664デフォルトの名無しさんNGNG
まとめると、

・mainの型はintでなければならない。これは規格で決まっている
・mainの型を指定しなかったときはint型を返すと仮定される。
 これは、Cの規約で明示的に返却値を指定しない関数はintを返すと
 仮定されることによる
・いわゆるC99では、mainで値を返さなかった場合(return文やexit関数などを
 経由せずにプログラムが終了した場合)、0を返すことになっている
・C99でない場合、mainはintの値を返さなければならない

これでOK?
0665デフォルトの名無しさんNGNG
漏れにはそれで問題は見つからなかった。
0666デフォルトの名無しさんNGNG
引数の文字数を参照する為にその配列のサイズを測りたいのですが、
↓とするとどうもポインタのサイズを測っちゃうみたいでうまくいきません。
どうすれば配列の大きさを測るように出来ますか?
#include<iostream.h>

int main(int argc,char **argv)
{
int x[3];

cout<<"x:"<<sizeof(x)<<endl;
cout<<"argv[1]:"<<sizeof(argv[1])<<endl;
}
0667デフォルトの名無しさんNGNG
>>666
スレ違い。
0668デフォルトの名無しさんNGNG
失礼。では気を取り直して…
#include<stdio.h>

int main(int argc,char **argv)
{
int x[3];

cout<<"x:"<<sizeof(x)<<endl;
cout<<"argv[1]:"<<sizeof(argv[1])<<endl;
}
0669デフォルトの名無しさんNGNG
>>668
気を取り直したらC++スレにゆけ。
0670669NGNG
つーか文字数を知りたいのならstrlenを使えばいいだろうが。
0671デフォルトの名無しさんNGNG
>669-670
おぉ〜Thanx!
でもどうやればポインタのサイズではなく、配列のサイズを参照できるんでしょう?
0672669NGNG
>>671
配列じゃないから無理です。
0673デフォルトの名無しさんNGNG
>>671
ネタですか?
0674デフォルトの名無しさんNGNG
動的に確保したものは測れないのですか?
0675デフォルトの名無しさんNGNG
>>671
#include <iostream.h>
#include <string.h> //strlen関数を呼ぶヘッダ

int main()
{
char s[] ="itteyosi";
int len = strlen(s);
cout << s << "の文字数はな " << len << " 個だゴルア!!" << endl;
return 0;
}

てだめなの?
初心者だけど・・・
0676デフォルトの名無しさんNGNG
( ´Д`)/<先生!こんなのありました。
http://saitama.gasuki.com/mona/
0677デフォルトの名無しさんNGNG
#include <iostream.h>
#include <string.h> //strlen関数を呼ぶヘッダ

int main()
{
char s[100] ;
cout << "なんか文字入れろや!!ゴルア!!";
cin >> s;
int len = strlen(s);
cout << s << "の文字数はな " << len << " 個だゴルア!!" << endl;
return 0;
}

これ、動的に文字数カウントしてるって言えるの?
初心者だけど
0678デフォルトの名無しさんNGNG
スレ違いだっつってんだよヴォケしね
0679583NGNG
>>583で関数作成の質問をさせていただいた
厨房です。
また同じ質問なのですが
for(cnt=1; (fgets(tmp,256,ipt_fp)); cnt++)
でchar tmp[256]にぶち込んだものを
switch文内で使用することになりました。
その際
void uma(int cnt) {
 switch (cnt){
 case 1:
  printf("(゚д゚)ウマー\n");
  break;
 case 2:
  printf("(・A・)イクナイ\n");
  break;
 }
}
上記の処理にどのように引数で渡せばよろしいのでしょうか?
ほんと厨でご迷惑お掛け致しますがよろしくお願い致します。
0680デフォルトの名無しさんNGNG
>>679
まずは無駄なfgetsのまわりのかっこをはずせ。
cntを関数に渡す?関数呼び出し時に引数リストに加えればよいのでは?
0681680NGNG
tmpか・・・
void uma(int cnt,char *tmp)
0682デフォルトの名無しさんNGNG
char→intならatoi()
主旨あってるかな?
0683デフォルトの名無しさんNGNG
>char→intならatoi()
(#゚Д゚)ハァ?
0684デフォルトの名無しさんNGNG
お世話になります。
IPアドレスを表す文字列を数値に変換する良い方法ありますか?

255.255.255.255 → 0xFFFFFFFF

っていう風に。
0685デフォルトの名無しさんNGNG
unsigned long inet_addr(const char *cp);
0686デフォルトの名無しさんNGNG
unsigned int n = 255;
n += 255 << 8;
n += 255 << 16;
n += 255 << 24;
とか・・・
0687684NGNG
>>685
ありがとうございます。
ちなみにその関数はサブネットマスクは駄目なんですかね〜。
…駄目そうですね。。
0688684NGNG
>>686
255.255.255.255とは限らないんです。
192.168.0.1なども処理したいので。。

typedef union test{
int addr;
char A[1];
char B[1];
char C[1];
char D[1];
} addr_t;

として、

sscanf("xxx.xxx.xxx.xxx", "%s.%s.%s.%s", addr_t.A,addr_t.B,addr_t.C,addr_t.D);

とするものありですかね〜?
(↑書式怪しいです。)

でも、inet_addrの方が全然スマートですね。
0689デフォルトの名無しさんNGNG
typedef union ip {
int addr;
char bytes[4];
} addr_t;

addr_t foo;
sscanf("192.168.0.1", "%d.%d.%d.%d", &foo.bytes[0], &foo.bytes[1], &foo.bytes[2], &foo.bytes[3]);
printf("%x\n", foo.addr);
/* 不毛だ・・ */
0690デフォルトの名無しさんNGNG
>>689
%dにchar *を与えちゃダメ!!
0691デフォルトの名無しさんNGNG
>>689
%pを使ってください。おながいします。
0692デフォルトの名無しさんNGNG
>>688
http://www.asahi-net.or.jp/%7EVZ4H-SRUZ/ipmsg.html
に配布されてるソース眺めるとヒントあんるかも・・・
0693デフォルトの名無しさんNGNG
へぇ、埼玉県の中に東京都練馬区の一部があるんだ。
0694デフォルトの名無しさんNGNG
C言語を勉強するのに分かり易い参考書ってありますか?
たくさん本があるから、どれがいいのかわからなくて。
自分はPASCALを少し使えるくらいです。
あと、パソコンの専門用語もあまりわかりません。

よろしくお願いします。
0695デフォルトの名無しさんNGNG
>>694
まなタンのやさしいC
0696694NGNG
>>695
ありがとうございます。

今度書店で探してみます。
0697デフォルトの名無しさんNGNG
>>694

>>1を読めないのか?
0698デフォルトの名無しさんNGNG
>>693
どこの誤爆だ?

・・・が、その近隣の住人なんで気になった。
4〜5軒の家だけ飛び地になってるんだよ。
0699679NGNG
>>680サソ
ご回答ありが�dございますた!
謝謝
0700デフォルトの名無しさんNGNG
>>698
テレビ番組板だね。昨日の「トリビアの泉」でやってた。
しかしなんでム板に誤爆…。
0701デフォルトの名無しさんNGNG
int i;
int *p;

i=*p++;

これは、
i=*(p++);
ですか?
0702デフォルトの名無しさんNGNG
>>701
試してみればわかるでしょ。
pが指すものをiに代入し、pの値を1ふやす。
0703デフォルトの名無しさんNGNG
>>701
そう。
リファレンス見ればわかるはずだけど、無いの?
0704デフォルトの名無しさんNGNG
プリプロセッサもCの範疇だよね??
0705デフォルトの名無しさんNGNG
>>704
C という言語の一部ではないけど、C という処理系の一部ではある。
0706デフォルトの名無しさんNGNG
>>705
なるほど・・・
なんか他の言語にも流用できるとか・・・
0707デフォルトの名無しさんNGNG
>>706
アセンブラに流用するのが割りと見かけるようとかな。
後は、ソース解析系のツールも利用している。
0708デフォルトの名無しさんNGNG
struct hoge {
char ahya[16];
} PIYO;

こんな構造体があって
ポインタから要素にアクセスするときは
PIYO->ahyaになりますよね?
この要素に文字列をぶちこみたいのですが
どのようにすればよろしいのでしょうか?
御教授ください。
よろしくお願い致します。
0709デフォルトの名無しさんNGNG
strcpy(PIYO->ahya, "適当な文字列"); /* 但し文字列の長さに注意 */
sprintf(PIYO->ahya, "%.15s", "応用が利く方法");

間違っても、strncpy()を使ったり自前で一文字ずつコピーしないように。
0710709NGNG
って、書いてから気付いた。
PIYOはポインタ変数じゃないじゃないか。
なので一応フォロー。

struct hoge *pPiyo;

pPiyo = &PIYO;
strcpy(pPiyo->ahya, "後は応用しる");
0711デフォルトの名無しさんNGNG
PIYO.ahya[0]='h';PIYO.ahya[1]='o';PIYO.ahya[2]='g';PIYO.ahya[3]='e';PIYO.ahya[4]=0;
0712デフォルトの名無しさんNGNG
strcpy((&PIYO)->ahya, "後は応用しる");
0713709NGNG
char *p = &PIYO.ahya;
strcpy(p, "後は応用しる");
0714708NGNG
>>709-713
ミナサーン
アリガ�d
オマイラサイコーダZE!
0715デフォルトの名無しさんNGNG
C言語ものすごい勢いで勉強しています。
ちょっとどうしても並列が苦手でわからないんでご教授ください
int x, ary[3];

for(x = 0; x < 3; x++) {
ary[x] = 10 * x;
printf("%d\n", ary[x]);

ってのがあったとします 「ary[x] = 10 * x;」のことなんですが
x==2としたら20がary[x]のxに代入されますよね?
その代入されたxってのはaryの要素番号じゃないんですか?
プログラムを見ると、xは要素そのものを指してるようなんですが
そこのところが全然意味わからないのです。。。
0716デフォルトの名無しさんNGNG
>>715の日本語がわからん
0717デフォルトの名無しさんNGNG
>>716 すんません意味不明で
つまりary[x] = 10 * x; だとary[x]のxは要素番号じゃないの? ってことなんです
0718デフォルトの名無しさんNGNG
'配列'な
CPUの並列処理じゃないんだから。

x==2としたら'2'がary[x]のxに入る、と思うが。
結果としてxは、要素番号だと思うが。
10*xが要素そのものか?
0719デフォルトの名無しさんNGNG
いや、やっぱわからん。
20が代入されているのはary[x]であってxではないぞよ?
0720715NGNG
そそ「配列」でした(w
実はこれまで割とすんなり勉強できてたんですが、配列がどうも納得いかないのです

「20が代入されているのはary[x]であってxではないぞよ?」ってのがどうもわかんないす
ary[x]は変数のようなものなのでしょうか? 例えば int a = 5; みたいな
それなら納得いくんですがなんか違うような・・・ほんとスマソ こんな質問しちゃって
0721デフォルトの名無しさんNGNG
何で今のゲーム業界はC++が使われてないの?
0722デフォルトの名無しさんNGNG
>>720 処理結果より、アドレス:値:Cの定義した変数の名前
08047a94:00:any[0]
08047a98:0a:any[1]
08047a9c:14:any[2]
08047aa0:03:x
0723デフォルトの名無しさんNGNG
>>720
配列は入れ物
アパートとかホテルの部屋のようなものを想像すればいい
0724デフォルトの名無しさんNGNG
>>721
どういう言語が主流?
0725715NGNG
正直まだわかんないですけど、何人かの人が答えてくれたものを理解できるようがんがります
なんかお邪魔してすいませんでした みんなありがとうヽ(´ー`)ノ
0726デフォルトの名無しさんNGNG
int x;のイメージ
┌─┐
│ │x
└─┘
int ary[3];のイメージ
┌─┬─┬─┐
│ │ │ │ary
└─┴─┴─┘

x = 2、ary[x] = 20のとき、
┌─┐
│ 2│x
└─┘
┌─┬─┬─┐
│ │20│ │ary
└─┴─┴─┘

等幅な環境にコピペすれば判るっしょ。
0727デフォルトの名無しさんNGNG
> x==2としたら20がary[x]のxに代入されますよね?
x==2としたらary[2](ary[x])に20が代入される。

> その代入されたxってのはaryの要素番号じゃないんですか?
あくまで代入されたのはary[2]。xはaryの要素番号は正しい。

> プログラムを見ると、xは要素そのものを指してるようなんですが
纏めると、ary=配列, ary[x]=配列の要素, x=配列の要素番号
0728715NGNG
・・・みんななんていいヤツなんだ! これで完全に時間かけたら理解できそうっす!
ほんと感謝、感謝です 今ほんとに本気でCを勉強してるんだけど、すごくおもろいですね〜
早くC++とかできるようにがんがります  ほんとありがとうね!
0729デフォルトの名無しさんNGNG
bcc32でAPI関数ShellExcuteをしたいのですがコンパイルエラーになります。
shellapi.hをインクルードして
bcc32 -W ソースファイル.c でコンパイルしてるのに、何故ですか?
0730デフォルトの名無しさんNGNG
>>729
リンクエラーでしょ?
必用なライブラリをリンクするようにリンカーに伝えればよい。
方法はスレ違いなので、Borlandフリーコンパイラスレできいてね。
0731デフォルトの名無しさんNGNG
>>729
エラーの内容を書かないのに診断できると思うのか?
0732708NGNG
>>708デシ

ミナサソの御教授を元に
下記のようにやってみますた。
void OrehaAfo (int i,char *s, struct uma *ahya){

char hoge[512];
char dmy[512];

switch ( i ) {
case 1:
sscanf( s, "%x #%s", &hoge, &dmy );
strcpy(ahya->priority, hoge) ;
printf("buf NO.1=%s\n",&CMQ->priority);
break;
case 2:

ってな具合にしたんですが,コンパイル時に
警告: ポインタ/整数の組み合わせは不適切です: 1 番目の引数
という警告がでてしまいます。。。
わからんっす、わからんっす。
異常な点をご指摘していただけるとありがたいのです。
異常なのはオマエの脳内とか勘弁してください。
よろしくおながいします。
0733デフォルトの名無しさんNGNG
>>732
sscanf( s, "%x #%s", &hoge, &dmy );の&dmyとprintf("buf NO.1=%s\n",&CMQ->priority);の&CMQ->priorityの&は不要でしょ?
あと、配列名に&をつけてはだめ(&hoge)。sscanfの%xにはint *を与えること。
0734733NGNG
・・・・。配列名に&をつけてもいいのか。。。
0735733NGNG
char (*)[512]になるんだから当たり前か(^_^;)
0736デフォルトの名無しさんNGNG
'\0' を含んだ文字列を標準入力から読む時

char buf[10000] = {0};
char *p = buf;
int ret;

while (ret = read(0, p, 100) > 0) {
p += ret;
}

これで合ってますか?
0737デフォルトの名無しさんNGNG
>buf[10000] = {0};
無駄無駄無駄あぁぁッ
0738デフォルトの名無しさんNGNG
ついくせで...
でも、それ以外は間違いないですか?
0739デフォルトの名無しさんNGNG
buffer overrunするのを間違いに入れないならば。
0740デフォルトの名無しさんNGNG
問題外
0741デフォルトの名無しさんNGNG
overflow?
0742デフォルトの名無しさんNGNG
freadで10000バイト読むというやりかたじゃダメなのか?
0743デフォルトの名無しさんNGNG
ありがとうございました
うまく動きそうです
0744デフォルトの名無しさんNGNG
落第
0745デフォルトの名無しさんNGNG
>>736
stringstream ss;
ss << cin.rdbuf();
が正解
0746デフォルトの名無しさんNGNG
逝ってよし
0747732NGNG
わかりにくい質問でしたので再度質問させていただきます
struct hoge{
int t;/* ヘキサでぶち込む用 */
char s;/* ヘキサでぶち込む用 */
char ss[16];/* 文字列用 */};
上記のような構造体がありまして
void MajiWakaran (int i,char *s, struct hoge *piyo){
char hoge[512,odamy[512];

switch ( i ) {
case 1:
sscanf( s, "%x #%s", &hoge, &odamy );
strcpy(&piyo->t, hoge) ;
printf("int t = %s\n",&piyo->t); break;
case 2:
sscanf( s, "%x #%s", &hoge, &odamy );
strcpy(&piyo->s, hoge) ;
printf("char s = %s\n",&piyo->s);break;
case 3:
sscanf( s, "%x #%s", &hoge, &odamy );
strcpy(piyo->ss, hoge) ;
printf("char ss = %s\n",&piyo->ss);break;
上記のような関数があります。
printfした結果、int tとchar sが空白になってしまいます。
この関数は
for( CNT=1; fgets(dmy2,256,ifp) !=NULL; CNT++){
Fhk_ipTRSF(CNT,dmy2,&piyo);}
↑のような使用法でmain関数内に配置しております。
int tとchar sが空白になってしまう原因を御教授いただけると幸いです。
お願い致します。
0748747NGNG
続き

ファイルから読みこんだバッファは
void MajiWakaran (int i,char *s, struct hoge *piyo){
のchar sに格納されているはずでして、
int tには"0F680000"
char sには"01"が入っております。
0749デフォルトの名無しさんNGNG
>>747
printf("int t = %d\n",piyo->t); break;
printf("char s = %s\n",piyo->s);break;

0750デフォルトの名無しさんNGNG
strcpy?
0751デフォルトの名無しさんNGNG
>>734
配列変数をポインタとして評価した時、& があるか無いかでは型が違うから気をつけろ!
0752デフォルトの名無しさんNGNG
freopen("c:\\stdout.txt", "w", stdout);

のようにして標準出力をファイル出力に変えたのだが、
もとのコンソール出力に戻にはどうすればいいの?
0753752NGNG
解決した。
freopen("/dev/console", "w", stdout);
freopen("CON", "w", stdout);
のように直接指定しなければならないのね。
0754デフォルトの名無しさんNGNG
「XXだったら非0,XXでなかったら0を返す」という関数を幾つか作って、
int a = isXXX();
a &= isYYY();
とお馬鹿なコードを書いていたらバグりました。
1行目が1を、2行目が2を返していたからです。
「isXXX()かつisYYY()でaは非0」のつもりが、(1&2)、そう、0ですた。

↑これに対する修正をしていて、ふと思ったこと。

(2&&4)

が返す値は、1?2?4?
0755デフォルトの名無しさんNGNG
1(真)
0756デフォルトの名無しさんNGNG
配列に文字列をいれて、その文字の文字コードを調べるときには
一度別の変数に入れて調べるしかないのでしょうか?

str[0]の文字コードを調べる時には

char str[] = "ABC";
char buf;

buf = str[0];
printf("%d",buf);

別の変数に入れずにスマートに行きたいのですけど
この方法以外でないのでしょうか


0757デフォルトの名無しさんNGNG
printf("%d", str[0]);
0758デフォルトの名無しさんNGNG
夜釣り禁止!
0759デフォルトの名無しさんNGNG

質問です。
array1[N]に対して何らかの処理(ソートなど)を行い、
array2[N]、array3[N]・・・と名前の違う配列にまったく同じ処理を
行う場合に、同じ処理を繰り返し書かないようにしたいです。
ポインタを使って解決するにはどうすればよいでしょうか。
0760デフォルトの名無しさんNGNG
array1,array2,...へのポインタからなる配列をつくってループ
0761デフォルトの名無しさんNGNG
>>759
いっそ、2次元で配列を確保して
forループのなかで array[i][j]で行う
0762デフォルトの名無しさんNGNG
>>760
int *array[M] = {array1, array2, array3, ・・・};

という感じでいいですか?
0763デフォルトの名無しさんNGNG
FILE *fp
fp = fopen( C:\\WINDOWS\\DATA.txt, "a+" );

a+モードで開いた既存の(既にデータが入っている)テキストファイルに、
ファイルの先頭から新たに(全てのデータを消して)書き込みたいのですが
どうもうまくいきません。(rewindとかfseekとかやってみましたが )

既に入っているデータを使用して計算し結果を同じファイルに出力するため
a+モードでやらなければなりません。
スマートなやりかたはないでしょうか。
0764デフォルトの名無しさんNGNG
#define numberof(x) (sizeof(x)/sizeof(*(x)))

int *arrays[] = {array1, array2, array3,};
int ic;
for (ic = 0; ic < numberof(arrays); ic++) {
 nanrakanoshori(arrays[ic]);
}

定数Mはやめとけ。
0765デフォルトの名無しさんNGNG
>>763
"a"や"a+"は「追加」のためのモードなのでファイルの先頭には行けない。
既存のファイルの先頭にもアクセスしたいなら"r+"で開いて自分でfseek()すればいい。
0766747NGNG
>>749サソ
ご回答アリガ�dございます。
ご指摘くださった方法で
コンパイルは通るのですが
実行しますと
core dump吐きます。。。
セグメント例外(コアダンプ)と・・・
int t は表示されるのですが
(でも、"0"がかえってくる・・・)
char sは表示されないので
char sに問題があるようなのですが
わかりません。。。
再度でもうしわけございませんが
御教授お願い致します。
0767デフォルトの名無しさんNGNG
>>766
>>733は無視かい?
0768デフォルトの名無しさんNGNG
>>766=747
ツッコミどころ満載で何処から手をつけていいやらなんだけど、
sscanf()の第3パラメータは激しく間違い。
#sscnaf()とprintf()、構造体の使い方をそれぞれきっちり理解してから組み合わせよう。
0769766NGNG
>>767-768サソ
ご指摘ありがとうございます。
void OrehaAfo (int i,char *s, struct uma *piyo){

char hoge[512];
char dmy[512];

switch ( i ) {
case 1:
sscanf( s, "%x #%s", hoge, dmy );
strcpy(piyo->t, hoge) ;
printf("buf NO.1=%s\n",piyo->t;
break;
case 2:
sscanf( s, "%x #%s", hoge, &odamy );
strcpy(piyo->s, hoge) ;
printf("char s = %s\n",piyo->s);
break;
というような具合に修正したのですが
同じ結果です。
sscanf()の第3引数が腐ってるとのことですが、、、
正直ど厨初心者でよーわかっておりません、、、
ご指導 き ぼ ん ぬ 、、、
0770デフォルトの名無しさんNGNG
ごめん、第3パラメータそのものじゃないや、第3パラメータに渡しているhoge周りが滅茶苦茶。
(1)"%x"の意味は判る?
判ってないならごちゃごちゃ修正せずにsscanf()だけのサンプルつくって納得いくまでやってみな。
(2)intへstrcpy()しようとしているけどこれも判ってないっしょ。
判ってないなら(以下同文)。
(3)承知してやってるなら別だけど、構造体のタグと同じ名前の変数は定義するな。

兎に角いっぺんにやろうったって無理だって。
0771デフォルトの名無しさんNGNG
Error: >>747/>>769 printf系の%d%l%f%・・書式が理解できていません
Error: >>747/>>769 int,char,char[],*char などのデータ型が理解できていません
Worning: >>747/>>769 ポインタと実体が理解できていません

間違いの有無を別として、ソースを見ても仕様が理解できないのはめずらしいのだが
0772デフォルトの名無しさんNGNG
とりあえず、scanfに与える引数には&をつける必用があると思いこむのはやめよう。
0773デフォルトの名無しさんNGNG
>>771
708から延々と見ていくと少しは判るかも。<仕様
#漏れは判らなかったから任せた。w
0774デフォルトの名無しさんNGNG
インテルのコンパイラがほしいです。
0775デフォルトの名無しさんNGNG
そっか
0776デフォルトの名無しさんNGNG
>>775
Winnyでひっかからないんですけど(T_T)
0777デフォルトの名無しさんNGNG
セブ〜〜ンセブ〜〜ンセブ〜〜〜〜ン セブンセブンセブン
0778デフォルトの名無しさんNGNG
インテルってコンパイラ出してたっけ?
0779769NGNG
>>770-773
各位
ご指摘ありがとうございます。
がんばってみまふ
0780デフォルトの名無しさんNGNG
>>778
VTune買うと付いてたと思ふ
0781デフォルトの名無しさんNGNG
クソレス申し訳ないが・・・

C言語ってC++のことですか?
__________________
0782デフォルトの名無しさんNGNG
↓餌
0783デフォルトの名無しさんNGNG
↓釣り針
0784釣り針NGNG
ある関数の仮引数がポインタ変数のポインタ変数であり、
2次元配列をその関数の引数として渡したい場合、
その関数を呼び出す側は、どのように実引数を渡せばよいのでしょうか?
(ただし、関数の仮引数がポインタ変数のポインタ変数であることは
変更不可、という条件があります)

#include <stdio.h>
void mess(int **p);
int main(void){
int i, j;
int **p[2][2], *p2[2][2], p3[2][2];
for(i=0; i<=1; i++){
for(j=0;j<=1;j++){
p2[i][j] = &p3[i][j];
p[i][j] = &p2[i][j];
**p[i][j] = i*j;
printf("%d\n", **p[i][j]); /* 値は正しく入っている */
}}
printf("\n");
mess(*p); /* ここはどうすれば? */
return 0;
}

void mess(int **p) /* 問題上、定義側がポインタのポインタであることは変更不可 */
{
int i, j;
for(i=0; i<=1; i++){
for(j=0;j<=1;j++){
printf("%d\n", p[i][j]);
}}}
0785釣り針NGNG
うぅ…死にます。死んで来ます…
0786デフォルトの名無しさんNGNG
**str
*str[]
str[][]
これらのいずれも同じように感じるのですが、どうなのでしょうか?
0787デフォルトの名無しさんNGNG
Now preparing the installation...
0788763 >>765ありがとうございます。NGNG
FILE *fp
fp = fopen( "C:\\WINDOWS\\DATA.txt", "?????" );

ううう、>>763で既存のファイルを開くと書きましたが、
ファイルがない場合は新しくファイルを生成する必要がでてきました。
ファイルがある場合は書き込まれているデータを使用して計算し結果を同じファイルに出力します。
fopen( "C:\\WINDOWS\\DATA.txt", "rw+" );
↑だとDATA.txtがない場合はファイルを新しく作ってくれるのでいいのですが、
DATA.txtがある場合はファイルを壊して新しく作ってしまうので使えません。

また、ファイルの先頭からデータを書き込むので"a+"や"a"は使用できません。
つーか、ファイルがあるかないか調べてある場合とない場合でfopenのデリミタの指定を変える必要がある?
それだとスマートじゃないような。。。

よろしくお願いします。
0789デフォルトの名無しさんNGNG
>>788
WindowsならCreateFile使えばいいじゃん。
パラメータは自分で調べろ。
0790デフォルトの名無しさんNGNG
浮動小数点演算例外ってなにですか?
0で割るとかそういう類のものなのでしょうか?
0791デフォルトの名無しさんNGNG
暇なお方!このサイトをガンガン荒らしてください!
変態がイパーイいるサイトでつ!ヨロシク!!

http://homepage2.nifty.com/tikan/
0792デフォルトの名無しさんNGNG
>>790
yes.
但し処理系依存。
例外出さずにInfやNaN返すような処理系も有る。
0793デフォルトの名無しさんNGNG
>792
おぉ、有難う!
0794デフォルトの名無しさんNGNG
>>792
その書き方も処理系依存だから、無限大値 (Infinite) とか非数値(Not a number)
とか書いた方が。
0795デフォルトの名無しさんNGNG
>>786
それらが同じ意味を持つのは関数の引数で現れたときだけだ。
変数の宣言(定義も含む)を行ったときはその三つは全然違う意味になる。
0796en252.ade.ttcn.ne.jpNGNG
関数がかなりややこしくなって丸ごときれいに書き直したモジュールに
変えたいんだけども以前の関数と同じ動作をするかどうかを
全パスチェックするのは大変なので、この際処理時間は無視していいから
ロジックとして同じ動作をすることを証明してくれる
ソフトってないでしょうか?
0797デフォルトの名無しさんNGNG
>>786
**str ポインタのポインタ
*str[] ポインタの配列
str[][] 二次元配列

ポインタはアドレスを保管しておく変数である。
例えば配列の先頭アドレスを保管しておいて、
配列の様に使うことができる。
その場合、配列の置いてある場所と
ポインタの置いてある場所は別であることは
十分注意しなければならない。

配列にはそのようにアドレスを保管しておく場所は存在しない。
従って、メモリ上に置かれるのは
配列そのもののみである。

これらのことを考慮に入れて、
それぞれメモリ上にどう置かれているか、
紙の上に書いてみよう。
0798795NGNG
>>797
補足ありがとさん。不親切な書き方だなと反省してた(w
んで、>>797は変数の宣言・定義の時のことな。
関数の宣言の引数に現れたときは三つとも同じ**pと見なされる。
0799デフォルトの名無しさんNGNG
>>796
どういう状態であれば 「同じ」 と判断できるのか、条件を言ってみてくれ。
0800デフォルトの名無しさんNGNG
>>796
アルゴリズムの自動証明ソフトなら作れば大金持ちになれそうだな
実際に全ての入力についてチェックするのは実質的に無理だな、
内部状態があるとなお大変だ。自分で証明するしかないだろ
0801デフォルトの名無しさんNGNG
>>796
両モジュールに適当にいろいろなデータぶち込んで、
出力値が同じになるかどうかを確かめるというのはだめかの…?
0802デフォルトの名無しさんNGNG
>>801
その労力を惜しんでいるものと思われ
0803デフォルトの名無しさんNGNG
内部状態は時々グローバル変数にコピーして確かめる。
0804763 >NGNG
>>789
ありがとうございます。
調べてみます。
0805デフォルトの名無しさんNGNG
>>798
違いますよ。
関数の引数では
 **p ポインタへのポインタ
 (*p)[N] 配列へのポインタ
 *p[N] ポインタへのポインタ(Cでは本当は末ウ理だったはず=j
 p[M][N] 配列へのポインタ(Cでは本当は無理だったはず)
となります。

こういった違いは二次元配列をソートする関数を
作る時とかに重要になります。
0806デフォルトの名無しさんNGNG
ポインタって具体的にどんな時に使えるのですか?
構造体リストとか構造木には使えると分かるのですが
0807デフォルトの名無しさんNGNG
>>806
不要だと思うなら使うべきではない。
でも、文字列操作とかにはよく使うし、動的メモリ確保をするならポインタに
頼らざるを得ない。
0808806NGNG
>>807
そういえば確かにmallocとかは対象がポインタじゃないとダメですよね
も1つ質問なのですが変数宣言で
char array[]="iteyo-shi";
と宣言したとします
これをポインタを使って宣言すると
char *array="iteyo-shi";
でいいんですか?
違うような気はするのですが厨房なので違いが分かりません
ご教授お願いします
0809デフォルトの名無しさんNGNG
Direct3D のサンプルで FLOAT x = (FLOAT)sin(....); というのを
よく見かけるのですが、上記のようなケースで sin() の戻り値を
明示的に FLOAT型へキャストする必要はあるのでしょうか。ちなみに
typedef float FLOAT; となっているようです。
0810ミ,,゚Д゚彡NGNG
>>808
http://www.catnet.ne.jp/kouno/c_faq/c6.html

>>809
普通、sin の戻り値は double だと思うのだが。
0811809NGNG
>>810
いえ double から float へは暗黙に型変換が行われるのじゃ
ないかと思ったので。浮動小数点型のキャストに付いて理解が
足りない部分があったのだろうかと
0812デフォルトの名無しさんNGNG
>>811=809
明示的に書いておきたいだけじゃないの?
そもそもfloat使う段階で普通じゃないから理由がわかんないけど。
0813デフォルトの名無しさんNGNG
>>809
floatはDirect3Dのハードウェアとの整合性うんぬんの話では
C++コンパイラは型キャストに厳しい
0814デフォルトの名無しさんNGNG
C++?
0815デフォルトの名無しさんNGNG
>>809
lintを黙らせる為にそういうことをすることはある。
0816809NGNG
みなさんどうもです
特に意味があるキャストではなさそうなので安心しました。
C# では double → float でキャストが必要みたいなので
混乱しそうですね。
0817デフォルトの名無しさんNGNG
C#?
0818デフォルトの名無しさんNGNG
まだCをやり始めて一ヶ月ほどなんですが、オリジナルのライブラリを使いたいのに、標準のライブラリが適用されてしまいます。
どこか弄らないといけないのでしょうか?
環境はCygwinです。
0819デフォルトの名無しさんNGNG
使いたい関数を、標準ライブラリに含まれているものと名前を変える。
それができないならライブラリを評価する順序を変えるしか。
0820デフォルトの名無しさんNGNG
>808
char array[]="iteyo-shi";
char *array="iteyo-shi";

実体が何処におかれるか?だな。

array[]="iteyo-shi";
こっちは実体。
んで、
char *array="iteyo-shi";
こっちはcharのポインタがさすどっかのアドレスに
"iteyo-shi"を代入してるつう事では?
危なくねぇ?それって。
俺も糞厨房なんだけど。
0821デフォルトの名無しさんNGNG
>>820
> こっちはcharのポインタがさすどっかのアドレスに
> "iteyo-shi"を代入してるつう事では?

アフォ。"iteyo-shi" が書いてあるどっかのアドレスを array に代入してんるんだ。
危なくはない。
ただし、*array = 'I'; とかした時の挙動は異なる。(ことがある)

char array[] = "iteyo-shi"; ならちゃんと "Iteyo-shi" になる。
char *array = "iteyo-shi"; だと何が起こっても不思議ではない。
0822デフォルトの名無しさんNGNG
>808
後者は文字列リテラル定数のアドレス。
参照するだけで、そこの実態を書き換えなければ問題無し。
0823デフォルトの名無しさんNGNG
こういうコードは有りですか?

char *array = {"itte", "yosi", "kana"};
0824デフォルトの名無しさんNGNG
実際に試せばいいのに。
0825デフォルトの名無しさんNGNG
>>823
char *array[3] = {"itte", "yosi", "kana"};
0826デフォルトの名無しさんNGNG
>>823
何を目的としたコードなんだ?
0827823NGNG
>>825
すんまへん。そういうつもりでした。
で、>>825ならOKで?

疑問なのは、文字列リテラルの寿命ってどうなってるのかなっつーことでし。
なんとなく、普通の変数(>>825のarrayなんか)より寿命が長そうなので、
いいかなと思ったんけど、あんまりそういうコード見ないし、疑問なんです。
0828デフォルトの名無しさんNGNG
プログラム開始からプログラム終了まで。
静的変数と同じ。
0829823NGNG
>>828
わかりました。>>825なら問題なしですね。
ありがとうございました。
(でも、疑うのではないのですが、そういうことって、
どの辺を勉強すればわかるんですか?)
0830デフォルトの名無しさんNGNG
>>821

char a[] = "itteyo-shi";
char *p = "itteyo-shi";

後者で何が起こっても不思議じゃないなんてこたない。
どっちも規格に合致してる書式だし、実際に問題の起こる処理系は見たことない。

aはaというラベルのついてる11バイトの領域に文字列「itte-yoshi\0」が入ってる。
 a |i|t|t|e|-|y|o|s|h|i|\0|

pはpというラベルのついてる領域に、どっかにある「itte-yoshi\0」という文字列
の先頭を指す値(ポインタ)が入っている。
 p |ポインタ| → |i|t|t|e|-|y|o|s|h|i|\0|

斯様にポインタと配列はまったくの別物であるが、Cの場合大抵の場面で
ポインタと配列は同じように扱えるってだけの話。

ただし、pのように初期化したときに取られる文字列の領域を書き換えてはいけないと
規格では書かれている。
もし書き換えたら、(この場合に限り)何が起こっても不思議じゃない。
0831デフォルトの名無しさんNGNG
>>829 このへん
http://www1.cts.ne.jp/~clab/hsample/Point/Point19.html
0832デフォルトの名無しさんNGNG
>>830
多分>>821の内容を誤解してる
0833デフォルトの名無しさんNGNG
>>829
ちょっと古い本だが、「エキスパートCプログラミング」がお勧め。
http://www.ascii.co.jp/books/detail/4-7561/4-7561-1639-6.html
というか、Cでプログラム書くやつは必読書だとさえ思う。
0834デフォルトの名無しさんNGNG
>>830
まさにそのことを821は言ってるんだと思うのだけど。
0835829NGNG
>>831 >>833
サンキューです。勉強します。
0836デフォルトの名無しさんNGNG
>>834
おお、そうかそうか、読みきれてなかった。
アフォですた、すんません。
0837デフォルトの名無しさんNGNG
ちょっと細かい話をさせてもらうと、本当は、

>ポインタと配列はまったくの別物であるが、Cの場合大抵の場面で
>ポインタと配列は同じように扱える

というのはまちがいで、

 1.Cにはポインタはあるが配列はない
 2.*(p+n)のシンタックスシュガーとしてp[n]がある

という方がすっきりしてると思うんだけど。で、

char a[] = "itteyo-shi";
char *p = "itteyo-shi";

では、aもpもポインタ。
ただ、どこに文字列データが確保されるかの違い、という説明。
どうすか?
0838デフォルトの名無しさんNGNG
>>837
だめ。大域変数で

char a[] = "itteyo-shi";
char *p = "itteyo-shi";

なんて定義があったとして、別のファイルで

extern char *a;
extern char p[];

なんてやったらどうなる?
0839デフォルトの名無しさんNGNG
aは配列だよ。&演算子やsizeof演算子のオペランドになる場合だけ
ポインタ(配列の先頭要素を指す)に成り下がる。
0840839NGNG
失礼・・・
>場合だけ
場合の除いて
0841837NGNG
>>838
えーと。a[]と*aが互換というつもりはありませんのでした。
「aもpもポインタである」というだけで、aが「変数」かどうかは別です。

>>839
まあ、そういう見方もわかりますが、たとえば、
"abcd"[2]
なんかでは、ポインタが配列に成り上がるのでしょうか?

個人的には、言葉の定義は、多数の意見が「正解」なんだと思うので、
自分が正しいというつもりはないんですけど。
0842806NGNG
かなりレス遅れましたが806です
何かの本で文字列リテラルは配列だと読んだことがあるのですが
要するに
char *p="iteyo-shi";
は
char array[]="iteyo-shi";
char *p=array;
と同じだってことですよね?
0843デフォルトの名無しさんNGNG
char a[]="itteyoshi";
char *p ="itteyoshi";

上のをauto変数でやると、毎回コピーされるから、かなり遅くない?
0844デフォルトの名無しさんNGNG
>>842
フザケンナ!!
0845デフォルトの名無しさんNGNG
>>841
配列名は配列の最初の要素のアドレスを指すが
ポインタではないのでインクリメントできない
0846デフォルトの名無しさんNGNG
エンディアンで質問なのですが、
なるべくコード上で#ifdefとか使ってエンディアンを区別せずに
makefileかヘッダでどの処理でもビッグエンディアンにする方法がありましたら
ご教示下さい。
0847デフォルトの名無しさんNGNG
>>841
いや、多数の意見が正解じゃなくて規格に書いてあることが正解。
規格そのものは(多分)多数決で決まってるんだと思うけどね。
0848デフォルトの名無しさんNGNG
char a[] = "itteyoshi";
の場合、どちらも非constなので問題なし。
char *p = "itteyoshi";
の場合、右辺はconstなのでconstへのポインタから非constへのポインタの代入なので警告対象。
勿論、
char const *p = "itteyoshi";
ならば、どちらもconstなので問題なし。
但し、
p[0] = 'I';
とすると、その時点でエラーになるはず。

>>843
前者は文字列のコピーが発生するが、後者はポインタのみの代入。
0849デフォルトの名無しさんNGNG
あとあとのことを考えたらきっちり配列とポインタは区別しておいた
ほうがいいと思うな。文字列リテラルを書き換えようとしたり。a が
ポインタなら a = p; が許されないのはどうしてか、とか。sizeofの
結果も。あとで混乱の元になりそう。
0850837NGNG
>>845
なるほど。インクリメントできないものをポインタとはよべない。
うー、説得力あります。

それと、>>839をよく考えたんすけど、
sizeofの挙動は、ポインタだけでは説明できない、かな?
sizeofは、どうやって配列の終わりを知るんでしょう?

なんか、負けたような気がします。
0851デフォルトの名無しさんNGNG
もう、みんな必ず一回は配列とポインタで混乱するから、Cから配列をなくそうよ。

int a[10];
は、
int *a = alloa(...);
と等価としたらいいやん。
0852デフォルトの名無しさんNGNG
>>846
ないんじゃないかな。

エンディアンを気にする部分を関数群に閉じ込めちゃって
他ではエンディアンを気にせずコーディングするってのが
定石でしょう。でもそれが使えないってことなのかな…
たとえば「#ifdef使っちゃだめ」ってアフォな規則あるとか。
0853デフォルトの名無しさんNGNG
>>850
配列のサイズはコンパイル時にわかってるから、
sizeof(配列)なんてのがあったらコンパイラは
配列のサイズに置き換えるだけの話。
0854デフォルトの名無しさんNGNG
syslogシステムコールで質問。
openlogして設定して、syslogを実行します。
closelogせずにopenlogを再度実行して、
syslogを行い、closelogすると、
設定は最初のopenlogに戻る?

どうすれば戻るようなコーディングできる?

0855デフォルトの名無しさんNGNG
>>851
 >>850の言うようにsizeofはどうするんだ?
0856846NGNG
>>852
即レスサンクス。
やはり無いですか。。
今からエンディアンを変更せよと言われ、面倒だったので。。
0857850NGNG
>>853
なるほどです。
でも、そうすると、sizeofそのものがちょっと「いんちき」みたいな。
でも、そんなこと言うと、デンパですかね。

>>848は、いろいろおもしろいものを含んでいるような気がしますが、
眠いので落ちます。
0858806NGNG
a[1]ってのはもともと*(a+1)のシンタックスシュガーだから
型のサイズ×配列のインデックスでアドレスがその分だけ進められるんですよね?
例えばsizeof(char)=1の環境で
char a[]="iteyo-shi";という宣言があったとして
&a[0]=0x0000000だったとすると&a[1]=0x0000001になるはずだから
sizeof(char)*1=1で0x0000000に1がプラスされて0x0000001になって
そのアドレスにオペランドとしてアスタリクをつけて
変数の内容を参照するわけですね?
長い&分かりにくくてスマソ
0859デフォルトの名無しさんNGNG
>>858
その理解であってると思うぞ。
0860デフォルトの名無しさんNGNG
char a[] = "itte-yoshi!";
これは、a という配列を確保し、
それを "itte-yoshi!" で初期化するというもの。

char *p = "itte-yoshi!";
これは、"itte-yoshi!" という文字列リテラルのアドレスで
p を初期化するというもの。

文字列リテラルがどこに確保されるかはOSによって違うが、
多分静的であることは保証されてると思ってていいんじゃないかな。
あと、OSによっては書き換えを禁止されている領域に確保されるから、
*p = 'I'; なんてことをすると、書き換えちゃダメ! ってエラーが出ることがある。
OS依存だから、あー、エラーが出ないから使っていいんかなー、
とか思ってる人がいるかもしれないが、それは即刻やめること。
そのOSのバージョンが上がった場合にも相変わらずエラーが出ない、
ということは期待できない。

*a = 'I'; の場合は、a という配列を新しく作っている
(文字列リテラルそのものではない)ので、書き換えることができる。
0861854NGNG
誰か教えてください〜。
0862デフォルトの名無しさんNGNG
>>861
激しくスレ違い
よくわからんが UNIX の話なのなら UNIXプログラミング質問すれにでも逝け
0863デフォルトの名無しさんNGNG
char *pというポインタを"string"(の先頭アドレス)で初期化しているだけだと考えれば混同しないと思うけど。
0864デフォルトの名無しさんNGNG
char *p = "literal";
を
char *p;
strcpy(p, "literal");
と混同して危険だと思ってるヤツもいるかもね。
0865デフォルトの名無しさんNGNG
>>848
> char *p = "itteyoshi";
> の場合、右辺はconstなので

互換性のために、これはダウト...だったはずだが、最近は違うのか ?
0866デフォルトの名無しさんNGNG
>>865
曖昧な記憶だけで書くのだけど。
char *p = "itteyoshi";
で初期化した場合、pが指す先にある領域を書き換えてはいけないというのは、

void mona(void) {
char *p = "itteyoshi";
}
void giko(void) {
char *q = "itteyoshi";
}

みたいなふたつの関数があったときに、pとqが指す先が同じものであっても
よいようにするためだったと思う。場合よってはバイナリサイズが劇的に
小さくなるからね。

実際、MS-DOSの頃メモリが苦しくて、そういう風に処理してくれるオプションが
MS-Cにあったんで重宝してた。今はあんまり気にしないのでどうなってるかしらんが(w
0867デフォルトの名無しさんNGNG
>>846
そのためにあるのがntohs()と仲間たち。
0868デフォルトの名無しさんNGNG
>>865
文字列リテラルの型は大抵constがつかないと思うけど。
0869デフォルトの名無しさんNGNG
型を省いた関数は、戻り値int。
0870デフォルトの名無しさんNGNG
>>869
どんな釣りをしてるのか詳細キボンヌ
0871デフォルトの名無しさんNGNG
珍妙なプリプロセッサを自作しているということです。
0872デフォルトの名無しさんNGNG
#if defined(__2ch__)
#include "/dev/console"
#endif
0873デフォルトの名無しさんNGNG
Cはまったく初心者で
Pascalのポインタまでしか理解してないですけど、
K&R本はこんな俺に理解できるシロモノですか?
0874デフォルトの名無しさんNGNG
プログラミングの初心者じゃなければ大丈夫。
0875デフォルトの名無しさんNGNG
#include <stdio.h>
void *nurupo(void){printf("ぬるぽ\n");if(nurupo()==(void*)0)nurupo();return (void*)0;}
void main(void){nurupo();}
0876デフォルトの名無しさんNGNG
Stack overflow
0877デフォルトの名無しさんNGNG
>>872
#include "/dev/tty"
だろ
0878デフォルトの名無しさんNGNG
throw unko();
0879デフォルトの名無しさんNGNG
>>877
セキュリティのために、コンソールのみに限定してます。
0880デフォルトの名無しさんNGNG
2^50とかを数字でディスプレイ上に表示する方法ってありますか?
分割するにしても数字がでかすぎて下位の数字が消えちゃうし…
0881デフォルトの名無しさんNGNG
>>881
2.0e+50
じゃいけないの?
0882デフォルトの名無しさんNGNG
>>881
うわ、880の間違いだ・・・
0883デフォルトの名無しさんNGNG
>>881
それがダメなんですよ…
0884デフォルトの名無しさんNGNG
どうしたいのさ。
08852進表現NGNG
10000…(略
0886デフォルトの名無しさんNGNG
>>881
2.0e+50は2.0×10^50でつよ。

>>881
VCなら
printf("%I64d", 0x4000000000000I64);
GCCなら
printf("%lld", 0x4000000000000L);
で表示できるはず。
0887886NGNG
あー、1I64 << 50 とか 1L << 50 とかの方が分かりやすかったな。
0888デフォルトの名無しさんNGNG
>>887
どういうものなのでしょうか?
ご教授いただけると嬉しいのですが…
0889デフォルトの名無しさんNGNG
あ〜、激しく納得。64ビット整数って話か。
私馬鹿じゃん(TT)
0890デフォルトの名無しさんNGNG
今調べているのですが、gccでも64bit整数が扱えるのでしょうか?
"long long int"型がコンパイルエラーになるのですが…
0891デフォルトの名無しさんNGNG
>>890
sageでよろしく。
で、コンパイルオプションでlong long型を禁止してないかチェックした?
0892デフォルトの名無しさんNGNG
>891
それはどういうことでしょうか?
単に
bcc32 main.cpp
とタイプしてますが…
0893デフォルトの名無しさんNGNG
>>891
質問は age で良いとおもうけど...

>>892
> bcc32 main.cpp

って、おい、ネタかよ。
0894デフォルトの名無しさんNGNG
ゴメン。1L じゃなくて 1LL だった。
0895デフォルトの名無しさんNGNG
> Borland C++ では long long ではなく
> __int64 で64ビット整数を扱うことができます。
> __int64 は printf("%Ld"); で表示できます。
http://homepage2.nifty.com/DRG/computer/column.html
0896デフォルトの名無しさんNGNG
ネタじゃないですよ〜。
とりあえずの目標は2^40とかを数字で表示する事ですから直接main.cppで実験してます。
確認作業も楽ですし…
0897デフォルトの名無しさんNGNG
bcc の long long型は __int64
使い方と定数の書き方&printf()の修飾子は↓のような感じで

__int64 i ;
i = 1i64 << 50 ;
printf ( "%Ld\n", i ) ;

と言うか、もろに環境依存やね…
0898デフォルトの名無しさんNGNG
プリプロセッサで色んなコンパイラで使えるように
細工しとくのがいいのかね。
0899897NGNG
かぶった… (T_T)
0900デフォルトの名無しさんNGNG
皆様親切にThanx�dThanx�dThanx�d!!!
"__int64"にて無事解決しました!


bccとgcc間違えてた…
0901デフォルトの名無しさんNGNG
0902デフォルトの名無しさんNGNG
gcc でも __int64 使えるんじゃなかった?
long long のエイリアスになってたような・・・。
0903デフォルトの名無しさんNGNG
無かった。
gcc (GCC) 3.2 20020927 (prerelease)   (Cygwin)

jni.h に int64_t ってのならあったけど、
この後ろについてるのはなんじゃらほい。
変数のサイズ指定かな?
typedef int jlong __attribute__((__mode__(__DI__)));
typedef int64_t jlong;
0904デフォルトの名無しさんNGNG
>>903
MinGW gcc 2.95.2 で通ったコード。


#include <iostream>
#include <typeinfo> // これが無きゃダメぽ?

using namespace std;

int main()
{
__int64 i = 1234567890;
cout << i << endl;
return 0;
}
0905デフォルトの名無しさんNGNG
++ の方かい。
0906デフォルトの名無しさんNGNG
#include <con/con> //これ誰か試して
0907デフォルトの名無しさんNGNG
>>906
己、自らがが実験台になってください。
0908デフォルトの名無しさんNGNG
コンソールから Hellow World 打ち込んだが別に問題は無かったが何か?
0909デフォルトの名無しさんNGNG
次スレ立てました。

C言語なら、俺に聞け! <50>
http://pc2.2ch.net/test/read.cgi/tech/1044938752/
0910デフォルトの名無しさんNGNG
重複スレが上がってるようなのでこっちもage
0911デフォルトの名無しさんNGNG
0912デフォルトの名無しさんNGNG
0913デフォルトの名無しさんNGNG
0914デフォルトの名無しさんNGNG
>>880
二進化十進符号か?
0915デフォルトの名無しさんNGNG
>>909
おいおい無いぞ。
0916デフォルトの名無しさんNGNG
もう、次次スレ立ってまふ。

C言語なら、俺に聞け! Part 51
http://pc2.2ch.net/test/read.cgi/tech/1046104909/l50
0917デフォルトの名無しさんNGNG
もう、次次次スレ立ってまふ。

C言語なら、俺に聞け! Part 〈52〉
http://pc2.2ch.net/test/read.cgi/tech/1047275669/l50
0918デフォルトの名無しさんNGNG
黄昏のぬるぽ
0919デフォルトの名無しさんNGNG
定期埋め立て 残り81
0920デフォルトの名無しさんNGNG
埋め立て 残り80
0921デフォルトの名無しさんNGNG
埋め立て 残り79
0922デフォルトの名無しさんNGNG
埋め立て 残り78
0923デフォルトの名無しさんNGNG
埋め立て 残り77
0924デフォルトの名無しさんNGNG
埋め立て 残り76
0925デフォルトの名無しさんNGNG
1000-75
0926デフォルトの名無しさんNGNG
74
0927デフォルトの名無しさんNGNG
埋め立て 残り73
0928デフォルトの名無しさんNGNG
>>918
ガッ
埋め立て 残り72
0929デフォルトの名無しさんNGNG
929の策
0930デフォルトの名無しさんNGNG
>>929
40分ほどわかりませんでした。頭が鈍ってるなぁ、寝よう。
埋め立て 残り70
0931デフォルトの名無しさんNGNG
printf("%3d\r",69);
0932デフォルトの名無しさんNGNG
>>931
こら、ハードコーディングするなよ。再利用できないだろ。
int i = 68;
/* --- 以下ここからコピペスレ --- */
printf("%3d\n", i--);
0933デフォルトの名無しさんNGNG
printf("埋立 残り%3d\n", i--);
0934うんうんいいぞ。NGNG
printf("埋立 残り%3d\n", i--);
0935デフォルトの名無しさんNGNG
printf("埋立 残り%3d\n", __LINE__);/* ってできるのかな<試せよ */
0936デフォルトの名無しさんNGNG
>>935 だと、935がでませんか、と。
i--;printf("埋立 残り%3d\n", i--);

0937デフォルトの名無しさんNGNG
printf("ぬるぽ\n");
0938デフォルトの名無しさんNGNG
  ッタクモウ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/  
 (_フ彡        /  ←>>937
0939デフォルトの名無しさんNGNG
/* >>935の分までデクリメントしてくれた優しい>>936に萌え */

i--; printf("埋立 残り%3d\n", i--);
0940デフォルトの名無しさんNGNG
うめーーーーーーー
0941デフォルトの名無しさんNGNG
>>936
だったら、printf("埋立 残り%3d\n", 1000 - __LINE__); でいいかい ?
0942デフォルトの名無しさんNGNG
printf("埋立 残り%3d\n", 1000 - __LINE__); /*採用*/
0943デフォルトの名無しさんNGNG
printf("埋立 残り%3d\n", 1000 - __LINE__);
0944941NGNG
>>942
printf("埋立 残り%3d\n", 1000 - __LINE__); /*なんか嬉しい*/
0945デフォルトの名無しさんNGNG
なんでもいいけど、あげなくてもいいじゃないですか
0946デフォルトの名無しさんNGNG
多分スレ違いだと思うので最初に「ごめんなさい」

ちょっと教えて下さい
C++を勉強してます。ポインタ、配列、関数までは理解できました。
ttp://homepage1.nifty.com/toshio-k/prog/c/index.html
(ここで学びました)
でもここで議論されていることがさーぱり判りません
次になにをしたらいいでしょうか?
ご指導お願いします。

0947デフォルトの名無しさんNGNG
>>946
まずは、CとC++の違いを知る事だ。
0948デフォルトの名無しさんNGNG
>>946
> 多分スレ違いだと思うので最初に「ごめんなさい」

謝ればいいというもんでもない。
そんな暇があるなら、スレ一覧をじっくり眺めること。

> C++を勉強してます。

ここのスレタイトル見たか ?
C と C++ の区別もできないようならこの業界に向いてないから、「次に何もするな !!」

これが俺の指導だ。
0949デフォルトの名無しさんNGNG
おっと、忘れた...

printf("埋立 残り%3d\n", 1000 - __LINE__);
0950デフォルトの名無しさんNGNG
>>949 わらった
0951デフォルトの名無しさんNGNG
>ここのスレタイトル見たか ?
>C と C++ の区別もできないようならこの業界に向いてないから、「次に何もするな !!」

>これが俺の指導だ。

そんな言いぐさがあるかこの大馬鹿がお前は社会に向いてないか「明日氏ね」

これが俺の指導だ
0952デフォルトの名無しさんNGNG
なんでもいいけど、あげなくてもいいじゃないですか?
0953デフォルトの名無しさんNGNG
49がまだ生きていたか。
うめうめ。
0954デフォルトの名無しさんNGNG
うめ
0955デフォルトの名無しさんNGNG
うんめぇー
0956デフォルトの名無しさんNGNG
気づこうぜ、釣りなんだからさ……

マジ質問なら、こう答える。
「仕事にしたいなら、まずUMLとGoFを学べ。それからだ。
 C言語なんて使える奴はいくらでもいる。」
0957デフォルトの名無しさんNGNG
どうでもいい、埋めろ
0958デフォルトの名無しさんNGNG
平安京エイリアン
0959デフォルトの名無しさんNGNG
ロードランナー
0960デフォルトの名無しさんNGNG
DigDug
0961デフォルトの名無しさんNGNG
質問はスレ違いです。
ここは埋め立て予定地です。
0962デフォルトの名無しさんNGNG
あ、本当だ…… スマソ
0963デフォルトの名無しさんNGNG
梅
0964デフォルトの名無しさんNGNG
桜
0965デフォルトの名無しさんNGNG
木毎
0966966NGNG
966
0967デフォルトの名無しさんNGNG
8823謎の人
0968デフォルトの名無しさんNGNG
埋立
0969デフォルトの名無しさんNGNG
残り 0x20;
0970デフォルトの名無しさんNGNG
計算ミスった、、、ショボーン
0971デフォルトの名無しさんNGNG
>>969-970
printf("残り 0x%02x;\n", 1000 - __LINE__);
0972デフォルトの名無しさんNGNG
C
0973デフォルトの名無しさんNGNG
D
0974デフォルトの名無しさんNGNG
わたしを呼びましたね。

  ∧_∧
 ( ´∀`)< ぬるぽ
0975デフォルトの名無しさんNGNG
わたしを呼びましたね。

  ∧_∧
 ( ´∀`)< ぬるぽ〜
0976デフォルトの名無しさんNGNG
わたしを呼びましたね。

  ∧_∧
 ( ´∀`)< ぬるっ ぽ
0977デフォルトの名無しさんNGNG
わたしを
0978デフォルトの名無しさんNGNG
 ヨンデネーヨ
  ( ・∀・)   | | ガガッ
 と    )    | |   
   Y /ノ    .人   
    / ) .人 <  >__Λ ∩
  _/し' <  >_Λ∩Д´)/  
 (_フ彡 V`Д´)/   / ←>>974
            / ←>>975
0979デフォルトの名無しさんNGNG
>>978
    / |   / |   <なっ、なんてことするんだ!!!
   /,_ ┴─/ ヽ      , 、  ,、
  (・_.,》.'(・_,》)ミ ヽ    . / L--/ l、
 / ,,__,ニ、、 ノ( |    (・;;》 (・;;》 |    /L--/l、
 | Y~~/~y} `, ~ |   |y-,‐vi`ノl |   (・.》 (・.》 l /L--/l、
  | .,k.,.,!,.,.,r| ,! く    |, kl r| i ^<   | 'fT~ヲ x  (・〕_(・〕x|  /L/l <イクナイ
/ <ニニニ'ノ    \ / (二二‐ ' \ / l==_」 < l fmヨ ! L〔゚fヲ゚.〕、.。., .
0980デフォルトの名無しさんNGNG
 ∧__∧
 (´∀`) <ぬ
 ( つ つ
  ) ) )
 (__)_)
0981デフォルトの名無しさんNGNG
  ∧__∧
  (´∀`) <る
⊂ ⊂ )
 ( ( ( 
 (_(__)
0982デフォルトの名無しさんNGNG
 ∧__∧
∩´∀`) <ぽ
ヽ  ⊂ )
( ( (
(_(__)
0983デフォルトの名無しさんNGNG
 マゾガオオイナ!!
          | | ガガガガッ   
  ( ・∀・)   | |       人  
 と    )    | |    人  <  >__Λ∩
   Y /ノ    .人   <  >__Λ∩Д´)/ 
    / ) .人 <  >__Λ ∩Д´)/   / ←>>976
  _/し' <  >_Λ∩Д´)/   / ←>>980
 (_フ彡 V`Д´)/   / ←>>981
            / ←>>982
レス数が950を超えています。1000を超えると書き込みができなくなります。