- 1 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 16:45:25 ]
- C言語の入門者向け解説スレです。
・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 9 pc11.2ch.net/test/read.cgi/tech/1173284217/ 過去スレ Part 1 pc8.2ch.net/test/read.cgi/tech/1146700389/ Part 2 pc8.2ch.net/test/read.cgi/tech/1153818463/ Part 3 pc8.2ch.net/test/read.cgi/tech/1160682950/ Part 4 pc8.2ch.net/test/read.cgi/tech/1162999861/ Part 5 pc8.2ch.net/test/read.cgi/tech/1165022193/ Part 6 pc10.2ch.net/test/read.cgi/tech/1167325490/ Part 7 pc10.2ch.net/test/read.cgi/tech/1170064980/ Part 8 pc11.2ch.net/test/read.cgi/tech/1171946674/ 関連スレ C/C++の宿題を片付けます 84代目 pc11.2ch.net/test/read.cgi/tech/1172981618/ くだすれC言語(初心者用) Part.2 pc11.2ch.net/test/read.cgi/tech/1172099763/ 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131 pc11.2ch.net/test/read.cgi/tech/1170338926/ 【初心者歓迎】C/C++室 Ver.35【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1171888583/ 【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html
- 770 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 21:12:05 ]
- 亀がしゃべった!
- 771 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 21:34:43 ]
- C始めて3日目の俺がきましたよ。
研修でダンプ出力するPGを作成する課題やってるんだけど、 ファイル開く→開いたファイルから16バイト読み込む →読み込んだデータの16進数変換を行いHEXに格納する までは出来たんだが、その後の置換処理がさっぱり分からん('A`) 置換処理はHEXに格納されたデータの表示できないコードを ピリオドに置換してCHARに格納するんだが、検討もつかないし_| ̄|○ 助けてくだしあ
- 772 名前:デフォルトの名無しさん [2007/04/11(水) 21:40:26 ]
- >>771
isprint関数を使う isprint(c)? c: '.';
- 773 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 21:43:06 ]
- >>770
亀レスって言葉をご存知?
- 774 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 21:44:03 ]
- >HEXに格納された
意味が不明すぎる char配列に16進数の文字を入れてるって事?数値?
- 775 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 21:50:02 ]
- >>773
く、くまー ネタにマジレ(ry
- 776 名前:771 mailto:sage [2007/04/11(水) 22:20:05 ]
- 参考書片手に悩んでた。
>>772 レストンクス ちと考えてみるわ。 >>774 HEXには sprintf(HEX,"%X",ss) でss内の文字列を16進表示で入れたんだが。 おそらく数値?
- 777 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 22:25:04 ]
- >>768
浮動小数点数を有効桁いっぱいいっぱいまで伝達しようとすると悩ましいね
- 778 名前:714 mailto:sage [2007/04/11(水) 23:14:51 ]
- >>769
いやオレはもうチェスで懲り懲りだよww プログラム部はだいたい解決策が決まってるけど 思考の部分は定石と言えるような方法がない (まあ思考とプログラムも明確に分けれるもんじゃないけどね) これ以上はスレ違いなんでそのスレの住民と一緒にがんばれ!
- 779 名前:771 mailto:sage [2007/04/11(水) 23:39:22 ]
- >>774
自分でも問題の意味を分かってなかったらしい。すまぬ。 HEXDATA CHARADATA | ̄| ̄| ̄| ̄| ̄| ̄| ̄| ̄| | ̄| ̄| ̄| ̄| ̄| ̄| ̄| ̄| *|54|45|53|54| | | | | *|T|E|S|T|. |. |. |. |  ̄  ̄  ̄  ̄  ̄  ̄  ̄  ̄  ̄  ̄  ̄  ̄  ̄  ̄  ̄  ̄ 見づらくてスマヌ('A`) こんな感じで格納したいわけで。 置換処理でisprint使うっていうのは大体分かったけど、for文で回してなにかしろ みたいなことを講師が言っていた希ガス。何回したらいいの(;´Д`)??
- 780 名前:771 mailto:sage [2007/04/11(水) 23:40:09 ]
- なんてこったい。
ステキにずれてらっしゃる_| ̄|○
- 781 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 23:43:15 ]
- 数値をCHARADATAにそのまま書けばいいじゃん
- 782 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 23:52:39 ]
- 回すものといえば皿ぐらいしか
- 783 名前:771 mailto:sage [2007/04/12(木) 00:06:20 ]
- レストンクス。
>>781 CHARADATAに書き込むってisprint使ってですかい? >>782 俺の頭の中で星が回ってるよ。
- 784 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 00:10:22 ]
- >>783
isprintで表示できないコードを判別して表示できないのならピリオドを、 表示できるのなら、そのコードを代入
- 785 名前:771 mailto:sage [2007/04/12(木) 00:15:09 ]
- >>783
なるほど分かってきた。 isprintで表示できるって判断したときに返す値って何? 表示できないってときは多分0返してくるんだよね?
- 786 名前:771 mailto:sage [2007/04/12(木) 00:17:48 ]
- 784の安価ミス
- 787 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 00:42:50 ]
- >>785
そこまでヒントもらってるんだからマニュアルみなよ。ぐぐってもいいしさ。
- 788 名前:771 mailto:sage [2007/04/12(木) 00:49:03 ]
- ある程度分かったから参考書片手に頑張ってみるわ。
おまいらありがとう
- 789 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 08:32:40 ]
- >>785
Cの真偽値の基本は、0でない=真、0=偽 真の場合、0でない値として必ず1を返すケースがいくつか定義されているが、 明言されていない場合は、0でないことだけが保証される。
- 790 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 11:41:47 ]
- なんで*(s+1)とs[1]の二つの書き方をつくったのよ>K&R
*s++は*にしかできない書き方だし *(*(s+1)+2)は読みにくいからs[1][2]と書くんだけど なんか一貫性に欠けてるぞオイ なんでアメ人は人工言語にこんな汚い要素を持たせるのよ 完璧主義で潔癖症なオレはポインタと配列を使うとき、毎回迷うじゃん
- 791 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 11:53:05 ]
- >>790
*を使わなければいい。 *s++なんてロジックは却って最適化を阻害しかねない。 s[offset++]でいいジャマイカ。
- 792 名前:デフォルトの名無しさん [2007/04/12(木) 11:56:03 ]
- 読み込むファイルにひらがなあったら駄目だけどね
#include <stdio.h> #include <string.h> #include <ctype.h> #define BUF_SIZE 16 int main() { FILE *fp; char filename[1024] = {'\0'}; char buff[BUF_SIZE] = {'\0'}; char *temp = NULL; size_t len = BUF_SIZE; fgets(filename,sizeof(filename),stdin); if(temp = strchr(filename, '\n')) *temp = '\0'; fp = fopen(filename, "r+b"); while(len == BUF_SIZE){ unsigned int i; len = fread(buff, 1,BUF_SIZE , fp); for(i = 0; i < len; i++) printf("%02x ",(unsigned char)buff[i]); for(; i < BUF_SIZE; i++) printf("-- "); for(i = 0; i < len; i++){ int c = buff[i]; if(isspace(c)) c = ' '; putchar(c); } putchar('\n'); } fclose(fp); return 0; }
- 793 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 12:47:04 ]
- >>791
そうなんだけど *s++ = *t++みたいな記述は確かに便利だし s[i]は添え字の分のメモリーも必要だし ちと読みにくくなるけど *(*(s+1)+2)でいくか
- 794 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 13:01:03 ]
- >>793
>s[i]は添え字の分のメモリーも必要だし ダウト。 今時のコンパイラはどっちで書いても同じコードを吐いてくれる(ことが期待できる)。
- 795 名前:さいきち [2007/04/12(木) 13:05:57 ]
- 教えてください。C言語を勉強し始めたひよっこです。
Cコンパイラ(Borland C++)をPCにインストールして、コンパイルしようとしたら 以下のようなエラーがでてウマく行きません。何が原因なのでしょうか? エラー E2209 sample1.c 5: インクルードファイル 'stdio.h' をオープンできない 警告 W8065 sample1.c 10: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main ) 10日でおぼえるC言語入門 という本を見て勉強を始めたのですが勉強を進めきれず 困っています。 どなたか教えてください。
- 796 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 13:06:10 ]
- * は直接参照する時しか使わないな。
インデックスを使うときは必ず [ ] を使う。 その方が読みやすい。 全てのループは if と goto で書けるが そう書かないのと同じ事だ。 分かりやすく書くのが至上。 後の事は最近のカシコイコンパイラが最適化してくれる。
- 797 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 13:11:11 ]
- >>795
このあたりから setbcc とかを参考にしてみるといいかもしれない。 ttp://lacc.biz/cpp/cpp01.html
- 798 名前:さいきち [2007/04/12(木) 13:17:18 ]
- 大変申し訳ありません。795で質問しました さいきち です。
わたくしはルール違反をしてしまいました。過去ログを調べていません。調べて見ます。 795の質問は『無視』でお願いいたします。
- 799 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 15:49:17 ]
- >>798
つい最近まったく同じ質問があって、インストールしたbccがアップデート版だった というのがあったな。
- 800 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 16:20:45 ]
- argv[1]とargv[1][0]ってどう違うのですか?
どちらも一つ目のオプションを指してると思うんですが printf( "%p %p\n", argv[1], argv[1][0] ); で表示させると違う値になります
- 801 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 16:24:04 ]
- >>791>>794>>796
コンパイラがちゃんと最適化してくれるのか 知らなかった これからは[]で統一する やっぱ*(*(s+1)+2)なんて書かれたらウザいよねw
- 802 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 16:25:44 ]
- >>800
argv[1] はchar* argv[1][0] は char
- 803 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 16:27:14 ]
- argv[0]は&argv[0][0]と同じってことですね
- 804 名前:766 mailto:sage [2007/04/12(木) 16:36:19 ]
- 構造体のなかのintをcharに全部変えたらbase64の文字列が短くなって通信ができるようになりました
>>760さんありがとうございました。><
- 805 名前:デフォルトの名無しさん [2007/04/12(木) 18:42:57 ]
- 入力した数字が0ではない間ループするってやつで
int aho[100]; int i=0; while(aho[i]!=0){ scanf("%d",&aho[i]); i++;} ってやると0入力してもおわらんのだけどなんでじゃ?
- 806 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 18:51:52 ]
- >>805
標準入力からaho[0]に数値が入力されてるのに、while文の判定ではaho[1] 見てるからじゃね?
- 807 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 18:54:45 ]
- >>805
「入力した数字」なのだから、入力前に検査しちゃダメだろう。 do { scanf("%d", & aho[i]); ++i; } while (aho[i - 1] != 0); or int tmp = 0; do { scanf("%d", & tmp); aho[i] = tmp; ++i; } while (tmp != 0); いずれにしても、scanf()をそのまま使うのはお勧めできないが。
- 808 名前:デフォルトの名無しさん [2007/04/12(木) 20:37:29 ]
- >>806〜>>807
ほんとだw ありがとう
- 809 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 21:05:32 ]
- >>800
別に配列にしたからって、より最適化してくれるってわけでもないがな。
|

|