トップページ⇒tech
1001コメント300KB

C言語なら、俺に聞け! <14>

レス数が1000を超えています。これ以上書き込みはできません。
0001スーパーハイソサエティーハッカー日下部陽一NGNG
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことなら全てわかるから、疑問な点があったら漏れに聞け。

だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。

・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html

・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/yfcbookshelf-22/250-3950205-1475419

K&Rで挫折するようなヤツはこれでも買え。
これでわからない、救いがたいヤツはあきらめろ。
・作ってわかるCプログラミング(アヒル本と呼べば通だ)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/qid%3D1005618315/250-3950205-1475419

・前スレ C言語なら、漏れに聞け! <13>
http://pc.2ch.net/test/read.cgi/tech/1013990673/l50
0002デフォルトの名無しさんNGNG
>>1
どんどん名前が長くなるな。
0003デフォルトの名無しさんNGNG
歳が若くなってるし
0004デフォルトの名無しさんNGNG
voidのプロフィールに合わせたんでしょ
0005デフォルトの名無しさんNGNG
次はハイパーですか?
age
0006デフォルトの名無しさんNGNG
くそっ、前スレ1000番取られた(笑)
0007デフォルトの名無しさんNGNG
991から1000までに15分もかかっていやがる。
0008デフォルトの名無しさんNGNG
やっぱC++って難しいんだ!!!
C言語のエキスパート(自称)ってウザイほどいるけど。
C++なら俺に聞けって奴みたことねー
0009初耳NGNG
>C言語のエキスパート(自称)ってウザイほどいるけど。

はつみみです;)
0010デフォルトの名無しさんNGNG
C:\>はつみみです;)
'はつみみです' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
0011デフォルトの名無しさんNGNG
>>9
↓ここに一人いますが。
1 名前:スーパーハイソサエティーハッカー日下部陽一 投稿日:02/03/05 09:09
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことなら全てわかるから、疑問な点があったら漏れに聞け。
0012デフォルトの名無しさんNGNG
以下のソフトを見つけたのですが、こういう機能はC言語だけで書けるのでしょうか?
http://www.zdnet.co.jp/products/tdk/hddataclear.html

それともアセンブラも必要なのでしょうか?

別にこの機能が欲しいわけじゃなくて、どういう原理でできているのかなぁ?
と思いまして、書き込みました。

よろしくお願いします。
0013デフォルトの名無しさんNGNG
>C++なら俺に聞けって奴みたことねー
そんなことをいうと、尋常でないテンプレートが
バカバカでてきててにおえなくなるからなのれす。
0014デフォルトの名無しさんNGNG
ANSIの規格に割り込みイヴェント関数が存在する意義がよく分かりません。
教えて下さい。
0015デフォルトの名無しさんNGNG
ruby で書かれています。
0016デフォルトの名無しさんNGNG
>>11
ネタを真に受けている馬鹿
0017デフォルトの名無しさんNGNG
>>16
>>11はネタじゃないの?
0018デフォルトの名無しさんNGNG
ネタにしちゃヒネリもなんにもない駄作
0019デフォルトの名無しさんNGNG
char a[3][4];
char (*ap)[];

strcpy(a[0], "abc");
strcpy(a[1], "def");
strcpy(a[2], "ghi");

となっていたときに、ap を使って a[0], a[1], a[2] を表示させるには
どう書けばいいですか?
0020デフォルトの名無しさんNGNG
>>19
char (*ap)[];←これって配列の大きさが不定です。ってコンパイラに言われない?
0021デフォルトの名無しさんNGNG
>>18
じゃ君も「ネタを真に受けている馬鹿」なんだね。
002220NGNG
あ、言われないか。
0023デフォルトの名無しさんNGNG
>>19

#include <stdio.h>
#include <string.h>

int main()
{
char a[3][4];
char (*ap)[4];

ap=a;

strcpy(a[0], "abc");
strcpy(a[1], "def");
strcpy(a[2], "ghi");

printf("%s\n%s\n%s\n",ap[0],ap[1],ap[2]);

return 0;
}
0024デフォルトの名無しさんNGNG
全スレ895の
int i,j;
int a[5][5];
int **ap;

ap = (int **)malloc(sizeof(int *)*5);
for(i=0;i<5;i++) {
ap[i] = a[i];
}
for(i=0;i<5;i++) {
for(j=0;j<5;j++) {
ap[i][j] = i*10+j; /* apのほうに代入 */
}
}
for(i=0;i<5;i++) {
for(j=0;j<5;j++) {
printf("%d ",a[i][j]); /* aのほうを表示 */
}
puts("");
}
で ap = (int **)malloc(sizeof(int *)*5);を省くと
値が割り当てられていないローカルな変数 'ap' に対して参照が行われました。
というエラーが出ました。
どうしてですか?


0025デフォルトの名無しさんNGNG
>>24
**apはどこを指しているの?
mallocで得た領域でしょう?
それを省いたら・・・
002625NGNG
7行目ね。
0027デフォルトの名無しさんNGNG
∧__∧
(・ω・)
/[リナ]ヽ
  人
0028デフォルトの名無しさんNGNG
mallocを使わないときはどうしたらいいんでしょうか?
0029デフォルトの名無しさんNGNG
警告メッセージをしっかり読まないやつはドラクエで言えば
酒場でくだ巻いている自称戦士みたいなもんだ。
0030デフォルトの名無しさんNGNG
>>28
配列を用意する。
0031デフォルトの名無しさんNGNG
>>23
ありがとう。
char (*ap)[4]; て宣言しなきゃいけないのか。
別に意味のあるプログラムではないんだけど、昨日からずっと悩んでた。
0032溺れるプログラマーNGNG
MFCで作ったアプリケーションってDLLいる?
SDKアプリケーションはDLLいる?
0033デフォルトの名無しさんNGNG
>>32
ここはCスレです。
MFCは必要です。Win98以降はMFC4.2DLLが最初から入っているらしいけど。
0034デフォルトの名無しさんNGNG
複数人で開発するプロジェクトの場合、main関数はリーダーが書くの?
0035デフォルトの名無しさんNGNG
>>34
んなこと決まってない。
スケルトンなら全員でかく。
0036デフォルトの名無しさんNGNG
>>34
キミおもしろいなぁ。
003735NGNG
スケルトン:×
ドライバ:○

鬱だ・・・
0038デフォルトの名無しさんNGNG
>>12
なんらかのOSの上で稼動するのであれば、アセンブラはいらないでしょう。
独自のブートを行う場合は、ちょびっとだけアセンブラがいる。

で、件のソフトは、「オリジナルの起動プログラムで動作するのでOSに
依存しない」と言ってるので、ちょっとだけアセンブラがいるね。

でも、HDDの中身を消すくらい、ちょーかんたん。
って、どっかのスレで出てたな・・・

これか。
http://pc.2ch.net/test/read.cgi/unix/1013144113/n682-690
0039デフォルトの名無しさんNGNG
>>38
シュレッダーソフトって全てのクラスタを上書きするんじゃなかった?
004038NGNG
>>39
そうだと思う。
0041デフォルトの名無しさんNGNG
>>34
俺ペーペーだから、まだ#defineしか書かしてもらえない。
普通の関数でキャリア5年、mainなら10年以上だな。
0042デフォルトの名無しさんNGNG
>>41
俺なんか#include <stdio.h>しか書かせてもらえない。
他の#includeも書きたいんだけど。
0043デフォルトの名無しさんNGNG
デバッグで関数の中に入った瞬間に
stac overflowのエラーが出てしまいます。
何が原因なんでしょうか?
0044デフォルトの名無しさんNGNG
>>43
配列が大きすぎるとか、関数を再帰的に呼びすぎるとか。
0045デフォルトの名無しさんNGNG
stack?
0046デフォルトの名無しさんNGNG
スタクとバカにしるな!
0047旧887NGNG
>>888
列挙だけだね〜
>>891
ありましたthanks
0048超初心者NGNG
K&Rをマスターしたら
C言語は一通り使いこなせるようになったと言えるんでしょうか?

厨房質問ですみませんです。
0049デフォルトの名無しさんNGNG
>>48
C言語を使いこなすと言うのは、C言語で思考出来る事だと思われ。
0050デフォルトの名無しさんNGNG
>以下のソフトを見つけたのですが、こういう機能はC言語だけで書けるのでしょうか?
>http://www.zdnet.co.jp/products/tdk/hddataclear.html

URLをHDDアタッカーと読んでしまって
てっきり物理的にHDDを破壊するソフトか何かかと。
0051デフォルトの名無しさんNGNG
>>48
K&Rにある問題を一通り自力で解いてみたなら基本は一通り、ってかんじだね。

実際にはアプリケーションに対する知識と
OSに依存した様々な知識がないとまともなプログラムは組めない。

がんばれ
0052名無しさん@EmacsNGNG
そういえば前スレにも K&R 読んだらフリーソフト作れるようになるかって聞
いてるやついたな...
俺も昔はそういう安易な考えだったが、やればやるほど先が長いことに気づく(w
0053超初心者NGNG
>>49
C言語で思考するとはどういうことか
イメージを具現化できないんですが、
実際どう言う事なんでしょう?

>>50
励ましありがとう。
>実際にはアプリケーションに対する知識と
>OSに依存した様々な知識がないとまともなプログラムは組めない。
じゃあこれらはどうやったら身につける事ができますか?

>>52
作れないんだ・・・。
0054デフォルトの名無しさんNGNG
浮動小数点変数配列a[100][100]のデータを
ファイルに出力するのに、

FILE *fp;
fp = fopen("hoehoe.dat", "w");

for( i = 0 ; i < 100 ; i++ ){
for( j = 0 ; j < 100 ; j++ ){
fprintf( fp , %08f\n , a[i][j] );
}
}

と書いたのですが、「この部分の高速化を考えてみよう。」
と言われて、躓きました。
高速化のポイントを教えてください。
0055デフォルトの名無しさんNGNG
>>54
ファイルアクセスは一回ですます
0056デフォルトの名無しさんNGNG
>>54
学校の宿題は、自分で考えよう。
出来なくたって給料に響きもしないし、まして命まで取られるわけじゃない。
0057デフォルトの名無しさんNGNG
>>54
> 高速化のポイントを教えてください。
1. ちまちま書き出さずに一気に書く(例えばa[i][0]〜a[i][99]をまとめて書き出す)。
2. 汎用的なfprintfではなく、浮動小数点に特化した自作printfを作る。
3. 本当に速くなったのかの裏付けをとる(man prof or gprof)
  (特に2.を行う場合、苦労した割には速くならない可能性がある)
0058デフォルトの名無しさんNGNG
二次元配列を関数に渡すときは、
func(int (*a)[3])とかにすればいいって分かったんですけど
関数を呼び出す方はどうすればいいんでしょうか?
func((&a)[3]);
ってすればいいんでしょうか?
005954NGNG
>>55
即レスthx。それは、考えたのだけれども、具体的にどうすればよいか分からなかった。
とりあえず、大きなchar変数を用意してやればいいのかなと思ったのだが、
うまくいかず。全然早くならない。

>>56
学校の宿題ではないけれども、お言葉は確かに。
006054NGNG
>>57
ありがとうございます。
3は知りませんでした。今は、実験できないけれども、実験環境整い次第調べてみます。

1に関しては、>>59にも書いたけれども、

2に付いては、例えば、fprintfの%dなどの処理を省いた関数を作るって事?
林晴比古の本に書いてあって、試したのだけれども、無駄な苦労に終わった。
006155NGNG
>>59
配列で保存形式にこだわらないならば
fwriteで一気に書き込めば?

ポインタで確保したならメモリに書き込むイメージを
作ってから同じように一気に書き込む
0062デフォルトの名無しさんNGNG
>>58
func(a);
006354NGNG
>>61
なるほど。早速、明後日試してみることにします。
(今日、明日はCの開発環境が無い環境にいるので。)
0064デフォルトの名無しさんNGNG
>>63
doubleを文字列にしなければならないんだよね?
0065デフォルトの名無しさんNGNG
a[][]を全部出すっていうのなら二次元配列はメモリ上は一次元に展開されていることを利用して

double *p;
p = (double *)a;
for (i = 0; i < 100*100; ++i)
{
fprintf(fp, _T("%08f\n"), *p++);
}

ってのもあるけど、今時のCPUだとどれだけ速くなるかは疑問だな。

遅いかもしれないポイントは
1. 高水準IOを利用している
-> 低水準IOにするとマイクロ秒単位くらいの違いで速くなったり遅くなったりするかも。
2. 配列への二次元アクセス・二重ループをしている
-> 一次元に展開すれば、ミリ秒単位くらいの違いで速くなるかも。全く変わらないかも(藁
3. fprintfを使用している
-> 書式の解釈を行うfprintfよりはfcvtみたいな書式化関数を使った方がミリ秒単位くらいの違いで速い

だが一番大きなポイントは
100*100で合計10000回程度しかループしてないので最適化のしがいがないこと。

100*100*100*100くらいだったら、違いが目に見えて出てきただろう。
0066デフォルトの名無しさんNGNG
>58
呼び出すときは
func(a);

宣言は
func(int (*a)[3]);
以外にも
func(int a[][3]);
func(int a[10][3]);
なども可
0067デフォルトの名無しさんNGNG
>>44
ローカル変数の配列をポインタで参照したらいいんでしょうか?
0068デフォルトの名無しさんNGNG
Makefileの書き方について質問があります。

---head.hの内容----
#define HOGE
-------------------

head.hの中でHOGEが定義されてるなら、Makefileの中でDEF=1
コメントアウトされてるならDEF=0
と、するにはどういうMakefileを書けばよいでしょうか?
もう自分の力では無理なので、どなたかお願い致します。
0069デフォルトの名無しさんNGNG
>>67
ソースを見せてよ。
ちなみに俺の環境だと、int型の変数を1個用意する関数を65000回ほど再帰的に呼んだところで
stack overflowを起こしたよ。
0070デフォルトの名無しさんNGNG
>>68
それは難しい。漏れには良い解決法が判らん。
でも、configureとかconfig.hとか使う奴はそのへんどうなってるんだろうね。
きっと解決法はあるはずだ。
0071デフォルトの名無しさんNGNG
>>67
入ったらstack overflowする関数のみのソースです。
なぜだか分かりません。
この関数以外の関数が原因ってことはあるんでしょうか?

#define FFT_MAX 1024
#define RATIO 0.1;
void decoding( )
{
int i, j; /* ループ変数 */
double d; /* 作業変数 */
double data[FFT_MAX][FFT_MAX],data2[FFT_MAX][FFT_MAX]; /* 元データの実数部 */
double jdata[FFT_MAX][FFT_MAX]; /* 元データの虚数部 */
int num_of_data; /* データの要素番号の最大値 */

make_data( &num_of_data);
FFT2( data, jdata, num_of_data, 1 );
for ( i = 0; i < y_size1; i ++ ){
for ( j = 0; j < x_size1; j ++ ){
data[i][j] = data[i][j] + image2[i][j] * RATIO;
}
}
FFT2( data,jdata, num_of_data, -1 );
make_output_image( num_of_data );
}


0072デフォルトの名無しさんNGNG
>>68
????出来ない事は無いが、やる意味がよくわからん。
ソースの中で
#ifdef HOGE
・・・・
#endif
ってしておいて、Makefaileで

withhoge:
   cc -c ... -D HOGE
withouthoge:
   cc -c ...

っとかするんだよ。
make withhoge
ってすると、-D HOGEつきのコンパイルが出来る。

つか、それがわかった上での質問なのか?
007367=71NGNG
>>69でした
0074デフォルトの名無しさんNGNG
大胆なスタックの使い方だ・・・
007574NGNG
>>71
スタックに32MB確保してるよ
007674NGNG
約24MBだった
0077デフォルトの名無しさんNGNG
コンパイルオプションでスタックサイズ増やせば解決さ!
0078デフォルトの名無しさんNGNG
>>71
1024*1024*8で8MB、それが3つで24MBか。
まぁまぁ大きいかな。
FFT2の宣言はどうなってんだ?
007968NGNG
>>68です

>>72
レスありがとうございます.
でもMakefileのマクロをソースに渡すのではなくて
ヘッダーファイルのマクロをMakefileのマクロに渡したいんです.

>>70
色々調べてるんですが・・・grepとか使うのかな
0080デフォルトの名無しさんNGNG
>>70
config.hって、普通ユーザがコンパイル前に希望の状態に
カスタマイズするために用意しているオプション群
みたいなもんだろ?
Makefileとは関係ないじゃん
0081Makefileとは関係ありませんNGNG
Makefileとは関係ありません
0082デフォルトの名無しさんNGNG
>>79
>ヘッダーファイルのマクロをMakefileのマクロに渡したいんです.
これをやって最終的に何をしたいんだ?
それを書かないと回答不能。
0083デフォルトの名無しさんNGNG
ハァ?
0084デフォルトの名無しさんNGNG
>>68
grep使うで正解じゃない?
shell出力を make内の変数に取り込む事出来るから。
取り込んだら、ifeqで検査。
0085デフォルトの名無しさんNGNG
>>78
まあまあ?
スタックならとてつもなく大きいと思うけど・・・・
0086デフォルトの名無しさんNGNG
68は何かを勘違いしている。
たぶんもっとまともな解があるよ
0087デフォルトの名無しさんNGNG
最終的な目的を教えてくれれば、もっと一般的な解決法がわかるかも
008868NGNG
>>82
ヘッダーファイルのマクロをMakefileのマクロに渡したして
それをもとにオプションを作って>>72さんのように
cc -c ... -D DEF として
別のプログラムに渡したいんです.
それをその別のプログラムを変更しないでやりたいんですが.

>>84
>shell出力を make内の変数に取り込む事出来るから
この部分をどういう風に書いたらいいのでしょうか

grep "^#define HOGE" head.h; then ○○;fi;


008968NGNG
間違えた
if grep "^#define HOGE" head.h; then ○○;fi;

コマンドでやるとこんな感じだと思うんですが,
Makefileの中でどういうふうにやって変数にどう渡したらいいのか
0090デフォルトの名無しさんNGNG
元から Makefile の中に書けば?
0091デフォルトの名無しさんNGNG
>>88
Makefileはincludeできるぞ。それでどうだ?
009284NGNG
動作確認してないけど。
$(shell grep なんたら) で参照出来ると思う。
Win32用GNU make使用。

$(shell cd) で、現在のディレクトリ取得した事は有る。
009371NGNG
>>77
スタックサイズを増やすのってどうすればいいんでしょうか?

>>78
FFT2の宣言部です。どうでしょう?
void FFT2( double (*data)[FFT_MAX], double (*jdata)[FFT_MAX], int num_of_data, int flag )
{
int i, j; /* ループ変数 */
static double re[FFT_MAX], im[FFT_MAX];


0094デフォルトの名無しさんNGNG
>>85
環境に拠るんじゃない。
環境の話は不毛なので、24MBは取れない環境だったということで。
mallocすればよろしい。ってことでどうでしょ。
0095デフォルトの名無しさんNGNG
i386 i486 i586の違いってなんですか?
Pentium3はi586でしょうか?
0096デフォルトの名無しさんNGNG
あまり一緒に仕事をしたくないタイプだな>68
珍妙なMakefile書いて悦に入ってる奴って
例外なくウンコちゃんだったよ。
0097デフォルトの名無しさんNGNG
>>95
板違い
http://pc.2ch.net/hard/
こちらへどうぞ
0098デフォルトの名無しさんNGNG
>>95
http://www.google.com/search?hl=ja&q=i386+i486+i586%82%CC%88%E1%82%A2+pentiumIII&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
009984NGNG
>>96
そう言うなって。
68が、あまり一緒に仕事をしたくない人に巻き込まれてる可能性だってあるんだし(w
0100デフォルトの名無しさんNGNG
struct BITS{
unsigned int b0:1;
};
sizeof(struct BITS)
これって何で1バイトや2バイトにならないの?
int型のサイズになるのか?

bcc32+win
0101デフォルトの名無しさんNGNG
100?
0102デフォルトの名無しさんNGNG
100ヴァーン
0103デフォルトの名無しさんNGNG
>>100
1ビットだけ使うように制限しているだけ
メモリはintのサイズとられます。
010468NGNG
>>92
なんかそれで上手くいきそうです.
ありがとうございました.

>>96
そんなこと仰らないでくださいよ.
まだ学生なんで,将来よろしくお願いします.
奇妙なMakefile書かないで済むようにします.

>>90>>91
そうなんですが,色々考えてヘッダファイルから読み込むようにしたかったんです.
0105デフォルトの名無しさんNGNG
>>68
ちなみに
#define FOO
cc -DFOO
cc -DFOO=1

どれも#define FOO 1 と等価であることに気づいているのか?
0106デフォルトの名無しさんNGNG
>>105
そ・れ・だ!
010784NGNG
もっかい>>88を良く読んでみたけど・・・
単に複数のCソースで、共通のヘッダを読み込めばいいだけのような気が・・・
0108ElseNGNG
Windows SDKのことが詳しく書かれた、オススメの本を教えて下さい。
(もちろん、C言語)
0109デフォルトの名無しさんNGNG
たぶん
>それをその別のプログラムを変更しないでやりたいんですが.
に美学を感じてるんだろな。

現実には共通ヘッダかプロジェクトA,Bのmakefileを呼び出す
上位のmakefileを作るかだね。

プロジェクトA->makefile->プロジェクトBという依存の仕方は
あまり見かけることがないので、他の人が見るとびっくりしてしまうよ。

>108
MSDNはチェックした?
0110デフォルトの名無しさんNGNG
>>108
つか、msdn見れ
本は知らん。
0111デフォルトの名無しさんNGNG
>>107
変数を渡すほうのプログラムが先輩が作ったもので,なんか書き換えたくないんですよね.
署名が入ってるプログラムって勝手に書き換えていいものなんですか?
使わせてもらうってことの了承はとってるのですが.

自分でもなんかおかしなことやってるような気がしてきました.
他の解決方法も考えてみます.
0112デフォルトの名無しさんNGNG
>>111
署名って、
$Id: lcore.s,v 1.1 2002/03/05 15:38:27 senpai Exp $
って感じなやつ?
0113デフォルトの名無しさんNGNG
>>111
だから、その先輩はdefineを渡したら、ソース改変しなくても
色々流用できるように考えてくれているんだろ。
なんで、Makefileで定義しないんだよ。
Makefileもその先輩作か?
なら、新しいMakefileを作りな。Makefileとはそうゆうものだ。
0114初心者NGNG
K&R 3章 3-3演習
文字列s1中のa-zのような省略記法をそれと等価な完全なリストにしてs2に
展開する関数expand(s1,s2)...

このexpandの解答例ってどこにありますか?
0115デフォルトの名無しさんNGNG
アンサーブック
0116デフォルトの名無しさんNGNG
ASCII コード表を思い出せ!
0117デフォルトの名無しさんNGNG
char* expand(const char *s1,char *s2)
{
char *s3 = s2,c;
if(*s1 == '-') s1++;
for(;*s1 != '\0';){
if(isalpha(*s1)){
c = *s1;
s1 += 2;
while(c <= *s1)
*s2++ = c++;
}
}
*s2 = '\0';
return s3;
}

書いてみたんですがだめみたいです、、、
解答をおしえてください!
0118初心者NGNG
117は僕です
0119初心者NGNG
教えてください気になって夜も眠れません(TT)
0120sageNGNG
char *expand(const char *s1, char *s2)
{
int st, ed;
char *p;

p = s2;
while (*s1)
{
if (s1[1] == '-' && s1[2])
{
if (st < ed)
st = s1[0], ed = s1[2];
else
st = s1[2], ed = s1[0];
s1 += 3;
while (st < ed)
*s2++ = st++;
}
else
{
*p++ = *s1++;
}
}
*p = '\0';

return s2;
}

はよ寝ろ
0121sageNGNG
*s2++ = st++;
↓
*p++ = st++;
0122sageNGNG
if (st < ed)
↓
if (s1[0] < s1[2])
0123デフォルトの名無しさんNGNG
>>114
それって展開される文字列はひとつ?
"0-9a-z"とかなることはないの?
ないなら・・・

char *expand(const char *s1, char *s2)
{
int i;

if(strlen(s1)!=3) return NULL;
if(s1[1]!='-') return NULL;
if(s1[0]>s1[2]) return NULL;

for(i=0;i<=s1[2]-s1[0];i++)
s2[i]=s1[0]+i;
/* s2[i]='\0'; */

return s2;
}

ループのたびに計算するところが実に無駄だな。変数名を考えるのが面倒なの。
それと文字コードがアルファベット順に並んでいる環境じゃないとだめだね。
0124日下部陽一NGNG
あげ
0125s/正規表現/を語ろう/eNGNG
$_ = '騙りましょう。';
s/騙(ら|り|る|れ|ろ)/語$1/;

別にperlじゃなくてもいいです。。
0126s/正規表現/を語ろう/eNGNG
>>125しまったスレタテと間違った。超誤爆すまん。
0127デフォルトの名無しさんNGNG
以下のような
char* ppstr[]={
"いってよし",
"おまえもなー",
"ずざー",
}
という変数があるとします。
それを一単語ずつファイルに書き込みたいのです。
2ch.txt
いってよし
おまえもなー
ずざー

こんな感じなのですがどのようにすればいいか
どなたかご教授ください。
お願いします。
0128デフォルトの名無しさんNGNG
>>127

FILE *fp;
int i;
fp=fopen("./2ch.txt","w");
for(i=0;i<3;i++)
fprintf(ppstr[i],"%s\n",fp);
fclose(fp);
0129128NGNG
あ、fopenのエラーチェックをしてねー。まあいいか(ワラ          
0130128NGNG
fprintf(fp,"%s\n",ppstr[i]);
だよ(鬱
0131デフォルトの名無しさんNGNG
fprintf の引数の順序逆じゃねぇ?まあいいけど
0132131NGNG
かぶったぎゃー。
0133127NGNG
ありがとうございますー
試してみます!
0134デフォルトの名無しさんNGNG
>>114
char *expand(const char *s1, char *s2)
{
  char *ret = s2;
  for (int c=*s1++; c; c=*s1++) {
    if (*s1 == '-') {      // 次の文字が "-" のとき
      if (! *++s1) {         // "-" で終わっていたら
        *s2++ = c;        // "-" の前の文字だけ入れて
        break;          // 終わり
      }
      for (int i=c; i<=*s1; i++) // 範囲内の文字
        *s2++ = i;
      s1++;             // "-" の次の文字スキップ
    }
    else
      *s2++ = c;       // そうでなければそのまま
    }
  *s2++ = '\0';
  return ret;
}
s1 が "-" で始まる場合、s2 の先頭にそのまま "-" が入る。
s1 が "-" で終わる場合、s2 はその直前の文字で終わる。
0135デフォルトの名無しさんNGNG
最初はC言語で何を作ってた?
俺は今、じゃんけんゲームを作成中(ショボ
0136デフォルトの名無しさんNGNG
C言語では可変長な並列はどうやって作ればいいのですか?
誰か教えてください。
0137デフォルトの名無しさんNGNG
>>136
並列を配列に読み替えて・・・・

あんたCをなんだと思っているんだ?
reallocで似たようなことができるといえばできるけど。
0138デフォルトの名無しさんNGNG
>>136>>137
だから、リストやツリーのロジックを教えてやったらいいんだろ
http://www.google.co.jp/search?hl=ja&ie=utf8&oe=utf8&q=%E5%8D%98%E6%96%B9%E5%90%91%E3%83%AA%E3%82%B9%E3%83%88&lr=
0139デフォルトの名無しさんNGNG
>>136
いわゆるVectorの実装はたいてい>>137の言うようにrealloc()だよ。
0140136NGNG
>>137-139
どうもありがとうございます。
教えてクンですいませんでした。
0141デフォルトの名無しさんNGNG
open関数のことででちょっと質問が
参考書のサンプルプログラムで
open(lock_file, O_RDWR | O_CREAT | O_EXCL, 0444);
のような文がでてきました。
最後のパーミッションの数値を調べたら"オーナーの読み込み許可:00400"のように
すべて5桁なのですが、このサンプルは4桁で書かれています。
最上位桁の0は省略できるのですか?
0142デフォルトの名無しさんNGNG
8進数だよそれ。
0143日下部陽一NGNG
Cは10進数で0を記述できないage
0144デフォルトの名無しさんNGNG
>>143
????

>>141
0で始まる数字列は8進数、0xで始まる数字列は16進数
0145デフォルトの名無しさんNGNG
>>143
なるへそ。単に 0 と表記すると、8進数の0なのか。
さすがスーパーハイソサエティーハッカーだ。
0146デフォルトの名無しさんNGNG
0 とだけ書いたら、それは実は8進数の0という、どーでもいい罠
0147146NGNG
かむった…
0148デフォルトの名無しさんNGNG
>>141
つーことで、最上位の0は省略できないよん。
あと、パーミッションは man chmod すると分かるけど、
4桁まであるのだー。
0149デフォルトの名無しさん NGNG
 voidってなんですか?
って優香。プログラムの専門用語を検索できる、辞典サイトって
ありますか?
0150デフォルトの名無しさんNGNG
自分で調べろ
0151デフォルトの名無しさんNGNG
void
虚空。空虚。存在しないこと。無駄。無駄無駄。
無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄
無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄ぁあ!!!
0152デフォルトの名無しさんNGNG
捨て捨て
0153149NGNG
>>150
 プログラムの辞典サイトってあるんですか?
googleで引っかかる気配すらないんですが・・
0154デフォルトの名無しさんNGNG
>>153
わざわざ辞典サイトなんか探さんでも、そのままgoogleで調べればいいだろ。
http://www.google.com/search?q=void+%82b%8C%BE%8C%EA+%88%D3%96%A1

つーか普通の英単語では? >void
http://jiten.www.infoseek.co.jp/Eigo?pg=result_e.html&col=EW&sm=1&qt=void&svx=100600
0155デフォルトの名無しさんNGNG
>>149
スタークルーザーってやったことないのか?
敵対組織の名前がvoidだよん。
名作なんだけどなぁ。

激しくスレ違いスマソ
0156141NGNG
>>142>>148
解りました。ありがとう
0157デフォルトの名無しさんNGNG
voidそれは空の集合。
空の集まりそれは空。
ああ悲しきreturn;
0158デフォルトの名無しさんNGNG
なんでC言語は8進数、16進数の表記ができて2進数表記ができないんだろうね?
漏れ的には8進数よりよっぽど有用だと思うんだけど。
例えば 0b110011 みたいに。独自拡張してるコンパイラとかないんだろうか?
更に読みやすいように、0b1010_1100 みたいな表記ができるとなお便利だが。
0159デフォルトの名無しさんNGNG
#error これだとメッセージを出力して終わってしまいますが、
#warn ←こんな感じでメッセージを出力してそのままコンパイルを続けるようなのってないですか?
0160デフォルトの名無しさんNGNG
menuについて解説した日本語ページ無いですかね。
英語ページは見つけたんですけど…
無ければ無いでそっち使いますけどね。
0161デフォルトの名無しさんNGNG
>>160
menuってなーにー?
0162160NGNG
説明が足りませんでしたね。
ごめんなさい。
cursesを使ってターミナル画面で
メニューシステムを扱えると言うライブラリです。
(man menuより意訳。大雑把だけど)
0163161NGNG
>>162
おぉ、なるへそ。勉強になりました。
0164デフォルトの名無しさんNGNG
>>158
それよりも、printf系関数で数値を2進数字列にする機能がほしかった。
逆ならstrtolでできるんだけどな。
0165デフォルトの名無しさんNGNG
>>158
Unixが発祥の地ということで、例のクソファイルシステム関係で
8進数が導入されたんじゃ?
2進がないとは、アセンブラとは違うんじゃヴォケ って意思表示かと。
0166デフォルトの名無しさんNGNG
>>159
汎用的な方法はないと思われ。
とりあえずコンパイラのマニュアル見てみたら。
たとえばVCだったら #pragma message ってのでできる。
0167デフォルトの名無しさんNGNG
質問なのですが、
malloc関数などで、メモリーを確保しますよね。
メモリーが確保された状態で、ALT+F4を押されて強制終了させられたら、
開放しない事になるのでしょうか(多分なると思いますが)。
もしそうならば、ウィンドウプロシージャの中にWM_DESTROYが送られてくるのでしょうか?
0168デフォルトの名無しさんNGNG
OS のやる気次第
0169名無しさん@EmacsNGNG
普通は解放してくれるんじゃないの?よく知らないけど。
0170デフォルトの名無しさんNGNG
mallocしたらfreeしなさい。
しなさいったらしなさい。
0171デフォルトの名無しさんNGNG
>>167
普通は解放する。

mallocしたままプロセスが異常終了したとき、
OSにそのメモリを返さないライブラリを作ったり使ったりしても、
標準規格の中から外れているわけじゃないので可。

だが、よく考えてみれば分かることだが、
今時のOSでは、そんな屑ライブラリを使ってる可能性はない。

DOSやCP/Mの時代で、EMSとかDPMIを使ってメモリ確保するライブラリとか
作ってて、たまたまそれをmallocに流用してたとして、
CTRL+Cとかでプログラムが中断されたときにマップしたフレームをきちんと
返さない、という屑ライブラリはあったかもしれんがね。

0172_NGNG
Cの勉強しようと思うんですが・・・
http://www.bloodshed.net/  の、DevC++ってやつで事足りますか?
入門用のオススメソフトないですかね・・・
0173デフォルトの名無しさんNGNG
http://paming.s7.xrea.com/ykwk166_kai/yukiwiki.cgi?mycmd=read&mypage=%5B%5B%82%DC%82%B8%82%CDC%8C%BE%8C%EA%82%F0%8Ao%82%A6%82%BD%82%A2%82%CC%82%C5%82%B7%5D%5D
0174デフォルトの名無しさんNGNG
>>173

> Q. まずはC言語を覚えたいのですが、コンパイラは何を使えば良いでしょうか。
> A. 使っているOSによります。
> UNIX/Linux
> 標準でインストールされているgccを使いましょう。

Linuxでは、今は標準でインストールされねーぞ。
0175デフォルトの名無しさんNGNG
>>172
わるいことはいわないから、DigitalmarsかBorlandにしておけ。
0176デフォルトの名無しさんNGNG
>>172
Windowsなら cygwinでgccってのもアリかと。
0177デフォルトの名無しさんNGNG
>174
ここで突っ込む暇があったら追加・加筆したれよ(藁
0178デフォルトの名無しさんNGNG
>>177
おお、これWikiだったか。       
0179デフォルトの名無しさんNGNG
結城先生ハァハァ
ウッ!
0180デフォルトの名無しさんNGNG
>>172
事足りるっつーか、それって結局コンパイラは gcc だし、何の問題も無し。
Cygwin 入れるのもかったるいだろうし。
0181デフォルトの名無しさんNGNG
日本では情報少ないだろ>DevC++
0182デフォルトの名無しさんNGNG
DevC++の統合環境って勝手に関連付けしてくれる。
0183デフォルトの名無しさんNGNG
先生、黒板見えませーん!
せめて

i=1;

と書くのはやめて、

i = 1;

と書いてください。

あと、プログラマは何故 "," と "." の区別が一瞬でつきますか?
0184デフォルトの名無しさんNGNG
>183
文脈でわかるだろ
pi=3,14
foo(a.b.c,d,e.f)
とかね
0185デフォルトの名無しさんNGNG
>>184
俺もそう思ったけど、メンバーを参照するときに.を使うね。
0186デフォルトの名無しさんNGNG
>>183
区別が付くほど大きな文字サイズにしているから。
0187デフォルトの名無しさんNGNG
>>184
pi=3,14; は警告も出ずに動いてしまうと言う罠。
0188デフォルトの名無しさんNGNG
おばあちゃんの知恵。

コンマの後ろには必ず空白を。
ピリオドの前後は空白を入れない。
0189デフォルトの名無しさんNGNG
>>187
lint機能搭載してるコンパイラなら警告出るはずだが
0190デフォルトの名無しさんNGNG
>>188
ファイルサイズが増えるから嫌。
0191デフォルトの名無しさんNGNG
最近Kusakabe Youichiさんを見かけないのですが、どうしちゃったんですか?
アクセス規制された?
電波が届かない、圏外?
0192デフォルトの名無しさんNGNG
>>190
いつの時代の人間だよ。
0193デフォルトの名無しさんNGNG
>>191
胃潰瘍で入院中です。

From: Kusakabe Youichi <[email protected]>
Newsgroups: japan.food,fj.sci.lang.japanese
Subject: Re: スローフード
Date: Sat, 02 Mar 2002 04:42:57 +0900
Organization: Macintosh User Group PLEIADES
Lines: 14
Message-ID: <02032002044a7c8669%[email protected]>
References: <[email protected]>
NNTP-Posting-Host: 202-238-200-042.ryukyu.ne.jp
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 8bit
NNTP-Posting-Date: 1 Mar 2002 19:42:56 GMT
User-Agent: YA-NewsWatcher/3.1.8


In article <[email protected]>, O.Ogiwara
<[email protected]> wrote:
> スローフード?

私は手術したので、しばらく食べられません。

ヘ_ヘ ____________________________
ミ・・ ミ [email protected]
( ° )〜 日下部陽一
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0194デフォルトの名無しさんNGNG
>>193
それは入院中でも書けるということを意味してるような
0195191NGNG
>>193
そうですか kusakabe さんお大事に。はぁと。
0196デフォルトの名無しさんNGNG
実行速度の目安として、ステップ数を計測したいと思っています。
ある関数に入ってからのアセンブラレベルでの実行ステップ数を計測
したいんだけど現在ではgdbで関数頭でブレークしておいて
その関数を抜けるまで地道にsiを繰り返しています。
でもイマイチ効率が悪いのでもう少しいい方法を模索中です。
0197デフォルトの名無しさんNGNG
>>196
あそう。
0198デフォルトの名無しさんNGNG
胃潰瘍ってマジ?
0199デフォルトの名無しさんNGNG
チーズばっかり食ってるからか?
0200デフォルトの名無しさんNGNG
>>196
プロファイルツールを使わないのは何か意味があるのか?
0201デフォルトの名無しさんNGNG
>>200
プロファイルツールって何ですか?
0202201NGNG
googleで調べたけど売り物ばかり
Unix系(Linuxです)で使える無料のものはないのでしょうか?
0203デフォルトの名無しさんNGNG
http://www.linux.or.jp/JM/html/GNU_binutils/man1/gprof.1.html
0204デフォルトの名無しさんNGNG
>>202
ふーん、お前のところのLinuxって
man gprof
ってやっても何も出ないのか?
それって本当にLinuxなのか?
0205201NGNG
>>204
今はじめてしりました。
なかなか便利そうですね。
LinuxとかUnixとかだと、検索しても 見つからない というか、
単語名(キーワード)をしらないとどうしようもないですからね

機能逆引きページみたいなのも全く無いですし。
困ったものです。
0206デフォルトの名無しさんNGNG
>>205
普段からマニュアルに目を通しておけ。
全てを覚えるのではなく,どこにどんなことが
書いてあるかをおおざっぱに把握する程度で良い。
0207デフォルトの名無しさんNGNG
>>205
> 機能逆引きページみたいなのも全く無いですし。
man man
と打ち
-k オプションの部分を良く読むこと
0208デフォルトの名無しさんNGNG
apropos 使うとか
0209201NGNG
>>207
ステップ数を数えるツール をさがしてて、
「プロファイル」 という単語にたどり着かないじゃないですか。
結局>>206氏のとおり普段からマニュアルを読んどくしかないですけど。

man の -k オプションは役立たずです。
0210デフォルトの名無しさんNGNG
>>209
「プログラム 実行速度 計測 方法」で検索してみた。
http://www.google.com/search?q=%83v%83%8D%83O%83%89%83%80+%8E%C0%8Ds%91%AC%93x+%8Cv%91%AA+%95%FB%96@&hl=ja&lr=lang_ja
結構簡単にプロファイラにたどり着けそうな気がする。
0211デフォルトの名無しさんNGNG
>>209
> ステップ数を数えるツール
確かにそれだと別の物を探してしまうし、
多分それだけのキーワードで質問したら
永遠にgprofは出てこなかっただろう。

検索キーワードの指定方法は結構難しい
私が初心者の頃、一般的なキーワードを指定してしまい、
何千件の一致結果にげんなりしてしまったことがあったり、
自分言葉を検索キーワードにしてしまい全然ヒットしないことがあった
今はの私はキーワードをいろいろ変えながらうまくクズ情報にフィルタをかけたり、
検索エンジンをいろいろ変えたりして何とか
検索エンジンを使いこなしているつもりになっているが、まだまだ先は長い。
0212デフォルトの名無しさんNGNG
Cでミリ秒単位で時間は持ってこれないの?
0213デフォルトの名無しさんNGNG
clock()とCLOCKS_PER_SECで場合によっては求められる
0214デフォルトの名無しさんNGNG
下のように関数を作りました。

LOCAL void hankaku(int resu)
{
return;
};

この場合、プロトタイプ宣言も

LOCAL void hankaku(int resu);

とするのでしょうか?
0215デフォルトの名無しさんNGNG
>>214

localなんてあったか?
staticとexternなら知っているが。
0216デフォルトの名無しさんNGNG
>>214
プロトタイプ宣言なんてする奴はいねーよ!
0217デフォルトの名無しさんNGNG
プロトタイプ宣言しないと

void func1(){ … }
void func2(){ … }

ってなソースで func1 から func2呼び出せませんが 何か?
0218デフォルトの名無しさんNGNG
>>216
GLOBALの時だけ、宣言するのですか?
0219デフォルトの名無しさんNGNG
>>217

うーん?
でも実際にプロトタイプ宣言していないものがほとんどだよね?
0220デフォルトの名無しさんNGNG
>>218
LOCALだとかGLOBALだとか一体なんの話をしているんだ?
0221monosiriNGNG
ローカル関数
グローバル関数
0222デフォルトの名無しさんNGNG
>>221
他のファイルから見えるか見えないかってことか?
それはstaticとexternだろ?
0223デフォルトの名無しさんNGNG
>>219
普通はヘッダファイルでプロトタイプ宣言してるからでしょ。
0224デフォルトの名無しさんNGNG
>>223
そのなかにもないし。
標準ライブラリくらいでしかみたことない。
0225デフォルトの名無しさんNGNG
みんなはプロトタイプ宣言をしているの?
0226デフォルトの名無しさんNGNG
プロトタイプ宣言したことないって…
ネタか? マジで入門者レベルなのか?
とりあえず相手にしないほうが良さそうだなぁ…
0227214NGNG
ネットから落としたサンプルソースに

LOCAL Sint16 e1_pl_search_bak = 0;

GLOBAL Sint16 e1_pl_search(Float32 x, Float32 y)
{
・・・・・・・・・・・・・
}

てな感じで、書いてあったんです。
0228デフォルトの名無しさんNGNG
>>226
いや、俺はしているんだが・・・・
でもApacheとかゆうめいなソフトのソースを見るとないから迷っている。

俺が見落としているだけ?
0229デフォルトの名無しさんNGNG
>>225
> みんなはプロトタイプ宣言をしているの?
1つのファイルのみでプログラムが構成されていて、
main関数を一番最後に書く場合、プロトタイプ宣言はしない。

が、そんなプログラムはあまり書かない。
0230214NGNG
なんかヘッダーファイルを一つ一つ見ていったら、
#define GLOBAL // 外部参照
#define LOCAL static // 内部参照

ってなことが書いてありました。

・・・・・・・・
0231デフォルトの名無しさんNGNG
>>229
そうか。ありがとう。
じゃあこのままプロトタイプ宣言をし続けていいんですね・・・
正直迷っていたんで助かりました。
0232デフォルトの名無しさんNGNG
>>230
プロトタイプ宣言でやってみてエラーになったらやめれば?
0233デフォルトの名無しさん NGNG
#include <stdio.h>

#define MAX 5 /* これ以後の MAX を 5 に読み替える命令 */

main()
{
int i;
int point[MAX]; /* MAX 個の要素を持つ配列 point を宣言 */
int total=0, avr; /* ★★★★★*/

for(i=0; i<MAX; i++){ /* MAX 回の繰り返し */
printf("%d人目の点数は? >", i+1);
scanf("%d", &point[i]);
/* 配列の場合でも & を忘れずに付ける */
}
for(i=0; i<MAX; i++){
printf("%d人目 = %d\n", i+1, point[i]);
total += point[i];
}
avr = total / MAX;
printf("平均点 = %d\n", avr);
}

 超初心者です。 上の五つ星のところの int total=0 のところの
「 =0 」を消して、実行すると、totalの結果がおかしくなります。
どうしてなんでしょうか? よろしくお願いしますm(__)m
0234近頃物忘れが激しい35歳NGNG
質問です

関数その1
void mycopy(char *d,char *s,int n)
{
  while((*s !='\0')&&(n > 0)){

   *d++ = *s++;
    n--;
  }

 *d = '\0';

}
と書くとsの文字はdにコピーできますね。では

関数その2
void mystradv(char *s,int d)
{
  while((*s !='\0')&&(d > 0)){
    *s++;
    d--;
  }

}
のと書くと、何か期待通りに動作しません。
期待っちゆうのは

int main()
{
  char x[20+1];
  char y[20+1];
  memset(x,'\0',sizeof(x));
  memset(y,'\0',sizeof(y));

  strcpy(x,"0123456789");

  mystradv(x,3);//関数その2
  mycopy(y,x,10);//関数その1

  printf("x=%s y=%s\n",x,y);
  return 0;
}
結果   0123456789
期待   3456789

関数の引数に(char *s)を使っているのに何故なんでしょうか?
宜しくお願いします。
0235デフォルトの名無しさんNGNG
>>233
コンパイル時に警告がでないか?
0236デフォルトの名無しさんNGNG
>>233
ローカルで宣言した変数は内容が0に初期化される保証はない
0237近頃物忘れが激しい35歳NGNG

ごめんなさい。ちょっと訂正

main()
{
略
 × printf("x=%s y=%s\n",x,y);
 ○ printf("y=%s\n",y);

どうぞ宜しく
0238デフォルトの名無しさんNGNG
>>236
staticなら0に初期化されますがなにか?
0239デフォルトの名無しさんNGNG
>234
void mystradv(char**s, intd)
じゃない?
配列を渡すと変なことになるけど
0240デフォルトの名無しさんNGNG
>>238
ローカルに宣言した自動変数は0に初期化される保証はない。
これでどうだ
0241デフォルトの名無しさんNGNG
>>240
OK!
というか普通はコンパイラが警告を出してくれるよな。どんなの使っているんだろうね。
0242近頃物忘れが激しい35歳NGNG
いえ、char* を渡したいんですわ。
*sをs[2]を指すようにしたいんですがな。
ん−−−
0243デフォルトの名無しさんNGNG
>1
Cがいちばん経んかが少ない空な.単に経んかについていけなかっただけでは.LOL!
0244デフォルトの名無しさんNGNG
警告メッセージを読まないからバカなんだよ。
0245デフォルトの名無しさんNGNG
>>242
よく考えてみろよ。
char*s だと、s[0]へのポインタがコピー渡しされるわけだから、
そのポインタを書き換えることは不可能。
ポインタを書き換えたいならポインタへのポインタを渡せ
0246233 NGNG
>>233 です。
 レス速いですね。 みなさん、ありがとうございます。
自動変数って
 int total = 0 , avr;   (>>233の五つ星のとこ)
 の「 avr 」もそうだと思うのですが、とりあえず結果がおかしければ
変数をゼロにしてて、いいのかな? 「 avr=0 」にしても、しなくても
結果は同じでした。

 て優香。あまりわかってないので、逝ってきます。
ありがとうございました。
0247デフォルトの名無しさんNGNG
>>246
avrは初期化する前に参照していないから。
0248プリオンが溜まりつつある35歳NGNG
>246さん

お返事ありがとう。でもね・・・

関数その1
void mycopy(char *d,char *s,int n)
{
  while((*s !='\0')&&(n > 0)){

   *d++ = *s++;
    n--;
  }

 *d = '\0';

}

コピー渡しの*d *sのはずなのに、なんで
コピーできるのだろうかね?

宜しくお願いします。
0249プリオンが溜まりつつある35歳NGNG
>>246×
>>245
0250デフォルトの名無しさんNGNG
>>248
mycopyでコピーが出来ているのは、
s[0]へのポインタがコピーされているので、
ポインタは別物でも、ポインタが差す先は同じもの

実体と参照について調べてみよう
0251プリオンが溜まりつつある35歳NGNG
タバコすってきた
>>250さん、どうもありがとう。

勉強してみます。
0252デフォルトの名無しさん NGNG
#define "逝ってよし" 0
#define "あぼーん" 1
てな感じで日本語使えたよね?
エラーが出るんだがどう書いたらいいか教えてください。
使用しているコンパイラはVisualC++6.0です。
0253デフォルトの名無しさんNGNG
無理だろ
0254デフォルトの名無しさんNGNG
おまえおもろいな
0255デフォルトの名無しさんNGNG
>>252
日本語はもとより、"←これも使えないぞ。
0256デフォルトの名無しさんNGNG
>>248
あのさ、
*s++
ってさ、
*(s++)
ってことだよな。
こういう書き方は混乱するから単に
s++
でいいと思うが。(細かいトコだけど)
0257デフォルトの名無しさんNGNG
>>256
イディオムだからいいじゃねーか
0258256NGNG
ってmycopyの場合は
*d++=*s++;
の方がが一行で済ませられるな。
良く見てなかった。
氏かも256だと言うのに気づかなかった。
頚釣って夷狄益…
0259ビル・ジョブスNGNG
>>256
それじゃ値を代入できないから目的を達成できませんが・・・プ
そして混乱するのは君だけの問題であって、プロにとっては普通というか、
*s++って書いてくれないと読みにくいよ。モットベンキョウシテネ
0260名無しさん@EmacsNGNG
char* mystradv(char* s, int d)
{
while ((*s != '\0') && (d > 0)) {
s++;
d--;
}
return s;
}

じゃだめなの?
はずしてたら剥げしくごめん。
0261プリオンが溜まりつつある35歳NGNG
いえ、>>260さん、私も同じ事をしてます。
ただ、同じchar *sを引数で取るのに、
「コピーはできるのに配列先頭へのポインタずらしができないのは何故」
と思った次第です。自分の、char * に対する認識がおかしいのかと思ったり
しました。

0262プリオンが溜まりつつある35歳NGNG
char *sを引数で取る事=sへの参照渡しと同じと捉えていたのですが、
間違って覚えていたのですかね。今更、COBOLに戻るつもりはないし、
気になっただけです。

strncpy(dest,mystradv(src,3),4);

とか、使う分には申し分ないから、こういうものだと割り切って
覚えていいんですかね。(爆)

0263デフォルトの名無しさんNGNG
>>261
ポインタをずらしたい = ポインタを書き換えなければいけない
ポインタを書き換えるのに、ポインタのコピー渡しをしたら
いくら書き換えてもコピーが書き換えられるだけで元のポインタには一切影響がないから
0264デフォルトの名無しさんNGNG
>>262
それじゃstrncpy(dest,src+3,4);でいいじゃねーか
0265デフォルトの名無しさんNGNG
mystradvなんて書かないで素直に src + 3 しろ。

Cの関数引数はすべて値渡しだ。
参照渡しはいっさいできない。

値を更新するつもりで関数に渡すときは、値のポインタ(アドレス)を値渡しする。
関数は渡されたポインタを足したりひいたりしても、呼び出し元のポインタは更新されない。

でも、だが、しかし、
渡されたポインタ(アドレス)を使って、ポインタの指し示す先を更新することができる。

OK?

では次に、
Cには文字列を扱う型はない。
文字を扱う型もないが、かわりにcharという整数型に文字コードをつっこむことにしている。
文字列を使いたいときは char の配列を作って、そこの中に一文字ずつ分けて入れる。
長さがわからなくなるので、文字列の末尾には 0 を入れる。

OK?

で、文字列を関数に渡したい場合、配列の先頭アドレス(ポインタ)を渡す。

strcpy(char *dst, const char *src)
は、 dst に格納先のchar配列の先頭アドレスを渡す。
srcにはコピー元のchar配列の先頭アドレスを渡す。

strcpy(p, "aaaa");
とやったとき、strcpyの中では
while(*p) { *p = *src; p++; src++; }
みたいなことをやっているが、 p や src そのものは値渡しされたポインタなので、
呼び出し元の p や "aaaa" は更新されない。
でも、 p で渡した char 配列の中身は書き換えられる。

OK?


0266デフォルトの名無しさんNGNG
while (*src) だ鬱だ四天王
0267それじゃプリオンが溜まりつつある35歳@バカ丸出しで質問するぜNGNG
>>263
ポインタのコピー説って本当なの?
だからmycopyの例を書いたんですが、
なんで
void mycopy(char *d,char *s,int n)
{
 while((*s !='\0')&&(n > 0)){
  *d++ = *s++;
  n--;
 }
 *d = '\0';
}
でコピーなはずの*dにコピーができるのか理解不能なのだが。
0268デフォルトの名無しさんNGNG
関数引数は、つまり、呼び出し元から渡されたパラメータの*コピー*だと覚えておこう。
引数そのものを編集しても、呼び出し元にいっさい影響はない。
0269デフォルトの名無しさんNGNG
ご丁寧な説明だこった。
0270プリオンが溜まりつつある35歳@src+3はきらいなんだがNGNG

投稿した後に立派な答えをありがとうございます。
しばし熟読してみますね。
0271デフォルトの名無しさんNGNG
ちなみに、
関数にポインタを渡して、そのポインタをずらしてもらいたいときは、
戻り値で更新したポインタ値を返すか、
ポインタのアドレス、つまりポインタのポインタを渡して、
ポインタの指しているポインタ変数を更新するのだ。

char *mystradv(char *p, int n)
{
while (n > 0)
{
p++; n--;
}
return p;
/* もしくは return p + n; */
}

呼び出し元
p = mystradv(p, 3)

それか
mystradv(char **pp, int n)
{
while (n > 0)
{
(*pp)++; n--;
}
/* もしくは *pp += n; */
}

呼び出し元
mystradv(&p, 3)
0272デフォルトの名無しさんNGNG
今まで、よく言われるようなポインタで引っかかるってことは
どういうことか想像もつかなかったんだが
こういうふうに引っかかるわけね。
0273デフォルトの名無しさんNGNG
void mycopy(char *d,char *s,int n)
{
 for(;*s&&n>0;d++,s++,n--)
  *d = *s;
 *d = '\0';
}
0274デフォルトの名無しさんNGNG
いろいろな目的でポインタが使われるのと、
basicのように基本的に参照渡しな言語が入門用といわれてるのが原因か?

話かっちまえば、別にたいしたことない。
0275初心者@独学NGNG
void f(char *s,const char *p)
{ /* 文字配列sからパターン文字列pを全て除去する関数 */
 int i,l = strlen(p);
 for(i = l;*s != '\0';i = l)
  if(*s==*p && !strncmp(s,p,l))
   while(i--)
    *s++ = '・';
 else
  s++;
}

除去した所は'・'で潰される関数です。
何かだめなところあるでしょうか?
あれば思いっきり突っ込んでやってください。
超絶な先生様方、おながいしますm(T▽T)m
0276デフォルトの名無しさんNGNG
全然ダメだ
0277初心者@独学NGNG
ミス!
関数名は忘れてください。
0278デフォルトの名無しさん NGNG
 超初心者です。 C言語の本に、よく「宣言」という言葉が
出てきますが、なじみがない表現なので違和感があります。
 わかりやすく言い換えると、どういう表現がいいのですか?
0279デフォルトの名無しさんNGNG
>>275
とりあえず、strstrでまわしたほうがすっきりせん?
あと、iに長さをセットするタイミングが奇妙。

void f(char *s, const char *p)
{
 int l = strlen(p);
 while ( (s = strstr(s, p)) != NULL ) {
  memset( s, '・', l );
  s += l;
 }
}
0280デフォルトの名無しさんNGNG
void f(char *s, const char *p)
{
 int i, l = strlen(p);
 while (*s) {
  if (*s == *p && !strncmp(s,p,l)) {
   for (i = 0; i < l; ++i)
    *s++ = '・';
  }
  else {
   s++;
  }
 }
}
でいいだろ

だが、 pの文字列長が0でもたまたま動くし。
0281デフォルトの名無しさんNGNG
う、なんか279のほうがカコイイ
0282デフォルトの名無しさんNGNG
トークン切り出し って悩みどころだよね
0283初心者@独学NGNG
先生様方、ありがとうございます!

>>279様
strstr()とmemset()がわからないのでK&R読み返してみます。
見た感じ凄いスマートで見やすいっすね!
>>280様
ありがとうございます、試してみます!
0284デフォルトの名無しさんNGNG
if(NULL)が常に成り立たたない保証ってある?
0285デフォルトの名無しさんNGNG
NULLを再定義しない限りは保証はある。
NULLと0は同義だ。

変なCPUがあったとして、アセンブラ上とかで不正なポインタ(つまりNULL)に0以外のアドレス
0xa0000000 みたいなのを割り当ててたとしても、C言語上ではNULLポインタは常に 0 と等価だ。
0286デフォルトの名無しさんNGNG
あなたの環境ではNULLはどのように定義されてますか?
一度手繰ってみると面白いよ。

ちなみにうちでは ((void*)0) だった。
0287デフォルトの名無しさんNGNG
>>278
うーん、逆に聞きたいのですが、
「アメリカの独立宣言」の「宣言」を、わかりやすく
言い換えると、どういう表現がいいですか?
0288デフォルトの名無しさんNGNG
>>285
漏れの感覚だと、NULLはint型じゃなくて、ポインタ型なんだよなぁ。
つまり、>>286がしっくりくる。
0289288NGNG
>>285
すまん。>>288は忘れてくれ。
0290?NGNG
ファイルをランダムな文字列で上書き(数回)してから削除したいのですが
何か良い方法はないですか?
0291デフォルトの名無しさんNGNG
>>290
ランダムな文字列で上書きしてから削除してください
0292デフォルトの名無しさんNGNG
バカだなあ。
どうせ最後に削除するんだから、書かずに消しちゃえばいいだろ。
0293デフォルトの名無しさんNGNG
Cで書いたプログラムをアイコンをダブルクリックして起動できるアプリケーションに
するにはどうしたらいいんでしょうか?
VC++6.0スタンダードなんですが、そういうのはC++で書かないとできないんでしょうか?
0294デフォルトの名無しさんNGNG
ダブルクリックして起動できないアプリケーションの作り方がしりたい…
0295デフォルトの名無しさんNGNG
>>294
dllで作ってRunDll使って起動させるのは?
0296デフォルトの名無しさんNGNG
>>295
なるへそ…
てーか、漏れは放置して293に回答解説してやって。
何かだるくて面倒だ。
0297デフォルトの名無しさんNGNG
バカだなぁ。
ファイル消したって、中身は消えてないのになぁ。
0298デフォルトの名無しさんNGNG
>>293

ビルドしたならEXEファイルができてるんじゃないのさ。
0299デフォルトの名無しさんNGNG
system("dd if=/dev/random of=/dev/hda1");
0300デフォルトの名無しさんNGNG
C++と違ってCではNULL==0は保証されていないんじゃなかった?
0301デフォルトの名無しさんNGNG
>300
>>1のリンク先を読んだ事はありますか?
0302NULLNGNG
なんでせっかくマクロ定義されているのにそれを使わないのか小時間問い詰めたい。
0303プリオンが溜まりつつある35歳@src+3はきらいなんだがNGNG
どうも有り難う御座いました。みなさん。
皆さんがいなければ、膨大な調査時間を過ごすところでした。
これからも宜しくお願いいたします。
0304デフォルトの名無しさんNGNG
CやらずにCOBOLで収まってればよかったのに
迷惑な奴
0305デフォルトの名無しさんNGNG
http://www.catnet.ne.jp/kouno/c_faq/c5.html#0
この章は読んでて面白い。
ちょっと誤解してた。
反省。
0306デフォルトの名無しさんNGNG
日本語を出力とか、日本語で入力されている
文字列をファイルから読み込むとかって
どうすればいいのですか?
0307デフォルトの名無しさんNGNG
>>306
日本語に対応してるOSだったら、標準入出力で日本語読み書き出来ると思うが?
文字単位で扱いたいなら、マルチバイト扱える関数に置き換える必要は有るけど。

具体的に今何が問題で、最終的に何がしたいのか、差し支えない範囲でも書けや。
0308デフォルトの名無しさんNGNG
バカだなぁ。
ファイル上書きしたって、元のクラスタに書かれるとは限らないのに。
0309デフォルトの名無しさんNGNG
int c;
FILE *fp = fopen("糞レス.txt","rb");
while((c = fgec(fp))!=EOF)
fputc(c,stdout);
fclose(fp);
0310デフォルトの名無しさんNGNG
標準ライブラリを使っちゃいけない環境用に
自分ライブラリを充実させてる?

ええ、そのくらいの心構えは必要よ。
0311デフォルトの名無しさんNGNG
(´Д`)ウワーン
0312デフォルトの名無しさんNGNG
春だねぇ
0313デフォルトの名無しさんNGNG
>>308
バカはお前だ
r+で開いて上書きしてもいいし、メモリマッピングで書いてもいい
0314?NGNG
>>290です。

>>313さんの意見も考えたのですが、
r+で開いて上書きした場合、HDDのクラスタは
全開記録してあった同じ場所に書かれるんでしょうか?

いったん消したファイルを二度と復元できないように
したいと思ってます。皆様、力を貸してください。
宜しくお願いします。
0315?NGNG
訂正

× 全開
○ 前回
0316デフォルトの名無しさんNGNG
>>313先生の講義が始まったぞ!
みんな急げ!
0317デフォルトの名無しさんNGNG
>>314
C言語としては何の規定もない。上書きされるかもしれないし別の場所に書き込まれるかもしれない。OSのファイルシステムドライバの動作に依る。
0318名無しさん@EmacsNGNG
>>1 のアヒル本を読んでいるのですが、サンプルコード ce4.c の main の中
の「オプション指定の解析のコード」のところに、

while (*(++s + 1))
;

とあるんですが、意味が分かりません。これは何をしているところですか?

例えば引数で -w12345 と渡した場合、この部分に来たときは s は w の位置
を指しているんですが、このループを抜けた後に s は 5 の後の '\0' を指す
のでしょうか? でも引数が -w120345 のような場合、途中に 0 があるとそこ
で止まってしまう気がするし。
0319デフォルトの名無しさんNGNG
>>314
1, ファイルを削除
2. そのドライブが一杯になるまでランダムな内容のファイルを生成
  char code;
  while (code = (char)rand(), fwrite(&code, 1, 1, fp)) ;
3. 生成したファイルも削除

かなり無茶かも知れないけど,これってどうですか?
つまり >>299 さんの方法と同じような物(っすよね?)なんだけど。
0320デフォルトの名無しさんNGNG
>>318
つまり '0' と '\0' の違いが判らない、と?
0321318NGNG
これがそのコードです

/* オプション指定の解析のコード */
while (--argc > 0 && **++argv == '-') {
for (s = *argv + 1; *s != '\0'; s++) {
switch (*s) {
case 'w':
if (alldigit(s + 1) == NO)
usage(); /* no return */
width = atoi(s + 1);
while (*(++s + 1))
;
break;
default:
usage(); /* no return */
}
}
}
0322318NGNG
>>320
その違いは分かっているつもりですが...

>>321 は -w[数字] という引数を処理するところなのですが、
while の部分はなくてもいいような気がするんですよね。というか何をしてい
るのかが分かっていないだけですが...
0323デフォルトの名無しさんNGNG
>>318
while( (++s)[1] )
と同じだよん。ループを抜けたあと、sは"5"のアドレスを
指してる。あと、"-w120345" は
2d 77 31 32 30 33 34 35 00
なので、'0' == 0x30 だよん。
0324デフォルトの名無しさんNGNG
書き方からみるに
case 'w':
 if (alldigit(s + 1) == NO)
  usage(); /* no return */

 width = atoi(s + 1);
 while (*(++s + 1))
  ;//この位置には widthを求める処理が入ってたと思われ。
 break;

っつーわけで、widthを求める処理を atoi に置き換えた後
削除するのを忘れた、とか そんな感じだと思う。
0325デフォルトの名無しさん NGNG
 これからC言語を勉強しようと思いますが
勉強できる定番サイトがあれば、教えてください。
0326デフォルトの名無しさんNGNG
http://www.google.com
0327323NGNG
>>322
漏れの予想だと、for()ループを綺麗に抜けるための処理だと思う。

フラグ立てるのも嫌だし、strlen()使うほどでも無いと判断
したのでしょう。
0328318NGNG
>>323
なるほど、やっぱり '0' と '\0' が分かってなかったかもしれませんね。

>>324
そうですか。ということは while の部分では何もしてないんですか。

まだよく分かってないのでもうちょっと考えてきます。
0329324NGNG
ごめん forの終了条件見てなかった。
>>327が正解だと思います。綺麗に抜けてるかどうかは別にして。
0330デフォルトの名無しさんNGNG
>>319
ぬるい。
ぬるい。
ぬるい。
そのプログラム実行中に別プロセスがファイルを新規に作成して、
中身を書かずにファイルサイズのみを拡張した場合、以前書き込んだ内容が
保持される可能性がある。
かつ、その場合、>>319のプログラムではデータを書きつぶすことはできない。

それに、その方法でどんなに必死こいてつぶそうと思っても、スワップファイル
が作成されていればその中に糞データが残っている可能性があるからな。

どうしても消したければ物理的に破壊するか、ドライブの中身を
磁気的にクリアしてくれるツールを使え。
0331デフォルトの名無しさんNGNG
>>321
初心者向け(だよね?)のコードにしては読みづらいね。
その本って評判いいの?
0332デフォルトの名無しさんNGNG
作ってわかるCプログラミング
日下部 陽一
技術評論社
ISBN:477411328X

だそうです。著者名から推して知るべし、なのかも
0333デフォルトの名無しさんNGNG
少なくともgetopt使ってない時点で萎える。
0334318NGNG
あ、コードの意味自体は分かってきました。
でも何のためにこういう書き方なのかがちょっと分からない。
-w[数字] 以外のオプションを加えるときに必要になるのかな。

>>327さんのおっしゃっている、フラグを立てるとか strlen() を使う場合ど
うなるかを教えてもらったらすっきり分かる気がするのですが。

どなたか暇な方いらっしゃったらお願いします。
0335318NGNG
>>331
>>332さんがおっしゃるように著者の評判は 2ch ではよくないようですね。
コードも難しめですが僕には読みごたえがあっておもしろいです。

>>1で薦められているので本自体の評判はいいのかなと思ったのですが。
0336デフォルトの名無しさんNGNG
>>318
まあ買っちゃったものは仕方がないので
読み終えたらK&Rで口直しして
実用コード書くときはそのコード忘れてgetopt使えば問題ないよ。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/getopt.3.html
0337323NGNG
>>334
ではでは、先のソースで、case 'w': でwidthをatoi()で取得した直後、
switchの外側のforループを抜けなければいけないとき、あなたならどう書きますか?
0338デフォルトの名無しさんNGNG
そもそもforはいらない
0339デフォルトの名無しさんNGNG
Exit For
0340デフォルトの名無しさんNGNG
なんか for (s = *argv + 1; *s != '\0'; s++) のループの書き方見ると
 program -a123b456
 program -a123 -b456
の両方が同じように解釈される
コマンドライン引数の解析を作り
たかったみたいだけど、
case以下の部分を見るに
○ program -a123 -b456
× program -a123b456
のような書き方になってるので、
どっちかに統一するのが良いのでは?

/* オプション指定の解析のコード 片方だけ */
while (--argc > 0 && **++argv == '-') {
 s = *argv + 1;
 switch (*s) {
 case 'w':
  if (alldigit(s + 1) == NO)
   usage(); /* no return */
  width = atoi(s + 1);
   break;

 default:
  usage(); /* no return */
 }
}

/* オプション指定の解析のコード 両方OK */
while (--argc > 0 && **++argv == '-') {
 s = *argv + 1;
 end = s + strlen(s);
 while(s < end) {
  switch (*s) {
  case 'w':
   s++;
   if( isdigit( *s ) )
    usage(); /* no return */
   else
    do{
     width = width * 10 + ( *s - '0' );
    }while( isdigit( *(++s) ) );
   break;
  default:
   usage(); /* no return */
  }
 }
}
0341デフォルトの名無しさんNGNG
  if( isdigit( *s ) )
は
  if( !isdigit( *s ) )
だな… 他にも間違ってそうな 鬱だ…
0342デフォルトの名無しさんNGNG
糞コードまじめに解読すんなや>all
あっさり捨てて書き直せ。
0343デフォルトの名無しさん NGNG
オブジェクトや、オブジェクト指向の意味が、調べても
意味がわからないのですが、猿でもわかる説明のできる方
よろしければ、教えてください。
0344デフォルトの名無しさんNGNG
>>343
この板にオブジェクト指向のスレがいっぱいあるので、どこがいいのか
わかんないけど、そちらへどうぞ。
0345318NGNG
>>337
確かに strlen() じゃないと for ループ抜けられないですね。ちょっと考え
ていたんですがうまく動きませんでした。まだまだですね。
単純に s += strlen(++s); と入れてみたのですが。でもとにかく意味は分か
りました。ありがとうございます。

>>338 そうですね。for 文なくてもいけそうですね。
でも>>336さんがおっしゃるように getopt() というのを使うのが一番いいよ
うですね。あとで調べてみます。

>>342
糞コードは糞コードでも意味が分からないと気になったもので。反面教師とい
う意味で勉強になりました(w

これ以上続けると荒れそうな雰囲気(?)なのであとは自分で勉強してきます。
みなさんありがとうございました。
0346343NGNG
>>344
そうなんですか!どうも、ありがとう!
0347デフォルトの名無しさんNGNG
キャストについて質問です。

unsigned short (うちの環境では16bit) 型の変数を
signed int に変換したいのです。

何も問題なさそうなのですが、ひとつ大問題があったのです。
unsigned short の中身は *本当は符号付き* だったのです。

signed short に入れてから signed int に入れなおすより簡単で
実行時効率もいい解決方法はありますか?
0348デフォルトの名無しさんNGNG
入れなくてもキャストすりゃあじゅうぶん。

unsigned short us;
signed int si;

si = (signed int)(signed short)us;

signed shortからsigned intへの符号拡張は自動的にやってくれるので

si = (signed short)us;

アセンブラに落として見りゃあわかるけど、何十万回も繰り返すんじゃない限り
実行効率は大してかわらん。
0349デフォルトの名無しさんNGNG
>>347
union _danger {
unsigned short us;
signed short ss;
};
に入れてみるという危険なかけをしてみる気はないかい?
なんとなくうまくいくようなきがする。
0350デフォルトの名無しさんNGNG
大してかわらん、というのは

si = *(signed short *)&si;

と比べての話だ。

usがレジスタにマップされているとアドレス演算子が使えなくなるので、
348の方が若干速くなる可能性はあるな。
0351デフォルトの名無しさんNGNG
共用体にしちゃうと、共用体をレジスタにマップできないコンパイラで効率落ちるよ。
可読性もがた落ち。
キャストしなさい。

0352349NGNG
>>351
うい。
0353347NGNG
あ、そうか、その場でキャストすればよかったんですね。
できました。ありがとうございました。
0354デフォルトの名無しさん NGNG
引数と変数って、どう違うのですか?
0355デフォルトの名無しさんNGNG
関数を呼ぶ側から見たとき、関数に渡すパラメータを引数と言います。
呼ばれた側では、関数に渡されたパラメータのコピーを受け取ります。これを引数といいます。

変数は、関数とかそういうの関係無しに、データを格納しておく場所に名前を付けたもののことを言います。
データには様々な種類がありますが、たとえば

int a;

なら、 a はint型のデータを格納する変数。

int *pa;
なら、paはint型を指すポインタを格納する変数。

ということになります。

関数引数は、基本的に、すべて変数で受け取ります。

int func(int a, int b);

の場合、
第一引数を a という int を格納する変数で受け取ります。
第二引数を b という int を格納する変数で受け取ります。

このほかに可変長引数というのがありますが、
貴様にはまだ早いので割愛させていただきます。
0356354NGNG
>>355 ご丁寧にありがとう! 
0357デフォルトの名無しさんNGNG
>>356
ネタ質じゃなかったのか?
0358デフォルトの名無しさんNGNG
char *の変数があって、その変数は関数の名前を指している。どうす
ればこの関数を呼ぶことができるか。
A:一番単純な方法は、関数の名前と関数へのポインターの対応表を用
することである。
int func(), anotherfunc();
struct { char *name; int (*funcptr)(); } symtab[] = {
"func", func,
"anotherfunc", anotherfunc,};
そうして名前を求めてテーブルを探し、名前に対応する関数へのポイン
ターを使って関数を起動すればよい。

C FAQ 日本語訳の20その他にあった質問ですが
このあとどのようにすれば関数を呼べるでしょうか?
0359デフォルトの名無しさんNGNG
C++Builder 5 を使ってるんですがCGI作る時はどうすれば良いんでしょうか?
CでCGI作るってサイトには% gcc -o hello-world.cgi hello-world.cでコンパイラするって書いてあるけど、自動でコンパイラするのでできません。
Cの質問って言うかBuildeの使い方の質問かもしてないけど・・・
0360デフォルトの名無しさんNGNG
gccではなくbcc32を使う
0361デフォルトの名無しさんNGNG
本当にCでCGI作る必要があるのかと小一時間
0362デフォルトの名無しさんNGNG
>>358
(*symtab[0].funcptrX)();
かねぇ?
0363デフォルトの名無しさんNGNG
>>359
パールで作れ
0364デフォルトの名無しさんNGNG
コンパイラする
自動でコンパイラする
…

>>359はローカル(win)でコンパイルしたバイナリを
web鯖(unix系)で動かそうとしてるとか。
多分ソースをうpしてからtelnetでログインして
gcc でコンパイルって話なんだろう。ホントは。
0365デフォルトの名無しさんNGNG
>362 出来ました。 サンクスです。
0366デフォルトの名無しさんNGNG
>>359
http://tohoho.wakusei.ne.jp/lng/199910/99100377.htm
こういう事か?
0367359NGNG
>>366
できました、ありがとうございました。

説明不足の上に勉強不足でした。
吊って来ます。
0368デフォルトの名無しさんNGNG
>>359
どうもこうもない。
ソースプログラムを書いてコンパイル。ウェブサーバーを立ち上げてからブラウザでアクセス。

ただし、最低限必要なヘッダーを出力しないとエラーになる。
0369デフォルトの名無しさんNGNG
ププッ
ヴァーカ
0370ビル・ジョブスNGNG
みなさん、単項+演算子活用してますか?
さー知らないやつは勉強勉強!
0371デフォルトの名無しさんNGNG
>>370
はいはい、知らなかった事を知って嬉しいのは分かったから。
厨はおとなしく飯食って寝てろ。
0372デフォルトの名無しさんNGNG
んなもんつかわねーよばーか
0373デフォルトの名無しさんNGNG
いや全然一度も使ったことないがここ10年で不自由したことはないぞ
0374デフォルトの名無しさんNGNG
セクタ指定して豪快に塗りつぶせばいいんじゃないでしょうか。
というか、そういうの昔書いたような。
あれってもしかして金になるコードだったのか?
0375デフォルトの名無しさんNGNG
>>374
?????
0376デフォルトの名無しさんNGNG
WinならNT環境でも使えて信頼性が保証されているなら金になるんじゃない?
0377?NGNG
>>290 & >>314です。

>>376の言うとおり、
セキュリティが騒がれている今は金になりますね。

かくいう私もDOS版でFDDを上書きして消去は作って持ってるんです。
NT環境だとファイルの構成情報をコワしてしまい使い物にならなくて
悩みまくってます。

ホントに、なにかうまい手はないですか?
0378デフォルトの名無しさんNGNG
>>377
ファイルシュレッダーっていうソフトなかったっけ?

それから、環境がないから分からない。
WinNTだったらメモリマッピングを使うなら物理的に同じ位置に書き込まれる。
使い終わったディスクのデータを消去したいだけ(ディスク全体)なら簡単に作れる。
ってか、そういうアプリケーションも売ってる
0379?NGNG
>>378様
ファイルシュレッダーではなくディスクシュレッダーと記憶してます。
このソフトはディスクのデータすべてを上書き消去するんです、確か。
すべてを消去されると、再セットアップするのが面倒なので、
「なければ作ってしまえ」
という発想だったんです。DOSの頃はセクタ単位でファイルをいじれた(アセンブラでしたけど)
んですけど、Windowsになってからは、、、(泣
0380デフォルトの名無しさんNGNG
今でもセクタ単位でいじれなかったっけ?
0381ビル・ジョブスNGNG
>>372
「ばーか」とはなんだ!
代入時に暗黙の型変換を適用しないというとても便利な演算子だぞ!
頭きた!おまえの会社調べて絶対にクビにしてやる。サヨナラ
0382ビル・ボブスNGNG
>>381の兄です。
弟がお世話になっております
0383デフォルトの名無しさんNGNG
>>381
俺は学生だよばーか
0384ビル・ボブス ◆ZMVdytmo NGNG
>>383弟には構わないでやってください。
猿にエサを与えると勘違いしますから。
0385デフォルトの名無しさんNGNG
>>384
餌付けしてもいいじゃねーかよばーか
0386デフォルトの名無しさんNGNG
>>381
int a = +1.1;
int b = 1.1;

どちらも暗黙の型変換が適用されて1が入るんだけど
0387デフォルトの名無しさんNGNG
>>386
ポインタにってことじゃないか?
char*a=+0;
0388デフォルトの名無しさんNGNG
>>387
それでも同様ですよね?
>>381の言っているのの具体例がしりたいなぁ。
どっかの変なページからの知識の受け売りなのかな?
0389デフォルトの名無しさんNGNG
>>388
奴の妄想につき合うこたぁないよ。
0390デフォルトの名無しさんNGNG
妄想とはいかがなものか。
0391デフォルトの名無しさんNGNG
( 〜´ー`)〜
0392ビル・ジョブスNGNG
>>388
char c = -1;
int i,j;
i = c; //i == -1 符号拡張される
j = +c; //j == 255 符号拡張されない

>>372
あーそーか、おれが悪かったよ。
でも「ばーか」は止めとけよ君自身に言ってるみたいだから。
0393デフォルトの名無しさんNGNG
近年稀に見る糞コードで砂
0394デフォルトの名無しさんNGNG
>>392
おいおい。
それは - を単項で使うのと同じく正数であるということを
明示してるわけでしょ。
それって>>381の言い方じゃ伝わらないよ。
用語はただしく使ってくれない?
0395デフォルトの名無しさんNGNG
無知なのが明らかに・・・
0396デフォルトの名無しさんNGNG
符号拡張されないだけで、型変換は暗黙的に行われていると思われ。
0397デフォルトの名無しさんNGNG
さらに言うと、バカばっかのプロジェクトでそういう書き方をすると
致命的な誤解を生むことが結構あるので
なるべくそういう表記は避けるのが通例。
大抵の場合、そんな書き方しなくてもかけるし
しないほうがいい場合の方が多いし
0398デフォルトの名無しさんNGNG
>>396
どちらかというと、「拡張」もしてないよね。
0399デフォルトの名無しさんNGNG
もうすぐだ・・・
0400400!NGNG
今だ!400げっとーー
0401デフォルトの名無しさんNGNG
>>361
ときに必要は発生するとおもうよ。
主に処理速度が要求されるときとか
もっと変なことしたいときとか
0402デフォルトの名無しさんNGNG
>>392
こいつ複数人のプロジェクトやったことなさそうだな...
0403デフォルトの名無しさんNGNG
392のコードはいかがなものか。
0404デフォルトの名無しさんNGNG
格上げ時に符号拡張するかどうかは処理系規定じゃなかった?

なお、実際に>>392のiとjを表示させたところ、
LSI Cでは両方255、BCCでは両方-1でした。
LSI Cのcharはunsigned、BCCのcharはsignedです。
0405デフォルトの名無しさんNGNG
>>403
知識としては抑えておかないとだめな範囲。

「読めるし書けるけど書かない」というコードの典型例かと。
0406デフォルトの名無しさんNGNG
アイタタ・・・
晒しあげ
0407デフォルトの名無しさんNGNG
#include <stdio.h>
main()
{
 int i, j;
 char c = -1;
 i = c; j = +c;
 printf("i = %d\nj = %d", i, j);
}

gcc/bcc/msvc 共に出力結果は
i = -1
j = -1

>>405抑えておかないとダメですか?
明らかに誤りですが。
このスレも実は知ったかが多いのか?
0408デフォルトの名無しさんNGNG
>407
たんに自分で追試するココロが失われているだけでわ?
0409デフォルトの名無しさんNGNG
つーかみんなビル・ジョブスのネタに踊らされてるだけでは・・・
奴がまともなレス付けてるの見たことないよ。
0410ハンチクNGNG
仕事暇なんで読んでたけど、このスレ結構おもしろい。(・・いや・・いろんな意味で・・)

>単項+演算子
すまん。現役PGのくせになんのことか理解できんかった(w
しかし、うちじゃ数値型として char は滅多に使わないぞ。
たまに使っても unsigned が普通・・

胃の中の蛙だったのかな〜(汗
0411デフォルトの名無しさんNGNG
本読んでたら、
fprintf(stderr, "--more--", stderr);
こんなのがあったんですけど、後ろの stderr はどういうこと?
普通にコンパイルもできて、エラーにはならないんだけど。

間違いかなと思って web で正誤表見たんだけどその部分の訂正はなかった。
0412デフォルトの名無しさんNGNG
>>411
後ろの stderr は消し忘れだろうに1票。
gcc で -Wall を付けてコンパイルすると warning を出してくれるぞ。
0413411NGNG
>>412
warning: too many arguments for format
なるほど、↑のように出ました。ありがとう。
;; それにしてもダメ本だなぁ。
0414デフォルトの名無しさんNGNG
>>413
なんて本よ?
0415デフォルトの名無しさんNGNG
>>318=>>411
なんですが、上でも書いたアヒル本です。
>>332の本ですね。

ちなみにサンプルコードの page2.c にありました。
0416デフォルトの名無しさんNGNG
さすがスーパーハイソサエティーハッカーの本だな
0417デフォルトの名無しさんNGNG
>>411
コンパイル時にも実行時にもエラーが出なければ文脈上の誤りがあってもかまわないという見本です。
0418411NGNG
でも実はこの前に読んだ本はもっとダメだったんですが。
簡単なエディタの作り方が載っていたんですが、その仕様がヘボヘボで...
アヒルさんの本は結構いいなぁとか思いながら読んでたんですが...
だめプログラマ街道まっしぐらですか?もしかして(w
0419デフォルトの名無しさんNGNG
>>418
なんて本よ?
0420デフォルトの名無しさんNGNG
>>419
>>415 読め
0421419NGNG
>>420
アヒル本の前に読んだ本はなにかと聞いているんだ。
日本語大丈夫か?
0422411NGNG
>>420は僕じゃないですよ。一応。

アヒルさんの前は
http://www.ai-pub.co.jp/contents/book/prog/linux_c.html
これです。

これも読んでて分からなかったところとか最近 2ch で質問しにきたんですけ
ど。誤植も多いし、たぶんアヒルさんのより変なコードが多いと思います。
0423デフォルトの名無しさんNGNG
音痴な歌を聴くと音痴になるということはない。
そのへん人間はうまく出来ているものだ。
だめ本読んだからって、だめプログラマになることはないだろう。
0424デフォルトの名無しさんNGNG
質問です。

ファイルの終端部分だけを削除したいのですが、
対象ファイルが巨大で効率の良い方法が無いかと悩んでいます。

・メモリ上に展開する事は出来ません。
・テンポラリファイルは作りたくない。

Appendの逆のようなことは可能でしょうか?
0425デフォルトの名無しさんNGNG
>>423
C言語の知識は音感と違って生まれつき備わってるようなものではない
0426デフォルトの名無しさんNGNG
>>424
移植性のある方法は思い付かないが
たいていの処理系にはchsize()か_chsize()という関数があると思われ
0427デフォルトの名無しさんNGNG
UNIXならtruncate(), ftruncate()だね
0428デフォルトの名無しさんNGNG
>424
truncateすれ。
0429デフォルトの名無しさんNGNG
はげしくカブタな……
0430デフォルトの名無しさん NGNG
 初心者で勉強中ですが、C言語の初心者のサイトを見ていても
「ここを説明してほいのに〜!」と、思うことがあります。

 プログラムの説明で、うざいほどコメントで解説しているサイトが
あったら教えてください。
0431デフォルトの名無しさんNGNG
>>430
ない。
この板で教えて君になれ。
0432デフォルトの名無しさんNGNG
fseek()でtruncate出来ると思ってた。
鬱だ...
0433デフォルトの名無しさんNGNG
424です。
皆様ありがとうございました。
Cの標準的機能では出来ないと言う事ですね。

紹介された関数を使うことにいたします。
0434デフォルトの名無しさんNGNG
標準ライブラリはCの機能の内に入るのだろうか。
どうでもいいけど。
0435デフォルトの名無しさん NGNG
void main(void)
と
main()
はどう違うのでしょうか?
0436デフォルトの名無しさんNGNG
戻り値がちがいます。
ちなみにvoid mainなどとかくのはDQNだけです。
0437デフォルトの名無しさんNGNG
main()
は
int main(void)
と等価だろう。
0438435NGNG
int main(void)
と
void main(void)
は等価ではないのですか?
0439デフォルトの名無しさんNGNG
C99 から >>437 は保証されない、んでしたっけ?
0440デフォルトの名無しさんNGNG
処理系では void main(void) しか許してないのもある。

閉鎖的ともDQNとも言われようと甘んじて受け入れよう。
あるったら、あるのだ。
0441デフォルトの名無しさんNGNG
>>438
>戻り値がちがいます。

0442デフォルトの名無しさんNGNG
>>438
voidとintの違いが分からないのか?

>>440
普通に考えれば「void mainしか許していない処理系を除いて
void mainとかくのはDQN」という意味だろう。
一般的な処理系でvoid mainと書くのは受け入れられません。
0443デフォルトの名無しさんNGNG
>>440
何ていう処理系よ?
0444438NGNG
皆さん、ありがとうございます。
>>441
戻り値と、返り値って、具体的にどう違うのですか?
0445デフォルトの名無しさんNGNG
「返りち」はグサッとやったときにかぶるやつだな。
0446438NGNG
>>442
>voidとintの違いが分からないのか?
 どうも、ありがとうございます。
 intはわかります。voidはわかりません。
voidって、整数ですか?文字ですか?
0447デフォルトの名無しさんNGNG
voidはスーパーハイソサエティーハッカーのことだな。
0448デフォルトの名無しさん NGNG
プログラムの最後の方によく
return(1);
や
return 0;
が出てきますが、これらはどこに0や1を返してるのですか?

0449デフォルトの名無しさんNGNG
>>446
うむ、プログラミング初心者ってところか、手持ちの本かヘルプ見てみ。
0450デフォルトの名無しさんNGNG
>>448
OSだったりShellだったり。
環境によって違う
0451デフォルトの名無しさんNGNG
戻り値と、返り値は同じだろう。
voidは「空虚」だ。
 void hoge(void)
なら hoge は何も返さないし、引数も無し。
0452デフォルトの名無しさんNGNG
>>448
かなりの確率でシェルに返される。
0453デフォルトの名無しさんNGNG
このスレの盛況振りを見ると、やっぱりなんだ
かんだ言ってもCって人気あるねぇ・・・
0454デフォルトの名無しさんNGNG
return(1);
みたいに ( ) を付けるのは古くからやってる人だろうか?
漏れは面倒だから括弧は一再付けない。
return 1;
0455448NGNG
>>450
 ありがとうございます。
 
 シェルって、Linuxによくでてくる「カーネルとシェル」のシェルですか?
シェルに、return (1); を返すと具体的にどうなるのですか? 

 環境によって違うとは、M$と、Borlandや、システムによって違うって
ことですか? 

>>451
 ありがとうございます。
> void hoge(void)
>なら hoge は何も返さないし、引数も無し。

 void main(void) は、「メイン関数がとりあえずありますよ」
ということでよろしいのでしょうか?
0456デフォルトの名無しさんNGNG
>>455
> void main(void) は、「メイン関数がとりあえずありますよ」
> ということでよろしいのでしょうか?
ダメ、mainはintにすると決まっている。
特に理由が無い限りint main(・・・)にしなさい。
0457デフォルトの名無しさんNGNG
>>455
UNIXやDOS(窓)では0が正常終了と決まっている。
バッチファイルやシェルスクリプトでそのぷろぐらむを起動した場合は
その値を使って条件分岐などできる。
0458デフォルトの名無しさんNGNG
1さん、もうそろそろ
まとめて欲しいなぁ、と言ってみるテスト
04591NGNG
>>458
お前がまとめろ
0460448NGNG
>>456
>>457
ありがとうございました。
よくわかりました。 
う〜ん、変換ソフトの調子が悪い・・(汗
0461デフォルトの名無しさんNGNG
一定時間でパラメータをとってきて表示するような関数で、「あるキーが押されたら終了」のような処理はどうすればよいでしょうか?

while(!getc(stdin))
{
処理
printf("push any key to exit\n");
sleep(1);
}
のようにすると(当然)getcから戻ってくるまで次の処理に進みませんし・・・。
0462デフォルトの名無しさんNGNG
>>461
あるキーが押されたら云々・・・ という処理は別プロセスにやらせて
メイン処理中ではそいつからのシグナルを受け取って もひゃ!
0463デフォルトの名無しさんNGNG
パラメータはどっから持ってくるん?
0464デフォルトの名無しさんNGNG
キー入力は標準入力からとるとして
非カノニカルな動作をするように設定すればいいだけじゃないか

と言ってみたいが環境依存だし。どこで動かすものか判らんことには
0465デフォルトの名無しさんNGNG
ANSIには処理系にキーボード自体が必要だなんて仕様がどこにも無いんだからしょうがないじゃん。
その割には、思いっきり割り込み制御の仕様があったりするけど。
0466461NGNG
>>464
Solarisのコンソールで動けば良いんですが。
言われたことをキーにして調べてみましたが、
<termios.h>あたりの関数を使えばできるんですかね?
0467デフォルトの名無しさんNGNG
>>466
はい、そのとおりだす。
0468デフォルトの名無しさんNGNG
void foo()
で虚無を返す関数か・・・
0個のファイルが見つかりました並に不自然だな
0469デフォルトの名無しさんNGNG
>>468
言うなYO・・・
0470ビル・ジョブスNGNG
>>おれに文句のあるヤツラへ

あのなー・・・
「符号拡張」って書かなかったから「ばーか」か?
「整数型限定」って書かなかったから「ばーか」か?
挙句の果てに「糞コード」だと?

おまえらおれの建てたスレで何様のつもりだよ・・・
とりあえず、おれに文句のあるやつはもう来るな!
0471デフォルトの名無しさんNGNG
>>470
(・∀・) バーカ
0472ビル・ジョブスNGNG
>>471 よく逝った(パチパチ
0473デフォルトの名無しさんNGNG
>>470
まぁまぁ、そう熱くなりなさんな。
そもそも自分で良いコード書ける人は、わざわざ糞とか言わず、黙ってコードで
書いてくる。
つまり、他人のコードを糞コードとか言う奴のスキルは知れているってことで。
0474デフォルトの名無しさんNGNG
何故、ム板のコテハンは痛いヤシばかりなのか…
0475デフォルトの名無しさんNGNG
痛くないコテハンのいる板ってどこ・・・
0476痛くないNGNG
よんだ?
0477デフォルトの名無しさんNGNG
寒っ!!
0478475NGNG
>>476
ワラタ・・・
0479デフォルトの名無しさんNGNG
チクショー!藁っちまった・・・
漏れも歳かな
0480デフォルトの名無しさんNGNG
>>470
もっと藁わせて下さい。
おながいします
0481デフォルトの名無しさんNGNG
英語で No file was found. (であってる?) っていうのは普通に言いそう
ですけどね。って C とは全然関係ないけど。
0482デフォルトの名無しさんNGNG
no such files. じゃないの?
was foundなんてまわりくどいってば
0483デフォルトの名無しさんNGNG
>>468
I have no money.とか平気で言う奴らだし>アメリカ人
0484デフォルトの名無しさんNGNG
>>476
やべ、下から読んだから笑えなかった・・・鬱だ・・・・・
0485パッサリNGNG
ExtractFilePath()ってAPI?

[400]文字列からファイル名とパスを別々に取り出すには
 ファイルのパスが含まれた文字列からファイル名とパスを別々に取り出すには、ExtractFilePathとExtractFileNameというWindowsAPIを用いると、パスとファイル名を取り出す事ができます。

AnsiString PathName,FileName;

// パス名
PathName = ExtractFilePath("C:\\Windows\\Calc.exe");
// ファイル名
FileName = ExtractFileName("C:\\Windows\\Calc.exe");

っていう情報があったけど
未定義の関数 'ExtractFilePath' を呼び出した
ってコンパイルエラーになったよ。
0486デフォルトの名無しさんNGNG
>>485
出るファイ独自関数
0487パッサリNGNG
ありがとうございます。
http://www2a.biglobe.ne.jp/~gonta/tipsc.htm
だめだこりゃ。
0488デフォルトの名無しさんNGNG
似たようなAPIなら
Path〜系のAPIが標準であるよ。
IE4以上だった気もするけど
0489デフォルトの名無しさんNGNG
Windowsなら_splitpath()がよろしいかと。
UNIX系(XPG準拠?)OSなら、basename()やdirname()とか。
0490デフォルトの名無しさんNGNG
C言語のプログラムがとても読みづらいんです。
日本語翻訳ソフトはありませんか?
0491デフォルトの名無しさんNGNG
>>490
こんなふうにしたら読みやすいのか?


#読込<標準入出.頭>

整数 主要(無)
{
 書式付表示("今日は,皆さん\n")
 戻れ 0;
}
0492デフォルトの名無しさんNGNG
("今日は,皆さん\n")
↓
(「今日は、皆さん。¥行」)
0493デフォルトの名無しさんNGNG
>491 う〜ん30点

六行目で不正な書式が発見されました。
  行末処理が行われていません。
0494491NGNG
鬱だ...
0495デフォルトの名無しさんNGNG
>>490
#define しまくって日本語かすれ
0496デフォルトの名無しさんNGNG
10進表記の数字を16進表記にしたいのですが
どうしたらいいのですか?
0497デフォルトの名無しさんNGNG
>496
printf("%x", i);
0498デフォルトの名無しさんNGNG
>496
すいません。ありがとうございました。
int nTarget = 1234;
char strResult[30];

_itoa( nTarget, strResult, 16 );

こんな感じでもやってみました。
0499デフォルトの名無しさんNGNG
>>490
コーディングスタイルやマクロの利用度にもよるが、
読みなれればなんてことはない。
よく出来たライブラリのソースを読むと良いと思う。
0500デフォルトの名無しさんNGNG
よく出来たライブラリのソースキボン
0501デフォルトの名無しさんNGNG
>>500
libpng
0502デフォルトの名無しさんNGNG
>>501
サンクス
ホカニハ?>ALL
0503デフォルトの名無しさんNGNG
C で正規表現使うにはどうしたらいいですか?
0504デフォルトの名無しさんNGNG
>>503
自分でパーサーを作るか、既存のライブラリを使う。
とにかくC自体にはそんな機能はない(入出力機能さえないし)。
0505デフォルトの名無しさんNGNG
>>503
質問はageでね。
0506デフォルトの名無しさん NGNG
#include <stdio.h>
は 「これからstdio.hというヘッダファイルを使いますよ。」
ってことですか?

 それと、Visual Studioを使ってますが、プログラムファイルの中に
「inculude」というフォルダがありました。
 これを「muneo」にリネームすると

#muneo <hage.h>

 になるのでしょうか? ちょと怖くてやってませんが・・
0507デフォルトの名無しさんNGNG
>>506
includeという単語を辞書で引くと良いかと思います。
とりあえず英語です。
muneoにすると問題が発生します。
0508デフォルトの名無しさんNGNG
>>506=ムルアカ
0509デフォルトの名無しさんNGNG
コンパイラの検索パスに muneoをいれればOK。全然問題なし。

0510506NGNG
皆さん、ありがとう!
#include <stdio.h>
が気になってたので、助かりました。m(__)m
0511デフォルトの名無しさんNGNG
純粋に言うと C の問題ではなくてロジックの問題な気がするのですが
論理演算に関する質問です。

unsigned char 一つを 8 つのフラグとして使っています。
そのうち一つだけを変更したいのですが、今は立てる場合とおろす場合で
if で処理しています。
これを論理演算だけでやりたいと思って、さっきから考えているのですが、どうしてもうまくいきません。
imp を使うとよさそうな気がするのですが、もうまったくもってお手上げです。
どうやったらいいでしょうか?
0512デフォルトの名無しさんNGNG
>>511
unsigned char a; /* フラグ */
int x; /* ビット番号(0〜7) */

ビット検査
if( (a>>x) & 1 ) ビット勃ってる;

ビットたて
a |= 1<<x;

ビットおろし
a &= ~(1<<x);
0513通りすがりmkIINGNG
>512
おいおい、511じゃないけどif文つかいたくねえから
論理演算でどうにかしろよ、って話じゃないのか?
0514通りすがりmkIINGNG
って、おれが間違ってるみたいじゃん。
おれ逝って良し!
0515511NGNG
>>512
ありがとうございます。でも分岐したくないんです。

>>514
いえ、>>513 であってます。

よろしくお願いします。
0516ぼくフェローNGNG
perl についてお尋ねしたいことがあるのですけど,
どの掲示板で聞いたらよいでしょか?
0517デフォルトの名無しさんNGNG
>>515
>>512であってんじゃん?
if()の中身だけ使えばいいわけだ。
((a>>x)&1)

でも俺なら迷わずビットフィールド使う。
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.6.4.html
0518デフォルトの名無しさんNGNG
>>516
http://pc.2ch.net/php/
昔はperl・CGI板ってあったんだけどね。
0519ぼくメイトNGNG
>>516
【Perl】初心者コーナーPart10
http://pc.2ch.net/test/read.cgi/php/1014556702/
へGO!
0520ぼくフェローNGNG
>> 518

ご案内ありがとうございます.
そちらで聞いてみます.
0521デフォルトの名無しさんNGNG
>>517
shortやintのときのビットフィールドについて
あれってビットフィールド定義した構造体と
shortやintそのものと共用体にしたとき
エンディアンはどう扱われるのか とても疑問

バリバリの環境依存なのか、それとも定義があるのか
0522デフォルトの名無しさんNGNG
int main(int argc,char *argv[])
のargvのポイント先の文字をいじることは合法ですか?

int i = 0;
while(argv[0][i]){
argv[0][i] = toupper(argv[0][i]);
i++;
}
とか
0523デフォルトの名無しさんNGNG
>>522
ダメとは言ってないがイイとも言ってねーし。
はみ出なきゃ何してもいいよ。
0524デフォルトの名無しさんNGNG
>>522
俺的にはアウト。あくまで俺的。
0525デフォルトの名無しさんNGNG
>>521
環境依存。
おもいっきりK&Rに書いてある
0526デフォルトの名無しさんNGNG
>>525
サンクス!

蟹炒飯は会社に置きっぱなしでさ。助かったよ。
0527522NGNG
>>523,524
微妙ですね。
あんまりやらないようにします。
(アセンブラだったらやりそうだけど)
0528デフォルトの名無しさんNGNG
最初にvoid main(void)と言い出したのは誰なんですか?
0529デフォルトの名無しさんNGNG
MSDNライブラリのプログラム例もvoid main(void)なんだよな。
0530デフォルトの名無しさんNGNG
>>528
両端のvoidは通常の関数定義とも共通だからいいとして、
mainが最初に実行される、っていうのは、Cの言語規則に含まれるのでは?
0531デフォルトの名無しさんNGNG
>>530
main の返り値は int だろ(゚Д゚)ゴルァっていう話じゃないの?
0532デフォルトの名無しさん NGNG
int c;
c = getchar( );

 は何を意味するのでしょうか?
0533デフォルトの名無しさんNGNG
本を嫁
0534デフォルトの名無しさん NGNG
>>533
読むわけにはい家内
0535デフォルトの名無しさんNGNG
>>515
ひょっとして、ビットが立っていたら落とす、落ちていたら立てるってことがやりたいの?
もしかしたら ^ の出番ですか?
0536デフォルトの名無しさんNGNG
>>534
標準入力から一文字読んでcに格納。
0537534NGNG
>>536
a ri ga to
0538デフォルトの名無しさんNGNG
>>535
すると
flags ^ (flags & (1<<n))
こうか。
0539デフォルトの名無しさんNGNG
flags ^= (1<<n)
0540デフォルトの名無しさんNGNG
統計によるとvoid mainと書いたりmallocしてもfreeしない
プログラマの給与は平均より約100万円ほど低いそうだ。
0541538NGNG
うぎょ、違う。>>539氏のが正しいや。
0542デフォルトの名無しさんNGNG
>>540
> mallocしてもfreeしない
またですか…
0543デフォルトの名無しさんNGNG
またですな
0544DSPプログラマNGNG
>>540
void mainと書いていますが何か?
0545デフォルトの名無しさんNGNG
void main() と int main()は
どちらの方が、いいのでしょうか?
好みとかですか?
教えてください。
0546デフォルトの名無しさんNGNG
そーいやなんで C には ^^ 演算子が無いんだ?
0547デフォルトの名無しさんNGNG
>>545
その環境による。
どっちでもいい場合もあるだろうし、必ず int でなければならない事も。
0548デフォルトの名無しさんNGNG
mallocしてもfreeしないのってありですよね。
プログラムなんてたいてい一瞬で終わってしまうし、
今時メモリなんて500−1000メガ当たり前ですし。
実害なんてありませんよね?
その上コードの工数まで減って言うことなしですね。
0549545NGNG
必ずintでなければならない時ってどんな時ですか?
あと、逆に必ずvoidでなければならない時って
あるんですか?
教えてください
0550デフォルトの名無しさんNGNG
>>548
んじゃ、freeは絶対に使わないで下さい。
貴方の書いたプログラムは誰にも使われることがありませんから
0551デフォルトの名無しさんNGNG
>>549
ふつうは規格上かならずint。
voidなのは組み込みでシングルタスクだったり、
値を返す対象が居ない環境限定。
0552デフォルトの名無しさんNGNG
>>549
> 必ずintでなければならない時ってどんな時ですか?
ANSI C hosted environment 準拠の処理系を使うとき。

> あと、逆に必ずvoidでなければならない時ってあるんですか?
組み込み系だと、そもそもエントリポイントが main とは限らないし、名前が main
でも void と指定されてるかもしれない。
0553デフォルトの名無しさんNGNG
普通とかかならずとか絶対とかかもしれない
とかいってる人々は現場を知らない人です。
0554545NGNG
>>551 ありがとうございます。
これからは、intを使うことにします。
0555デフォルトの名無しさんNGNG
処理系に依存しないsizeofの型を教えてください。
すくなくとも
sizeof(char)==1
ですよね。
0556デフォルトの名無しさんNGNG
違うよ。C99かC#使え
0557デフォルトの名無しさんNGNG
sizeof(int32_t)==4
0558デフォルトの名無しさんNGNG
>>555
はっはっは。それはどうかな。
0559545NGNG
皆さん、返事を沢山ありがとうございます。
気になっていたので、すっきりしました。
0560555NGNG
処理系に依存しないsizeofなんてないってことですか?
0561デフォルトの名無しさんNGNG
環境に依存するsizeofなんてありませんが?
0562デフォルトの名無しさんNGNG
sizeof(char) == 1は保証されているのでは。

>>556
>>558
すまんが解説きぼん。
0563デフォルトの名無しさんNGNG
漏れも562に賛成
0564デフォルトの名無しさんNGNG
>>562
ANSI 準拠という処理系に依存してるんでは?
0565デフォルトの名無しさんNGNG
それ言い出すと切りが無くねぇ?
C言語の枠からもはみ出しそうだ。
C#とか逝ってるアフォもいるし…
0566デフォルトの名無しさんNGNG
>>565
はげどう。
0567デフォルトの名無しさんNGNG
サイズを決め打ちしないで、ちゃんとsizeofで判断するコードを書きなさいってこった。
sizeof(int)==1の処理系使った事有るし。
charもdoubleも全部1。
0568わけわからんNGNG
char ふつう8ビット
short ふつう16ビット
int 今時なら32ビット
long ふつう32ビット

まああれだ。厳格にはlimits.hを見なきゃだめってことだ
0569555NGNG
sizeof(char)は1でいいとして。

sizeof(0)==sizeof(int) はあってますか?
また、sizeof(void*)と等しくなることが保証されてる
sizeofってありますか?
0570デフォルトの名無しさんNGNG
>>568
ふつう==移植の落とし穴、と心得よ。
0571デフォルトの名無しさんNGNG
>>569
なぜ規格書をチェックしない?
0572デフォルトの名無しさんNGNG
sizeof(void*)についてはどのポインタも格納できるサイズということしか
規定されてないからな
0573511NGNG
>> 535, 538, 539, 541
いえ、立っているか立っていないかに関わらず、入力値で、そのビットだけ
制御したいんです。

#define int BOOL
#define 0 FALSE
#define -1 TRUE

// src の第二ビットを new_value にする
int SetFlag2(BOOL new_value, int src){
  return ?????;
}

今は if で分けて処理しているんですが…。

0574デフォルトの名無しさんNGNG
>>569
あんた様はいったいなにをしたいのか?
処理系に依存しないためにsizeof()使うんじゃないの?
0575デフォルトの名無しさんNGNG
>>573
なんでそんなにifを避けたがるの?
0576デフォルトの名無しさんNGNG
mallocの話題があったので便乗。
自己参照構造体を作った場合の開放はどうすればいい?
わざわざ処理を作るのが面倒だからプログラム終了時に
OSが開放してくれることを期待してたんだけど、マズイ気がしてきた。
0577デフォルトの名無しさんNGNG
>>573
| 使え
0578デフォルトの名無しさんNGNG
(src | (1<<bit))
でええやん。
代入までやるなら
src |= (1<<bit);
値見るなら
ans = !!(src & (1<<bit));
って所か?

関係ないが #define -1 TRUE は、やめれ。
0579517NGNG
>>573
あぁもうわけわからんなぁ。なぜ>>512じゃいけないのか??
>>512のビット立て、ビットおろしの「1」を代入したい変数(0 or 1)にして、
たて、おろしを連続ですれば、その変数が示す0か1になるだろうよ。

ちなみに、>>517も見てね。
0580デフォルトの名無しさんNGNG
>>576
自己参照構造体って
struct test{
struct test *test1;
};
とかのこと?
0581デフォルトの名無しさんNGNG
自己参照までやってるのに、解放考えないとは恐ろしいヤシだな・・・
0582デフォルトの名無しさんNGNG
>>576
malloc()をdefineするなり自分用のmy_malloc()関数等を作るなどして、
確保したポインタをかたっぱしからどっかに記憶していって、
最後にまとめてfree()しまくるってのはどお?

どっかに既にそういうのあるかも。
0583デフォルトの名無しさんNGNG
sizeof って、そもそも、 sizeof char の何倍かを返す、っていう定義でなかったっけか?
0584デフォルトの名無しさんNGNG
>548は神
0585デフォルトの名無しさんNGNG
>584 ワラタ
0586デフォルトの名無しさんNGNG
>>548
至上稀に見る天才。
0587デフォルトの名無しさんNGNG
>>576
OS が解放してくれるなら、全然問題なし。
0588デフォルトの名無しさんNGNG
デジャヴ?
0589デフォルトの名無しさんNGNG
fj ?
0590デフォルトの名無しさんNGNG
ふーじーのーふじのみやー
ごてんばあさん、おってー
0591デフォルトの名無しさんNGNG
質問です。

scanfで入力した変数を配列の大きさにしたいのですが、
どうすればいいのでしょうか?
0592デフォルトの名無しさんNGNG
int i;
scanf("%d",&i);
{
 int *ip = malloc(sizeof(int)*i);
}
0593デフォルトの名無しさんNGNG
性的確保なら、定数式じゃないから無理
0594デフォルトの名無しさんNGNG
>>593
黙れ、エロおやじ
0595デフォルトの名無しさんNGNG
freeしなくても終了時に勝手に開放されんでないの?
まーいーや。
DLLは一応FreeLibraryしてるけどね。
0596デフォルトの名無しさんNGNG
>>573
 return src & ~(1 << n) | (!!new_value << n);
0597名無しさんNGNG
あなたさまの力でこの子を1位にしてあげてください。
ただしばれないようにゆっくりと。。。http://orange.ko-mens.tv/idol/view.cgi?id=key
0598デフォルトの名無しさん NGNG
int a;
の「 a 」が、scanf()などで「 &a 」と表示されてる部分って
例外なくメモリのアドレスを示してるのですか?
0599ヴァッシュNGNG
>>598
そうだよ
わかりずらいけど
0600588NGNG
>>599
ありがとう!
0601ヴァッシュNGNG
つーか&がつくとアドレスをたいてい指す
0602デフォルトの名無しさんNGNG
配列型、関数型に&が付くと型が変わるんですか?
bcc32で

char a[5];
printf("%p %p",a.&a);
とやると下のように
0012FF84 0012FF840
同じアドレスが表示されます。
同じだから
*&a = 0; //最初の要素に0を代入
ができると思ったのですが左辺値が必要と言われるので・・
0603デフォルトの名無しさんNGNG
配列の名前は、たいていの場合は先頭要素を指すポインタ( &a[0] )として
扱われるけど、& が付くときとか sizeof のオペランドになる時とかは
配列そのものとして処理されるので、 *a と *&a じゃ意味が違うっていうか
型が違うっていうか。
0604602(状態:デムパ)NGNG
Σ( ̄□ ̄;)
ごめんなさいちょっと間違いました(- -;)
忘れてください。

こちらを教えて頂きたいです
pを構造体ポインタだとして
*p++->str;
のような式文は
strが指しているオブジェクトを参照し、pをインクリメントする
とありますが
->は左辺値付きのpと結びつくのか、p++が返したインクリメント前のpの
値と結びつくのか、どちらなのでしょうか?
0605602NGNG
とありますが
↓
とK&Rにありますが
0606デフォルトの名無しさんNGNG
*p++->str;
*p->str; p++;ってこった。
演算子の順位表をみろ。
0607デフォルトの名無しさん NGNG
 ポインタについて質問です。
ポイントは、、「変数のアドレスを記憶する変数」と某サイトの説明が
ありました。 意味はよくわかります。
 どういうときに便利なんでしょうか? プログラム例を見たりしてますが
難解に見えるだけなんですが・・
0608602NGNG
ΣΣ( ̄□ ̄|||)
もうだめだ・・・徹夜してたからかな・・・(-_-_-)
>>602に
0012FF84 0012FF840
とあるので、あれ?アドレス違うのか?と思って
604で忘れてくださいなどと言ってしまいました<(_ _)>スイマセン
プログラムをコンパイルするとき
char a[5];
printf("%p %p",a.&a);
*a = 0;
printf("%d");
とやっちまって変な結果をコピペしてしまいました。
そんな俺にレスしてくれてありがとうございます。603様
色々と違うのですね、了解しました!
0609デフォルトの名無しさんNGNG
>>607 ここはCスレだから参照と比べてどうかってことではないよな…?
0610デフォルトの名無しさんNGNG
>どういうときに便利
そういう台詞は代替手段があるときに口にするべき。
ポインタでしかできないことがCでは厳然として存在する
ことを踏まえれば、そんな言葉は出てこない。
0611607NGNG
>>610
ありがとうございました。
おれ逝ってよし!
0612デフォルトの名無しさんNGNG
>ポインタでしかできないことがCでは厳然として存在する
まぁたしかにそうなんだけど具体例を挙げないとわかんないだろうから。

たとえばCでは関数の引数として配列そのものを渡すことができないのでポインタを渡して
必要に応じて実体を参照する。文字列もcharの配列でしかないのでこれと同じ。

あとはCでは関数の引数は値渡しでコピーが行われるのででかい構造体の実体を引数にしちゃうと
遅くなっちゃうとか。

まぁ必ず例として出される二つの引数の値を入れ替えるswap関数がわかりやすいでしょ。
Cの入門書には必ずでてるからそのくらいは自分で調べて。
0613607NGNG
>>612 
ありがとうございました。
もひとつ質問です。

char a[4] = "xyz";
char *p;

p = a;

 「 p=a; 」の「 a 」は、アドレスになるのでしょうか?
「 p=a; 」 と 「 p=&a[0]; 」 では、全く同じ意味になるのでしょうか?
0614デフォルトの名無しさんNGNG
>613
ポインタ=アドレスではない。ポインタとはあくまでもオブジェクトを指すものであって
メモリ上のアドレスと決まっているわけではない。*pと書くとpが指しているものを取り出せることが
保証されているというだけの話。実際Cはアドレスとそのオブジェクトのサイズをコンパイラが覚えることで
ポインタという機能を実装している。一応これが前提。

基本的に式の中で配列名だけを書くとその配列の先頭の要素のポインタに読み替えられる。
ただし例外があって&, sizeofのオペランドになるときは配列全体の意味になる。
もういっこ例外があったと思うのだが思い出せない。

よってp = a; と p = &a[0]; は同じ意味。

それと質問に直接関係ないが
char a[4] = "xyz";
は
char a[] = "xyz";
と書くのがふつう。
0615613NGNG
>>614
ご丁寧にありがとうございます。
ポインタの解説をもう一度よく読んでみます。
オブジェクトの意味がわからないので、逝ってきます。
0616デフォルトの名無しさん NGNG
1. char  *p = "ABC";

2. char  *p;
    p = "ABC";

 1と、2は同じ意味らしいです。
http://www.ht-net21.ne.jp/~sgwr-t/sec10-3.htm (上から7行目くらい)

 1は解るのですが、2が「 *p = p 」になると
思うのですが。
 ポインタって、1日で理解するのは無理ですか?

 
0617デフォルトの名無しさんNGNG
>>613
char* pSrcMax = pSrc + iLength;
while( pSrc < pSrcMax )
{
*pDst ++ = *pSrc ++;
}
とかできて便利♪
0618デフォルトの名無しさんNGNG
>>616
どっちも、 *pはchar型のポインタだよって定義して
そこに"ABC"の文字列(これはどっかに確保される)
へのポインタ(この際アドレスでもいいや)を代入してる。
0619デフォルトの名無しさんNGNG
>>616
char *p = "ABC";
は、
char *p;
と、
*p = "ABC"
という意味ではない。
0620デフォルトの名無しさん NGNG
>>618-619
 ありがとうございます。

>>619 
 どうしてですか?矛盾してるような気がするのですが。^-^;
すみませんが、もう少し詳しくお願いします。m(__)m

0621デフォルトの名無しさんNGNG
あー俺も昔同じことで悩んだ覚えがある...

char *p = "ABC";
は
char *p;
p = "ABC";
ですね。確かに最初は変に思えるかもしれないがとにかくそういうことになっ
ている。
0622620NGNG
>>621
 ありがとうございます。
これって理由があるのでしょうか?
気持ち悪いのですが・・。^-^;
0623デフォルトの名無しさんNGNG
こう考えては?
char* p = "ABC";
0624デフォルトの名無しさんNGNG
char* p = "ABC";
は
char* p;
p = "ABC";
って考えて納得するんじゃダメ?
0625デフォルトの名無しさんNGNG
被った・・・
0626622NGNG
>>623-624
その考えだと、解ります。
これで先に進めそうです。 ありがとうございました。


0627デフォルトの名無しさんNGNG
前スレに
int *p;
int* p;
のどっち使うかで盛り上がってたな。
とか蒸し返したら怒られるかな?(w
0628デフォルトの名無しさんNGNG
int* p1,p2;

こんなんしちゃったり
0629デフォルトの名無しさんNGNG
>616
C言語では文字列はcharの配列として扱われる。文字列リテラルでも同じこと。
また式の中では配列はその先頭要素のへのポインタに読みかえられる。
よって2は「*p = p」ではない。
char str[] = "ABC";
char *p;
p = str
と本質的には同じ。というかそういう意味では1も同じだけど。

char *p; というのはあくまでもcharを指すポインタ型の「変数p」の宣言
だということを誤解してない?

ただし1と2は同じではない。1はポインタpを"ABC"で初期化しているが
2はゴミの値で初期化して代入している。初期化と代入は区別する必要がある。
リンク先の説明ではpが"ABC"を指すという意味で同じと説明しているような気がするが
誤解を招きそうだ。
0630デフォルトの名無しさんNGNG
なんか書いてる間にいっぱい書き込みがあるし。

>618
>どっちも、 *pはchar型のポインタだよって定義して
これは間違い。変数はあくまでもp

>626
623,624でわかったと言っているようではたぶんわかっていない。"ABC"はcharの
配列で式の中ではその先頭要素のポインタに読みかえられるということが大事。

>620
初期化というのはそのオブジェクトが作られるときに行われるという点が違う。たとえば
void func(void){
static int x = 0;
int y;
y = 0;
  printf("x = %d ; y = %d\n", x++, y++);
}
というような場合xはプログラムが実行されるときはじめに確保されて0に「初期化」
されるがyはfuncが呼ばれるたびに確保されその後0が代入される。初期化と代入は
区別しなくてはならない。
0631630NGNG
いかん上の説明はどっちかというと静的変数と自動変数の違いという感じで
初期化と代入の区別という感じはしないね。うまいサンプルを思いつかない。

618の補足
char *p;
はcharを指すポインタ型の「変数p」の宣言であって
char型の「変数*p」の宣言ではありません。
0632デフォルトの名無しさんNGNG
>>631
const char *mona = "omaemona";
/*
const char *giko;
giko = "itteyosi";
*/
これはどーよ。今回の件とはあんまり関係ないけど。
0633616NGNG
>>629-631
 ご丁寧にありがとうございました。m(___)m
何度か繰り替えし読んだのですが、混乱してます。

 おもっっ〜きりかみ砕いた、たとえ話で説明
できますでしょうか?
 例えば、1001号室にいる、ABCという名前の
猫の話とか・・。 

 ポインタというモノが雲のような存在なんです。
0634デフォルトの名無しさんNGNG
int *p; int* p;
この二つは書き方が違うだけ?
0635デフォルトの名無しさんNGNG
>>633 (616)
多少間違ってることを承知で説明する。

Cでは、文字列は、次のようにあらわされる。
1000番地にAという文字
1001番地にBという文字
1002番地にCという文字
1003番地に終端文字

ここで、 char *p = "ABC";
とやった場合、pは1000番地を指す。つまり、ABCという文字列の
開始点を指すことになる。

char *p; // <- 1
p = "ABC" // <- 2
とやった場合、1の部分では p は何処を指すかは決まっていない。
2の部分で、p に "ABC"という文字列の先頭の番地が代入される。

宣言と代入は、「構文が違う」ということは覚える必要がある。
0636635NGNG
>>635
宣言、というよりも初期化だな。スマン。

>>634
yes。書き方が違うだけ。
0637デフォルトの名無しさんNGNG
>>633
じゃぁ、俺の理解で教えてあげよう。
まず、宣言時の
int *p;
の「*」と、参照時の
i = *p;
の「*」の意味は別物です。これ重要。

あと、アドレスという言葉とポインタという言葉を明確に区別しましょう。
(これにはいろいろ議論があると思うけど、とりあえずゆるして>みんな)
ポインタは「アドレスを格納するための変数(by K&R)」ですので、
「アドレスを代入できないもの」はポインタではなく、ただのアドレスの参照です。

◎char *a; a=(char *)0x0000;
×char a[30]; a=(char *)0x0000;

前者のaはアドレス(この場合0x0000)が代入できるのでポインタですが、
後者のaはアドレスを代入できない(参照しかできない)ので、ポインタではありません。
コンパイルしてみれば、後者はエラーが出てコンパイルできない
ことが分かります。
0638sageNGNG
宣言は使うときと同じように書く。
初期化は宣言中の変数に対して行われる。

コンパイラが
int *p;
をみつけたとき、
pに参照演算子*を適用するとintになるんですな。
と解釈する。つまりはint型へのポインタへ変数だ。

int *p = a;

は
pに参照演算子*を適用するとintになるんですな。
ついでにpにaを入れて初期化するんですな。
と解釈する。

int *p = "ABC";
は、
pに参照演算子*を適用するとintになるんですな。
さらに静的領域に4バイトのメモリを予約して、そこにAとBとCと\0というコードを入れて置くんですな。
ついでにpにその連続したメモリの先頭アドレスを入れて初期化するんですな。
と解釈する。

宣言は使うときと同じように書く。
初期化は、宣言中の変数に対して行う。

覚えておけ。
0639デフォルトの名無しさんNGNG
>覚えておけ。
まちがった説明なのに、やけにエラそうですな。
0640633NGNG
>>635-639
ありがとうございました。
まだ読んでませんが・・。 カンシャ!^-^)/"
0641629NGNG
混乱を招く例を出してしまったので補足する。
文字列リテラル("ABC"こうゆうやつね)は文字の配列と本質的に同じであり式の中では
その先頭要素を指すポインタに読み替えられる。
ただし「char配列の初期化」の場合は例外

char str[] = "ABC"; /* char str[] = {'A', 'B', 'C', '\0'}; と同意 */

従って
char str[4] = "ABC";
はよいが
char str[4];
str[4] = "ABC"; /* !!エラー!! */
期せずして代入と宣言というか初期化の処理は別物として処理されている例になってしまった。

このことを説明せずに
char str[] = "ABC"; /* この部分がね・・・・。 */
char *p;
p = str;
の例を出したのは混乱を招くものでしかなかった。

635の説明は大筋では間違っていない。
試しに
int main(void){
printf("%p\n", "ABC");
return 0;
}
ってしてみたら実感できると思う。

ちなみに638はネタなのでそのつもりで(だよね>638)。638読んでつっこめたり笑えるようになれば
理解できたと思っていいでしょう。
0642デフォルトの名無しさんNGNG
1 << i
これはどういう意味なんでしょうか?
0643デフォルトの名無しさんNGNG
1を左にiビットシフトする。
0644デフォルトの名無しさんNGNG
すんません。

a = 3;
b = a++ * a++;

のときbがいくつになるかは未定義なのは
有名なのですが、そうすると、

b = ++a * ++a;

の場合も同じく未定義と考えていいのでしょうか。
0645デフォルトの名無しさんNGNG
1にiを流し込む
0646デフォルトの名無しさんNGNG
*で繋いだ場合も同様、未定義だ。
未定義なんで、実行したとたんOSがハングしてPCから煙がでてきたとしても仕方ない。
0647デフォルトの名無しさんNGNG
>>643
どもです。
http://pinktower.com/www.ne.jp/asahi/gravure/com/096/001.jpg
つまらないものですがどうぞ。37まであります。
0648644NGNG
>>646
すいません。「*」でつないでるのは上も下も
同じなんです。インクリメント演算子が前置と後置で
変わるものなのか?と思ったんです。
0649デフォルトの名無しさんNGNG
 b
 =
 +
 +
 a++
 *
++a
 +
 +
0650デフォルトの名無しさんNGNG
よく見たら上も*か。
*ではまだ式の評価は完了しないから、
前置だろうが後置だろうが、未定義の動作になるよ。

C FAQ嫁。
0651644NGNG
>>650
ありがとうございました。
やっぱり副作用完了点までに複数副作用があるから
そうなるんですよね。
0652デフォルトの名無しさんNGNG
main(){
 int a=4,b=2,*A,*B;
 A=&a; B=&b;
 printf("%d \n", *A/*B );
}
0653デフォルトの名無しさんNGNG
>635
を具体的にコーディングしてみたのでコンパイルして実行してみそ。

#include <stdio.h>
int main(void){
    char *p = "ABC";
    for (; *p != '\0'; p++)
        printf("[%p] => [%c]\n", p, *p);
    return 0;
}

ちなみに私の環境だと

[0040A128] => [A]
[0040A129] => [B]
[0040A12A] => [C]

こんな感じだ。左側に各文字のアドレスが入っている。
0654デフォルトの名無しさんNGNG
>>652
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
hoge.c:
エラー E2186 hoge.c 7: 4 行目で始まったコメントの途中でファイルが終わっている(関数 main )
エラー E2121 hoge.c 4: 関数呼び出しに ) がない(関数 main )
エラー E2134 hoge.c 4: 複合文に } がない(関数 main )
警告 W8070 hoge.c 4: 関数は値を返すべき(関数 main )
警告 W8004 hoge.c 4: 'B' に代入した値は使われていない(関数 main )
警告 W8004 hoge.c 4: 'A' に代入した値は使われていない(関数 main )
*** 3 errors in Compile ***
0655デフォルトの名無しさんNGNG
>>652
VC++6.0
test.c(8) : fatal error C1071: コメントをスキャン中に予期せぬ EOF が検出されました。
0656デフォルトの名無しさんNGNG
printf("%d \n", *A/*B );
これを
printf("%d \n", *A / *B);
にしろ。
っていうかすこしは自分で補完するように。

0657デフォルトの名無しさんNGNG
え?おれはてっきりこういう意外なところで
コメント扱いされるエラーが出るよって教えて
くれてるのかと思ってたよ。
0658デフォルトの名無しさんNGNG
>>656
( ゚Д゚)ホカーン

(゚∀゚)ネタニマジレス? クスクス
0659デフォルトの名無しさんNGNG
*A**B とかも微妙な線だよね
0660デフォルトの名無しさんNGNG
#include <stdio.h>
void main(){
  int data1 = 0, data2 = 0, data3 = 0;
  ++data3 += data1++ + ++data2;
  printf("%d\n", data1);
  printf("%d\n", data2);
  printf("%d\n", data3);
}
↓
1
1
2
0661デフォルトの名無しさんNGNG
660は何を言いたいのか?
0662656NGNG
>658
(゚∀゚)ネタニマジレス? クスクス

だよね。自分が恥ずかしい。
0663デフォルトの名無しさんNGNG
やはりみんな最初はポインタの壁にぶち当たるのですね
そういう自分もつい先日n重のポインタを理解したばかりですが…


◆おすすめスレッド◆
トリッキーなコード
http://pc.2ch.net/test/read.cgi/tech/983191866/
0664デフォルトの名無しさんNGNG
ごめんオレマジでそのカベにぶち当たったこと無い。
0665デフォルトの名無しさんNGNG
アセンブラ修得してからC始めた人なら、ポインタはあまり障害にならないね。
ポインタの表記の仕方と、ポインタの型に慣れるのにちょっとかかったけど。
0666デフォルトの名無しさんNGNG
++data3じゃ左辺値が(略)
0667デフォルトの名無しさんNGNG
アセンブラに手をつける前は、たしかに、お前らみたいな楽しい疑問や
勘違いコードを書いてたもんだなあ。
0668デフォルトの名無しさんNGNG
そういや最近はアセンブラやベーシックやCをすっ飛ばして
別の言語を習得する人が増えてきたんだよね。
0669653NGNG
配列とポインタの交換性が理解できればそんなに難しく無い。
p[i]というのは*(p + i)のシンタックスシュガーということがわかれば同じ動きをする
コードを配列とポインタで書いてみれば理解できると思う。

文字列リテラルも実際は先頭のポインタをもっていてそれを渡すと'\0'までを文字列とする
とわかれば混乱しないだろう。

653の配列版(ちなみに653はコピペすると全角スペースのせいでそのままじゃコンパイルが通らない)
#include <stdio.h>
int main(void){
char *p = "ABC";
int i;
for (i = 0; p[i] != '\0'; i++)
printf("[%p] => [%c]\n", &p[i], p[i]);
return 0;
}
0670デフォルトの名無しさんNGNG
>>666
だね。言われてコンパイルしてみたけど、やっぱり通らなかった。
0671633NGNG
>>653
わざわざ、ありがとうございます。
よくわかりました。

・「 p 」はポインタであり、アドレス。
・「 *p 」は、char型の文字。

 に見えますが、このすれの>>614に
>ポインタ=アドレスではない。
と書いていました。

 ネタレスは、>>638だけですよね?
ポインタは、「アドレスを格納するための変数」(>>647より)
ということは、アドレスを格納するための変数とは、>>653の
プログラムでは、どこを指してるのですか?

 アドレス[0040A128] にある文字[A]があると、ポインタ
はいくらになるのですか? マヅで混乱してます。
よろしくお願いしますm(__)m
0672デフォルトの名無しさんNGNG
>>638はネタだが嘘は書いてないぞ。
コンパイラの内部動作がわかるやつ、少ないのか?
0673デフォルトの名無しさんNGNG
ポインタぐらいわからないんじゃあ
テンプレート尽くしのC++ソースなんか読めない(略)
0674デフォルトの名無しさんNGNG
汗とセットで覚える方が気苦労が少ないと思うのだが・・
汗をかける必要はないから読める程度に勉強するのがいい。
そうすればポインタごとき665が言ってるみたいに表記の仕方
だけ覚えればいいんだけどなー。
0675デフォルトの名無しさんNGNG
Cはやっぱり高級アセンブラ的な側面が大きいからねぇ。
実務に追われてるならともかく、これから学ぼうって人なら
アセンブラは修得しておいて損は無いYO!
0676デフォルトの名無しさんNGNG
>>671
pの値は0040A128。
*pの値は'A'。
OK?
0677デフォルトの名無しさんNGNG
あたまわりーな
> に見えますが、このすれの>>614に
>>ポインタ=アドレスではない。
>と書いていました
例えば32bitマシンでintは4バイトだろ、その属性と先頭アドレスを含めてポインタ
だから、イコールじゃないって書いてあるじゃん、ちゃんと読めよ。
>・「 p 」はポインタであり、アドレス。
>・「 *p 」は、char型の文字。
どっちもはずれじゃ、ボケェ
> アドレス[0040A128] にある文字[A]があると、ポインタ
>はいくらになるのですか? マヅで混乱してます。
なんでだよ、そのままじゃん。
「ポインタはいくら」って、日本語になってねーぞ
ポインタの値を聞いてるなら、[0040A128]
0678デフォルトの名無しさんNGNG
>>638はネタだが嘘は書いてないぞ。
671が本気にして混乱するじゃないか。

>pに参照演算子*を適用するとintになるんですな。
*は参照演算子ではなく間接演算子もしくは逆参照演算子

>int *p = "ABC";
はintをさすポインタをcharへのポインタで初期化しているから最近のコンパイラは
警告を出すだろう。

>宣言は使うときと同じように書く。
というのは確かにそうだけど嘘じゃないというにはちょっと、、、。
0679678NGNG
>671が本気にして混乱するじゃないか。
そうでなくても混乱してるけど、、、、、。

それだけに一部が間違っている文章は毒にしかならない。
0680結論NGNG
>>671にはCは無理。
0681デフォルトの名無しさんNGNG
工房が何やら喚いてます。
人に適切に説明できないというのは、
自分でも深く理解できない証拠です。
0682デフォルトの名無しさんNGNG
ほんとだint *p age
0683デフォルトの名無しさんNGNG
ちなみにコンパイラは右から解釈していく。これは正しい。
0684デフォルトの名無しさんNGNG
(char *)age;
0685デフォルトの名無しさんNGNG
>コンパイラが
>int *p;
>をみつけたとき、
>pに参照演算子*を適用するとintになるんですな。
>と解釈する。つまりはint型へのポインタへ変数だ。

ここらへんは禿同。
0686633NGNG
>>672-684
 ありがとうございました。
アセンブラも勉強します。

>>677
 
>>・「 p 」はポインタであり、アドレス。
>>・「 *p 」は、char型の文字。
>どっちもはずれじゃ、ボケェ
 正解は何ですか?

 どこかのサイトにポインタは簡単って書いてましたけど
頭悪い人には難しいんですね・・(汗
0687デフォルトの名無しさんNGNG
>>669
> 配列とポインタの交換性が理解できればそんなに難しく無い。
互換性? 配列変数を右辺値として評価するとポインタに縮退するという
特例があるだけで、あとは全然別物だと思うが。

int n, *p, a[10];

こう定義されていたときに n = *p, n = a[0]; を仮想的なアセンブラコードで
書き出すと、次のような感じでしょ? (C 言語なんで実装の詳細は規格で
は規定されていないけど、一般的な実装の話ね)

n = *p;
// mov r1, addr(p)   ; 変数 p のアドレスを読み出す
// lod r2, [r1]     ; 変数 p の値を読み出す
// lod r3, [r2]     ; 変数 p が指している先に書いてある値を読み出す
// mov r4, addr(n)
// store [r5], r3

n = a[0];
// mov r1, addr(a)  ; 変数 a のアドレスを読み出す
// add r1, 0      ; 変数 a[0] のアドレスに変換する
// lod r2, [r1]    ; 変数 a[0] の値を読み出す
// mov r3, addr(n)
// sto [r3], r2

間接参照の回数が 1 回違う。
0688デフォルトの名無しさんNGNG
mov ウマー!
0689デフォルトの名無しさんNGNG
別物というのは同意するが、その擬似コードはなんか微妙に違うような..
0690デフォルトの名無しさんNGNG
ポインタなんてデバッガでステップ実行しながら
メモリダンプや変数の値チェックしてけばする理解できるよ。
アセンブラ覚えるんならIDEの使い方覚えたほうがまだまし。
0691デフォルトの名無しさんNGNG
汗知らずにCやってる人って、、、
0692デフォルトの名無しさんNGNG
>>687
最適化を行わないコンパイラなら多分そんな感じだろうけど、
最適化を考慮すると、その考え方は危険。

どんな値が入るか解らないポインタに比べ、添え字の範囲にしか
アドレスの変化しない配列の方が、高度に最適化される処理系が有る。
つーか折れの使ってるDSP用のコンパイラは、配列の方が速い。
0693デフォルトの名無しさんNGNG
>>692
ああ、もちろん「配列よりポインタが効率的だ」とか言うつもりは全く無いよ。
ただ別モノだ、と言いたかっただけ。

(配列は左辺値にならんし)
0694デフォルトの名無しさんNGNG
>>689
sto と store が混在してたり? (違
0695デフォルトの名無しさんNGNG
折れがアセンブラ使ってた頃は、Z80 ,6809,8086,68Kだったからなぁ。
今のIA32でアセンブラ入門しろたって、ちと酷か。

なんかいいアセンブラ入門させられる処理系無いかねぇ?
C#のバイトコードの、なんだったか名前忘れたけど(w
それのアセンブラ、今度見てみっかな
0696デフォルトの名無しさんNGNG
>>691
それ俺ですが何か?

だって資料が無いんだよヽ(`Д´)ノ
0697デフォルトの名無しさんNGNG
男らしくGASかpcodeだろ。
0698デフォルトの名無しさんNGNG
>>695
> なんかいいアセンブラ入門させられる処理系無いかねぇ?
シンプルなところで MIPS でしょ。Windows や UNIX で動く、わりと出来の良い
エミュレータ SPIM もあるし、PS2 Linux 買えば gcc + gas で実際の CPU を
使って遊べるし。
0699デフォルトの名無しさんNGNG
386ってそんなに難しいかなぁ。
蒲地さんの本読めばかなり分かると思うけど。
0700695NGNG
>>698
MIPSか。折れ勉強した事無いんだよね(藁
でもRISC系やDSPはは命令は簡単だけど、各命令に制限多くない?
MIPSは知らないけど、遅延分岐なんて入門者にゃ敷居高すぎ。

まぁ折れが覚えるんじゃ無いから別にいいんだけど(w
0701デフォルトの名無しさんNGNG
プロテクトモードだけなら簡単だね
0702695NGNG
>>699
SSEとか魅力的な機能有って、覚えた気になった直後に目移りしちゃって、
まともに理解出来ない罠。
アセンブラ覚えるにゃ、やっぱチープなチップが良いかと。
0703デフォルトの名無しさんNGNG
いや、特権モードでの説明に特化した
「初めて読む486」とかいい本だと思うけどっていいたかった。
0704デフォルトの名無しさんNGNG
>>700
> でもRISC系やDSPはは命令は簡単だけど、各命令に制限多くない?
むしろ CISC 系の方が、レジスタの用途に制限が多くて面倒だと思うが。
RISC 系だと、汎用レジスタは本当に汎用で、Z80 みたいに

 この命令では、オペランドに IX, IY は使ええない

みたいな制限は無いし。

RISC の場合には、アセンブラでも「機械語コードに一対一対応」じゃなくて、
アセンブラが使うためのレジスタを別途確保してあったりするあたりが、学習
用としてはアレかもしれん。

ま、優秀なやつには、SPIM とヘネシー&パターソンの「コンピュータの構成
と設計」をセットで渡しておけ。あれで、背景を含めて必要な知識が押さえら
れる。
0705デフォルトの名無しさんNGNG
CASLは?
0706695NGNG
>>705
CASLはアクビが出る位簡単。あくまで試験用のアセンブラだしね。
情報処理試験で、事前勉強ゼロで、巻末のアセンブラ仕様読みながら回答したけど、それで通った位だし。
とは言え、Z80と8086のアセンブラの経験は有ったけど。
それも15年前の事だが・・・

でも確かにアレは簡単だけど、学習へのモチベーションは維持できないと思われ。
自分で持ってるPCとか、PS2とかなら学習意欲も涌くだろうけど。

まぁアセンブラは、学生のウチに勉強しときなさいってこった。
0707637NGNG
>>686
では私めが。

>・「 p 」はポインタであり、アドレス。
>・「 *p 」は、char型の文字。
・pはポインタであり、アドレスを「格納する変数」です。
・*pは、(ポインタpが指すアドレスに格納されている)char型の
「数値」です。(これは用語の問題。「文字」じゃなくて「文字コード」ならOKです。)

で、ポインタは「アドレス変数」と読み替えると、意味が分かりやすくなります。
つまり、変数というからには、左辺値になりえる(何かを代入できる)必要があります。
判断基準は、ずばりこの「左辺値になりえる=代入できる」という点のみです。
int a,*b,c[10];
と宣言した場合、
「&a」はポインタとは言いません。(&aにはアドレスを代入できません。&a=(int *)0はエラーです)
「b」はポインタです。(bにはアドレスを「代入できます」。b=(int *)0はOKです。)
「c」はポインタとは言いません。(cにはアドレスを代入できません。c=(int *)0はエラーです。)

ちなみに、上記の&a,b,cともに、右辺値として使用した場合(参照した場合)は、
どれも「アドレス」を返します。

ついでに、俺的解釈では、右辺値として現れた場合のみ、上記a,&b,cともに
「〜〜〜”の”アドレス」という代わりに、「〜〜〜”への”ポインタ」と言ってもOKです。
0708デフォルトの名無しさんNGNG
たった今から始めたものです。。非常にお馬鹿な質問ですまそ

とりあえずメモ帳で書いてみたのですが、 保存するとき、 .c
と拡張子を付け、すべてのファイルで ってやったのに、
txt形式で保存されてしまいます。 これはいったい全体どうしたら?
0709おじさんNGNG
"file-name.c"
だっつってんだろゴルァ
もしかしてみんなWin世代か・・・
0710デフォルトの名無しさんNGNG
>>709 むむ?それはどういうことでしょうか。。
       hello.c じゃ駄目なんですか?
ホームラン級の馬鹿ですまそ。
0711デフォルトの名無しさんNGNG
たのむ!教えてくだされ
コンパイルして早く寝たい。 とにかく実行させて 寝たい。
っくっつ 目が 目が かすんできやがった..  限界か..?
0712デフォルトの名無しさん NGNG
>>711
その保存したテキストファイルを選択して
「F2」を押してごらん。
0713デフォルトの名無しさん NGNG
C++がわかーるって、ソフトってほんとにわかるのですか?
また、どの程度の内容なんでしょうか?
使ったことのある人、教えてください。
0714デフォルトの名無しさんNGNG
>>712 おお神よ..ゴッド!観音様! やってみます!!
0715デフォルトの名無しさんNGNG
アビバ逝け
0716デフォルトの名無しさんNGNG
>>712 おお、拡張子 .c に変換できました、
しかし、ファイルが windows のマークになって、アプリケーション
から開かないと駄目な形式に変ったのですが。。
 プロパティをみると、種類が Cファイルとなっているから
このままMS-DOSでコンパイルしてよいのかな?
0717デフォルトの名無しさん NGNG
>>716
いいよ
0718デフォルトの名無しさんNGNG
>>716
そういう質問は、まずやってみてから。

0719デフォルトの名無しさんNGNG
まさか、関連付けくらいできるよな・・
0720デフォルトの名無しさんNGNG
ちっ ちくしょう!! なんか出来そうな勢いだったんですが、
コマンド打ちこんで、やったら 
”パラメーターが多すぎます”
ってでた。   こいつはいったい。。?
0721デフォルトの名無しさんNGNG
>>720
アビバ逝け
0722デフォルトの名無しさんNGNG
>>721 こ、このやろう! あんなボッタクリいくかよ
しねよ〜
0723デフォルトの名無しさんNGNG
>>720
アビバ逝け
0724デフォルトの名無しさんNGNG
電源操作の簡単なプログラムを作ったのですがこれでは全然だめ、といわれましたがどこに問題があるのでしょうか?
電源は落とせますが私にはわからない問題点がやまずみらしいのです
どこがおかしいのでしょうか?
一応コンパイルは通りまして警告も出ません
WindowsXPにVC++6.0でC言語プログラムです
XPの権利関係のところのプログラムは長くなってしまうので今ははずしております
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
int main(int argc, char* argv[])
{

if(argc == 2)
{
switch(argv[1][0]){
case 'r': ExitWindowsEx(EWX_REBOOT, 0);
break;
case 's': ExitWindowsEx(EWX_SHUTDOWN, 0);
break;
case 'l': ExitWindowsEx(EWX_LOGOFF, 0);
break;
default: printf("引数は\"l\"はログオフ\"r\"はリブート\"s\"はシャットダウン");
}
}
else
printf("test1 arg とコマンド引数を当てる");




return 0;
}
0725デフォルトの名無しさんNGNG
printfで\n表示してないとか
windows.hとかstdio.hが<>でなく""だとか、
それをいえば、stdafx.hなんかいらんやろ、とか
"shutdown r"みたいな使用方法はセンスがないとか
0726デフォルトの名無しさんNGNG
defaultの来たときのメッセージがDQN臭いのが一番気になる。
0727630NGNG
>687

>> 配列とポインタの交換性が理解できればそんなに難しく無い。
>互換性? 配列変数を右辺値として評価するとポインタに縮退するという
>特例があるだけで、あとは全然別物だと思うが。

もちろん同じと言っているわけではありません。

ちなみに「交換性」を「互換性」に読みかえていらっしゃいますがこの2つの言葉には「交換性」はないと思います。
//「互換性」もないと思うけど。

式の中ではa[i]は*(a+i)のシンタックスシュガーだと言っているだけです。
int a[20]に対してaが配列aの先頭要素へのポインタに読みかえられるというのはまた別の話。
aはポインタじゃないですからね。

>汗知らずにCやってる人って、、、
まぁでもわざわざアセンブラを覚える必要はないでしょ。わしアセンブラ知らんし。
車を組み立てられなくても車の運転をするのには困らないし。知ってて損はしないだろうけど。
「そろばんを知らなくても電卓は使える」と表現しちゃうとそろばんくらいは知っていた方が
いいよなと思っちゃうけどね。
0728デフォルトの名無しさんNGNG
それならどっちかというと車の中身が分かる方が大切。
0729デフォルトの名無しさんNGNG
>>695
ユーザーモードのアプリに最低限必要な命令だけだったらたいして難しくない。
セグメントを考える必要がないぶん8086より楽なくらいだと思われ
入門なんだからSSEやら何やらは単に無視すればいいだろ。
0730デフォルトの名無しさんNGNG
自分で作ったプログラムを逆汗汁。
たまにすさまじい無駄に気づくぞ。
0731デフォルトの名無しさんNGNG
>>730
ああ、禿しく同意だ
0732デフォルトの名無しさんNGNG
でも”無駄を削った”はずのコードが
すさまじい無駄を含んだコードと
大して変わらない実行速度だったりする罠。

ファイルサイズ削りたいんなら有効かも。
0733デフォルトの名無しさんNGNG
半分同意だが、戦場全体を見渡して一番苦戦してるところを見つける目の方がもっと重要だ。
0734デフォルトの名無しさんNGNG
ご希望通りにたとえ話にしましょう。

将棋盤や碁盤のようなマス目がある板を考えます。各マスには番号を振っておきます。
たとえば1001, 1002, 1003, ... , 1100とあったとします。
各マス目にはいろんなものが置いてあります。一つのマス目には収まらなくていくつかの
マス目にまたがっているものもあります。

ポインタは単なるアドレスではなくどれだけの大きさのものを取り出せばよいか知っています。
char *cp; int *ip; double *rp; とあってcp, ip, rp の値がどれも1001になる場合があり得ます。
そういうときでも *cpとすれば1001からものを取り出してくるし *ipとすると1001から1004にあるものを
とってきます。*rpとすれば1001から1008までを取り出します。

いまたまたま*cpの大きさは1、*ipは4、*rpは8というのは状況によって変わるのですが
宣言時にコンパイラの方が調べて覚えておいてくれるのでプログラマは覚える必要はない。
(むしろ意識してはいけない)

ポインタが単なるアドレスではないというのはこういう意味。
0735デフォルトの名無しさんNGNG
>>734
ip = cp = 1001;
で cp++; とすると cp は 1002 になるし
ip++; とすると ip は 1005 になったりとかね。
0736742NGNG
前回お答えありがとうございました
printfの\nやincludeの<>などはいわれてみればそのとおり、と思って修正できたのですが

コマンド引数で"-"をつけるにはどうやってプログラムすればよいのでしょうか?
確かにコマンドでは"-"ははいっておりますが自分でやろうとすると反応しません
lとかsとか一文字だけですと問題ないのですが…
0737デフォルトの名無しさんNGNG
やべー俺ポインタ理解しないまま霊感でコーディングしてた。
論理式とかも見た目勝負
0738デフォルトの名無しさんNGNG
>>727
交換性って日本語は、初めて聞いた…

> まぁでもわざわざアセンブラを覚える必要はないでしょ。
俺個人の意見としては、

 アルゴリズムや計算機論理設計、コンパイラ理論、OS などは知らなくても
 最低限の仕事は出来るが、上を目指すなら知っておいた方が良い

かな。周囲を見回しても、そのあたりの基礎知識があるヤツとないヤツを比較
すると、成長の早さがずいぶん違うから。
0739デフォルトの名無しさん NGNG
オブジェクトって、簡単に言うとなんですか?
変数などが入ってる箱みたいなものですか?
0740デフォルトの名無しさんNGNG
>>736
なにがわからんのだ?

コマンドライン
hoge -a
  ↓
arg[1][0] = '-'
arg[1][1] = 'a'
arg[1][2] = '\0'
0741デフォルトの名無しさんNGNG
>やべー俺ポインタ理解しないまま霊感でコーディングしてた。

ある意味すごい才能だな 藁
0742デフォルトの名無しさんNGNG
getopt とかのライブラリがきっとあると思うから
それらを活用するというのも手だね。
0743デフォルトの名無しさんNGNG
CでString型もどきを実現するのは大変?
演算子のオーバーロードはこの際無視するとして
0744デフォルトの名無しさんNGNG
>交換性って日本語は、初めて聞いた…
国語辞典調べたら乗ってなかった。ということで互換性に訂正します。
#どこで覚えた言葉なんだろう。

>アルゴリズムや計算機論理設計、コンパイラ理論、OS などは知らなくても
>最低限の仕事は出来るが、上を目指すなら知っておいた方が良い

これに関しては全く同感。でもね、734のようにかみ砕いた説明で
(図にかければもっとわかりやすくはなるけど)
わかんない人がアセンブラなら理解できるのか疑問。

結局Cではint *pの値をみると確かにアドレス値が表示されるのでポインタ=アドレスって
勘違いしてわかった気になっちゃうんじゃないかなと。
0745デフォルトの名無しさんNGNG
string *str = new_string("test");
string_replace( str, new_string("t"), new_string("pch"));
...
やってられるか、っちゅうねん。

>>演算子のオーバーロードはこの際無視するとして
Cでオーバーロードなんか無視する以前にできねーだろが。
0746デフォルトの名無しさんNGNG
>739
>オブジェクトって、簡単に言うとなんですか?
>変数などが入ってる箱みたいなものですか?

初めのうちはそのくらいの認識でいいと思う。
ただしプリミティブな変数だけじゃなくて配列や、構造体、
関数もオブジェクトだったりするので箱よりももっと抽象的なものだ
ということは頭のどこかにおいておこう。
0747デフォルトの名無しさんNGNG
オブジェクト = 名前付きのメモリ領域

K&R風
0748デフォルトの名無しさんNGNG
>>736 (724)
やれやれ。

#include <stdio.h>
int main(int argc, char *argv[]){
 switch(argc){
  case 2:
   switch(argv[1][0]){
    case '-':
     switch(argv[1][1]){
      case 'r':
       printf("reboot\n");
       break;
      case 's':
       printf("shutdown\n");
       break;
      default:
       goto INVALID;
     
     }
     break;
    default:
     goto INVALID;
   }
  case 1:
   printf("...\n");
   break;
  default:
   goto INVALID;
 }   
 return 0;
INVALID:
 printf("usage\n-r: reboot\n-s:shutdown\n");
 return 1;
}
0749デフォルトの名無しさんNGNG
メモリを参照しました。メモリが”written”になることはできませんでした

って出てきます。
どうしたらいいでしょう。
0750デフォルトの名無しさんNGNG
>>749
ポインタ周りのバグだな。頑張ってデバッグしろ。

金があるなら BoundsChecker とか Purify 使う。VC6 なら _CrtSetDbgFlag() で
ヒープのチェックを厳密にすると良いかも。
0751デフォルトの名無しさん NGNG
VCに出てくる、ドキュメントや、クラスってどういうもの
なんですか?
0752デフォルトの名無しさんNGNG
Doc-Viewでいうところのドキュメントは、ファイルに保存したりファイルから読み込んだりできる
アプリケーションデータのこと。

クラスっていうのはC++のキーワード。
構造体をもっと便利かつ複雑にしたもの。
0753751NGNG
>>752
どうも、ありがとうございました
0754700NGNG
>>748
すみません、ありがとうございました
0755NEWTONNGNG
newtom法
f(x)=0をもとめられる
プログラムください。
0756デフォルトの名無しさんNGNG
int f(int x)
{
return 0;
}
0757NEWTONNGNG
newtom法
(x0,f(x0))の接線の方程式
y=f'(xo)(x-x0)+f(x0)
この接線がx軸と交わるx1は、
x1=x f(x0)/f'(n)
xn+1=x-f(xn)/f'(xn)
|xn+1 - xn|<0.00001
f'(x)はf(x)の微分
f(x)=3x3−5x2+2x−3としたとき
f(x)=0の解をnewtom法
微分f'(x)=9x2-10x+2
プログラムを作ってください。 m(-_-)m
0758デフォルトの名無しさんNGNG
>>757
>プログラムを作ってください。 m(-_-)m

そういう姿勢はここでは許されていません。
逝ってよし扱いとなりますので、
誰も答えない事になっています。

叩かれる覚悟はよかですか?
0759デフォルトの名無しさんNGNG
>757
ニュートン先生、日本語に慣れていないのは仕方ないのかもしれませんが、
自身の名前を冠した手法のつづりを間違えているのはどうかと思います。
あと、怜タンが暇そうにしていたので、宿題スレをたずねてあげたら喜ばれますよ。
0760デフォルトの名無しさんNGNG
嫌がらせで「C言語以外」でバンバンプログラムを作ってあげるとか(笑
0761デフォルトの名無しさんNGNG
>>760
BASICで作ってみた
↓
0762デフォルトの名無しさんNGNG
作れもしないカスが消えな
悔しいかったら作ってみな
0763デフォルトの名無しさんNGNG
>>760
Occamで作ってみた。
0764デフォルトの名無しさんNGNG
MATLABで作ってみた・・・と言いたい所だが、作るまでもなく入っている。
0765デフォルトの名無しさんNGNG
C言語で作れもしないカスが消えな
悔しいかったら作ってみな
ちゃんとUPしろよ
0766デフォルトの名無しさんNGNG
だから何処の人だ?<“悔しいかったら”
0767デフォルトの名無しさんNGNG
w
0768デフォルトの名無しさんNGNG
ABIってどういう意味なんでしょうか?
0769デフォルトの名無しさんNGNG
C言語で作れもしないカスが消えな
悔しかったら作ってみな
ちゃんとUPしろよ
0770デフォルトの名無しさんNGNG
769
作ってあげたら
0771デフォルトの名無しさんNGNG
ちとーも悔しくないのはどうしてでしょうか?
0772デフォルトの名無しさんNGNG
悲惨な765のいるスレ
0773デフォルトの名無しさんNGNG
ナ○コを馬鹿にするな!
0774デフォルトの名無しさんNGNG
ナオコ?
0775デフォルトの名無しさんNGNG
質問したと思ったら逆ギレですか?(笑

こんな簡単な問題だれにでも書けますけどね、
もうだれも書いてくれないでしょう。
ま、自分で苦しみなさい。
0776デフォルトの名無しさんNGNG
ここはHSPスレですか?
0777デフォルトの名無しさんNGNG
>>775
ななこSOS!
0778デフォルトの名無しさんNGNG
MLとかHaskellだとどんなコードになるんだろう?
やっぱりすごくエレガントなコードになるんだろうけど。
0779デフォルトの名無しさんNGNG
アルゴリズム解ってるのにコーディング出来ないなんて
このスレどころか、この板にも来る資格ネェよと言ってみるテスト。
0780愚民NGNG
757

マズ−
私もNEWTON法が解けないんですけど教えてください。
0781さげ!NGNG
>>757
方程式ってなんだっけ?

トイッテミチャッタリ
0782デフォルトの名無しさんNGNG
>>780
つーか、NEWTON法も何もしらなくても
することは全部問題文に書いてあるわけね。
それなのに出来ないのはただのアフォです。

しかしてアフォな上に失礼なクレクレ君。
0783デフォルトの名無しさん NGNG
C言語を勉強するときに便利なソフトって
できーるシリーズの他にあったら教えてください。
0784愚民NGNG
NEWTON :02/03/15 00:16
newtom法
(x0,f(x0))の接線の方程式
y=f'(xo)(x-x0)+f(x0)
この接線がx軸と交わるx1は、
x1=x f(x0)/f'(n)
xn+1=x-f(xn)/f'(xn)
|xn+1 - xn|<0.00001
f'(x)はf(x)の微分
f(x)=3x3−5x2+2x−3としたとき
f(x)=0の解をnewtom法
微分f'(x)=9x2-10x+2
ニュートン先生が757 で書いてました。
0785デフォルトの名無しさんNGNG
>>783
そんなあなたにここがおすすめ
http://www.aviva.co.jp/
逝け
0786デフォルトの名無しさんNGNG
757  ←ここに数字を入れる人って少ないよね。>>770とか>>780。
0787デフォルトの名無しさんNGNG
>>783
Cコンパイラとデバッガとエディタ。
そしてライブラリのソース。以上。
0788デフォルトの名無しさんNGNG
>>783
>できーるシリーズ
・・・・・
ネタですか?
0789デフォルトの名無しさんNGNG
>>783
プログラミングができる友人
0790783NGNG
みなさんありがとう!
>>788
突っ込みありがとう!
気付きませんでした。

×できーるシリーズ
○わかーるシリーズ
0791デフォルトの名無しさんNGNG
プログラミングができるともだち100人できーる(民明書房)\1,200-
0792デフォルトの名無しさんNGNG
「週間プログラミング」創刊!
いまならアヒル本が付いて250円。デアゴスティーニから。
0793デフォルトの名無しさんNGNG
sage
0794デフォルトの名無しさんNGNG
ひきこもりができるともだち100人できーる(民明消防)\1,200-
0795デフォルトの名無しさんNGNG
>>768
Application Binary Interface

関数の呼び出し規約(引数の渡し方、呼び出し側で保存すべきレジスタ等)や
実行ファイルのヘッダ構造などを規定する。
0796デフォルトの名無しさんNGNG
void get_str(char *p)
{
  p = "hoge";
}

void main(void)
{
  char *p;

  get_str(p);
  printf("%s\n", p);
}

このコードをコンパイルすると
「値が割り当てられていないローカルな変数 'p' に対して参照が行われました。」
と警告を出され、構わず実行すると強制終了するんですが、何が悪いんでしょうか・・・。
0797デフォルトの名無しさんNGNG
つまりあなたは、
void get_value(int i)
{ i=500;}
int main()
{
int i=0;
get_value( i );
return 0;
}
とかやって、mainの i が0のままだ、とか仰るのでせう。
0798796NGNG
>>797
それについてはわかっていたつもりだったんですが・・・。
767のmainは
void main(void)
{
  char p;

  get_str(&p);
  printf("%s\n", p);
}
と等価ではないんでしょうか?
0799796NGNG
すいません。対象が文字列だってこと忘れてました。
上のは大間違いですね・・・。
0800デフォルトの名無しさんNGNG
>>799
文字列っつーか…。ポインタ変数でもなんでも普通の変数と
変わらんので、他の関数の中で書き換えたいなら

char *p;
get_str(&p);

って形になるように get_str を作らんと。
0801デフォルトの名無しさんNGNG
>void main(void)
これを見ただけで頭が拒絶反応を起こす罠
0802796NGNG
>>800
get_strにはpのアドレスが渡るのかと思ってました・・・。
おかげで一つ賢くなりました。

void get_str(char **p)
{
  *p = "hoge";
}

としてみたら期待通りに動きました。
ありがとうございました。

>>801
スペース節約の為、 return 0; を省く為にvoidにしました。
普段は一応intを返してます。
0803デフォルトの名無しさんNGNG
Cでは関数へはすべて値渡しだから元の引数に書き換えを反映したいときはポインタを
渡して関数の中で実体を参照する。

逆に言えばポインタ渡しをしなければ勝手に書き換えられたりしない。
たぶんコードをみたら納得すると思う。

#include <stdio.h>
void get_str(char **p){
*p = "hoge"; /* ポインタをもらって実体を参照する */
}

int main(void){
char *p;
get_str(&p); /* ポインタを渡たす */
printf("%s\n", p);
return 0;
}
0804デフォルトの名無しさんNGNG
自力救済できていたのね。
0805デフォルトの名無しさんNGNG
>>801
実はC99という罠
0806デフォルトの名無しさんNGNG
C99の仕様は何処読めばいいんだろう。
とりあえずこんなの見つけたが、ごっつい量や...
http://www.cl.cam.ac.uk/~mgk25/volatile/ISO-C-FDIS.1999-04.pdf
0807デフォルトの名無しさん NGNG
コンストラクタって何ですか?
0808デフォルトの名無しさんNGNG
>807
プログラミング言語Cにコンストラクタはありません。
気にしなくても良いですよ。
0809デフォルトの名無しさんNGNG
>>807
Cにはコンストラクタはない

C++にはある
http://www.bohyoh.com/CandCPP/FAQ/FAQ00084.html
0810デフォルトの名無しさんNGNG
constructor n.
建造者,建設者
0811807NGNG
ありがと〜
0812デフォルトの名無しさんNGNG
C には文字列型はありません。
文字型もたぶんありません。
0813デフォルトの名無しさんNGNG
>>812

typdef char* string;
string str = "sage";
0814デフォルトの名無しさんNGNG
typdef -> typedef

ごめんなさい。逝って来ます。
0815デフォルトの名無しさんNGNG
>>806
ここはどう? 日本語のページだよ。
ttp://seclan.dll.jp/c99d/c99d00.htm
正確な仕様書ではないけど、従来のCとなにが変わったのか概要を知るにはいいと思う。
0816806NGNG
>>815
さんくす
ゆっくり読んでみます。
0817806NGNG
やっぱ処理系手に入れて遊んでみないとなぁ
0818デフォルトの名無しさんNGNG
gcc -std=c99 hoge.c でできるらしいけど如何?
gcc-3.x じゃないとだめなのかな?
0819806NGNG
cc1.exe: unknown C standard `c99'
とか言われます。
cygwin gcc は 2.95.3-5 ですな。
現在 GCC 3.X 導入画策中っす。
0820デフォルトの名無しさん NGNG
CとC++って、どう違うのですか?
0821デフォルト名無しさんNGNG
おなじだよ
0822デフォルトの名無しさんNGNG
チンコが付いてるかどうかの違いだ
0823デフォルトの名無しさんNGNG
C → /
C++ → つ

おったち度で言うとこう。
まあ例外として、神が降臨すると
C++ → |
という具合。
0824熱血初心者NGNG
80字より長い行を全て表示するプログラムは
#include <stdio.h>
#include <string.h>
int main(void)
{
char s[256];
while(gets(s) != NULL)
 if(strlen(s) >= 80)
  puts(s);
return 0;
}
でよいですか?
0825デフォルトの名無しさんNGNG
>>824
80字より という以上、80字の行は含まれない。 よって、間違い。
0826デフォルトの名無しさんNGNG
>>820
アビバ逝け!
0827熱血初心者NGNG
日本語勉強してきます<(_ _)>
0828デフォルトの名無しさんNGNG
>>824
10000字の行があったらそれで正しく表示できるのかと56時間(略)
0829 NGNG
80字より長い行???
0830デフォルトの名無しさんNGNG
>>824
macのテキストファイル食わせると死ぬ罠。
0831デフォルトの名無しさんNGNG
>>757
もう要らないのかもしれないけど、とりあえず見つけたので。ほい。
http://www.arai.pe.u-tokyo.ac.jp/~arai/lectu/optim-j.html
でも、連立ニュートン法って書いてあるので、別物かな?

こっちのうほうがいいかも。
http://www.cs.reitaku-u.ac.jp/~ykago/semi/semi1-3.html
0832デフォルトの名無しさんNGNG
>>831
バカを甘やかさないように

スレに定住されたら困るので。
0833デフォルトの名無しさんNGNG
>>813
const string str = "sage";
としてハマるの罠。
次のうち、コンパイルできないのはどっち?
str = "age";
*str = ' ';
0834831NGNG
>>832
まぁまぁそう言わず、Excelも捨てたもんじゃないっていうことで。
0835デフォルトの名無しさんNGNG
どんなコンパイラがある?それとどんなの使ってる?
0836デフォルトの名無しさんNGNG
void ( *signal( int sig, void (__cdecl *func) ( int sig [, int subcode ] )) ) ( int sig );

この宣言の読みかたが分かりません。
”signalは第一引数にint sigをとって、...
ここから先を教えてください。お願いします。

0837デフォルトの名無しさんNGNG
>>836
ばらしとけ
typedef void (*functype)(int sig);
functype signal(int sig,functype func);
0838sageNGNG
singalは引数に int sigと int sig, int subcode(subcodeは任意)を引数に取るvoidを返す関数のポインタを
とり、 int sigを引数に取る void型関数へのポインタを戻り値として返す。
0839デフォルトの名無しさんNGNG
837さん838さんありがうございました。
よくわかりますた。
0840デフォルトの名無しさんNGNG
char *hoge;

と宣言したのを

realloc(hoge,strlen(hoge) + i + 1);
/* iはunsigned intの適当な値 */

って使い方はよくないですか?えっと、つまりhogeのメモリ領域を
再確保する際に、strlen(hoge)って使うのがよくないのかな
と思いまして。それとも

n = strlen(hoge) + i;
realloc(hoge, i + 1);

とかのが良いですか?
0841デフォルトの名無しさんNGNG
>>840
関数へ渡される引数は、関数呼び出しに先立ってすべて評価されてから
渡されます。なので、>>840の場合どっちも同じです。
0842デフォルトの名無しさんNGNG
>>841

わかりました。ありがとうございます。
0843デフォルトの名無しさんNGNG
1)
realloc(hoge,strlen(hoge) + i + 1);

2)
new_strlen = strlen(hoge) + i;
realloc(hoge, new_strlen);

確かにどっちも同じだしこの程度ならあまり変わらないけど、
どっちが見やすいかと言えば後者だと思う。

>hogeのメモリ領域を
>再確保する際に、strlen(hoge)って使うのがよくないのかな

と迷う時点であまり好ましくないなと思う。
そういうことが積み重なっていくとコード全体が読みづらくなる。

しかしもちろん一時変数が増えることによってコードが読みづらくなったりもするので
これはケースバイケースであることは言うまでもない。ただし一時変数だらけになるのは
その時点で関数の機能の切り分けに問題があると思われる。

基本的には2をおすすめする。
0844デフォルトの名無しさんNGNG
間違って下げちゃったよ。

単発すれとかネタスレが多いので上げとく
0845デフォルトの名無しさんNGNG
間違えた。
new_strlen = strlen(hoge) + i;
は
new_strlen = strlen(hoge) + i + 1;
だね。
0846840NGNG
さっきの内容のあるプログラムですが、今こんなの作ってます。

key_stringに含まれるlookforをreplaceに置換するというプログラム
です。実はまだよくポインタとかわかってない厨房なんですが、参考書や
WEBにあるサンプルを参考にしながら作ってみました。

void ReplaceTag(char *key_string, const char *lookfor, const char *replace)
{
char *reference_string, *sub_string;
int key_len, replace_len, hit_to_top, temp_len = 0;


sub_string[0] = '\0';
key_len = strlen(key_string);
replace_len = strlen(replace);

while(1) {
//lookforがある位置を検索
reference_string = strstr(key_string, lookfor);
if (reference_string == NULL ) {
realloc(sub_string, strlen(sub_string) + strlen(key_string) + 1);
strcat(sub_string, key_string);
break;
}
//lookforの1つ前までの長さを取得
hit_to_top = key_len - strlen(reference_string) - temp_len;
//メモリの再割り当て
realloc(sub_string, hit_to_top + strlen(sub_string) + 1);
//lookforが見つかった場所の1つ前までをコピー
strncat(sub_string, key_string, hit_to_top);
strcat(sub_string, replace);
reference_string ++;
key_string += hit_to_top;
temp_len = (hit_to_top + 1);
}

key_string = malloc(strlen(sub_string) + 1);
strcpy(key_string, sub_string);

free(sub_string);
}

コンパイルは通るのですが、実行時にエラーになります。ドコで
コケてるのかすらわかりません。もう3日ほど費やしたのですが。
どうかご教授ください。
0847デフォルトの名無しさんNGNG
これくらいなら 1の方が見やすいと思うけどなぁ。
0848デフォルトの名無しさんNGNG
>>846
reallocの結果のアドレス受け取ってないじゃん
reallocは、その結果アドレスが変化することを考慮して使うものだよ。
0849デフォルトの名無しさんNGNG
gdbの使い方を解説しているページを教えてください。
よろしくお願いします。
0850デフォルトの名無しさんNGNG
>>846
replace ってシンボルが関数じゃなくて変数なあたり、激しく読みにくい…。
(ふつー動詞は関数、名詞は変数っつー気が)

問題点多数たが、とりあえず
> sub_string[0] = '\0';
これでダメだろ。最初の時点では sub_string は有効なメモリ領域を指して
いない。
0851840NGNG
>>848
sub_string = realloc(sub_string, hit_to_top + strlen(sub_string) + 1);

なんですね。お手数おかけしました。
0852デフォルトの名無しさんNGNG
>>849
info gdb では不満か? 使い方で悩むなら xxgdb とか ddd, Emacs の
gdb-mode のような

 対話的に使用できるインターフェース

をかぶせて使うのも手だと思うが。
0853デフォルトの名無しさんNGNG
>>849
http://flex.ee.uec.ac.jp/texi/gdb-j/gdb-j_toc.html
0854デフォルトの名無しさんNGNG
>>849
http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gdb-4.18/gdb_toc.html
0855デフォルトの名無しさんNGNG
ありがとうございました。
0856デフォルトの名無しさんNGNG
独習Cの最初のプログラムとK&Rの最初のプログラムって
形がほぼ同じで「return 0;」だけが違うのですよネ?
これって特に覚えておく必要あります?
・・・って頭には既に刻み込まれていますが(^^;
0857デフォルトの名無しさん NGNG
| (or) ,^ (xor) , ~(補数)の記号ってなんて読むのですか?
「;」をセミコロンと読むように。 一応ネタではないです。
0858デフォルトの名無しさんNGNG
漏れは|(パイプ)^(やま)~(チルダ)とよんでいるが
0859デフォルトの名無しさんNGNG
パイプ カレット にょろ
0860デフォルトの名無しさんNGNG
パイプカット…
0861デフォルトの名無しさんNGNG
折れは、文脈に従って、or、xor、notと呼ぶけど。
~は、URLに有る時はチルダだな。

HTMLのキャラクタセットの説明書いておくと、
| Vertical bar
^ Caret
~ Tilde
0862デフォルトの名無しさんNGNG
>846
とりあえず仕様としてはたとえば文字列 key_str = "hogehogeabcdef", lookfor = "abc",
replace = "xyzzy"があってReplaceTag(key_str, lookfor, replace)ってやると
key_str = "hogehogexyzzxdef"っていう感じでいい?

問題点はたくさんあって第一にはvoidで関数の中でkey_stringを書き換えてもとの文字列を
変更したいんだよね。それなら
void ReplaceTag(char **key_string, const char *lookfor, const char *replace)
という風に宣言して呼び出し側ではReplaceTag(&key_str, lookfor, replace)という感じで呼び出さないと
いけない。

それから悪いけど関数の中身が何やってるのかよくわからない。
「key_stringに含まれるlookforをreplaceに置換するというプログラム」
というのならまず
char *destというポインタを用意
置換した後の文字列の長さを求める。
その文字列分mallocでdestの領域を確保。
lookforの先頭までkey_stringをdestにコピー
replaceをdestにコピー
lookforのあとから最後までkey_stringをdestにコピー
destをkey_stringに渡す。

という感じがいいんじゃないかと思う。


0863デフォルトの名無しさんNGNG
シンボルってなんでしょうか?
シンボルってアドレスですか?
それともアドレス以外にシンボルとしてテキストに占有しているのでしょうか?
またstripコマンドでシンボルが取り除けるとはどういうことでしょうか?
お願いします。
0864デフォルトの名無しさんNGNG
チンコ
0865857NGNG
| (or) ,^ (xor) , ~(補数)の記号の読み方を教えて頂き
ありがとうございました。
0866デフォルトの名無しさん NGNG
参考本や、サイトで「バイト幅は処理系により異なり・・・」
の「処理系」は、具体的にどのようなことを指してるのですか?
0867デフォルトの名無しさんNGNG
>>866
コンパイラ。OS。ハードウェア構成、等々言い出せば際限無い。
多くの場合「違うぞゴルァ」という指摘をあらかじめ防ぐためのもの。
0868デフォルトの名無しさんNGNG
>866
処理系 = コンパイラと思っておいていい。
0869デフォルトの名無しさんNGNG
一般的に処理系と言えば >>867だが、
このスレの中で処理系と出た場合は>>868。
0870866NGNG
>>866です。
皆さん、わかりやすい説明ありがとうございました。
0871デフォルトの名無しさんNGNG
>>863
ふつー、コンパイルすると機械語コードに変換されるんだけど、
デバッグのため、関数名とか変数名とかの名前を一緒に記録
しておくと、デバッグ中にわけわからんアドレスを「これ、どの
変数に対応しとるんじゃ!?」と悩まなくてすむ。
で、この関数名とか変数名とかその他文字列がシンボルだね。

で、シンボルを実行ファイルに埋めこむと、上記の利点の反面、
サイズがでかくなるので、もうデバッグしなーいってときは、
シンボルテーブルを削っちゃってもいいわけだ。これをやって
くれるのがstrip。
0872デフォルトの名無しさんNGNG
>>871
デバッグ以外にも、リンク時には必要になるよね。

オブジェクトファイルやライブラリを strip すると不幸になるので、気をつけ
ましょう。あと kernel も strip できるけど、やるといくつかコマンドが正常に
動かなくなる。(でもルータとして使う程度なら、動作に支障はない)
0873初心者NGNG
2chもしっかりしたところで質問すると皆さんにしっかりお答えしていただけるのでよいですね
しかもほとんど時間差なしというのがよいです
余計に自分で調べられるところは調べて本当にわからないところだけきけばよいので自分で調べる癖もついてよいです

なんて、最近こういうところを見ていて思った大きな独り言でした
0874デフォルトの名無しさんNGNG
863です。
とても解かり易い解説をありがとうございました。
本当に勉強になります。
0875デフォルトの名無しさんNGNG
win32apiを使ってWindowsprogrammingをC/C++でしている時に
HANDLE型が出てきますがHANDLE方とはいったい何なのでしょうか?
VC++6をつかってます

また
ピアソンエデュケーション社から出ているwin32システムサービスプログラミングという書籍について皆さんどう思われますでしょうか?
ああ言う書籍は結構MSDNヘルプに載っていることを書籍課したような気がするのですがプロの方々はどう思いますか?

よろしくお願いいたします
0876デフォルトの名無しさんNGNG
HANDLE型って、あれでしょ。FILE*とおんなじような。
実体はvoid*だけど。不完全型のポインタとおんなじで
「Windowsである俺様には重要やけど、おまいら一般
プログラマは、内容を参照しようとすんなよ、バカチンが」
っていうような感じ。そういうオブジェクトを格納・参照する型が
HANDLEなわけよ。UNIXソケトハンドルがintなのとそう変わらない。

ああ、そうそう。「スレ違い」だよ。
0877デフォルトの名無しさんNGNG
>>875
typedef (void *) HANDLE;
0878デフォルトの名無しさんNGNG
>2chもしっかりしたところで質問すると皆さんにしっかりお答えしていただけるのでよいですね

そう思っていると自分の質問は無視されるという罠。
そうじゃなければネタレスばかりつくという罠。
せっかく教えてもらっても実は間違いという罠。

鵜呑みにしてはいけません。自分で調べようという人ならば2chより先に
自分のもってる本の索引を引く、サーチエンジンにキーワードを放り込む、
その先で解決に結びつきそうな糸口をさがす。そういうことをするひとなら
要領をえた質問ができるだろうからちゃんとした答えが期待できるでしょう。

0879デフォルトの名無しさんNGNG
>>877
結局typedefしているだけなんだ
0880デフォルトの名無しさんNGNG
>>879
yes ヘッダ見れ。winnt.hにいた。正確には
>typedef void *HANDLE;
だったが。
0881デフォルトの名無しさんNGNG
というか、xor ってそもそもどう読んでるよ。

えっくすおあ で済ましてるのは軟弱ですか?
0882デフォルトの名無しさんNGNG
>>881
えっくすおあです。えくすくれっしヴおあなんて長ったらしい。
0883デフォルトの名無しさんNGNG
横から割り込みでごめんなさい
>>880
本とだ
winnt.hにいた
初めて知った

でもvoid* は何なのですか?
型のないポインタとは?
(戻り値のないポインタ?)
ポインタにしまっておくだけということなのでしょうか?
それともHANDLEはWINの中でしか関係ないというようなのでWINが隠してしまうからHANDLE型とか?

ちょい日本語変ですが。。。
0884デフォルトの名無しさんNGNG
>>875
本の話はこっちかな。

推薦図書/必読書のためのスレッド PART2
http://pc.2ch.net/test/read.cgi/tech/1010312992/l50

「スレッド一覧はこちら」ってとこみるとあがってないスレッドも見れるから。
今度から質問する前に先ず自分で探しとけ。
0885デフォルトの名無しさんNGNG
> void*
汎用のポインタ。
どんな型のポインタもに代入できる便利だけど節操が無いポインタ。
0886sageNGNG
>>883
本当はね、意味のある構造体へのポインタだったり、
意味のある構造体を指すポインタへのポインタだったりするんだけど、

ユーザプログラムに中を見られたり、中を書き換えられたりされたら困るから
(CPUの保護機能を使って元々見たり書いたりできないようになってるけどね)
意味のない汎用ポインタ void * にキャストしてるんだよ。
0887デフォルトの名無しさんNGNG
ローダーの仕事について質問させていただきます。

ELF形式の実行ファイルhogeがあるとします。
この時
./hoge
とするとプログラムhogeが実行されますが

この時のローダーの仕事は
☆ハードディスク上のオブジェクトhogeを各セグメント(.text, .data, .bss等)に分割しメモリ上に配置する。
#当然ながらオブジェクトhogeがメモリ上にそのまま読み込まれるわけではない。

というので当たっていますか?
これ以外にローダーの重要な仕事というのはあるのでしょうか?

よろしくお願いします。
0888デフォルトの名無しさんNGNG
>>833
もう十分説明は出てるが追記。使うとしたら
| int n = 100;
| void *p = &a;
| printf("%d", *(int *)p);
って感じ。型キャストを外すと許されない型といわれた(BCC)。
0889デフォルトの名無しさんNGNG
./ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 
|  参考になりますね
.\
  . ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       _ _  _   __,、--――- 、
    ,、'´/  `´´  `''´ ̄,、―'´ ̄ '´ ̄..`ヽ、_
   // '´  / ,、  ,、    /  '´ ̄`ヽ、 /`l
  / ´ //  // // //     ̄= ,、'´|  )
  |   | | / / /   /  //    ,、'´  | /\
  ,|     | || /   / /   _,、'´ |   /― `l
  |        |    /  ,、--イ   |_,、'´ ̄`ヽ\`l
  | `l  |`l     | |  ,、'´   / _,、'「==    _   `l
  \ /'l   _,、'´ ̄ / ,、-'´ ̄  ‘l__ /,\  |
    `l  ├―'´ /  _,、'´ ̄ / ̄   \__  | /|´ | |
  ,、'´ ̄_/__/--┴'´ ̄   / _       \|| └`l |
  └`┬'| __        / /_`__       \ | |―-
      l   `ヽ-、_ ´ /  < `-´/    l l'ノ/,、|/ `l
      `l  '´__     ヽ ̄ ̄     / | //     `l
         `l / `´/l      `''´    ノ  |/      `l
        |  ̄ ̄/|          / / ̄        `l
        \    /  -、      `l/´            |
          `lヽi/  _,l     /             /、
         /`l |`―´_,-、   ,、-'´            /   ̄`ヽ、
       /   \ \二二=<             /       `ヽ、
      /      \|---―'´`l          /´           `ヽ、
      |        `l _   `l       /´/ /        ,、-'´ ̄\
      `l        |      `l      / / /       /      \
      `l        |    ,、'´\  /)/         /´
    ,、'´´`l     / `―フ ̄   ) ,、'´          /
   //   \  / |  / ̄`ヽ、,、'´フ          /
0890888NGNG
>>833 <- >>883
鬱
0891デフォルトの名無しさんNGNG
>>887
基本的にはそんなとこじゃない?
シェアードライブラリとかの処理はどうなってるのか知らないけど。
0892デフォルトの名無しさんNGNG
#include<stdio.h>

main()
{
/* char型の配列を宣言し、初期化をする */
char charray[]="はじめての"

/* printf()関数を使って文字列を表示する */
printf("%s", charray);

/* printf()関数を使って文字列を表示する */
printf("Cプログラム\n");

return0;

}
て本に書いていたのを初めてコンパイラしようとしたのですが
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
BCC32 -WC -3 -Od -w- -AT -pc -H- -k -b -v -y -nDebug -c E:\program.c\2.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
E:\program.c\2.c:
エラー E2209 E:\program.c\2.c 1: インクルードファイル 'studei.h' をオープンできない
*** 1 errors in Compile ***

** error 1 ** deleting Debug\2.obj

Compile End !! (Elapsed time 0:00.030)
とでてしまいます。なぜでしょうか、
http://www.borland.co.jp/cppbuilder/freecompiler/index.html
を使ってます。
0893デフォルトの名無しさんNGNG
>>892
E:\program.c\2.c
の1行めになんて書いてあるの?
0894デフォルトの名無しさんNGNG
>>887
ローダーといっても、

- kernel が立ち上がる前の boot loader
- kernel 立ち上がった後 exec システムコール内部で行われる処理

どのあたりを指していってるのか明示しないと、話が混乱しそう。あと
書籍で Linkers & Loaders 読むのが良いんじゃないのか? (俺は
まだ読んでないんだが)
0895892NGNG
この内容には
#include <studei.h>
と書いてありますが、それのことでしょうか?
0896デフォルトの名無しさんNGNG
studei.hこのファイルがないって事
正解はstdio.hだ
0897892NGNG
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland

Compile End !! (Elapsed time 0:00.020)
と出たんですが、出力結果というのでしょうか、それは出てこないんでしょうか?
0898デフォルトの名無しさんNGNG
>>897
同じディレクトリに何かできたと思われるのでそれを実行汁。
人に聞いてばかりでなく、少しくらいは自分で調べろ。
0899デフォルトの名無しさんNGNG
>>892
には #include<stdio.h> って書いてるのに、
>>895
って、


ネタですか?

そうでなかったら、
charray の行末のセミコロン抜けてたりしてるから、
まず正確にコードを写すことを心がけた方がいいと思うよ。
0900デフォルトの名無しさんNGNG
>>899
コードを手で写している以上、まともなプログラマにはなれない。
0901デフォルトの名無しさんNGNG
>>900
コピペだけ覚えてもまともなプログラマにはなれない。
0902デフォルトの名無しさんNGNG
>892
とりあえずくだらないタイプミスが何カ所かあります。指摘するのは簡単なんだけど
1行目が #include<stdio.h> なのにコンパイラに
>エラー E2209 E:\program.c\2.c 1: インクルードファイル 'studei.h' をオープンできない
っていわれているのだから掲示板に書き写すときにまたタイプミスしています。
自分が実際に書いたコードをコピペした方が問題点がはっきりするからコピペ奨励。


0903892NGNG
コピペしてたのですが、一度貼り付けてまたコピーする時に違うのを
コンパイラして違う文章のエラーを貼り付けてしまっていたみたいです。
#include <stdio.h>
main()
{
/* char型の配列を宣言し,初期化する */

char charray[]="は\nじ\nめ\nて\nの\nC\n";

/* printf()関数を使って文字列を表示する */

printf("%s",charray);

return 0;

}
で、
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland

Compile End !! (Elapsed time 0:00.020)
こうなりました。
0904デフォルトの名無しさんNGNG
>903
うん問題なくコンパイルできて実行できるよ。
で、何が聞きたいの?

もしかして
>と出たんですが、出力結果というのでしょうか、それは出てこないんでしょうか?
のことかい?自分の環境はちゃんと書こうね。
出力結果を見るにもしかしてBCC Devを使ってると思うんだけどそれならツールバーの
実行を実行しよう。

それとこれはCの質問じゃなくてBCC Devの質問と言うことになる。BCC Devのことをこのすれで聞いて悪いことは無いと思うけど
C言語一般の話じゃないのでちゃんと環境を書いてから質問すること。

ちなみに一般的にはhoge.cというソースを書いたらそのディレクトリで
>bcc32 hoge.c [return]
とやって同じフォルダにhoge.exeができるので
>hoge [return]
とする。ちなみにこれもwindowsでbcc32だからこうなるのであってlinuxとかだとふつうは
$gcc hoge.c [return]
$./a [return]
となる。環境を書かないとみんな一般的な話をするしかなくなるので自分がどういう状況で
困っているのか必要十分な情報を伝えるように。

今回はコンパイラのメッセージがあったから予想がつきました。そのうちエラーメッセージの読み方も
わかるようになります。

0905デフォルトの名無しさんNGNG
実行できないのですが
0906デフォルトの名無しさんNGNG
>903
わかった。
BCC Devでコンパイルするとコンパイルだけして実行ファイルは生成されません。
実行ファイルを作成するにはmakeしてください。そうじゃないと実行ボタンがグレイアウトして
有効になりません。

これも903がBCC Devを使っていると言ってくれればすぐわかったかもしれないのに。

甘やかしすぎちゃったかな。
0907デフォルトの名無しさんNGNG
投稿文を書いている間に書き込みがあったようですね。

>実行できないのですが

やれやれ、、、、、、、、、、、、、。

「実行ボタンがグレイアウトして押すことができない。」
という一文がなぜ書けないんだ。

君は教えてくん認定。

もう俺は知らん。
0908デフォルトの名無しさんNGNG
>>905
makeは、コンパイルするコマンドであって、実行するコマンドじゃないよ。
Cではコンパイルして実行ファイルを一度生成して(これをmakeがやる)、
次にその実行ファイルをdos窓から実行すると、実行されるんだよ。
C:\>e:
E:\>cd \program.c
E:\program.c> 2.exe.
て感じかね?
(コンパイルして生成された実行ファイルがE:\program.c\2.exeならね)

漏れはWindowsではVCしか使ったことないので、BCCの
詳しいとこは分かんないけど。
0909デフォルトの名無しさんNGNG
教えて君にはあまり構うなよ。教えてる奴は善意かもしれんが、
結局ここに教えて君が多数住み着くようになり周りの奴にとって
害になるからな。

質問するやつは「十分に自分で調べた後」、「環境」、「状況」を
できる限り細かく書け。何がわからないかがわからなければ
こちらとしても答えようが無い。
0910ビル・ジョブスNGNG
HANDLEってのを簡単に説明すると、
「色々なオブジェクトを管理するための構造体へのポインタ」
って事になるな。
0911デフォルトの名無しさんNGNG
>>910
間違っちゃいないが、素人っぷり全開なレスにしか見えないのは俺だけか?
0912デフォルトの名無しさんNGNG
>>911
まぁ奴の言うことは、いつもそうだよ。
0913ビル・ジョブスNGNG
おーい「素人」ってオレの事か?
ならチミの技術力は「素人の10分の1」くらいだよ。
0914デフォルトの名無しさんNGNG
>>910
用語の使い方なんか、こいつどこまで理解してるのかって不安になるよな。
0915ビル・ジョブスNGNG
HANDLEの示す「実体の定義」のソースコードを見せてやりたいぜ!(フフフ
0916ビル・ジョブスNGNG
>>914
そうだな・・・
DC(デバイスコンテキスト)って何ですか?とか、お気楽に聞かれても
いっぱいあるから「え!何に使うDC?」って聞き返してるよ・・・フー
0917デフォルトの名無しさんNGNG
ハンドルって、ポインタへのポインタだったり、構造体の配列のインデックスだったりするけどね。
0918ビル・ジョブスNGNG
>>911
あっ!そーだ!
じゃー貴様が説明してみろよ!(50文字以内で)
0919ビル・ジョブスNGNG
>>917
そんな事は百も承知ですが・・・フー
0920デフォルトの名無しさんNGNG
>>919
おいおい >>910 と言ってることが違うだろ(w
0921ビル・ジョブスNGNG
>>920
「簡単に」って書いてあるだろ?
それとも「HANDLEの指し示す型を全部言え」ってか?
おまえアフォ?
0922デフォルトの名無しさんNGNG
ジョブス厨房すぎる。
日下部さん帰ってきてよ〜
0923デフォルトの名無しさんNGNG
>>920の負けですな
0924デフォルトの名無しさんNGNG
簡単にいうと>>923==ビル・ジョブス
0925デフォルトの名無しさんNGNG
ビル・ジョブス は放置ということでお願いします。>> ALL
0926sageNGNG
ええそうですね、ついでにつまらんことでageた>>925も放置で・・・
0927デフォルトの名無しさんNGNG
ちっと気になったんだけど、>>910の言う「オブジェクト」ってのは、
ペンとかブラシ(GDIオブジェクト?)って意味でよろしいか?

とすると、>>911>>914が気になってる点はどこ?
0928デフォルトの名無しさんNGNG
>>926
このスレは sage なきゃならんの?
0929デフォルトの名無しさんNGNG
それで?
0930デフォルトの名無しさんNGNG
>>927
一番気になってるのは、たぶん、それがビル・ジョブスだって事。
0931デフォルトの名無しさんNGNG
>>927
ハンドルが指し示すリソースって、プロセスとかファイルとかデバイスとか、
そういうレベルで捉えるもんでしょ。
まあ、実装は特定のメモリとそれを指すポインタかもしれないけど、
「構造体」って言葉で説明してしまうとなんかちがうよな。
0932927NGNG
>>930
なるへそ。
0933デフォルトの名無しさんNGNG
遙か昔の>>886で回答でてるじゃん。
今頃とんちんかんな回答するやつは誰だ?
0934934!NGNG
OSで使うハンドルのことを、構造体へのポインタなんて説明してる
ほうがトンチンカンだろ。
0935デフォルトの名無しさんNGNG
OSの中身タコと無いんだね。
かわいそうに
0936デフォルトの名無しさんNGNG
#define CHUBO 8
#define ITTEYOSHI (CHUBO*8)

のような多重defineは合法ですか?
0937デフォルトの名無しさんNGNG
>>936
合法だ。
0938936NGNG
>>937
どうも〜
ちょいとしたパズル解きでやりたかったので。
0939デフォルトの名無しさんNGNG
>>935
ハンドルはハンドルだろ
実装ならポインタよりテーブルのインデックスのほうが近い(事が多い)
0940デフォルトの名無しさんNGNG
メモリをバイト境界にアラインする理由、メリットとはなんなんでしょうか?
アラインしないほうがメモリが節約されていいような気がするのですが。

0941デフォルトの名無しさんNGNG
>>940
バイト境界にアライン、というと1バイト境界, つまり逆にパックすることを意味するように取れるが。

まあ4とか8とかという意味なら、
1. プロセッサによってはそもそも4バイトワードを4で割り切れないアドレスでアクセスできない。
バスエラーというプロセッサ例外が発生し、停止する。
2. そのアクセス機能があるプロセッサであっても、複数のワードをまとめてアクセスしたあと、
ずらして合成するため、アクセス時間が余計にかかる。

ということで、アラインサイズより大きなデータへのアクセスは、普通避ける。
0942デフォルトの名無しさんNGNG
流石2ch、素早いレスありがとうございました。
0943U-名無しさんNGNG
800 名前:ガンヲタ ◆GUNDAMIU 投稿日:02/03/02 19:53 ID:???
   今だ!800番ゲットォォォォ!!
    ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
      ∧赤∧
      (・∀・ )           (´´
      ( つG つ       (´⌒(´
     / /〉 〉≡≡≡(´⌒;;;≡≡≡
    (__)(__) (´⌒(´⌒;;
      ズザーーーーーッ
0944デフォルトの名無しさんNGNG
VC++6.0SP5にMSDN2001/10を使っております

FILE構造体をMSDNのヘルプで見ると
stdio.hをインクルードしろ、と書いてありますのでstdio.hのなかに書いてあるのかも、と思ってstdil.hの中身を見てもFILE構造体の定義がありません
stdio.hのなかにcruntime.hがインクルードしてありますのでそこを見ても入ってません
FILE構造体はどこにあるのでしょうか?
VC++をインストールするときにVC++のインストールはオプションまですべてインストールしたのですが…
0945デフォルトの名無しさんNGNG
>>944
grepした?
0946デフォルトの名無しさんNGNG
>>944
BCC5.5にて、stdio.hに発見。
VC6.0にて、stdio.hに発見。
0947デフォルトの名無しさんNGNG
>>944
です
見つけました
失礼いたしました
struct _iobuf{} をtypedef しているのですね
失礼いたしました
0948初心者1NGNG
Cのコメント除去をするプログラムの裸の版を教えてください。
0949デフォルトの名無しさんNGNG
>>948

foreach(<>)
{
$data = $_;

$data =~ /\/\/.*$//g;
$data =~ /\/\*.*\*\///g;
}
0950デフォルトの名無しさんNGNG
>>949
Cつかってて思うのは、Perlの簡潔さと暗号っぽさだなぁ。
しかし文字列解析がめっちゃ強いのはやっぱり美味しい…。
0951デフォルトの名無しさんNGNG
>948
何を言っているのかよくわからん。プリプロセッサのことか?
0952初心者1NGNG
ごめんなさい間違いました。
Cのコメントを除去するプログラムを
Cの文法で教えてください。
0953初心者1 NGNG
裸の版ていうのは

while(まだ行がある)
if(コメント開始文字列がある)
除去除去

....?なんか違うかな・・・(-_-)
0954デフォルトの名無しさんNGNG
ある文字列の中で、複数文字列からなるデリミッタの位置を返す関数を考えてるん
だけど、単一文字デリミッタならいけるんだけど、複数文字列だと配列に順番に
シフトしながら入れていって比較を繰り返すという感じにするしかないんでしょうか?
もうちょっとエレガントで少ないコード行でできませんかね?
0955デフォルトの名無しさんNGNG
>>954
strstr()じゃだめ?
0956デフォルトの名無しさんNGNG
>952
コメント除去はスチャラカでいいなら

1行をバッファに読み込む
そのバッファを一文字づつ読んでいってホワイトスペース、/*の並びをコメント開始
としてコメント終了の*/まで読み飛ばす。

でいいでしょう。でも複数行にわたったコメントとか文字列中の/*を見つけたときに
きちんと対応させようとすると結構やっかいです。とりあえず裸と言うことだから
上の仕様で書いてみたら。

>954
strstr使ったらうまくいきそうに思えるけど。デリミタのポインタが返ってくるんじゃないの?
0957デフォルトの名無しさんNGNG
>>955
>>956
ライブラリでそういう関数が既にあるんですね。
自分で作ろうとしてました。どうもです。
0958ビル・ジョブスNGNG
>>957
ANSI/UNICODEに気を付けて。
0959デフォルトの名無しさんNGNG
ビルはいわゆるEUCとかEBCDICは気をつけなくていい環境なんだね(藁
0960デフォルトの名無しさんNGNG
なるほどねぇ
0961デフォルトの名無しさんNGNG
>>948
「除去」って言葉が曖昧なんだけど、
コメントだけを表示するプログラム作ってみた。
参考にシル。


#include <stdio.h>

#define OUT 0
#define IN 1

#define BUFSIZE 8

int buffer[BUFSIZE];
int buffer_ptr = 0;

int getch(void);
void ungetch(int);

- つづく -
0962デフォルトの名無しさんNGNG

- つづき -

int main(void){

    int c, d;
    int state = OUT;

    while((c = getch()) != EOF){

        if(state == IN && c == '*'){
            if((d = getch()) == '/'){
                putchar(c);
                putchar(d);
                putchar('\n');
                state = OUT;
                continue;
            }else{
                ungetch(d);
            }
        }

        if(state == OUT && c == '/'){
            if((d = getch()) == '*'){
                putchar(c);
                putchar(d);
                state = IN;
                continue;
            }else{
                ungetch(d);
            }
        }

        if(state == IN){
            putchar(c);
        }else{
            continue;
        }
    }

    return 0;
}

- つづく -
0963デフォルトの名無しさんNGNG
- つづき -

int getch(void){
    int c;

    if(buffer_ptr <= 0){
        c = getchar();
    }else{
        c = buffer[buffer_ptr];
        --buffer_ptr;
    }
    return c;
}

void ungetch(int c){
    if(buffer_ptr <= BUFSIZE - 1){
        buffer[buffer_ptr] = c;
        ++buffer_ptr;
    }else{
        fprintf(stderr, "Error: buffer full\n");
        exit(1);
    }
}

課題は自分でとくことに意味があると思うぞ。
0964デフォルトの名無しさんNGNG
新スレは?
0965961 - 963NGNG
コードがべたでスマソ。
間違ってたら誰かなおしといてクリ。

ところで次スレはどこ?
0966デフォルトの名無しさんNGNG
C言語なら、俺に聞いてくれませんか?==15;
名前: デフォルトの名無しさん
E-mail: sage
内容:
先人のお言葉。
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことなら全てわかるから、疑問な点があったら漏れに聞け。

だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。

・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html

・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/yfcbookshelf-22/250-3950205-1475419

K&Rで挫折するようなヤツはこれでも買え。
これでわからない、救いがたいヤツはあきらめろ。
・作ってわかるCプログラミング(アヒル本と呼べば通だ)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/qid%3D1005618315/250-3950205-1475419

・前スレ C言語なら、俺に聞け! <14>
http://pc.2ch.net/test/read.cgi/tech/1015286974/l50

0967デフォルトの名無しさんNGNG
> K&Rで挫折するようなヤツはこれでも買え。
> これでわからない、救いがたいヤツはあきらめろ。
> ・作ってわかるCプログラミング(アヒル本と呼べば通だ)
> http://dennou.gihyo.co.jp/books/void_c/
> http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/qid%3D1005618315/250-3950205-1475419

いいかげん、これはいらないだろ。
かわりに、こっち載せといたら。

推薦図書/必読書のためのスレッド PART2
http://pc.2ch.net/test/read.cgi/tech/1010312992/l50

毒が足りないか。(W
0968デフォルトの名無しさんNGNG
文字列定数に含まれた /* */ はスキップしないのか?
0969デフォルトの名無しさんNGNG
ぜんて、がいい
0970デフォルトの名無しさんNGNG
>C言語なら、俺に聞いてくれませんか?==15;

腰が低いのはイヤだな。なんとなく。
0971デフォルトの名無しさんNGNG
C言語なら私におまかせ♪+=15;

媚びてみるというのは?
0972デフォルトの名無しさんNGNG
>>971
ネカマっぽい 藁
0973デフォルトの名無しさんNGNG
C言語なら、他に聞け! <15>
0974デフォルトの名無しさんNGNG
>>973
(あかんやん・・・。> Σ(`ヾ)<
0975デフォルトの名無しさんNGNG
ハンドルされてない例外って何ですか?
0976デフォルトの名無しさんNGNG
>>975
catchされてない例外。
0977デフォルトの名無しさんNGNG
すいません・・・
catchってなんですか?
0978デフォルトの名無しさんNGNG
WindowsXPにVC++を使っているのですがC言語でHTMLのタグなどの他言語の命令文などはどうやって取得するのでしょうか?
たとえばHTMLなら<a href="URL">飛んでけ</a>や<br>
などというものなどの場合?
0979デフォルトの名無しさんNGNG
>>975
スレ違いだ。
http://pc.2ch.net/test/read.cgi/tech/1008311607/
でも嫁。
0980デフォルトの名無しさんNGNG
HTMLのタグの話しなら、
XMLやHTMLのタグを解釈するライブラリを探して使え。
それがなければ構文解析をするプログラムをCで書け。
0981デフォルトの名無しさんNGNG
>>978
parser を作る。
0982デフォルトの名無しさんNGNG
>>978
「IEコンポーネントを使い倒すスレ」ってのがあったな。
0983デフォルトの名無しさんNGNG
>>982
IEコンポーネントを使い倒すスレ
http://pc.2ch.net/test/read.cgi/tech/982930049/
0984デフォルトの名無しさんNGNG
>>978
取得した後に何をやるのかがわからなければなんともいえない。
0985978NGNG
IEコンポーネントを見てみます
わざわざありがとうございます
0986973NGNG
C言語だけなら、俺に聞け! <15>
C言語っぽく俺に聞け! <15>
C言語なら、俺が聞く! <15>
C言語なら、俺を見ろ! <15>
C言語から俺が逝く! <15>

そろそろ番号がきびしくないか。
0987デフォルトの名無しさんNGNG
そろそろ日下部はやめようぜ。
0988デフォルトの名無しさんNGNG
それにしても2週間でスレ一つ使うとはかなり人の多いスレですね。
0989デフォルトの名無しさんNGNG
漏れ的には Dennis Ritchie がいいな。
0990デフォルトの名無しさんNGNG
残り10になッても誰もスレ立てようとしないのが
このスレのいい加減さを表してていい(藁
0991俺に聞いてくれませんか?NGNG
>>990
失敗しましたがなにか?
0992デフォルトの名無しさんNGNG
プログラミング作法・ハーニンハン博士
( ;´Д`)
0993デフォルトの名無しさんNGNG
新スレ勃てたよ。

C言語なら、俺に聞け! <15>
http://pc.2ch.net/test/read.cgi/tech/1016519243/l50
0994デフォルトの名無しさんNGNG
>>993
おつかれー
0995デフォルトの名無しさんNGNG
わーいわーい、ぜんてだぜんて!
0996女性雑誌にも載ってるよ♪NGNG
http://www.kokorode.com/000000/
0997デフォルトの名無しさんNGNG

女性雑誌 (;´Д`) ハアハア
0998デフォルトの名無しさんNGNG
む
0999デフォルトの名無しさんNGNG
後1…
1000デフォルトの名無しさんNGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。