[表示 : 全て 最新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/

643 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 14:50:06 ]
初期化でBYTEレベルでALL 0 にしたい場合は、
= {0} での初期化と、 memset での初期化の違いはあるの?

@ AAA aaa1 = {0};
A AAA aaa2; memset(&aaa2, 0, sizeof(AAA));

は同じことをしているのかということです。

644 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 15:17:06 ]
構造体は知らないけど、配列の場合はコンパイルすると同じコードになるって前にみかけた気がする。

645 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 15:28:18 ]
>>643
コンパイラによっては、{0}の方が、より最適化される可能性が高い。


646 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 15:29:45 ]
>643
@ graceful
A rude

647 名前:デフォルトの名無しさん [2007/09/10(月) 15:58:29 ]
指定の行の削除方法が分かりません

例えば下記のようなファイルがあり

あいう
あああ
いいい
ううう

これを「いいい」だけ削除して下記のようにしたいのですが、1行だけ削除するようなやり方がわかりません

あいう
あああ
ううう

やりかたをご教授いただけないでしょうか


648 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 15:59:05 ]
サンプルとかみても memset のほうがおおい。
AAA aaa1 = {0}; とかで構造体を初期化しているのってほとんどみないような。

649 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 16:01:45 ]
>>648
なんで、構造体を初期化する必要があるの?
構造体メンバーを初期化する必要はあると思うが、構造体全体の初期化はあまり意味がないだろう。

650 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 16:03:13 ]
そもそも、初期値が0とは限らない。

651 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 16:04:28 ]
windows api つかうときってmemsetで初期化することあるでしょ。
CRITICALSECTIONとか、RECTとか。いちいちメンバごとに初期値いれるソースとかみたことないよ。
いったん初期化してから個別に値いれることはあるけど。



652 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 16:11:33 ]
@ AAA aaa1 = {0};
A AAA aaa1; memset(&aaa1, 0, sizeof(AAA));

@=A FA?

653 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 16:18:14 ]
={0} は浮動小数点やポインタも正しく 0.0 や NULL に初期化される。
memset で全ビットを 0 にする方法では、処理系によっては浮動小数点やポインタが 0.0 や NULL にならない場合がある。
@≠A

654 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 16:45:34 ]
>>653
ありがとう。すっきりしました。

655 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 17:37:39 ]
>>647
改行コードで区切って、消す行の後を違う領域に分けた後、消す行のところに繋げる

656 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 20:07:43 ]
memsetで初期化のクセを覚えてしまうと、
C++のクラスのオブジェクトに対してもそれをやりそう。

657 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 20:45:13 ]
コンストラクタがまさかのmemset呼び?

658 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 20:49:28 ]
>>657
うちの連中ならやりそうだw
ところで、>>637のは
AAAA aaa1 = {}; //{0}の0省略
はできないの?C++の本に乗ってたんだけど、Cでも試したら出来てそうなんだけど。

659 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 21:05:36 ]
>>658
エラー E2264 式が必要といわれた

@BCC5.5


660 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 21:06:25 ]
>>658
C++ならできた。CL.EXE

661 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 21:09:58 ]
>>658
ANSI C的には文法違反。
{}の中には少なくとも一つの式がいる。



662 名前:658 mailto:sage [2007/09/10(月) 22:42:45 ]
>>659-661 なるほど。情報サンクス。
gccではc89,c99モードにしてやっても出来るみたいなんだけど、
c99はまだ完全なサポートではないし、ことさら制限する様なことはしないのかも。
jiscのサイトから拾ったC言語の文書では、省略可を表すopt記号が無かったからやはり省略不可みたい。
参考)ttp://www.jisc.go.jp/app/pager?id=123813

663 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:49:09 ]
Cを無料でダウンロード出来るトコなんてないですかそうですか

やっぱり電気屋とかで買うんですかね?

664 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:50:54 ]
てめぇ〜〜〜ら、一生に一度の俺の質問に答えてくれ!
どうしてC言語の勉強を始めたの?

665 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:52:24 ]
日本語を無料でダウンロード出来るトコなんてないですかそうですか

やっぱり日本とかで買うんですかね?

666 名前:663 mailto:sage [2007/09/10(月) 23:11:01 ]
>>665
楽しいか?

667 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:14:07 ]
>>664
遊ぶのに理由がいるのかい?

668 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:17:54 ]
>>667
遊びというのは個人的な理由。ではなぜ C言語を選んだ かの理由は???

669 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:19:06 ]
>>667
君、そういうことを言ってしまうと、自分にとって遊びだからという理由で
なぜその遊びを選んだかの理由は関係ないじゃ〜〜んって無責任な人間になってしまうよ?
なぜなら、殺人を遊びに選んだら、なぜ殺人をしたんですか?という質問に対して
君は常に「遊びだから」という身勝手な言い訳をし続けることになるから。

670 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:19:58 ]
身勝手かどうかは主観に依存するよな。

671 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:30:07 ]
>>670
殺人を遊びという理由は身勝手。なんで殺人をしてしまったのか?
という理由が述べられていない。ただの愉快犯なら情状酌量の余地なし。
すぐさま死刑で良いでしょうw



672 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:31:01 ]
>>670
要するにお前は理由もなくC言語をやっていたんだ。まぁあれだろ
通っていた学校でやらされた程度で、実は面白くないと?w

673 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:31:47 ]
同意。身勝手かどうかを判断する客観的な主体は存在し得ない。

深読みしてみると質問の趣旨は、なぜ数あるプログラミング言語の中から
Cを選んだのか?ってことなんかな。つか複数使える人のほうが多いと思うがね。

674 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:34:14 ]
>>664
単位取得に必要だったからやった
今も後悔はしていない

675 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:36:05 ]
まぁ、普通に答えると始めたきっかけは高校でやらされたからに他ならない。

676 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:38:04 ]
何も知らないころよく聞く言語名がCだったから、かなぁ

677 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:39:48 ]
>>663
環境書かないと分からんだろが!
サンプルソースが欲しいのか
コンパイラが欲しいのか
何が欲しいのかもよく分からん

フリー
コンパイラ
www.google.co.jp/

678 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:42:10 ]
>>677
>>665

679 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:43:09 ]
>>664
きっかけは、情報処理技術者試験のためデス。
学校でFORTRAN習ったけど、当時自宅のMS-DOS環境で開発環境を入手できたのがCだった。

680 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:52:47 ]
>>664
最初は高校でやったMS-BASIC(だったか?)によってプログラミングが楽しくなり
学校においてあった8ビットCPUのポケコンをさわり、欲しくなったので先生に頼んで取り寄せ、16ビットCPUのポケコンを購入
インタプリタで動作するCが組み込まれていてBASICより面白いと思う
大学で自分のPCを買えるようになってコンパイラ方式のCをはじめる

681 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:59:48 ]
>>673
遊びこそ主観だろ、答えたくないバカは黙ってろよ。歩インポイントでお前を
名指しして質問されているわけじゃないだろ?w お前みたいな基地外にはむしろ聞いてないって。
それから、何が主観かなんてどうでも良いんだよ。理由がいえないなら黙ってろ



682 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:00:22 ]
うひょっ、わけわからない入力をしてたw
歩インポイント > お前にピンポイント

683 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:05:49 ]
動的に確保した領域の大きさってどうやったらわかりますか?

684 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:08:23 ]
>>667
全員が全員、遊びでC言語をやっているわけじゃないと思うんだが?
勝手にC言語=遊びみたいなことを言うなよw
お前の場合は遊びに理由がって関係ない話をしているだけ。
お前にとっては遊びで始めたというのが理由であって、C言語は遊びじゃないぞ。

685 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:23:04 ]
>>683
どこかに書いておけばいい

686 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:26:06 ]
自転車置き(ry

687 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:26:39 ]
int *a;

のとき、
aはポインタのアドレス
*aはポインタに格納された値
なんですよね?
じゃあ
&aだと何を表すんですか?

688 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:27:33 ]
>aはポインタのアドレス
いいえ

689 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:28:22 ]
じゃあなによ?

690 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:34:50 ]
aはポインタ型の変数
また、&aはaという変数へのポインタ



691 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:34:52 ]
ポインタ



692 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 01:01:04 ]
>>687
*aはポインタが指し示すオブジェクト。とでもいった方がよいかな。
値といっても=の左辺になれる事を理解すること。

693 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 01:20:04 ]
aは、int型のオブジェクトのアドレスを格納するポインタ型の変数=ポインタ。
*aはポインタが指し示すオブジェクト。
&aで、int型のポインタ変数aのアドレスを参照できる。

int a = 10;
int *p;
p = &a;
printf("aのアドレスは%p\n", p);
printf("aのアドレスは%p\n", &a);
printf("aの値は%d\n", *p);
printf("aのポインタのアドレスは%p\n", &p);

これであってますか?

694 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 01:25:53 ]
おk

695 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 01:27:08 ]
>>695
*p = 20;
などの操作をして、aの値を確認してみるのも良い。

696 名前:695 mailto:sage [2007/09/11(火) 01:28:16 ]
ミスった
>>693ね。

697 名前:687 mailto:sage [2007/09/11(火) 01:39:59 ]
なるほどよくわかりました
ありがd

698 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 02:53:25 ]
コンパイラがVisual C++ 2005 Express Edisionでstring,hが開けないって出るんだけど何ででしょう?

定義は#include <string,h>って書いてるんですけど他に何か設定しないとダメですか?

699 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 02:56:20 ]
string,hじゃなくてstring.hじゃないか?

700 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 02:57:25 ]
×string,h
○string.h
というオチじゃないだろうな?

701 名前:698 mailto:sage [2007/09/11(火) 03:02:51 ]
そ れ だ

メモに貼り付けてフォント変えたら違いが判った
ありがとう!



702 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 06:39:00 ]
>>680
> 16ビットCPUのポケコンを購入
> インタプリタで動作するCが組み込まれていて

メーカー教えて


703 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 06:51:08 ]
文字配列とポインタで質問です

char *str[]={”山田”、”井之上”、”御手洗”、”鈴木”};

とした場合
配列は

char
str[0][0]="山", str[0][1]="田", str[0][2]="\0", str[0][3]="\0"
str[1][0]="井", str[1][1]="之", str[1][2]="上", str[1][3]="\0"
str[2][0]="御", str[2][1]="手", str[2][2]="洗", str[2][3]="\0"
str[3][0]="鈴", str[3][1]="木", str[3][2]="\0", str[3][3]="\0"
str[4][0]="\0", str[4][1]="\0", str[4][2]="\0", str[3][3]="\0"

と自動で入って各行の配列の先頭のアドレスが*str[1]や*str[2]に入ってるんでしょうか

704 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 06:59:57 ]
いいえ

705 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:04:34 ]
という事は

> char *str[]={”山田”、”井之上”、”御手洗”、”鈴木”};

これはどういう状態でしょう?

706 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:06:51 ]
文法エラーの状態です

707 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:10:23 ]
本に載ってる型の定義をそのまま写してみたんですがorz

ちょっとそのまま書いてみて試してみます

708 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:12:47 ]
全角/半角、クォーテーション/ダブルクォーテーションに注意

709 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:19:55 ]
char *str[]={"山田","井之上","御手洗","鈴木"};

文法ってそっちでしたかorz
これでよろしいですか?

710 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:55:59 ]
ちょっと眠気で頭が鈍くなってきたけど

山田、井之上、御手洗、鈴木はそれぞれメモリのどこかに書き込んで
*str[0]〜[3]にはメモリのそれぞれの文字列の先頭アドレスが入ってるってことかな


711 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:18:26 ]
>>710
str[0]〜[3]にはメモリのそれぞれの文字列の先頭アドレスが入ってるってこと
だと思うよ



712 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:26:49 ]
あぁそっか*をつけるとアドレス先の中身だっけ
まだ微妙に疑問点あるけどひとまず寝ます
頭が動いてないorz
ありがとう

713 名前:デフォルトの名無しさん [2007/09/11(火) 13:47:31 ]
文字列の質問です。

1から100の自然数を”1”から”100”という文字列に変換せよ

って問題ですけど、どんなプログラムになりますか?

714 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 13:53:24 ]
for文で回してsprintf使うとか。

715 名前:デフォルトの名無しさん [2007/09/11(火) 14:16:56 ]
char** func()
{
int i,j = 0;
char *cp[100]={'\0'};

for(i = 0; i < 100; i++)
cp[i] = ( char *)malloc(sizeof(char)*4);

for(j = 0,i = 1; i <= 100; i++,j++)
sprintf(cp[j],"%d",i);

return cp;
}


716 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 14:46:08 ]
そりゃないだろw

717 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 14:52:54 ]
>>715
変数の寿命を…

718 名前:デフォルトの名無しさん [2007/09/11(火) 15:50:26 ]
>>715
さっきは適当に書いて張りました
以下ソース
char** func(char **cp, size_t n)
{
int i,j = 0;

for(i = 0; i < n; i++)
cp[i] = ( char *)malloc(sizeof(char)*4);

for(j = 0,i = 1; i <= 100; i++,j++)
sprintf(cp[j],"%d ",i);

return cp;
}

719 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 15:57:14 ]
for(i = 0; i < 100; i++)
sprintf(cp[i],"%d ",i+1);

これでいいじゃん

720 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 16:08:13 ]
>>718
nが配列のサイズならループの最大値100にすんな
引数で渡してる奴を戻り値にすんな

721 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 16:28:09 ]
ポインタの100個の配列もmallocすればいいのだ
でも質問者は完全版を求めてるの?



722 名前:718 mailto:sage [2007/09/11(火) 16:29:51 ]
>>720
たしかにそうだね
オナニーしようかしまいか迷ってる最中に
書き込んだクソソースなんで
あんま吟味しないでね

723 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 16:39:01 ]
何かアプリケーションを作ろうと思ったらCとC++どっちがいい?

724 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 17:10:17 ]
伺系アプリの間違いだと信じたい

725 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 17:57:45 ]
>>702
また難儀な・・・
押入れから引っ張り出してきたよ
あ〜なつかしぃい

CASIO PERSONAL COMPUTER FX-890P 16-bit CPU
(液晶の枠部分に書かれている文字)
しかもこれ専用(?)のフロッピーディスクドライブ&そして(確か)増設メモリまで買ってしまったはず
起動したらまだ動く(リチウム電池は空)

(スレチスマソ)

726 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:09:21 ]
>>725
姉妹品?のZ-1ならもってた
捨てちゃったけど

727 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:17:14 ]
>>726
これかな?
ttp://www5.plala.or.jp/igjhmc/calc/z-1.html
っていうかキー配列とか同じだ
FX-890Pの文字がZ-1になってるぐらい

728 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 19:04:06 ]
bcc32を使っているのですが、c言語のソースプログラムのファイル名に、
list1-1.cのように「-」を使ってもいいのでしょうか?

729 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 19:06:40 ]
いいよ

730 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 19:59:08 ]
>>723
C++のほうがお勧めかな。

理由
C++を勉強すると、Cも勉強できる。
C++を知っているとJavaとかも簡単に理解できる。

731 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:39:29 ]
C#



732 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:44:32 ]
printfとputsはどっち使えばいいですか?
皆さんどっち使ってます?

733 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:48:28 ]
>>732
用途による

734 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:50:23 ]
>>732
使っているのは断然 printf だよ
printf を使うことで処理速度に問題が出るようなコードは書いてないから

735 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:58:22 ]
賢いコンパイラは適当に最適化してくれるから、printfつかっとけ。

736 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 22:44:59 ]
<double>
43 23
<apple>
100E+02 102E-8 102E-12
<leon>
23E+01 12E-02
<kon>
24 23.3

とかいうファイルからE表記の数値だけを抜き取るにはどうすればいいですかね?


737 名前:736 mailto:sage [2007/09/11(火) 22:45:47 ]
<double>
43 23
<apple>
100E+02 102E-8 102E-12
<leon>
23E+01 12E-02
<kon>
24 23.3
とかかれたファイルからですね。ファイル名はlist.txtとしておきます。

738 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 22:52:38 ]
>>737
// 使用法 a.exe < list.txt
#include<stdio.h>
#include<string.h>

int main(void)
{
char buf[100];
double value;
int pos;

while(scanf("%s", buf)==1)
{
if(strchr(buf, 'E')!=NULL)
if(sscanf(buf, "%le%n", &value, &pos)>=1)
if(buf[pos]=='\0')
printf("%e\n", value);;
}
return 0;
}

739 名前:736 mailto:sage [2007/09/11(火) 23:13:38 ]
やってみます

740 名前:736 mailto:sage [2007/09/11(火) 23:14:44 ]
ありがとうございます

741 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 23:16:58 ]
(゚Д゚≡゚Д゚)エッナニナニ?



742 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 02:40:36 ]
入力した文字を逆にして出力したいのですが
#include <stdio.h>
#include <string.h>
int rev (char *);
int main()
{
char str[100];

printf("文字を入力してください\n");
gets_s(str);
rev(str);
printf("逆にしたのはこれです\n");
printf(str);

return 0;
}
int rev (char *str)
{
int i=0;
char str2[100];
size_t len;
len=strlen(str);
while(len>=0){
str2[i]=str[len];
i++;
len--;
}
str=str2;
return 0;
}



743 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 02:41:11 ]
なぜかlenのカウントも増えていくんですけど何処がおかしいですか?

744 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 02:49:36 ]
>char str2[100];
>str=str2;
とりあえずこれはまずい
「C言語 スコープ」とかでぐぐれ

745 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 02:50:27 ]
関数からの見える範囲でしたっけ
ちょっと調べてみます

746 名前:問題 [2007/09/12(水) 03:04:16 ]
問題:ポインタで操作しなさい
char moji[] ="ABCDEF〜XYZ"; /*最大文字26文字*/
char *pc;
pc=moji;

結果
moji:ABCDEF〜XYZ
開始位置==>B
終了位置==>F
表示:BCDEF

moji:ABCEF〜XYZ
開始位置==>D
終了位置==>D
表示:D

moji:ABCDEF〜XYZ
開始位置==>E
終了位置==>B
表示:EF〜XYZAB


747 名前:746の続き [2007/09/12(水) 03:05:46 ]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void print(char* s, char* e)
{
printf("表示:");
for( ; s <= e ; s++ ) putchar(*s);
puts("");
}
int main(void)
{
char moji[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char *pc = moji, *pcstart, *pcend, start, end;

while(1) {
printf("moji:%s\n開始位置==>", moji); scanf("%c", &start);
printf("終了位置==>"); scanf("%c", &end);
pcstart = strchr(moji, start);
pcend = strchr(moji, end);
if( pcstart == NULL || pcend == NULL ) break;
if( pcstart <= pcend ) print(pcstart, pcend);
else print(pcend, pcstart);
}
}

この問題でどうしてもエラーが出るんですが何方かわかる方がいましたら教えてください



748 名前:デフォルトの名無しさん [2007/09/12(水) 03:14:23 ]
>>742
void rev(char *str)
{
int len = strlen(str);
int i;
char temp;
for(i = 0; i<len/2; i++)
{
temp = ary[i];
ary[i] = ary[len -i-1];
ary[len -i-1] = temp;
}
}

749 名前:742 mailto:sage [2007/09/12(水) 03:16:21 ]
>>746
ちょ・・・ヒントかなぁって思って頑張って書いてたよorz

750 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 03:21:16 ]
>>747
エラーってどんなエラー?
scanf("%c"〜の挙動を理解してないとかそんなオチ?

751 名前:742 mailto:sage [2007/09/12(水) 03:26:59 ]
>>748
sry[i]って初めて見るんですけどこれはなんでしょう?
参考に組ませて頂きます



752 名前:742 mailto:sage [2007/09/12(水) 03:27:42 ]
×ary[i]
○ary[i]
でしたね

753 名前:746の者です [2007/09/12(水) 03:29:31 ]
警告 W8012 07.cpp 7: 符号付き値と符号なし値の比較(関数 MojiSearch(char *,char *) )
警告 W8012 07.cpp 8: 符号付き値と符号なし値の比較(関数 MojiSearch(char *,char *) )
警告 W8004 07.cpp 5: 'j' に代入した値は使われていない(関数 MojiSearch(char *,char *) )

↑がエラー内容です
6ヶ月ぶりにCに触れたんですが仕組みを忘れちゃってどう直せばいいのかわからなくなってしまったんですよ^^;

754 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 03:31:52 ]
まずそのソースうpしる
>>747にMojiSearchなんて関数ないだろ

755 名前:デフォルトの名無しさん [2007/09/12(水) 03:32:34 ]
>>747
scanf実行後stdinには'\n'が残っていて
後のscanfが'\n'をとりこんでしまってる。
一応getc(stdin)で取り繕って変更したソース
の一部を載っける
int temp;

while(1) {
printf("moji:%s\n開始位置==>", moji);
scanf("%c", &start);
temp =getc(stdin);
printf("終了位置==>");
scanf("%c", &end);
temp =getc(stdin);

756 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 03:40:33 ]
>>753
それはエラーじゃなくて警告って言うんだよ

757 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 04:30:43 ]
>>753
signedとunsigned比較してんだろ
3つ目の警告は見たまんま

758 名前:742 mailto:sage [2007/09/12(水) 05:06:22 ]
>>748
#include <stdio.h>
#include <string.h>
void rev (char *);
int main()
{
char str[100];

printf("文字を入力してください\n");
gets_s(str);
rev(str);
printf("逆にしたのはこれです\n");
printf(str);

return 0;
}
void rev (char *str)
{
int i=0,len=strlen(str);
char str2;

printf("文字の長さは%dです\n",len);
for(i=0;i<len/2;i++){
str2=str[i];
str[i]=str[len-i-1];
str[len-i-1]=str2;
}
}
ary[i]がまだ謎だけど出来たよ、ありがとう

759 名前:746 [2007/09/12(水) 10:35:45 ]
自分で書いた方のソースがvoid rev (char *ary)だったんで
レス欄にコピペしたとき、「ああ、strか」と思い
aryの部分をstrに全部書き換えたつもりだったが
中途半端に書き換えちった
というわけ

760 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 10:48:01 ]
警告を無視する奴は、とりあえず渓谷に行って来い

761 名前:742 mailto:sage [2007/09/12(水) 15:41:36 ]
>>759
なるほど
あえて自分で考える事が出来たし結果オーライだったw
lenの-1も気づかなかったしなorz

スコープについてはまだ良くわかってないけど・・・



762 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 22:46:17 ]
スマソ スコープについて調べろってのは勘違い
str2へのポインタを関数の外で使おうとしてるのかと思った

763 名前:デフォルトの名無しさん [2007/09/12(水) 22:55:14 ]
2点質問があります。
1.関数で配列全体を呼び出しもとに帰すにはどう記述すればよいのでしょうか?
例)a[0],a[1],a[2],a[3]といった、算出した値を配列要素としてではなく、配列全体をreturn文で返す
方法がわからずにおります。
2. 1+X+X^15で生成する疑似ランダムデータの作製法がわからずにおります。
どうかご教示願います。

764 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 22:58:17 ]
>>763
マルチポストですか?
ttp://pc11.2ch.net/test/read.cgi/tech/1188748806/278

765 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:03:43 ]
やさしいCを打ち込み終了し他の本も色々調べたのですが、
ポインタとかを理解するにはPICを勉強したほうが分かりやすいですか?

766 名前:デフォルトの名無しさん [2007/09/12(水) 23:05:53 ]
>>764
急いでいるのでマルチポストをしてしまいました。申し訳ございません。


767 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:07:33 ]
>>765
問題をやった方が良い

768 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:31:22 ]
>>764
大体、関連した話題を扱うスレッドには同じ人が見にきているものだ。
だからマルチポストするとすぐに見つかってしまう。しかも反感を買い回答が得られなくなる。
だから1箇所に投稿し、回答が得られるまで自分でも必死こいて調べるべし。

769 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:33:34 ]
>>765
問題をやるのがいいな。

770 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 23:56:35 ]
>>767,769
ありがとうございます。問題を解くことからはじめます。

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



872 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 14:13:04 ]
さすが猫ですね

873 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 00:32:08 ]
データが1個増えるたびにreallocしてることが発覚しましたw
バカすぎますか?

874 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 00:34:36 ]
はい

875 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 00:34:40 ]
データが増える間隔とデータ量による

876 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 00:38:15 ]
>>873
実装が楽なので使い捨てコードのときにはそうします

877 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 00:42:30 ]
>>873
一個ごとでも、まったくOK。
データの複数個ずつぶんのメモリを確保しても、ほとんどの場合は、
スピードアップしません。

878 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 00:48:01 ]
vectorとかでも中では一回ごとにrealloc的なことしてるんだっけ?

879 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 01:24:37 ]
>>878
ここは C のスレですぜ
> vector
ってなに?


880 名前:デフォルトの名無しさん [2007/09/16(日) 01:34:48 ]
ここは東京だぜ

881 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 02:19:19 ]
読み込んだ数式を逆ポーランド記法に変換しようとしてるんですが、
1+(3+(4-2)+1)*4
のようにすると、1342-+1+4*-という式になってしまいます。

else if(source[i] == ')'){
while( now > 0 && stack[now -1] != '('){
rpn[r++] = stack[--now];
}
--now;
}

原因がわかりません。教えてください。
できれば解決策もm(_ _)m



882 名前:864 mailto:sage [2007/09/16(日) 02:45:34 ]
レスありがとうございます

>>865
確かに%cとすると一文字だけですが表示されます
JavaをかじってたこともあってString型がCにもあると思い込み,いわゆる文字列がポインタであることを理解していませんでした
pritf("%d",i);のようにカンマの後には変数名を書けばよいと思っていましたが
%sの場合は例外でポインタを書かないといけないのですね
確かにそうすると表記上はすべて変数名のように見えて綺麗ですから、そのためにそのような設計になったのでしょうか…


>>866
31文字以上は入力しないという前提でも不可なのでしょうか?

>>867
char *str ではポインタ(アドレス変数)が確保されただけでその中身については未定義で
さらに、その中身のアドレスの後ろが他のことに使われていないという保証もないから不可で
char str[32]なら31文字分については安全な場所が確保されるからOKという理解で正しいでしょうか

>>869
本文をそのまま引用すると
『strはchar型へのポインタですね。ということはアドレスを格納する変数なのです。これではだめですね。』
とのことです。
しかし、scanfやstrlenについては、渡すべきものはアドレスであり間違えているようには考えられず
printfについても%sにはポインタを渡すのであっているようなので理由が私にはわかりませんでした。

883 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 03:18:00 ]
適当な本だな

884 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 03:34:24 ]
渡すべきものはアドレスだが、その渡しているアドレスの値が適切なのかどうかということだ。
scanfは、渡されたアドレスが示すメモリ領域を書き換えるのだから、適当なアドレスを渡してはいけない。
特に、初期化してないポインタ (どのアドレスを指してるか不定) を渡すなんて、もってのほか。
書き換えられても安全な領域 (char[32]とか) を用意して、そのアドレスを渡す必要がある。

885 名前:881 mailto:sage [2007/09/16(日) 04:01:59 ]
すみません自己解決しましたm(_ _)m

886 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 04:12:05 ]
1+(3+(4-2)+1)*4 は逆ポーランド記法で
4 2 - 3 + 1 + 4 * 1 + で合ってますか?

887 名前:デフォルトの名無しさん [2007/09/16(日) 04:22:14 ]
車輪の再開発は止めましょう

その程度の計算なら電卓でできます。
暗算でもできるでしょ?

作る意味無いよ

888 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 04:28:51 ]
            ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <こいつ最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /

889 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 04:58:38 ]
   ∩___∩
   | ノ      ヽ !
  /  ●   ● |   こいつも最高にアホ
  |    ( _●_)  ミ
 彡、   |∪|   / .\
/ __  ヽノ / \ ...\
(___)   /   .│ ..│
            /  ヽ
            l..lUUU
            .U

890 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 05:19:03 ]
そんな餌に俺様が釣られクマーー

891 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 06:42:36 ]
>>886
1342-+1+4*+ かな。



892 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 08:17:49 ]
>>886
適当に作ってみた。
やっぱり 1342-+1+4*+ になる。
sund1.sakura.ne.jp/uploader/source/up11687.c

893 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 09:03:32 ]
>>886
1+(2+3) と 2+3+1 が同じだというならそれでも合ってる

894 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 12:10:01 ]
>>873-879
おれの居る現場の既存のコードでは、
最終的に300〜400MBのメモリを確保するのに、reallocを繰り返して、
延べ 2.5GBぶんコピーを繰り返している事が分かったよ。

DBのテーブルのデータを一度メモリーに全部取り出すんだ...orz


895 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 12:12:34 ]
>>894
それだとDBの意味ががが
元からなさそうな感じではあるけど

896 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 12:32:44 ]
realloc()を使うと、毎回確保し直すと思っている馬鹿が多いのか?
自分でわざわざ回数まとめてからrealloc()するようなコード書くより、
毎回realloc()する方が速いかもしれないぞw

897 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 12:39:00 ]
そんな当たり前の事言われても。

898 名前:894 mailto:sage [2007/09/16(日) 13:03:07 ]
>>895
まあ100%無意味って訳じゃないんだけどね。一応SQLの恩恵は受けているから。
でもバッチ系が全部、「始めてプログラムを組んだんじゃないか?」ってレベルなんだ。
>>894のコードも基本的に集計するだけだから、DBの設計さえ良ければ単純なSQLで済むはずなのになー。

ハッ、ここは愚痴スレじゃなかったなスマソ。

899 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 13:10:10 ]
気づいたんなら送信するな

900 名前:894 mailto:sage [2007/09/16(日) 13:16:21 ]
>>896
その話は聞いたことあるが、そういうレベルじゃない。
reallocその物を使わないで済ませられるような場面でやってるだよ。



901 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 15:00:29 ]
realloc()って新たに確保した場所にそれ以前のものをコピーするんじゃなかったっけ?
毎回やっているかは知らんが



902 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 15:06:55 ]
>>901
元の領域に連続した領域を確保できれば、単純な拡張でよいので、
コピーは省略出来る。

903 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 15:09:04 ]
>>901
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
void *ptr=NULL, *new_ptr;
int i, count=0;

for(i=1;i<=1000;i++){
new_ptr=realloc(ptr, i*100);
if(ptr!=new_ptr){
fprintf(stderr, "pointer changed. [%d]\n", i);
ptr=new_ptr;
count++;
}
}
printf("change count : %d\n", count);
free(ptr);
return 0;
}

904 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 18:10:12 ]
巨大な配列を宣言時に同じ値で初期化したいんですけどこういう場合に簡略化する書き方とかないですかね
void func()
{
static int array[3000] = { 0, .. ,0};
}

的な…


905 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 18:20:31 ]
{0}
っていうかstaticって自動的に0で初期化されなかったっけ?

906 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 18:33:31 ]
サンクス。うまくいきますた。

907 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 18:43:25 ]
グローバル変数、静的変数は宣言時に全ての要素が 0 で初期化される。
ローカルな配列は、宣言時に1つ(1要素)でも初期化を行うと残りが全て 0 で初期化される。

int a[3000]; // a[0]〜a[2999] まで全て 0
int b[3000] = {1, 2, 3}; // b[0]=1, b[1]=2, b[2]=3, b[3]〜b[2999]=0
int c[3000] = {1}; // c[0]=1, c[1]〜c[2999]=0
main(){
int d[3000]; // d[0]〜d[2999] まで全て不定値(適当な値)
static int e[3000]; // a と同じ
int f[3000] = {1, 2}; // bとかcと同じ
}

よく、ローカルな配列を 0 で初期化するために array[256] = {0}; とか書くが、
1要素でも初期化すると残りが 0 で初期化されることを利用しているだけ。
array[256] = {1}; と書いて全ての要素が 1 で初期化されると誤解するやつが多い。

任意の値で初期化させたければ、n次元の配列はn重のループを普通に書く。
C++ならalgorithmのfillなんかを使えばいい。


908 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 20:37:21 ]
>>904
staticなら自動的に0で初期化される。
関数内staticにするなら、他の値は難しいな。
呼び出しの都度初期化でいいならmemsetとかでも良いだろうけど。



909 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 20:39:25 ]
複数ファイルにソースを書くときのお作法を知りたいんだけど、わかりやすいところないかな

910 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 01:00:33 ]
>>909
ヘッダファイルから書き始める

911 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 02:30:43 ]
新しくコード書くとき
既存のファイルに加えるか
新しくファイル作成するか迷うんだけど
どういう基準でやったらいいですか?



912 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 10:25:01 ]
設計上モジュールが分かれてたらファイルを分ける。
CUnit使うなら1ファイルに1関数。

913 名前: ◆7qRx8xrwgo [2007/09/17(月) 11:51:39 ]
質問させていただきます。


円記号を表示します。 :\
アポストロフィを表示します。:\

と、出力したくて
#include <stdio.h>

int main(void)
{
    printf("円記号を表示します。 :%c\n", '\\');
    printf("アポストロフィを表示します。:%c\n", '\'');

    return 0;
}

でコンパイルしてみたのですが、
Sample5.c:5:12: warning: unknown escape sequence: '\216'
Sample5.c:6:12: warning: unknown escape sequence: '\216'
とエラーが出たのですが、どうすればエラーが表示されなくなりますか?

914 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 11:53:04 ]
>>913
表示

出力

915 名前:デフォルトの名無しさん [2007/09/17(月) 11:55:23 ]
「表」の後ろに¥を入れれば直るかも。

916 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 11:59:13 ]
OSとコンパイラは何?

917 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:03:44 ]
>>913
文字コード Shift-Jis の時
[表示] = 0x95 0x5C 0x8E 0xA6
0x5C = '\\'
0x8E = 0216 <- 8進数

\216 を解釈しようとして、そんなエスケープシーケンスがないという
*警告*がでているだけ

日本語対応しているコンパイラを使うほうが楽

918 名前:913 ◆7qRx8xrwgo [2007/09/17(月) 12:16:57 ]
>>914
本に表示と書いてありました

>>915
失礼ながら半信半疑で試したところ、仰るとおり直りました。

>>916
OS:Wndows XP HE SP2
コンパイラ: gcc(Cygwin)

>>917
解説ありがとうございます。今はコンパイラを変えたくないのでこのままでいこうと思います。
もしよろしければ、「表示」のように、気をつけた方がいい単語が他にもありましたら教えてください。

919 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:22:35 ]
>>918
―ソЫ\噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃

920 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:26:19 ]
gcc に --input-charset=cp932 --exec-charset=cp932 オプションをつけてみ

921 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:32:32 ]
>>920 thx
MinGW (GCC.EXE (GCC) 3.4.2 (mingw-special)) でもいけたよ
さっそく CFLAGS に追加しておいた



922 名前:918 ◆7qRx8xrwgo [2007/09/17(月) 12:36:56 ]
>>920
仰るとおりに実行した所エラーが表示されることも無くコンパイルできました。感謝です。

923 名前:デフォルトの名無しさん [2007/09/17(月) 12:41:51 ]
皆さん、実際にC言語でどのようなソフトを書かれているんですか?



924 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:51:00 ]
OS書いていますけど?

925 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 12:53:14 ]
通信プロトコル。
OSIでデータリンクからセッションぐらいまで

926 名前:デフォルトの名無しさん [2007/09/17(月) 12:55:28 ]
どこにもしようしているおえすめいかいてない
あおえすをしいでかいてるのか
すごいなおまえ

927 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 13:01:33 ]
C言語は学校の授業や課題でしか使わんな
普段使うのはVC++かJavaかC#

928 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 14:43:27 ]
>>923
去年、一年くらい、10年くらい前に作られたシステムの保守要員やらされて、辟易した。

929 名前:デフォルトの名無しさん [2007/09/17(月) 16:20:36 ]
保守ってどんなことやるの?

930 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 16:40:25 ]
>>929
お客さんとこのシステムの構成が変わったりなんか要望があったら、それにあわせてコードを書き換えたりとか。
新規のお客さんもあったけど、すでにあるコードから必要なコードをコピペして、ちょっといじって
もって行ったりとかするだけ。

931 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 16:45:13 ]
ものすごくつまんなそうな仕事ですね



932 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 16:57:41 ]
つまらないうえに、すごいつらかった。
基本的にソースコードぐちゃぐちゃだし。


933 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 17:06:15 ]
今の現場、つまらないうえに、すごいつらい。
基本的にソースぐちゃぐちゃだし。

934 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 18:32:30 ]
既存のファイルのファイルスコープにある変数や関数を使いたい、
っていうんじゃないんだろうから、迷ったら別ファイルでいいんじゃないでしょうか?

ファイルを分ける弊害って、なにかあるでしょうか?


935 名前:934 mailto:sage [2007/09/17(月) 18:35:31 ]
リロードわすれてたっはっは〜

936 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 21:35:29 ]
>>933
でも、大事な仕事だよ。
今後はC言語でも保守の仕事が増えるんじゃないか!?
COBOLはすでにそうなっている。

しっかりとしたコーディング規約があって、その通りに作られていればいいんだが、
Cでの開発プロジェクトにはコーディング規約がないくて、各自各様のスタイルでコーディング
していることが多い。最近はそうでもないかもしれないけどね。

937 名前:933 mailto:sage [2007/09/17(月) 22:09:47 ]
>>934>>911に対するレス?

>>936
スタイル云々以前の問題でね、多分プログラミング自体の経験が無い人か、
少なくとも、スコープを分かってない人が書いたプログラムで、それが原因のバグとかもある。
おそらくテストもマトモにしてないと思われるよ。orz

>>911
で、「分ける分けない」て話は、スコープとも関わる話なのでスコープを理解すること。
関連性が強い物、似たような機能のものを集めるという分け方もある。
「モジュール強度 結合度 独立性」という言葉を調べると何かわかるかも。


938 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 22:18:54 ]
>>937
「モジュール強度 結合度 独立性」
なつかしい言葉だね

939 名前:デフォルトの名無しさん [2007/09/18(火) 01:53:17 ]
何方か、標準関数とポインタ変数についてを詳しく教えてくださる方はいらっしゃいますか?
自分が持ったいた参考書がこの2つの内容が掲載されてた部分が破けていて分からなくて困っています^^;



940 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:00:19 ]
>>939
ポインタ
www.geocities.jp/ky_webid/c/028.html
標準関数
always-pg.com/c/runtime_rd/

941 名前:デフォルトの名無しさん [2007/09/18(火) 02:05:59 ]
940>有難う御座います



942 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:07:38 ]
>>940
>「&」をアドレス演算子といいます。「&」がアドレスを表すので「"アンド"レス」と覚えておくと分かりやすいかも知れません。
なごんだ(´ー`)

943 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:10:59 ]
今更Cなんて初めて使う機会ないよ
OSやドライバを作るなら必要だが、そのレベルに達するまで恐らく5年以上は掛かるだろう




944 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:13:02 ]
がんばれば30日でできるらしいぞ

945 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:14:40 ]
あれかw

946 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:23:30 ]
C言語の言うことなら何でも聞きます

947 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 02:58:03 ]
ttp://always-pg.com/c/runtime_rd/string/wcslen.html
こちらの「文字列の文字数を求める」サンプルプログラムですが、
"Cプログラム" の長さは 6 が返るはずなんですが 11 が返ります。
なぜでしょうか? 環境は、linuxで gcc 3.3.6 です。


948 名前:デフォルトの名無しさん [2007/09/18(火) 03:01:06 ]
全角は2文字

949 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 03:26:23 ]
ちょっと語弊を招きかねない回答だなw
全角文字は2バイトなのでC標準のstrlenのようにバイト数を返す関数を使用した場合、文字数が得られるとは限らない。
ちゃんとロケールを設定すれば6になるはずだが?一字一句間違えずにコピペした?

950 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 03:31:49 ]
>>949
ダウンロードして展開した wcslen.c というファイルを euc-jp-unix にしてから
そのままコンパイルして実行してます。

951 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 03:58:59 ]
>>947-950
試してみたが、VC++では 6 が返ってきた。
cygwin gcc 3.4.4 ではコンパイルできなかった。
L"Cプログラム"; の L でパースエラー。



952 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 04:14:27 ]
え?ってかCなの?C++じゃなくて?
C標準に2バイト文字なんて概念あったっけ?

953 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 04:22:59 ]
wchat_t

954 名前:デフォルトの名無しさん [2007/09/18(火) 07:52:09 ]
質問させてくださりませ。
void parse_long_options (int _argc,
char **_argv,
const char *_command_name,
...);
の中の"..."の点三つはどういう意味なのでしょうか?
ご教授宜しくお願い致します。


955 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 08:01:23 ]
>>954
教授じゃなくて教示な

www.geocities.jp/ky_webid/c/057.html

956 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 08:30:14 ]
引数の数が可変であるってこと。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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