1 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 06:39:50 ] C言語の入門者向け解説スレです。 ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 17 pc11.2ch.net/test/read.cgi/tech/1185286631/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 94代目 pc11.2ch.net/test/read.cgi/tech/1185452895/
771 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 02:41:58 ] >>771 宿題スレの問題をやってみるとか。 いろんな人が同じ問題を問いて解答も出してくれるので、 自分とここが違う、とか、これはこうやって実現するのか、とか、 いろいろ気づくところがあるかも知れないよ。
772 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 02:42:28 ] >>771 は>>770 にだよう。自分に言ってどうする。
773 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 02:49:26 ] 標準ライブラリ関数を使わずに、コンソールに文字列を出力してみようと思い システムコールのwriteを使ってみたつもりです。 #include <unistd.h> int main(void) { char s[] = "test\n"; write(1, s, sizeof(s)); return 0; } Cygwin の gcc 3.3.3 で、-ansi -Wall -pedantic -fno-builtin で コンパイルできて、期待した動作になりました。 で、glibc-2.6.1の io/write.c を見ると /* 続く
774 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 02:54:40 ] 続き、少しインデントを変えています。 */ #include <sysdep.h> #include <errno.h> #include <unistd.h> #include <stddef.h> ssize_t __libc_write (int fd, const void *buf, size_t nbytes) { if (nbytes == 0) return 0; if (fd < 0) {__set_errno (EBADF); return -1;} if (buf == NULL) {__set_errno (EINVAL); return -1;} __set_errno (ENOSYS); return -1; } libc_hidden_def (__libc_write) stub_warning (write) weak_alias (__libc_write, __write) libc_hidden_weak (__write) weak_alias (__libc_write, write) #include <stub-tag.h> write.c にはこれだけしかないのですが、 fd の値や *buf 内のデータなどは、どこで使われているんでしょうか? たとえば buf は NULL とだけ比較していますが、 実際に fd に向かって buf を書き込む(?)処理は、どこでやっているんですか?
775 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 11:37:00 ] >>773 www.sixnine.net/cygwin/translation/faq/faq_3.html#SEC88 >Cygwin は glibc を提供しません。 >代わりに、同じ機能の大部分(全てではありません)を提供する newlib を使用します。 >glibc を Cygwin へ移植するのは難しいでしょう。
776 名前:問題 [2007/09/13(木) 11:59:26 ] 何方か今から掲示する4問の問題が合ってるか教えてください(パソをメンテに出していて手元になくて調べられないんです^^;) キーボードより表示開始文字と表示終了文字を入力し、開始〜終了までの文字を表示しなさい char moji[]="ABCDEF〜XYZ"; /*大文字26文字*/ 実行画面 moji:ABCDEF〜XYZ 開始位置==>B 終了位置==>F 表示:BCDEF moji:ABCDEF〜XYZ 開始位置==>D 終了位置==>D 表示:D moji:ABCDEF〜XYZ 開始位置==>E 終了位置==>B 表示:EF〜XYZAB
777 名前:776の答え [2007/09/13(木) 12:00:14 ] moji:ABCDEF〜XYZ 開始位置==>B 終了位置==>F 表示:BCDEF
778 名前:776の答え(777ミスです) [2007/09/13(木) 12:01:06 ] #include <stdio.h> #include <ctype.h> int main(void) { char moji[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; /*大文字26文字*/ char start, end, *p; printf("moji:%s\n", moji); printf("開始位置==>"); scanf("%c", &start); fflush(stdin); printf("終了位置==>"); scanf("%c", &end); fflush(stdin); if(!isalpha((int)start) || !isalpha(end)) return 1; start = (char)toupper(start); end = (char)toupper(end); p = moji + start - 'A'; for(;;) { putchar(*p); if(*p == end) break; if(*(++p) == '\0') p = moji; } return 0; }
779 名前:問題2 [2007/09/13(木) 12:04:11 ] 文字列と削除文字列を入力し文字列中から削除文字を排除しなさい 実行画面 文字列入力(m1)==>ABCDEFAABCDABC 削除文字==>A 結果文字列(m2):BCDEFBCDBC
780 名前:問題2の答え [2007/09/13(木) 12:05:38 ] #include <stdio.h> #include <string.h> #define MAX 256 int main(void) { char str[MAX],ch; size_t sz_str,i; printf("文字配列入力(m1)==>"); fgets(str,sizeof(str)/sizeof(str[0]),stdin); sz_str=strlen(str); printf("排除文字==>"); ch=getchar(); for(i=0; i<sz_str; i++) { if(str[i]!=ch) putchar(str[i]); } return 0; }
781 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 12:25:21 ] この形式の問題何回目だよwwwww
782 名前:デフォルトの名無しさん [2007/09/13(木) 12:34:12 ] くだらん質問なんだけど バッファサイズを256とか512みたいな16の倍数にしてるコードよく見るけど そうするとどういう効果があるの?
783 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 12:34:49 ] 単にキリがいいから使ってるだけ
784 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 13:12:50 ] どっちかっつうと2の乗数だが、キリが良いから
785 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 13:17:36 ] >>784 2の乗数っていうか、2の羃だね。
786 名前:デフォルトの名無しさん [2007/09/13(木) 13:23:03 ] キリがいいからか 漏れもなんとなくキリがいいから使ってたよw サソクス
787 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 13:33:44 ] 文系グラマは100とか1000使うのかな
788 名前:デフォルトの名無しさん [2007/09/13(木) 13:46:38 ] main関数の戻り値ってどういう時使うんですか?
789 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 13:55:42 ] >>788 コマンドインタプリタで該当プログラムの終了ステータスとして利用する。
790 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 15:03:30 ] >>788 他のプログラムから起動させたとき
791 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 16:22:48 ] >>788 #!/bin/sh if ./a.out; then echo "成功" # main が 0 を返した時 else echo "失敗..." # main が 1 を返した時 fi
792 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 20:54:10 ] printf("%6.1f",123.45); を実行すると 123.5 となるのはなぜですか? 123.4になぜなりませんか?
793 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 20:57:12 ] 一つしたの桁を四捨五入するから。
794 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 21:01:27 ] >>793 thx
795 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 01:02:02 ] >>775 ありがとうございます。newlibですか。 ではCygwinはおいといて、>>774 はglibcの実装についての質問とさせてください。 glibcのwrite.cで定義されている __libc_write の仮引数の使われ方について なぜこの引数でfdへ書き込みがおこなわれるのでしょうか?
796 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 02:17:33 ] たぶんそのソースは実際にコンパイルされるコードじゃない。 システムコールをどうやって呼ぶかはOSやCPUによって異なるから、それはただのプレースホルダだろう。 ざっとみてみたところ、sysdeps/unix/syscalls.listからmake-syscalls.shで自動生成されるんじゃないかと思った。 でも複雑すぎて追いきれん。 実際に特定のターゲット向けにビルドしてみて、生成されたファイルを見なきゃ判らなさそう。
797 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 02:41:12 ] >>795 その関数はターゲット用のwrite()が存在しない場合に使われるダミー関数。 writeしても呼ばれない。
798 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 08:46:05 ] 0: -19.312 -0.144 -0.996 1.412 -0.173 1.933 3.954 4.917 6.333 1.552 -1.515 -1.667 -0.151 0.230 -0.024 0.083 0.377 0.665 0.722 -0.195 -2.321 -1.814 -0.133 0.515 1.343 0.000 1: -19.304 -0.162 -1.799 4.184 1.255 -0.393 -0.335 0.469 1.268 -2.177 -2.390 0.198 -0.151 -0.086 0.111 0.100 0.038 1.462 0.937 -0.569 -0.975 -1.590 -0.486 -0.450 0.133 0.000 2: -18.166 -0.254 -0.178 1.909 2.438 6.705 5.126 -4.463 -0.205 2.752 1.499 4.116 -0.151 0.167 -0.024 -0.312 -0.069 1.179 0.724 -0.214 0.460 -0.921 0.742 0.284 -0.377 0.000 こうかかれたファイルから小数点のところだけ とりだして二次元配列にいれるにはどうすればいいすかね? 小数点のところ26個あるんですけど。
799 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 09:33:40 ] コロンの後まで飛ばして読み込め
800 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 11:16:37 ] 指定したパスに、ある拡張子のファイルが存在するか調べるために _dos_findfirstを使用して、BCCでコンパイルしたら > Warning W8053 2007-09-14_1.c 11: '_dos_findfirst(const signed char *,unsigned int,find_t *)' > is obsolete in function main という警告が出ました。obsoleteとは「旧式の、廃れた」という意味です。 これに代わるものはありますか?
801 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 11:26:11 ] >>800 dos.hの_dos_findfirst()か、_dos_xxxは古いわなあ。 io.hの_findfirst()でどうか。
802 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 11:32:30 ] >>801 なるほど、ありがとうございました。
803 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 14:01:30 ] ものすごく初歩的な質問で申し訳ありません。 C言語の入門書にそって勉強していたのですがすぐに躓いてしまいました。 hello worldを表示するソースファイルをコンパイルしようとしたのですが下のエラーが出てきてしまいました。 C:\cwork>bcc32 sample.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland sample.c: エラー E2209 sample.c 2: インクルードファイル 'stdio.h' をオープンできない 警告 W8065 sample.c 6: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main ) *** 1 errors in Compile *** 何かと思い検索してみて確認したのですが原因がわかりません。 なにか分かる方いらっしゃればアドバイスよろしくお願いします。
804 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 14:18:24 ] >>803 C:\borland\bcc55\Include\ の中にファイルはあるか? インストールはどのファイルをどうやって実行した?
805 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 14:24:35 ] >>803 www.google.co.jp/search?q=bcc32.cfg
806 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 14:27:54 ] >>803 PATHを通してないんでしょうな、多分。
807 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 14:41:49 ] PATH通してなかったらbcc32自体出来ないだろ
808 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 14:55:56 ] オレもそう思った。 cfgもデフォルトだろうし、アップデート用のインストーラ使ったんじゃないかと予想。
809 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 15:13:25 ] 皆様すばやいレスありがとうございます。 >>804 様 C:\borland\bcc55\Includeの中にstdio.hはありました。 インストールはその入門書についてあるCDに収録されていた freecommandlinetools2.exeというファイルを実行しました。 >>807 様 Pathは通したつもりでいます。 入門書に書かれてあることをそのまま行っただけなので間違いないとは言い切れませんが。
810 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 15:20:23 ] C:\borland\bcc55\Bin に、 bcc32.cfg、ilink32.cfg はあるか? テキストエディタで開いて、以下に設定されているか確認。無ければ以下のをそれぞれ保存 ・bcc32.cfg -I"c:\Borland\Bcc55\include" -L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\PSDK" ・ilink32.cfg -L"c:\Borland\Bcc55\lib;c:\Borland\Bcc55\lib\PSDK"
811 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 15:22:48 ] 結局、インクルードパスか、、、cfgが確実だな
812 名前:803 mailto:sage [2007/09/14(金) 15:36:19 ] >>810 様 bcc32.cfg、ilink32.cfg はC:\borland\bcc55\Binにあります。 bcc32.cfg、ilink32.cfg ともに;c:\Borland\Bcc55\lib\PSDK"の部分はありませんでした。 そこで;c:\Borland\Bcc55\lib\PSDK" を追加してみましたがやはりエラーでした。
813 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 15:36:28 ] >>807 >>808 知ったかぶるなら黙ってろ。お前らの頭じゃPATHの意味すらわかってなさそうだから。
814 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 15:39:02 ] >>812 面倒くさいんでこれ使っちゃいな ttp://www.vector.co.jp/soft/dl/win95/prog/se141451.html
815 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 15:41:25 ] >>812 どうしても嫌ならこれで ttp://www.enri.go.jp/~fks442/K_MUSEN/bcc.htm
816 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 15:43:39 ] >>807 カレントディレクトリをコンパイラのある場所に移動すりゃ良いんじゃね? エラーメッセージから推測できるのは、必要なファイルのある場所の 設定がされていないということ。つまり、そういうことだ。 PATHが必要なものに設定されていればどうなるか、分かるよね?
817 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 15:43:57 ] >>813 おまえ、名指しで何か言うなら知ったかしないほうがいいぞ PATHの意味を言ってみ?
818 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 15:44:54 ] >>816 >C:\cwork>bcc32 sample.c >Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland この2つからPATHが通っているのは明白
819 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 15:46:34 ] >>817 味方にボールを送る事に決まってんだろうが
820 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 15:53:56 ] それはPASS
821 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 15:56:07 ] >>819 アホか ヤマハの電動アシスト自転車の事だろ
822 名前:803 mailto:sage [2007/09/14(金) 15:57:16 ] >>814-815 様 ありがとうございます。 試してみようと思います。 >>816 様 ソースファイルを作成したc:\cworkというディレクトリに移動しているのですが、こういうことでしょうか?
823 名前:803 mailto:sage [2007/09/14(金) 16:10:52 ] >>814 様のソフトをダウンロードして自動設定したら解決できました。 皆様お忙しいところくだらない質問に時間を割いていただき本当にありがとうございました。
824 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 16:13:02 ] 結局、原因はなんだったんだろうな
825 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 16:19:23 ] どういたしまして がんばって
826 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 16:21:01 ] cfgのタイプミスだろうなあ・・・
827 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 16:36:51 ] >>821 の言っている事がわからない
828 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 16:41:00 ] 知らないならレスしなくていいよ つーか知っててもスルーしてるが
829 名前:デフォルトの名無しさん [2007/09/14(金) 18:49:34 ] FFFFFF80を2進数に直すと、どうして 11111111 11111111 11111111 1000000になるのかわかりません 特に、80は 0101000では?
830 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 18:51:39 ] >>829 (0101)2 → (5)10
831 名前:デフォルトの名無しさん [2007/09/14(金) 18:56:10 ] レス、ありがとうございます ??? 間違っているのですか?
832 名前:デフォルトの名無しさん [2007/09/14(金) 18:56:41 ] 16進の80 2進だと1000000 10進の80と誤解してると思われ
833 名前:デフォルトの名無しさん [2007/09/14(金) 18:59:02 ] 0一個たんなかった
834 名前:デフォルトの名無しさん [2007/09/14(金) 19:02:19 ] >>832 ん〜どうしてもわかりません では、2進数の80では、0101000で合っていて 16進数の80では、どうして1000000になるのでしょうか?
835 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 19:10:41 ] 2進数の80なんかあるか。2進数は1と0だけ。
836 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 19:12:30 ] (x)y を y進法で表すxとする (80)10 = (0101000)2 (80)16 = (128)10 = (10000000)2
837 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 19:13:01 ] 16進数の80 = 10進数の128 = 2進数の10000000 16進数の50 = 10進数の80 = 2進数の10100000
838 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 19:16:47 ] >>836 >>837 計算違くね (80)10 = (0101 0000)2
839 名前:837 mailto:sage [2007/09/14(金) 19:18:05 ] うぁ。みすorz
840 名前:829 [2007/09/14(金) 19:23:39 ] 皆さん、レスありがとうございます。 >>16進数の80 = 10進数の128 = 2進数の10000000 16進数の50 = 10進数の80 = 2進数の10100000 では、一旦10進数に置き換えてから、2進ぬするのでしょうか? どうやれば、16進数の80は10進数の128に、又は16進数の50は10進数の80に 直せるのでしょうか?
841 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 19:31:21 ] >>840 ググれば解説しているサイトはたくさんある
842 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 19:32:12 ] >>840 16進から2進の場合、は分割するんよ FFFFFF80 F=1111 , 8 = 1000 , 0=0 あとはくっつける 1111 1111 1111 1111 1111 1111 1000 0000 FFFFFF80(16)=11111111111111111111111110000000(2) って感じ
843 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 19:34:44 ] >>840 失礼、ちょっと訂正 FFFFFF80 F(16)=1111(2) , 8(16)=1000(2) , 0(16)=0000(2) ね 10進に直すより16進→2進 、2進→16進の方が楽(のはず)
844 名前:デフォルトの名無しさん [2007/09/14(金) 19:42:23 ] さすがにゆとり教育杉な気もしてきた
845 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 19:44:21 ] C言語がいいらしいんですが無料でできますか?
846 名前:デフォルトの名無しさん [2007/09/14(金) 19:46:33 ] はい
847 名前:デフォルトの名無しさん [2007/09/14(金) 20:11:41 ] ありがとうございましm(__)m これで先に進めます
848 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 20:49:08 ] >>840 の解説に同意。 16って2^4(二の四乗)の事ですよね。 つまり、2進数表現4ビットの最大値(1111) が、16進数Fに相当している事もわかりますよね。 したがって、>>840 の解説を御借りすると、 FFFFFF80 F=1111 , 8 = 1000 , 0=0 【|】(パイプ)で区切ると 1111 | 1111 | 1111 | 1111 | 1111 | 1111 | 1000 | 0000 (2) F F F F F F 8 0 (10) となります。
849 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 20:50:17 ] >>840 じゃなくて、>>842 でした。
850 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 22:59:14 ] C言語なんですが、ファイルに書き込むときって自分でEOF書き込むんですか?? それとも、閉じるときに勝手にやってくれるんでしょうか。
851 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 23:03:47 ] >>850 閉じるときに勝手にやってくれる。 つか、EOFというデータはないんだけど。 ファイルの最後まで読んだときfreadなどのファイル入出力関数がEOFを返すだけ。
852 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 23:24:22 ] あ、そうなんですか! てっきり、改行コードみたいにEOFっていう記号があるのかと思いました。。。
853 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 23:37:45 ] URL
854 名前:デフォルトの名無しさん mailto:sage [2007/09/14(金) 23:59:28 ] >>796 >>797 超ありがとうございます。 勉強します。
855 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 00:25:48 ] >>852 EOF=1A じゃなかったかな。昔のテキストファイルには使っていたと聞くよ。
856 名前:852 mailto:sage [2007/09/15(土) 00:40:18 ] >>855 MS-DOSのテキストファイルにはEOF(1Ah)が書かれていたようですね。 EOF(1Ah)がファイル内に実際にデータとして書かれているものと書かれていないもの さらに、書かれているもののうちアプリケーションがこのEOF(1Ah)をデータとして 意識すべきものと意識しなくてよいもの があるようですね。 ファイルのデータをレングスで管理しているファイルシステムはEOFがなくて、 このレングスがないファイルシステムにはEOFがデータとしてある。 ということでしょうか。
857 名前:852 mailto:sage [2007/09/15(土) 00:45:30 ] ということで>>850 さん EOFをアプリケーションで書き出す必要があるかないかは、 「ファイルの仕様による」ということです。 Windowsのハードディスクのファイルは書き出す必要はありません。
858 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 00:51:53 ] >>852 、855 ありがとうございます〜 むっちゃわかりやすかったっす。
859 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 01:47:18 ] CのライブラリのEOFとアプリが使う終了のマークを一緒にしたらだめでしょ。
860 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:08:55 ] >>817 お前とかうぜーよ、偉そうに。英語すら理解していないだろ。 ttp://dictionary.goo.ne.jp/search.php?MT=path&kind=ej&mode=0&base=1&row=0 必要なデータやプログラムのある場所へPATHを通しておくことで どこのディレクトリからでも扱えるようにできるようになることくらい知っているだろ。 っつかお前、DOSとかその他そういった仕組みを持ったシステムを使ったことないだろ?
861 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:12:21 ] >>857 >Windowsのハードディスクのファイルは書き出す必要はありません。 判っていないのならレスしなくてもよろしいのでは?
862 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:13:29 ] どうやらPATHの意味をそれぞれ勝手に解釈している同士が罵り合っている模様。 仲のいいことで。
863 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:17:01 ] >>861 そういうレスはいけないと思うよ。 間違っているを指摘すべきだと思う。
864 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:41:12 ] 猫でもわかるC言語プログラミングP.196によると下記のようなプログラムはだめ ということですがBCCではコンパイルが通り、実行しても問題は見られませんでした char *strではなくchar str[32]なら可とのこと なぜでしょうか? もうひとつ 下記のプログラムでprintf("%sの長さは%dです\n",*str,len); のように%sに対して*strとすると実行時にエラーになりますが *strなら中身のASCIIコードが入っているはずで問題ないと思うのですが… ご教示願います。 #include <stdio.h> #include <string.h> int main() { char *str; size_t len; printf("文字列を入力してください。--"); scanf("%s", str); len = strlen(str); printf("%sの長さは%dです\n",str,len); return 0; }
865 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:41:52 ] >>864 %s→%c
866 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:43:37 ] char str[32]でも不可です
867 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 02:48:22 ] >>864 > 猫でもわかるC言語プログラミングP.196によると下記のようなプログラムはだめ > ということですがBCCではコンパイルが通り、実行しても問題は見られませんでした > char *strではなくchar str[32]なら可とのこと 問題が無かったのは str の指す先が*偶然*致命的な場所で無かっただけで 予期しない場所が書き換えられています str が指す先がちゃんと確保されている場合には問題は無いです
868 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 03:05:22 ] >>864 その本には、なぜダメかってのは書いてないのか。
869 名前:デフォルトの名無しさん [2007/09/15(土) 04:39:20 ] scanfとprintfの関数の違いと働きを教えてください。お願いします。
870 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 04:41:45 ] ja.wikipedia.org/wiki/Scanf ja.wikipedia.org/wiki/Printf
871 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 04:48:43 ] >>869 scanf - scan with format printf - print with format