[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 10:52 / Filesize : 232 KB / Number-of Response : 957
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 18



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






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<232KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef