C言語なら、オレに聞け! <5>
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001ジョブス2世
NGNGC言語しか知らないが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
前スレ、関連スレは >>2 へ
0002ジョブス2世
NGNG関連スレ
・( ゚Д゚)ノ ギコ猫のプログラム相談室part5
http://piza.2ch.net/test/read.cgi?bbs=tech&key=980521175
・お兄ちゃんの宿題、私が答えるよ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=982853418
・VisualC++相談室 2
http://piza.2ch.net/test/read.cgi?bbs=tech&key=981630730
・C++Builder相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=969458279
・C++相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=980175292
・C#相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=977112364
・ネットワークプログラミング相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=970344582
過去スレ
・C言語なら、オレに聞け!
http://piza.2ch.net/tech/kako/967/967985026.html
・C言語なら、オレに聞け! <2>
http://piza.2ch.net/test/read.cgi?bbs=tech&key=979529893
・C言語なら、オレに聞け! <3>
http://piza.2ch.net/test/read.cgi?bbs=tech&key=989929288
・C言語なら、オレに聞け! <4>
http://piza.2ch.net/test/read.cgi?bbs=tech&key=992357382
0003デフォルトの名無しさん
NGNGなんだかほのぼのした。
CでString型を実装するにはどうしたらいいかな?
0004デフォルトの名無しさん
NGNG無理。
C++使え。
0005デフォルトの名無しさん
NGNGchar *string_alloc(size_t);
void string_free(char *);
char *string_assign(char *, const char *);
char *string_append(char *, const char *);
なんて感じで関数作れば?それ以上は無理。
0006デフォルトの名無しさん
NGNG検索しても中途半端なものしか見つからないので、
よろしくお願いします。
0007デフォルトで能無しさん
NGNGANSIってここっすよね?
CとC++の仕様書読みたいんですが、どこにあるかわかんないです。教えてください。
サーチしてもでてこないし・・・(涙)
0008デフォルトの名無しさん
NGNGこれ?C言語はわからない。245ドルって・・・
00097
NGNGだれか共同購入しませんか?
0010デフォルトの名無しさん
NGNGまあ、モドキでいいんだけどね。
ところで、ASCIIコードとかは A〜Z が連続であることが保証
されてるけど、これが保証されていない文字コードなんて
実際のところ世の中に存在するのかね?
0011デフォルトの名無しさん
NGNGtypedef struct
{
int a;
MIKAN b; //エラー
} RINGO;
typedef struct
{
int c;
...
} MIKAN;
このエラーが出ないようにする方法はありますか?
0012デフォルトの名無しさん
NGNG定義の順番逆にすれば?(大爆笑)
0013デフォルトの名無しさん
NGNGEBCDICは?
0014デフォルトの名無しさん
NGNGtypedef struct
{
int c;
} MIKAN;
typedef struct
{
int a;
MIKAN b; //エラーにならんぜ
} RINGO;
001510
NGNGhttp://www.pleasuresky.co.jp/images/ebcdic.gif
おふー
こんなコード形態があったとわ〜
教えてくれてありがとう
0016デフォルトの名無しさん
NGNGtypedef struct
{
int a;
MIKAN b; //エラー
} RINGO;
typedef struct
{
int c;
RINGO d;
} MIKAN;
このエラーが出ないようにする方法はありますか?
0017デフォルトの名無しさん
NGNG共同購入すると安くなるのかな?送料稼げる?近くじゃないと意味ないしね。
多分コピーしようってんだろうけど、それは犯罪だよ。
0018デフォルトの名無しさん
NGNGないね。
フツーそういう時はポインタにするんだけど。
もっと根本的な問題はまぁ置いとくとしてもね。
0019デフォルトの名無しさん
NGNGtypedef struct
{
int a;
struct _MIKAN b;
} RINGO;
typedef struct _MIKAN
{
int c;
...
} MIKAN;
0020デフォルトの名無しさん
NGNGコンパイルくらいしとけって。
0021デフォルトの名無しさん
NGNGほんとだ、だめか・・・。
002216
NGNGどうやらないようですね。あきらめます。ありがとうございました。
0023デフォルトの名無しさん
NGNGつーか、無限?
RINGO r;
r.b.d.b.d.b.d.b.d.b.d.b.d.b.d.b.d.b.d.b.d.a = 123;
とか?
0024デフォルトの名無しさん
NGNGそのような構造を無限マトリョーシカといいます。
00257
NGNGつうことでトモダチ募集!!
[email protected]
0026デフォルトの名無しさん
NGNGだから友達コピは犯罪だって。養子縁組するなら見逃されるかもしれないけどさ。
0027デフォルトの名無しさん
NGNG穴兄弟になればいいんじゃないか?
0028デフォルトの名無しさん
NGNG1.この宣言が成立したと仮定する。
sizeof( RINGO )は、いったいどうなるか(10点)
2.不完全型について述べよ(20点)
3.自己参照構造体について述べよ(20点)
4.相互参照する構造体について、その実現方法について述べよ(50点)
002916
NGNG実際には構造体のポインタとして使うのですが、
前方参照の問題なので、ポインタにしなくてもいいかと思って…。
MIKAN *b をvoidのポインタとして宣言して、キャストして解決してる
んですが、なんとなく気になったので質問させていただきました。
0030デフォルトの名無しさん
NGNGだから、ポインタだったらそんなことせんでもよかんべ。
本くらい読めよ。大抵の本には載ってると思うが。
0031デフォルトの名無しさん
NGNGうーむ、養子になってもアナログコピーマシンを使わないとダメ
みたいだな。まぁがんばれよ。
http://www.bunka.go.jp/8/2/VIII-2-C.html
00327
NGNG商用の際は特別に申告&追加料金払えとかパッと見て書いてないし>本家
つまり自分が2MBの文書を定価245�jで買って、赤の他人に(安く)再販するのはOKじゃないかと。
(そのあたりをメールで聞いてみた)
00337
NGNG0034デフォルトの名無しさん
NGNGそらよ。
typedef struct MIKAN *pMIKAN;
typedef struct
{
int a;
pMIKAN *b;
} RINGO;
typedef struct
{
int c;
RINGO d;
} MIKAN;
0035デフォルトの名無しさん
NGNGどんなのがでそうですか?
0036デフォルトの名無しさん
NGNGしかし、全くすごい発想だな。
メールで聞くだけハナクソくらいの救いはあるが。
0037デフォルトの名無しさん
NGNGせめて10倍ぐらいに。
00387>36
NGNG0039デフォルトの名無しさん
NGNGカーネルパラメータを変更して再コンパイル。
0040デフォルトの名無しさん
NGNGtimeGetTime()使え。
004137
NGNG0042だるだる
NGNG作ろうかと思いますが、これは一般的ですかね?
AI,ALとかを作ることに適している言語って
あるんですかね?(聞いたことがあるが忘れました)
0043デフォルトの名無しさん
NGNG16ではないが、合ってる?
> 1.この宣言が成立したと仮定する。
> sizeof( RINGO )は、いったいどうなるか(10点)
sizeof(RINGO) == sizeof(a) + sizeof(MIKAN)
正確にはパディングが入る可能性があるので
sizeof(RINGO) => sizeof(a) + sizeof(MIKAN)
> 2.不完全型について述べよ(20点)
定義されていない、または定義途中の型
> 3.自己参照構造体について述べよ(20点)
C-FAQ 1.14参照
http://www.catnet.ne.jp/kouno/c_faq/c1.html#0
> 4.相互参照する構造体について、その実現方法について述べよ(50点)
typedef struct _a_t a_t;
typedef struct _b_t b_t;
struct _a_t { b_t *b; };
struct _b_t { a_t *b; };
0044デフォルトの名無しさん
NGNGネタか?
そっち方面は門外漢なんで最近はどうか知らないが、前は
Prolog か LISP が定番だったけどな。
0045デフォルトの名無しさん
NGNGおもんない
0046デフォルトの名無しさん
NGNG_beginthreadex()で渡す、引数リストってどうやって
作成するんですか?
0047デフォルトの名無しさん
NGNGK&R読んだ?(大爆笑)
0048デフォルトの名無しさん
NGNG旧Perl板にでも帰れ。
0049K&Rって
NGNG0050デフォルトの名無しさん
NGNGhttp://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.8.5.html
超有名な「Cプログラミング診断室」より。
ここは一通り目を通しておこう
0051眠い…
NGNG> _beginthreadex()で渡す、引数リストってどうやって
> 作成するんですか?
struct hoge{
int para1;
int para2;
int para3;
};
foo(){
struct hoge hogehoge;
DWORD t_id;
_beginthreadex(NULL, 0, thread_func, (void*)&hogehoge, 0, &t_id);
}
unsigned thread_func(void *param){
struct hoge *p;
p = (struct hoge *)param;
}
0052デフォルトの名無しさん
NGNG_ 始まりはシステム予約などで使用される。
サンプルでも使用すべきでない。
0053デフォルトの名無しさん
NGNG#define _MYPROJ_H
:
:
:
#endif
も同じレベルで逝ってよしってことでよろしく
0054Q
NGNGVisual Studio6を使ってるんですが、MS-DOSプロンプトで
cl 〜.c
のように入力してもコンパイルできません。他のコンパイラでコンパイル
したものを実行することはできるのですが。
どなたか分かりますでしょうか。
0055デフォルトの名無しさん
NGNGpath
0056デフォルトの名無しさん
NGNGだから、どんなエラーが出るかくらい書けよ。
0057ジョル.ビブズ(偽者)
NGNGちょっと興味あり(はあと)
0059アイズ
NGNG登録、修正、削除、表示、検索が行えるように。
YYYY/MM/DD,HH:MM
月日、時刻、内容
ってかんじで。
ます、なにから考えればいいですかね?
0060>>59
NGNG0061デフォルトの名無しさん
NGNGプログラマー以外の職業への転職、もしくは就職
0062デフォルトの名無しさん
NGNG0063デフォルトの名無しさん
NGNG>>53
そうかな〜?
外に見えなきゃいいんじゃないのかな〜?
>>43
のは、見えてそうだけど。
0064デフォルトの名無しさん
NGNG53はUUIDを噛ませろって言ってんじゃねぇーの。
0065デフォルトの名無しさん
NGNG日付と時間をおさめる構造体
この構造体と予定を納める双方向リスト(を実現する構造体)
双方向リストから登録、修正、削除、表示、検索を行う関数
C++だといいのにね・・・
0066デフォルトの名無しさん
NGNG_ で始まる名前はやめろっていってるんじゃ?
0067デフォルトの名無しさん
NGNGスタイルについて疑問に思っていたので質問.
Cの構造体の宣言の仕方について自分がよくやるパターンで,
具体例を挙げると例えばCSVのトークナイザを作る時に
csv.h
typedef struct _CSV CSV;
CSV *csv_new(char *filename);
char *csv_getvalue(CSV *cp);
...
csv.c
#include "csv.h"
struct _CSV {
...
};
CSV *csv_new(char *filename)
{
...
}
みたいな感じにする.で、これを使うファイルからは,
#include "csv.h"
としてる.つまり,typedefとインターフェイスだけ外に見せるっていうやり方.
外部から構造体の中身について触る必要がない場合,いつもこういうやり方を
してるんだけど,これってなんていうか,まともなやり方?
知りたいのは,こういう場合構造体定義もヘッダに書くべきなのか,
上記のようなやり方がまかりとおるかどうかは処理系依存なのかどうかとか.
今まで見てきたソースだと,大抵構造体定義もヘッダに出してるから
どうなのかなーと思った.
一応LinuxでのgccとHP-UXのccではこう書けたんだけど.
0068デフォルトの名無しさん
NGNGユーザーによる構造体メンバへの直接アクセスを避けたい
場合とかでは普通のテクニックだと思います。
ハンドル指向(?)の徹底という意味で、
良いコーティングスタイル事だと思います。
0069デフォルトの名無しさん
NGNGほう、これ知らなかったよ。
参考にしとこう。
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNG厨房?
0072デフォルトの名無しさん
NGNGそんなところは無いようだが、どの変が処理系依存だと思ってるんだ?
0073出張あさはかマン
NGNGこんなとこを見つけたのですが
------------
ctype.h
------------
...
#define _U 01
#define _L 02
#define _C 040
...
#define isalpha(c) ((_ctype_+1)[(unsigned)(c)]&(_U|_L))
...
------------
ctype_.c
------------
#include ctypes.h
...
_CONST char _ctype_[1 + 256] = {
0,
_C,_C,_C,_C,_C,_C,_C,_C,
...
}
------------
と書いてあったんですが、
(_ctype_ + 1)[n]って、_ctype_[n + 1]と同意なのでしょうか?
もしそうだとして、unsignedなのに配列の大きさが[1 + 256]なのも
良くわかんないです・・・・
_ctypes_[0]は何につかうのだろ・・?
0074デフォルトの名無しさん
NGNG何かよいサンプルはありませんか。
0075デフォルトの名無しさん
NGNGEOF用
0076デフォルトの名無しさん
NGNG> unsignedなのに配列の大きさが[1 + 256]なのも
> 良くわかんないです・・・・
is系は0〜255までの文字とEOFの257種類を判定しなければいけない為
0078出張あさはかマン
NGNGすると(_ctype_-1)[n]は、やはり(_ctype_)[n-1]と
結果は同じになるということですね。
納得。
さんくすです。
007967
NGNGポインタを意識させるかどうかは最初迷ったけど,考えた結果どっちでも
いいような事だと分かったんだ.だから,標準ライブラリのFILE構造体の
扱いにならってこうしたんだ.それ以来このパターンではずっとこのやり方だよ.
処理系依存かもしれないと思ってた個所は先に書いた通り,構造体定義の場所に
ついて.>>74は暗に俺に向かって言ってるのかも知れないけど,言語とか
はっきりしないのでパスするね.
0080デフォルトの名無しさん
NGNGCの仕様をちゃんと理解した方がいいと思われ.
0081デフォルトの名無しさん
NGNGプログラム板のみんな気を引き締めろ!!!!!!!!!!!!
0082デフォルトの名無しさん
NGNG激しく同意
0083( ´∀`)さん
NGNGデータ数20万を0.6秒でソートできたよ!
qsort使ったら2.6秒くらい。
誰か ほめて!!
0084デフォルトの名無しさん
NGNG対象データは?
0085デフォルトの名無しさん
NGNGこれより速い?
http://www.mars.dti.ne.jp/~a-wada/qsortlib.html
0086ビル・ジョブス
NGNGどうせオンメモリーだろ!
件数増えるとメモリーへのロード時間がネックになるだろ!
オレ様の場合は、MapViewOfFile駆使して、
10万件だろうが、100万件だろうが、
ほぼ同じスピードでソートできるロジック
もってるぜ!
0087デフォルトの名無しさん
NGNGそれはスラッシングでは・・・
0088デフォルトの名無しさん
NGNGそれとも窓系ってそこまでヘボなの?
0089ビル・ジョブス
NGNG配慮が必要だ。
アーキテクチャーを味方に付けるのだよ。
お前らに言っても分からないと思うけど。
0090デフォルトの名無しさん
NGNG0091ビル・ジョブス
NGNG0092ビルは嫌いだがジョブズはまあいいか
NGNGしてから出直しな。
0093デフォルトの名無しさん
NGNGなぜにこーゆー口調の奴ってばドキュソてんこもりなの?
009588
NGNG確かにそんなマヌケで曖昧な意見言われてもわからん。
今更キャッシュラインサイズにあわせたストライピングなんて
ガイシュツもいい所の話をだしたら、流石に一同ズッこけるか
ら、面白いネタ期待してるよ。
0096ビル・ジョブス
NGNG迷惑なくらい遅いソフトがまかりとおるわけね。
仮想アドレスと仮想記憶って別物だよな。
仮想アドレスにアクセスした時にオブジェクトが
存在しないと、Page Faultするよな。
ここで仮想記憶が動くわけだ。
最初の1回目に動くのは当たり前だ!
お前らみたいに数10MBも一気にアロケートして
Faultしまくりおバカに、mmapを…などと言われたく
ないんだよ。
もーWIN32使わないでくれ!
死んでくれ!>>92
0097デフォルトの名無しさん
NGNGお馬鹿キャッシュなら仮想記憶もダメ→依存してるメモリマップもダメ
っていう図式ができる。
ビルの言ってることも間違いではない。口が悪いけど。
0098
NGNGVisual C++ のprofessional EditionとStandard Editionの違いを
教えてください。
009988
NGNG口が悪いとか何とかの以前の問題で間違ってるよ。
マッピングは仮想アドレス空間に一度invalid状態でファイル
全体を割り当て、ページフォルトをつかって実際の読み込みに
入るんだから。そうじゃなきゃどのタイミングで読み込むか
教えてくれ。だからこそ最初に「窓系ってそこまでヘボなの?」
って聞いたのだよ。
0100デフォルトの名無しさん
NGNG吠えてないで、自分の方式のほうが圧倒的に速い、という事
を定量的に実証して見せれば良いだけジャンか。なんでその
程度できん?
そもそもUNIXプログラマならmmap使った処理は一般的なもの
で、なにも特別な方法ではないのだよ。
#圧倒的に高速には88の理由からならんが。
010188
NGNGその通りっす。でかすぎるファイルの一部を弄るときなんかに多用します。
あと、極端に大域的にランダムアクセスになるような場合、小領域での"分
割リード"に比べれば有利です。
ただし、sorting のように全体をスパースする場合は....って一々言わな
くても分るよね。
010283@( ´∀`)さん
NGNGただのint
>>85
見たけどよく分からん!
>>86
もっと分からん!
オンメモリー?たぶん!
010383@( ´∀`)さん
NGNG#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define NELEM 10000
void mysort(int* pn, int nLen)
{
switch(nLen)
{
case 0:
case 1:
return;
case 2:
if(0){
case 3:
(pn[0] < pn[1]) || (pn[0]^=pn[1]^=pn[0]^=pn[1]);
(pn[1] < pn[2]) || (pn[1]^=pn[2]^=pn[1]^=pn[2]); }
(pn[0] < pn[1]) || (pn[0]^=pn[1]^=pn[0]^=pn[1]);
return;
default:
{
int* pnH = pn;
int n = nLen, nn;
int nPiv = *pn, nVal, nPos, nNumS, nNumL, nNumE;
nVal = pn[ nPos = nNumE = 1 ]; nNumS = nNumL = 0;
while(--n){
if(nVal < nPiv){
pn[nNumS++] = nVal; nVal = pn[++nPos]; continue;
}
if(nVal > nPiv){
pn[nn]^=nVal^=pn[nn = nLen-1-nNumL++]^=nVal; continue;
}
nNumE++; nVal = pn[++nPos];
}
pn += nNumS;
for(n = 0; n++ < nNumE; *pn++ = nPiv);
mysort(pn-nNumE-nNumS, nNumS);
mysort(pn, nNumL);
return;
}
}
}
int main()
{
int n, an[NELEM+1];
clock_t tStr, tFin;
srand(time(NULL));
for(n = 0; n < NELEM; an[n++] = rand());
tStr = clock();
mysort(an, NELEM);
tFin = clock();
printf("\n[time:%f]\n", (double)(tFin - tStr)/CLOCKS_PER_SEC);
return 0;
}
0104チト気を付けよう
NGNGあのー良くよんだほうがいいですよ。
ビルも一回目は…、って言ってるじゃん!
それはそうと、ビルジョブスって、このスレの
創設者じゃない?
だとすると、雲の上の人だよ。
0105デフォルトの名無しさん
NGNGどんなデータもソートできるように、比較をコールバックで行った
りmemcpy()的な方法で交換したりしている分、qsort()は不利かもし
れない。
その辺の条件そろえてなお速かったらほめてやるよ。
0106デフォルトの名無しさん
NGNGこの程度の関数を qsort() と比較してはいけません。
- 単なる int 配列のソートしかできない。
- ソート条件は固定。
- ソートする要素に重複する値が無いことを前提としている(重複す
る値があると nLen == 3のときに xor の結果として 0 で上書き
されてしまう)。
- ソート済みのデータを与えたときに、処理時間が最悪のケース
O(n^2) になってしまう。
- 再帰を使っているので、メモリ不足時のエラーハンドリングが難
しい。
汎用的に書かず、エラーハンドリングや最悪のケースを避けるため
の配慮もしなければ、そりゃ多少は速くなりますが、代償として実
用性を失うことになります。
あと mmap() 云々は、またちょっと別の話ですね。巨大なデータを
整列させる場合には、データの読み書き部分がクリティカルパスに
なることがあります。UNIX の場合、伝統的なファイル入力のシステ
ムコールは read() ですが、これを使うと
1. デバイスからデータを kernel 中のバッファキャッシュに読み込む
2. kernel からバッファキャッシュから read() を呼び出したプロセ
スのメモリ空間にデータをコピー
と 2 度のコピーが発生します。mmap() だとこれが 1 度で済むので、
メモリの使用効率も CPU 負荷も下がることが期待されます。
ただし、単純に read() を mmap() に書き換えたら速くなるという話
ではなく、性能を出すにはデータ構造やロジックに関して、注意深い設
計が必要です。ソートでは入出力の回数を少なくするため、いかにメモ
リアクセスを局所化するかが肝ですね。
0107デフォルトの名無しさん
NGNGなんでint決め打ちなのにxorbネんて使うかね.xor知ってよっぽどうれしかったのかな.
pivot選択少しくらい工夫しろよ.
0108デフォルトの名無しさん
NGNG渡すと、
A(code);
は問題ないのですが、
A(code | 1);
とすると仮引数と実引数が異なると警告が出るのですが
なぜでしょうか。|を使うと型が変更されるのでしょうか?
0109デフォルトの名無しさん
NGNG汎整数拡張について調べてみて。
0110デフォルトの名無しさん
NGNG1はintだから。
0111108
NGNG早い反応アリガトウございます。
0112デフォルトの名無しさん
NGNG0113君もチト気をつけよう
NGNGどう考えたってファイルのマッピングの仕組みをビルが勘違いしていたのは間違いないぞ。
ていうかいちいち「!」つけるなよ。まるっきりビルだぞ(w
#ああ、こういったときのために sage 以下が欲しいなあ。
0114デフォルトの名無しさん
NGNG0115デフォルトの名無しさん
NGNGなわけねーだろ.
0116( ´∀`)さん
NGNG予想どうり負けたじゃん!
ライブラリ関数には勝てないってことか…
そんなqsortの中身を見てみたいんだけど、
見れないのかな?
0117デフォルトの名無しさん
NGNG見たけりゃ見れるさ.
0118108
NGNGどうしてなんですか。教えてください。
0119ビル・ジョブス
NGNGオレは勘違いもしていないし、間違ってもいない。
コアな部分は作った経験が無いと分からないんだよな!
上記2名はVRとかSHでいいから、簡単なボードを
自作でもして、仮想記憶コードを作ってみろよ!
まぁ、多重仮想記憶モードのASIDの使い方で
頭がハゲるだろうな。
偉そうこいといて、無理だって言うなら、
即刻コンピューターやめな!このタコが!
0120君もチト気をつけよう
NGNGまあそのくらいにしとき。
少なくとも俺はx86とMIPSでの仮想記憶コードの作成
経験があるよ。
0121デフォルトの名無しさん
NGNGそんな簡単なことで威張るなよ。馬鹿馬鹿しい。
0122デフォルトの名無しさん
NGNGVC++ 使ってるなら CRT ソースコードをインストールしましょう。QSORT.C という
名前で qsort のソースがインストールされます。ソース非公開のライブラリを使っ
ている場合には、フリーの UNIX のソースコードを参照するのも手です。
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/stdlib/qsort.c
>>119
騙りかな? なんにせよ、技術的な中身がない書き込みは sage で頼みます。
ただでさえ夏休みに入って、板のレベル下がってるんですから。
0123ビル・ジョブス
NGNGどうせ、HALかOALでエクセプションハンドリングを
ちょこっと書いただけだろ。
そりゃ仮想記憶コードとは言わないぜ!
あっ、明日、渋谷でデートだ!A.I.観るんだった!
お風呂はいろーっと。
もう、2chつまんねーなー…
0124デフォルトの名無しさん
NGNGビルってこんなにしょうもない奴だったの?
0125>>124
NGNG彼女居ないからって僻むなよ…
まず痩せろよ!デブ!
0126デフォルトの名無しさん
NGNGlinuxの仮想記憶部分見れば一発じゃん。
もうすこし面白い煽りしてくれよ。つーことでさげ。
0127君もチト気をつけよう
NGNGこれは放置でしょう。
もう既に技術ネタでは勝てないことを自分でアピールしてるくらいだから。
普段なら空白下げで隙間空けてから仕切り直すところだけど、この時期は
無駄だろうなあ。
#余談だが太ってるくらいで彼女できない奴なんているのか?
#俺も太めだが。
0129デフォルトの名無しさん
NGNGファイルの大きさ(バイト数)を出力するプログラムって
どうやって作るんですか?
0130デフォルトの名無しさん
NGNG0131デフォルトの名無しさん
NGNG「is〜」関数(マクロ)について教えて下さい。
例えば、isdigit 関数なのですが、
ヘッダ ctype.h に次のように定義されています。
extern const unsigned char _ctype[];
#define _DGT_P 0x4 /* digit */
#define isdigit(c) ((_ctype[(c)+1] & _DGT_P) != 0)
これでなぜ (c) が数字かどうか判定できるのか、いまいち理解できません。
・_ctype[] とは何か? この外部変数の実態定義がどこにもありません
・_ctype[(c)+1] とは、具体的に何か?
・なぜ 4 とビットANDをとるだけで数字かどうか判定できるのか?
他の is〜関数も似たような定義になっています。
このコンパイラは LSI C-86 Ver.3.30 試食版です。
よろしくお願いします。
0132デフォルトの名無しさん
NGNGのことからもわかる通り、ライブラリ中にあります。要するに
各キャラクタごとに予め種類分けしたテーブルを参照する訳で
す(単純!)。and を取るのは、各エントリの各ビットが其々の
種類に対応している、というわけです。
0133デフォルトの名無しさん
NGNG>>73-78 も参考にすべし。
0134デフォルトの名無しさん
NGNG1. プログラムを書いて
2. コンパイルして、
3. 実行する.
だけなんだけど、システム依存だから何でやりたいのか書けよ.
0135129
NGNG使うのは分るんだけど。。。
0136129
NGNGレス有難う。
パソコンでやりたいんだけど。。。
0137デフォルトの名無しさん
NGNG言語や環境がわからないと答えようも無いな・・・
ハッ! (ゴゴゴゴゴ) 新手の荒らしかッ!
0138129
NGNGごめん。。。嵐じゃないです。
c言語です。あと環境はウィンドウズ98です。
0139129
NGNG怒ったんすか?なにぶん初心者なもんで・・
ゴメンナサイ。
0140デフォルトの名無しさん
NGNG0141129
NGNGとか言ううやつです。。。
開発環境
PC-AT互換機にてVisualC++ Ver6.0+旧Ver
だそうです。
0143デフォルトの名無しさん
NGNGなんだか分からんが、fopen()、fseek()してftell()で調べるのが
どこでも動いていんじゃないかな。パフォーマンスは悪いが。
0144デフォルトの名無しさん
NGNGええ?なんで?ソースに書いてあるんじゃないの?
もしないなら、プログラム書いて配列先頭から順番に
出力してみたら?
0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNG0147デフォルトの名無しさん
NGNG0148デフォルトの名無しさん
NGNGソースはなかったと思う。
ライブラリを逆汗するという方法もある。(藁
0149デフォルトの名無しさん
NGNGenumって無条件にintになるじゃないですか?(あってる?)
それをcharとか割り当てサイズを変えたいのですが。。。
あくまでも、enumにこだわっています。
0150デフォルトの名無しさん
NGNG-fshort-enums が使えるんじゃない?(大爆笑)
0151デフォルトの名無しさん
NGNGこういうふうに書きてぇ〜>ANSI C改革!
typedef char enum {
hoge,
hage,
hige
}hhh;
0153デフォルトの名無しさん
NGNG意味不明な指摘だな...
>>151
enumはintと同じ扱いだから例えば255以下が保証できるなら勝手にchar配列
にとりゃいいんだよ。キャストしないとwarningはでるだろうけどね.
0154ジョル.ビブズ(偽者)
NGNG自分は、C言語を一応使えるようになった(と、思っている)レベルなんですが
さまざまな長さの行を持つテキストファイルを1行づつreadしてmallocした領域
に放り込んで、各行をポインタのチェーンで結んでやって行を移動できるようにしたい
んですが(テキストエディタの基本構造を作成してるんです)小規模なファイルなら
問題なく動作するんですが、極端に大きいファイルだと使い物にならないくらいに遅い
んですが、これを回避する方法はあるのでしょうか?
0155デフォルトの名無しさん
NGNG0156デフォルトの名無しさん
NGNGそのURLがあったんで意味不明なんだが、C++を使うというのは
正しい指摘だな.
operator intとかoperator =を使えば少しおもしろいかもな.
0157デフォルトの名無しさん
NGNGくらいか。
0158ジョル.ビブズ(偽者)
NGNGで、思いついたのは巨大なファイルの一部だけをメモリに乗せておいて
メモリの範囲外を参照されたときにファイルを読み直しするように
すればOKか?と思ったのですがテキストエディタを作った事のある
方にお聞きしたいんですが「考え方」として合っていますか?
0159デフォルトの名無しさん
NGNGUNIX系なら何も考えないとそうなってるんだが.
0160ジョル.ビブズ(偽者)
NGNGあっそうか!
そうですよね!うーん自分であれこれ考えるより
素直に仮想記憶にお任せするしかないのかなあ?
0161デフォルトの名無しさん
NGNG大きいってどのくらいのファイル?
ただ単にプログラムがしょぼくて処理が遅くなってるだけでは?
0162デフォルトの名無しさん
NGNG極端っていうわけだから実メモリの数百倍以上じゃないか?
そうやって諦めちゃうから、メモリばっかり食う
アプリが出来ちゃうんだよね。
mallocは、システムコールと言えども、結構時間かかるから
頻繁に行うのばダメです。
行の先頭のファイル位置だけを、メモリブロックに保存。
編集した行だけをメモリブロックに、もしそれが足りないなら
一時ファイルに書き出しておく・・
最後に保存するときに、全ての順番を整えます・・
0164デフォルトの名無しさん
NGNGブレークアドレスとかって知らんか?
0165デフォルトの名無しさん
NGNGここらでSTLに挫折した、全体の95%相当のプログラマが
不買運動を起こし、消滅します。
ありがとうC言語!そしてC++さようなら!(^_^)また会えるといいね!
http://piza.2ch.net/test/read.cgi?bbs=tech&key=995820118&ls=100
0166デフォルトの名無しさん
NGNG板違いだが反応してやろう。
STLが分からなければ、自分で同様な動作をする
クラステンプレートを設計してみな。listあたりが楽、
一通り出来たらSTLと動作を比較して、違いをソース
レベルで検証する。さすればSTLに対する理解がドーン
と深まる。
0167デフォルトの名無しさん
NGNGグラフィカルにみてみたい。コンソールでの知識しかないから、VCコンパ
イラのVisualな部分に頼れない。DOS窓で何とかならないものか?
0168デフォルトの名無しさん
NGNGmainからのプログラムでないとわからん、つうのならJavaが楽なんだけど
0169デフォルトの名無しさん
NGNGください。自分ではよくわからないのでお願いします。
自分でやれなどのレスはご遠慮します。宿題は自分でやれってのも
ご遠慮ください。まともな返答以外はレスはいりません。
0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNG「宿題は自分でやれ」以上にまともな返答はこの板にはないYO!(藁
0172デフォルトの名無しさん
NGNG説明をしろなどの返事はご遠慮します。営業なんだから営業やれってのもご遠慮ください。
色よい返答以外はいりません。
こんな営業が来たら蹴り返します。
0173デフォルトの名無しさん
NGNGつーかそんなやつ生かして返さないYO!
0174デフォルトの名無しさん
NGNGNumerical Recipes
0176デフォルトの名無しさん
NGNGオナーニは一日に何回するんだ?
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
NGNGaX^3+bX^2+cX+d=0
を解くプログラムで
a=0の時の場合訳を考えろよ。
普通なら2次方程式の解を解くプログラムに振り分けるわな。
0181174
NGNGアマゾンとかあんまり内容が書いてなくて買うのが不安なんですが。
学校の図書館にも置いてなかったし。
0182176
NGNG具体的にどうやってやるか方法を掲載して在る所教えて。
0183デフォルトの名無しさん
NGNG少ないな.
0184ビル・ジョブス
NGNG2ch出禁だな!ターコ!
でも仮想記憶のコードはお前らンコ以下のガキ
にはレベルが合わないよな。オレが悪かったよ。
さーて、そんな方程式簡単に解けるだろ!
マスマティカとか使えよ。
0185デフォルトの名無しさん
NGNG0186デフォルトの名無しさん
NGNG0187175
NGNGhttp://www.nr.com/
http://www.ulib.org/webRoot/Books/Numerical_Recipes/bookcpdf.html
とか見れば大体内容がわかるかも.
ちなみに原書と日本語訳では内容が若干異なるので注意.
概ね以下の構成でいろんな分野のアルゴリズムを解説してある.
1.アルゴリズム解説
2.ソースリスト提示
3.参考文献
図書館に買ってもらえば?
0188
NGNG俺的には理解不能だし、いらない。
0189デフォルトの名無しさん
NGNGあればあったで便利な機能だよ。
いちいち定数に自分で数字を振りたくないときとか。
0190デフォルトの名無しさん
NGNGC-FAQ的話題だけど、
シンボルの列挙は記述が楽。デバッガでシンボル名が見える。
列挙使わないとすると、
#define hage 0
#define mage 1
#define sage 2
とか書いていくの?
これでhageを1に変更したい場合とか、
全部書き換えなきゃならないじゃん。
(perlやsedとかで自動生成する、みたいな反論は無しにしてね。)
0191デフォルトの名無しさん
NGNGenum {hage, mage, sage};
0192デフォルトの名無しさん
NGNG「無くても書けるがあった方が便利」
なシロモノだろ<列挙体
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNGC++ならばこれが重要になってくる。
0195デフォルトの名無しさん
NGNG同意。
加えて enum だと switch - case に漏れが無いかを、コンパイラや lint で
チェックできるのも便利かな。
0196デフォルトの名無しさん
NGNG実社会でホザく前にここでお勉強できてよかったね・・・
0197デフォルトの名無しさん
NGNG黒い境界が出るのはなんとかならないかな?あと、中身を塗りつぶさない方法も
わからない!四角形だったらCPenクラス使って線引くだけでいいんだけど、円は
かなり厳しい!まさか円の方程式使って一点一点描画するわけにもいかないし。
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNGWideCharToMultiByteあたりで変換すればよし
0200デフォルトの名無しさん
NGNGうそでしょ?
0201デフォルトの名無しさん
NGNGやつは危険すぎます。
いくらジョブズでも、いまさら8進数表記を
無くす訳にはいかなでしょうから、
せめて、なぜ、2進数表記すらないC言語で、
8進数が、しかもあんな危険な表記方法で
実装されているのか、理由を教えてください。
納得の行く理由があるのなら
多少は腹の虫も治まるかも知れないので。
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG8進数使わなきゃイーだろ。
0204デフォルトの名無しさん
NGNG0205shige
NGNG/ / / |
/ / / / / |
| | | / / / フ |
| | | | | / τ |
| | | | | |/_ ─- τ |
| | | | | イ (。@)ヽ ノ /⌒ヽ ∠___
|| | | |ノ| x ー─ ノ //^) | ∠___
| | | |ノ | X _( /__ノ__ノ ∠_____
| | | (| X |
| | | ヽ X |
| | | 冫ーヽ X |
| | | 冫 x|
)| | /⌒ ─────-
| | /
| | /⌒ モグリの私がこんなことを言うのも何だがね、アセンブラの知識をひけらかし、
| | __/⌒ 厨房に信仰され悦に入っているジジイと、VBで糞ツールをつくってばらまく厨房なんざ
私たちRubyユーザから見ればどちらも同じ様な物だがね
まあ助かりたいと言うなら一千万頂きますよ、それで助かるんだ安いもんでしょう?
企業の一千万なんて軽いもんでしょう、だが君らには二千万払ってもらうがね
0206デフォルトの名無しさん
NGNG{
    char szMoji[256] = "Hello,world!";
    return szMoji;
}
はエラーにってしまいますがアドレスszMojiを返したい場合にはどうすればいいのでしょうか。
やりたい事は解って頂けると思いますが・・・・
0207206
NGNG○はエラーになってしまいますが
0208デフォルトの名無しさん
NGNGローカル変数へのポインタを返してはいけない。
0209デフォルトの名無しさん
NGNG{
return "Hello,world!";
}
0210デフォルトの名無しさん
NGNGそんなことしても、なんも面白くないと思うが
せめて
const char* ReturnMoji(){
const static char* szMoji = "Hello,world!";
return szMoji;
}
0211206
NGNGグローバル変数を使うところでした。
ありがとうございました。
0212デフォルトの名無しさん
NGNGその前に210より209に注目されたし。
0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNGローカルでもstaticならokだろ、ゴルァ.
0215デフォルトの名無しさん
NGNG>const static char* szMoji = "Hello,world!";
staticにする意味無し
static const char szMoji[] = "Hello,world!";
なら意味もあるが
0216デフォルトの名無しさん
NGNG一からやり直した方がいいと思われ.
0217デフォルトの名無しさん
NGNGなぜに??
0218デフォルトの名無しさん
NGNGやり直したほうがいいのは210=212。
209のようなコード書いて、コードをレビューする人間に
つっこまれたことは俺もある。
0219デフォルトの名無しさん
NGNG逝ってきます。。
0220shige
NGNG0221デフォルトの名無しさん
NGNGなぜに??
0222ジョル.ビブズ(偽者)
NGNGファンだったのにぃ(めそめそ)
0223無能な姦理人@Shiri-Q
NGNG□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□
続きはコチラです
http://www.geocities.com/entry_k/main/main01.html
0224デフォルトの名無しさん
NGNGと
static const char szMoji[] = "Hello,world!";
の違いってなんですか?
前者は「静的なポインタ変数」が変更不可能
後者は「変更不可能な文字配列=文字列リテラル」が静的
であってます?
0225デフォルトの名無しさん
NGNGわざわざ静的なポインタにいれて値を返しているから無意味
ポインタにstaticが無くても"Hello,world!"が静的に確保されるので
一時的なポインタで良いものにstaticを付ける必要はない
0226デフォルトの名無しさん
NGNGなるほど、納得
Cのコードが読めていないのかと思った。ロジックでしたか。
0227デフォルトの名無しさん
NGNG結論として、 >>206 のような「用途」には、 >>209 の方法がよいということね。
>アドレスszMojiを返したい場合にはどうすればいいのでしょうか
こういう、アドレスを〜 という書き方をしているせいで、static
云々の話になってしまったのかもしれないね。
0228デフォルトの名無しさん
NGNG198 ありがとうございました
0229デフォルトの名無しさん
NGNG来てもいいけど、今度は論理で勝負して欲しいもんだな。
定量評価せい、といわれても無視する上、匿名版でプライベート
自慢する寒さに気付かないようでは、単なるスレ上の障害物だ。
0230デフォルトの名無しさん
NGNGfputs を無限ループ内に記述し実行した場合、最終的にどうなってしまうのですか?
(実行環境は Windows98のDOS窓とした場合)
1.「ディスクがいっぱいです〜」と Windows からメッセージが出る。
2.ブルースクリーンになる。
3.ブルースクリーンにならずハングアップする。
4.プログラムは異常終了するが、Windows には影響なし。
5.その他。
経験された事のある方いましたら教えて下さい。
先日、setjmp と longjmp の勉強をしていて、似たような状況になりました。
setjmp のある関数がリターンした後、longjmp をすると暴走する、とあったので、
ためしにやってみたのです。
longjmp の記述がある関数が無限ループになったらしく、そこに printf があって、
それをファイルにリダイレクトさせて実行していました。
ハードディスクがカリカリと音を立てて止まりません。ヤバイと思いDOS窓を強制終了させました。
で、300MBのテキストファイルが出来上がりました(笑)。
0231デフォルトの名無しさん
NGNG自分で試せ、ぼけっ。
0232デフォルトの名無しさん
NGNGあと立方根とかも?
0233デフォルトの名無しさん
NGNGy = sqrtf(x);
y = powf(x, 1/3.0f);
0234デフォルトの名無しさん
NGNGなぜにextern?
0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNG0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNG本当?
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNGそうは言っても、公開されているCの標準ライブラリの実装はほとんど
アルゴリズム集って言ってもいいくらい実装が同じだよね。
0242デフォルトの名無しさん
NGNGその名のとおり、C Standard Library内部の実装の解説本で、
K&Rと同じくらい有名な本。
読んでない人は読むべし本。
0243デフォルトの名無しさん
NGNGそりゃ元が同じだからじゃねーのか?
別に実装方法が決まってるわけじゃない。ま、的外れなだけで言いたいことは分かるが。
0244ななし
NGNG0245デフォルトの名無しさん
NGNGA と I です。
引数を渡すと A と I の文字コードを足した数が返されます。
つーかネタであげんなや。まじで。
0246デフォルトの名無しさん
NGNGコプロに値を送るだけなので高速化しようがない
四則演算一回やるのと同じで、
値が決め打ちでもない限りアルゴリズムもへったくれもない
0247>>244
NGNG0248デフォルトの名無しさん
NGNGコプロってフツーpowは持ってなくない?
0249デフォルトの名無しさん
NGNGなんで itoa ってあるんだろ?
使うやつなんているの?
現役の人に聞きたいです。
0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNG元が同じだからじゃない。
Cの標準ライブラリはアルゴリズムとして定着しているからだよ。
0252251
NGNG0253デフォルトの名無しさん
NGNGANSI X3.159-1989 のCには少なくともそんな関数ないぞ?
0254デフォルトの名無しさん
NGNG調べても結局わからなかったので・・・
ある、インタプリタ(後でコンパイラにする予定)を作っているんですが、
その言語にDLLをロードする関数をいれたいんです。
それで、その関数を使うために、
そのDLLの関数の引数、返される値の型情報を
動的に取り出すにはどうしたらいいんでしょう?
どなたかわかる方いらっしゃいましたら、
どうかご教授おねがいします。m( _ _ )m
0255デフォルトの名無しさん
NGNG無理です。普通の DLL にはそもそもその情報が含まれていません。
0256249
NGNGなるほど(w
>253
なんだ、ANSIで定義されてなかったのか・・
atoiあるからてっきり。
おれが使ってんのはVC。
調べたらBCCもあった。
でもどちらにしろ意味ないね(w
0257254
NGNGということは一つのDLLごとに
そのDLLのための構造体などを処理系側で
用意しないといけないということですか?・・・
0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNGCOMにすれば?
0260デフォルトの名無しさん
NGNGatokの名前の意味に始めて気がついたよ
0261254
NGNGえっと、COMがよくわからないんですが、
DLLってCOMが必ず含まれているんですか?
(なんか表現変ですね・・・)
0262デフォルトの名無しさん
NGNG阿波・徳島の略です。
0263デフォルトの名無しさん
NGNG昔「あとく」か「あとき」とかで口論した覚えがある(藁
0264デフォルトの名無しさん
NGNGCと関係なくてスマソ
0265デフォルトの名無しさん
NGNGあの〜、>>262はマジレスなんですが…
0266デフォルトの名無しさん
NGNGAscii To 漢字 じゃないの?
マジレスと言いつつネタだったらすまんが
0267デフォルトの名無しさん
NGNG公式だけど、これは後付。元はAscii to Kanaと阿波徳島のダブルミーニング。
0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNGint main(void)
{
printf("Hello World!\n");
return 0;
}
を実行したら・・・・
-------------------構成: ConHell - Win32 Debug--------------------
コンパイル中...
コマンド ラインのエラー D2016 : コマンド ライン オプション '/ZI' と '/O1' は同時に指定できません
cl.exe の実行エラー
ブラウザ データベースを作成中...
ConHell.exe - エラー 1、警告 0
が出て,実行でません! プロジェクトの設定を変えたりしているのですが、
よく分かりません。解決方法教えてください。 お願いします。
0270デフォルトの名無しさん
NGNGコンソールアプリケーションで作ったか?
0271あああ
NGNG無かったら作ろうと思うんだけどどう思う?
0272デフォルトの名無しさん
NGNGフリーで商用利用もおっけーな事を保証してくれるなら作ってくれ
0273デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNGコンソールアプリケーションでつくりました。
1.新規作成のプロジェクトでWin32ConsoleApplicationを選択。
2.空のプロジェクトでリターン。
3.新規作成でC++ソースファイルにて、フェイル名を入力して。
です。
なにか、問題があるのですか? それとも、設定方法とか、よろしくお願いします。
0275デフォルトの名無しさん
NGNG何故エラーメッセージもヘルプも読まない?
>-------------------構成: ConHell - Win32 Debug--------------------
>コマンド ラインのエラー D2016 : コマンド ライン オプション '/ZI' と '/O1' は同時に指定できません
debugビルドなのに最適化オプションが指定されてるように見えるが。
0276あああ
NGNG流石に会社のライブラリを公開しようとは思わないけどさ。
ニーズはあるでしょ?
0277デフォルトの名無しさん
NGNGここに作ってくれよ。いいものならみんな協力してくれるぞ。
0278デフォルトの名無しさん
NGNGF1でエラーメッセージをみたんだけど・・・・
で、最適化オプションを無効とかにすると、下記のエラーメッセージがでるんです。
なにか、インストール時にしくじったのでしょうか? 「・・・・DLLは現在使用されています」とかいうので、無視してインストールしちゃったんですけど!
--------------------構成: ConHell - Win32 Debug--------------------
コンパイル中...
ConHello.cpp
リンク中...
LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
Debug/ConHell.exe : fatal error LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー
ConHell.exe - エラー 2、警告 0
お願いします。
0279なんでやねん
NGNG>外部シンボル "_WinMain@16" は未解決です
ってコンソールアプリじゃないやん!
02801
NGNG本当に。笑えた。
0281デフォルトの名無しさん
NGNG"Win32"Consoleにしたからじゃない?
ソースを"MSDEVで開く"で開いて、そのままコンパイルしてみ。
0282デフォルトの名無しさん
NGNG申し訳ありませんでした・・・・m(__)m
まじめに、"Win32"Console”でソースプログラムを作っておりました・・・・
全て、解決しました!
先ほど,VC++あんしん入門とC++デバック技術の本(計6699円)を購入してまいりました。
こんごは、上記なような、おろかな質問をしないよう、精進してまいりたいとおもいます。
今後とも、宜しくお願い申し上げます。 Mr.℃氏ロート
0283デフォルトの名無しさん
NGNG0284デフォルトの名無しさん
NGNG0285デフォルトの名無しさん
NGNG0286デフォルトの名無しさん
NGNG告訴なんてされると嫌だな。
0287デフォルトの名無しさん
NGNGchar *cp1, /*調べられる文字列*/
char *cp2, /*置き換えられる文字列*/
char *cp3, /*置き換える文字列*/
char *cp4) /*結果を格納する領域*/
{
long n=strlen(cp1);
long m=strlen(cp2);
for(; n>=m; n--,*cp4++=*cp1++) {
if(memcmp(cp1,cp2,m)==0) {
strcpy(cp3,cp4);
strcpy(cp4+strlen(cp3),cp3+m);
}
}
}
どこがまずい?
0288デフォルトの名無しさん
NGNGぱっと見た限りだと *cp4++=*cp1++ の場所がまずそう
0289デフォルトの名無しさん
NGNGstrcpy(cp4+strlen(cp3),cp3+m);
何がしたいのか説明してくれ(;´Д`)
0290デフォルトの名無しさん
NGNGこういうゲームは大好きだな。
0291デフォルトの名無しさん
NGNGCだとこういう無国籍かつ意味不明なコード
良く見るからやだね〜ったら、やだね〜
0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNGperlよりマシだけど…
0294デフォルトの名無しさん
NGNGコメント等から予想できるコードと、実際のコード違いが、
あまりにも大き過ぎるので、何をやりたいか、全く把握できません。
取り敢えず、与える文字列(cp1,cp2,cp3)と、それに応じて、
変化する文字列(cp3,cp4)の結果の例をいくつか上げて下さい。
0295こうか?
NGNGif(memcmp(cp1,cp2,m)==0) {
strcpy(cp4,cp3);
cp1 += m; /*strlen(cp2);*/
cp4 += strlen(cp3);
}
}
02962chの夏、厨房の夏
NGNG*cp4++=*cp1++ はヤバイ
ttp://www.catnet.ne.jp/kouno/c_faq/c3.html#0
を熟読せよ。
コンパイラを信じて可読性のあるコードにしたほうが
デバッグが楽。
*cp4++=*cp1++ は分けて表示したほうが吉。
0297デフォルトの名無しさん
NGNGC FAQよんだけど「*cp4++=*cp1++ はヤバイ」の理由がわかりません。
解説お願いします。
0298デフォルトの名無しさん
NGNGなにか勘違いしてると思われ。
0299デフォルトの名無しさん
NGNG逆に質問
なぜヤバくないと思うのかを教えて
0300デフォルトの名無しさん
NGNG>>296 のページに「*a++=*b++」って書き方がまずいって書いてあるんでしょ?
でも、自分はどこにそれが書いてあるのかわかりません。
どこが該当個所か教えてください。
0301デフォルトの名無しさん
NGNG演算順序気にしてるんだろ
つーか、それよりもそんなところにあってあふれねーか?
って方が気になるがな。
0302デフォルトの名無しさん
NGNG>>296 は知ったかしてるだけ。
0303デフォルトの名無しさん
NGNGchar *strcpy(char s1, const s2)
{
while( *s1++ = *s2++)
;
return s2;
}
0304デフォルトの名無しさん
NGNG間違えた
> char *strcpy(char s1, const s2)
char *strcpy(char *s1, const char *s2)
0305煽りのようだがマジレス
NGNGつーかコードの文字列そのものが資料に見当たらないってだけで
思考が止まってしまう野郎にプログラミングの資格なし。
つーか人工、自然言語問わず語学全般絶対無理。
おとなしくドカチンかライン工でもしてるのが吉。
0306デフォルトの名無しさん
NGNGドカチンでもいいから、どこが該当個所か教えてよ。ねえ?
0307デフォルトの名無しさん
NGNGだーかーらー、a++=b++なんて書き方すると
処理の順序が直感的にわかりにくいだろ?
そんなバグの温床になるような書き方するなつってんだよ!ヴォケ!
0308デフォルトの名無しさん
NGNG結局、思わせぶりに持ち出したC FAQは、なんの関係も無かった
わけね。トホホ
0309デフォルトの名無しさん
NGNGそりゃあんたがバカなだけだ。
0310デフォルトの名無しさん
NGNG結局わかりにくいってだけなの?
問題ないんだよね?
0311デフォルトの名無しさん
NGNG好き嫌いはあるだろうけど、Cだとイデオムだと思う。
こういう書き方をヘタってのは言い過ぎだと思うよ。
0312デフォルトの名無しさん
NGNG0313デフォルトの名無しさん
NGNGわかり易い=技術が低いとか思ってないか?
人をバカ呼ばわりするヒマあったらてめぇのソースに
コメントでも付けてろ、この腐れ厨房が。逝ってよし!
0314デフォルトの名無しさん
NGNGほっときゃいーじゃん。これ以上いじめてもかわいそうだよ。
0315307=313
NGNGhttp://www.pro.or.jp/~fuji/mybooks/cdiag/index.html#appendix
0316ソープ
NGNG0317デフォルトの名無しさん
NGNGで、そこのリンク先には「わかりやすいプログラムを書こう」とは言っているが
「*a++ = *b++;はわかりにくい」とは言っていないね。
*a++ = *b++;はCでは慣用句であり、無理に書く必要はないが、
知っといた方がいい。
0318デフォルトの名無しさん
NGNGmemcpy
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
これはvoid *で受けてるからか
strcpy
while( *cp++ = *src++ )
;
でした
0319デフォルトの名無しさん
NGNG別物だぜ、>>307
0320デフォルトの名無しさん
NGNG0321デフォルトの名無しさん
NGNGないよ。
0322デフォルトの名無しさん
NGNG0323デフォルトの名無しさん
NGNG0324デフォルトの名無しさん
NGNG0325デフォルトの名無しさん
NGNG試してないからミスってるかもしれんが、こんなところだろう。
void lreplace ( char *cp1, char *cp2, char *cp3, char *cp4 ) {
size_t l, m, n ;
n = strlen ( cp1 ) + 1 ;
m = strlen ( cp2 ) ;
l = strlen ( cp3 ) ;
if ( m ) {
for ( ; n > m ; n--, *cp4++ = *cp1++ ) {
if ( memcmp ( cp1, cp2, m ) == 0 ) {
memcpy ( cp4, cp3, l ) ;
n -= m ;
cp1 += m ;
cp4 += l ; } } }
memcpy ( cp4, cp1, n ) ; }
0326デフォルトの名無しさん
NGNGmain()
{
int a[3], s[3], i;
int *pa, *ps;
pa = a;
ps = s;
for(i = 0;i < 3;i++,pa++,ps++){
*(pa + i) = (i + 1) * 10;
*ps = *pa;
printf("%d,", *ps);
}
printf("%d", *ps);
}
こんなプログラムを作りました。
最後のprintfは配列の大きさを超えているのでおかしなプログラムと
いうところまではいいのですが、これを実行すると
10、20、30、10と出てきます。
ポインタに代入する値をいろいろ変えてみたのですが、
必ず配列の最初と同じ値が出ます。
ただの偶然ですか?
0327326
NGNG×*(pa + i) = (i + 1) * 10;
○*pa = (i + 1) * 10;
です。
0328デフォルトの名無しさん
NGNGs[0],s[1],s[2],a[0],a[1],a[2]
になってるとすると最後の*ps=s[3]はa[0]の所を指してるだけ
0329デフォルトの名無しさん
NGNG偶然と言えば偶然だし、必然と言えば必然。
なんでそうなるのか知りたければ、
printf ( "\n%d %d %d %d\n", a, s, pa, ps ) ;
の1行を最後に追加すれば、その理由が見えてきます。
0330学生
NGNG調べたら\r\nだそうで・・・。Windowsだからこうなるんですよね?
0331デフォルトの名無しさん
NGNGhttp://piza2.2ch.net/test/read.cgi?bbs=tech&key=996739281&st=6&to=6&nofirst=true
0332デフォルトの名無しさん
NGNGAPIスレの方がいいのでは?
Winだからそうなるんですけど。
0333デフォルトの名無しさん
NGNGこういうことをしたかったのか?
void lreplace(
const char *cp1, /*調べられる文字列*/
const char *cp2, /*検索する文字列*/
const char *cp3, /*置換する文字列*/
char *cp4) /*結果を格納する領域*/
{
long n=strlen(cp1);
long m=strlen(cp2);
long l=strlen(cp3);
while( n>=m ) {
if(memcmp(cp1,cp2,m)==0) {
memcpy(cp4,cp3,l);
cp4+=l;
cp1+=m;
n-=m;
} else {
*cp4++=*cp1++;
n--;
}
}
}
0334デフォルトの名無しさん
NGNGうまい具合に記述することが出来ません。
どなたか綺麗に記述した例を示してくれませんか?
0335334
NGNG0336デフォルトの名無しさん
NGNG駄目じゃん。
0338デフォルトの名無しさん
NGNG{
printf("test : %s\n", str);
}
なぜ str[] みたいな書き方がOKなんですか?
0339デフォルトの名無しさん
NGNGジョブスうんぬん以前の問題だろ。そのくらい適当なプログラム
作って確かめられるだろーが。
0340デフォルトの名無しさん
NGNGそういう仕様だからです。
0341デフォルトの名無しさん
NGNG下のコードのmain関数内でポインタ変数char* heapを確保して
それをSetArray関数に渡してSetArray内でヒープ領域にメモリを確保したいのですが
エラーがでました。
よく考えたらheapを渡す時点でheapが実態をどこも指してないのが理由という事に気づきました。
では、このような事がしたい時にはどうすればよいのでしょうか?
色々調べたら 「*&」 というものが関係ありそうなところまでは調べたのですが・・・・
よろしくお願いします。
main()
{
  char* heap;
  SetArray(heap);
}
void SetArray(char* pointer)
{
  pointer = new char[128];
  strcpy(pointer,"できるかな?");
}
0342デフォルトの名無しさん
NGNGSetArray に「何が」渡されているのか考えてみよう。
main()
{
char* heap;
SetArray(&heap);
}
void SetArray(char** pointer)
{
*pointer = new char[128];
strcpy(*pointer,"できるかな?");
}
0343デフォルトの名無しさん
NGNG{
pointer = new char[128];
strcpy(pointer,"できるかな?");
}
main()
{
char* heap;
SetArray(heap);
}
C++だったらこうも書ける。
つか文字列クラス使え。
0344デフォルトの名無しさん
NGNGもう混乱してきましたがこれからよく考えて消化したいと思います。
ありがとうございました。
0345デフォルトの名無しさん
NGNGそれです。私が調べているうちに発見したのは。
これまた混乱してきましたが併せて消化させてもらいたいと思います。
またまたありがとうございました。
0346デフォルトの名無しさん
NGNG0347デフォルトの名無しさん
NGNGCで1京の階乗(10,000,000,000,000,000!)の概算をしたいのですが
高速に計算する方法がみつからなくて詰まっています。
精度は 6 桁 で ?.???e?? 形式で出力したいです。
30万! 程度までは求められたのですが、ループしていたのでは
焼け石に水のようです。どうか宜しくご教示お願いいたします。
0348デフォルトの名無しさん
NGNG近似値でいいなら「スターリングの公式」で検索してみな。
0349347
NGNGありがとうございます。
数学は弱いので理解できるか不安ですが
がんばってみます。
0350347
NGNG0351デフォルトの名無しさん
NGNGところで、何に使うの?
0352デフォルトの名無しさん
NGNG0353デフォルトの名無しさん
NGNG0354デフォルトの名無しさん
NGNG0355デフォルトの名無しさん
NGNG0356デフォルトの名無しさん
NGNGなんのためにそんなことすんの?
0357355
NGNGメモリの節約のためです。
0358デフォルトの名無しさん
NGNGコンパイラのマニュアルを読んで、構造体の隙間を詰める
オプションが無いか調べてください。
0360デフォルトの名無しさん
NGNGつーか、隙間が出来ないように宣言に工夫しろ。
0361デフォルトの名無しさん
NGNGどーやって?
0362デフォルトの名無しさん
NGNGビット構造体
0363デフォルトの名無しさん
NGNGワード境界に気を配って、char,int,charなんて並べないようにするとか。
あと、最近のコンパイラは賢くてかってに並び替えるから心配するな。
0364361
NGNGあーそーですか。
0365デフォルトの名無しさん
NGNGメジャーなコンパイラは並べ替えなんてやってないよ。
0366デフォルトの名無しさん
NGNGそう?
まあそうしたら自分で気をつけるんだね。
0367デフォルトの名無しさん
NGNG適当なこといって「そう?」かよ。
0368デフォルトの名無しさん
NGNG簡単に取得する方法教えてくださいな。
0369デフォルトの名無しさん
NGNGdir >hoge.txt
0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNGsystem("command.com dir > dir.txt")
0372デフォルトの名無しさん
NGNG0373デフォルトの名無しさん
NGNGPerlのglobみたいなん無いの?
0374デフォルトの名無しさん
NGNG卑怯でも何でも、いちばん簡単で確実な手法を取るのは当然のこと。
これが確実じゃない環境(シェルがないとか)なら別の方法を考えるが。
0375デフォルトの名無しさん
NGNGシェルスクリプトじゃ常套句だけど。
for i in `ls`;do
echo $i
done
0377デフォルトの名無しさん
NGNGman opendir
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/opendir.3.html
0378デフォルトの名無しさん
NGNG見たいな場合に、もしa == 3だったら++b == 10の判定はおこなわれないので
しょうか?
0379デフォルトの名無しさん
NGNGおこなわれません。
0380379
NGNG本当ですか?
0381デフォルトの名無しさん
NGNGそれが仕様です。
0382デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNG危険です。
0384デフォルトの名無しさん
NGNGおこなってほしい人はパスカルをつかいましょう。
DelphiやKylixをどうぞ。
0385デフォルトの名無しさん
NGNGなんでそーなる。ちょっと書き方を変えればすむ話じゃないか
0386デフォルトの名無しさん
NGNGそんなやつは何使わせても一緒だ。
0387デフォルトの名無しさん
NGNG問題提起として書いただけでは。本人だってどうなるかわからんから
一応聞いてみただけだろ。そんなことも考えないやつだって
いるし、そういう奴の方が問題だよ。
0388デフォルトの名無しさん
NGNG1つの関数の引数を減らすためだけに構造体を使うのもどうかと思うので。
0389デフォルトの名無しさん
NGNG特にこれといった数はないので必要なら好きなだけ渡せばいい。
ただ、それらの引数郡(の一部)が
頻繁に他の関数にも渡されているなら再考の余地あり。
その場合は構造体にして渡すか
初期化関数などで一度だけ渡すようにする。
0390デフォルトの名無しさん
NGNGですか?Windows使ってるんで。
2重振り子の様子みたいなのを書いてみたいんだけど、数値だけ計算して
もつまらないので。
LinuxってやつのGUIの方が楽なんでしょうか。
0391デフォルトの名無しさん
NGNGC言語でやりたいというならどっちでも同じ。
0392デフォルトの名無しさん
NGNGそれならJAVAがお薦めです。
0393デフォルトの名無しさん
NGNGそれならVBがお勧めです
0394デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNGそれならDelphiがオススメです。
0396デフォルトの名無しさん
NGNGそれならCocoaがオススメです。
0397デフォルトの名無しさん
NGNGそれならjavascriptがお勧めっす。
0398デフォルトの名無しさん
NGNGそれならHSPがお奨めです。
0399デフォルトの名無しさん
NGNGいや、それだけはお奨めしません。
0400398
NGNGwhy?
0401デフォルトの名無しさん
NGNG0402デフォルトの名無しさん
NGNGJavaにもないでしょ。
0403デフォルトの名無しさん
NGNGまだ企業によっては潰しが効く。
面接で HSP 使えマース。なんていったらただのアホでしょ。
0404デフォルトの名無しさん
NGNG扱おうとする整数型のビット数以上のビットシフトをやらせようと
したときの結果は処理系とか環境に依存しますか?
0405デフォルトの名無しさん
NGNG普通は0になるけど、どうなんだろ。
0406デフォルトの名無しさん
NGNG書き換えるべくファイルに戻したいと
言う時
(たとえば
1 2 3 4
A=[ 5 6 7 8 ]
9 10 11 12
と言うような3行4列の行列)
はどんな命令(fget? fput?)
を使えばいいのでしょうか?
ファイルの行列の記述の仕方も含めてお教え下さい。
0408デフォルトの名無しさん
NGNGまず適切に質問をする能力を身に付けてくれ。
>その状況を見てその中身を
「その」って何だ?
「下のようなm行n列の行列をファイルに
読み書きするとしたらどうすれば良いか?
1 2 3 4
4 5 6 7
9 10 11 12
」
ということか?
0409デフォルトの名無しさん
NGNGうっそだー。
0410406
NGNGそのとうりだ。
0411デフォルトの名無しさん
NGNG406じゃないだろ(笑
ファイルには見たままテキストで保存すれば良い。
つまりメモ帳で開いた時に
1 2 3 4
4 5 6 7
9 10 11 12
と読めるように保存する。
ファイルを直接いじるよりも標準入出力を使ったほうが柔軟だが一応 f*() 系関数を使う。
で、何も考えないコーディングは以下の通り。
fp = fopen("matrix.txt", "w");
for (i = 0; i < m; i++){
&bnsp;&bnsp;for (j = 0; j < n; j++){
&bnsp;&bnsp;&bnsp;&bnsp;if (j < n - 1){
&bnsp;&bnsp;&bnsp;&bnsp;&bnsp;&bnsp;fprintf(fp, "%d ", a[i][j]);
&bnsp;&bnsp;&bnsp;&bnsp;}
&bnsp;&bnsp;&bnsp;&bnsp;else {
&bnsp;&bnsp;&bnsp;&bnsp;&bnsp;&bnsp;fprintf(fp, "%d", a[i][j]);
&bnsp;&bnsp;&bnsp;&bnsp;}
&bnsp;&bnsp;}
&bnsp;&bnsp;fprintf(fp, "\n");
}
fclose(fp);
0412デフォルトの名無しさん
NGNGfp = fopen("matrix.txt", "w");
for (i = 0; i < m; i++){
for (j = 0; j < n; j++){
if (j < n - 1){
fprintf(fp, "%d ", a[i][j]);
}
else {
fprintf(fp, "%d", a[i][j]);
}
}
fprintf(fp, "\n");
}
fclose(fp);
0413デフォルトの名無しさん
NGNGs/&bnsp;/ /g
あと、書換えることを考えると、最大桁数が8桁と仮定すると
> fprintf(fp, "%d ", a[i][j]);
fprintf(fp, "%8d ", a[i][j]);
とかの方がいいかもしれない
0414406
NGNG0415デフォルトの名無しさん
NGNGじゃ、書き換えは自分で考えてくれ
0416デフォルトの名無しさん
NGNGどうも。読み込みの方はよろしく。
fscanf 版と strtok 版で(笑
0417デフォルトの名無しさん
NGNGすくなくとも VC++ では
int a() { return 0x12345678; }
int b() { return 32; }
int main(int argc, char* argv[]){
printf("%d %X %X\n", sizeof(int), a() << b(), a() >> b());
return 0;
}
とやると
4 12345678 12345678
と表示する。
0418406
NGNG0419デフォルトの名無しさん
NGNGいやぁ、前にちょっとHSPのスレを煽って見たんだけど
他の言語と違って確実に厨な反応をするんだよね。
どうでもいいのでsage
0420デフォルトの名無しさん
NGNGgcc (cygwin) と bcc32 でも同じだった。
64bit OS だと違ったりするかね。
0421お厨腐人
NGNGあら、あたくしK&R両先生の御教えにすがることしかできない
か弱いお厨の女ですのに…そんな言い方…、酷い…。
どうぞ K&R2nd(共立出版.邦訳) p253をごらんになって
くださいまし……
0422デフォルトの名無しさん
NGNG俺、持ってない。かいつまんで教えてくれるとすごい幸せ。
0424
NGNGPC,デジタル時計。。。問わず、1秒ってどのようにカウントしてるんですか?
ある一定の条件下である一定の処理を規定回数実行したら1秒なんでしょうか?
0425デフォルトの名無しさん
NGNGsleep(1); とか。
精度はどのくらいほしいんだい?
0426424
NGNG例えばそのsleep(1)で呼び出しても、まさか人間みたく感覚で時間を
カウントして実行結果を返すわけじゃないですよね?
その実際に時間を生成する仕組みが知りたいんです。
0427デフォルトの名無しさん
NGNG水晶発振体の振動回数を元にしています。いわゆるクォーツ。
http://www.hyperdyne.co.jp/~oohashi/work/inet2/03time/03time.shtml
0428デフォルトの名無しさん
NGNGそりゃーあんた、おおもとを辿れば、時計見てるんだよ。
0429奈々資産
NGNG0430デフォルトの名無しさん
NGNGクオーツ腕時計の中はどんなしくみになっているのでしょうか?
http://www.fh-tokyo.com/Mechanism/quartz/Page1.htm
上記と原理は一緒、腕時計の場合は歯車をまわすが、
PCの場合、内部カウンタをカウントUPする。
0431デフォルトの名無しさん
NGNG0432お厨腐人
NGNG上掲書 p253 A7.8 シフト演算子 の項に
>右演算数が負であったり、左側の式の型のビット長より大きいか等しい場合、
>結果は不定となる。
とあるのですわ。
0433デフォルトの名無しさん
NGNGありがと。
>右演算数が負であったり
ここの部分は右ビットシフト、左ビットシフト関係なくなのかな?
ずっと(int)-4 >> 1 は(int)-2だと思ってたけどそうじゃない
ってこともあるのかな。
0434デフォルトの名無しさん
NGNGうむ。 2147483646 になる処理系があっても悪くはない。
…俺は見たこと無いけど。
Javaだと >> << は算術シフトと決まってるみたいだね。
0435お厨腐人
NGNG揚げ足とりみたいになって恐縮なのですけれど…
>右演算数が負
というのは x >> -1 と書いても
それが x << 1 と処理される保証はない、ということを
仰りたいのだと思いますわ。
符号付整数(で、その値が負であるとき)の右シフトの結果については、
>>結果は処理系に依存する
と、書いておられますわ。
0437デフォルトの名無しさん
NGNGstatic int a,b,c
だと変な動作になるのに、
使わない変数dを加えて
static int a,b,c,d
で宣言するとちゃんと動くようになりました。
dは一度も使わない変数です。
何度もd入れたり消したりしてみたんで
これがエラーが消える原因には間違いないです。
これってどういうことでしょう?
ド素人厨房なんで意味わからない質問でスマソ
0438デフォルトの名無しさん
NGNGその関数のソースを書いてくれないとどうにもならん。
0439デフォルトの名無しさん
NGNG初心者によくある現象だね。
0440( ゚Д゚)ウボァー!
NGNGたとえばどんなとき?
0441デフォルトの名無しさん
NGNGメモリを破壊しているとき
0443デフォルトの名無しさん
NGNGメモリを破壊しないように注意するんだよ。
ポインタがvalidなとこを指しているかどうかだけ気をつけりゃいーんだよ。
0444437
NGNGvalidってなんですか?
0445デフォルトの名無しさん
NGNG和英引け
443は正確な意味をわからずに,この単語を使っていると思われ
0446437
NGNGサンクス
0447デフォルトの名無しさん
NGNG445は正確な意味をわからずに,この単語を使っていると思われ
0448455
NGNG0449デフォルトの名無しさん
NGNGときってひとつずつ数えていかなきゃダメ?
0450デフォルトの名無しさん
NGNGみためにきれいになるように(カンマの位置がすべてそろうように)
整形する関数をつくれば良いのではないでしょーか。
"c,c++,java\nbasic,pascal,ruby\ncobol,fortran,perl\n"
このまま表示すると
c,c++,java
basic,pascal,ruby
cobol,fortran,perl
となる。これを整形関数に通すと
"c____,c++____,java\nbasic,pascal_,ruby\ncobol,fortran,perl\n"
となる。(_は空白文字)
c____,c++____,java
basic,pascal_,ruby
cobol,fortran,perl
こんな関数作って〜〜
0451デフォルトの名無しさん
NGNG整形した文字列を出力するの?
0452デフォルトの名無しさん
NGNGまず最初に文字列を走査して、
各列(カンマ区切り)の最長単語長を見つける。
一文字ずつ見ていって , が出るまでカウントを増やせば良い。
例えば、
a[0] = 5 // cobol = 5
a[1] = 7 // fortran = 7
a[2] = 4 // perl = 4
次に、また文字列を走査、同じように一文字ずつ見ていく。
また単語の長さをカウントしておく。
次の文字が区切り文字だったら、
その列の最長単語長-現在の単語長分だけ空白を入れる。
0453デフォルトの名無しさん
NGNG0455デフォルトの名無しさん
NGNGfseek でファイルの最後に飛んで、それから ftell を呼べば
良いと思う
0456デフォルトの名無しさん
NGNGUNIX系だったら man stat すれ。
0457デフォルトの名無しさん
NGNG「読みこんだファイルが何バイトか知りたい 」
読み込み済みのファイルだったら、サイズは自明だと思うが…
0458デフォルトの名無しさん
NGNG最初は、各行の1番目の単語について最長単語長を調べる。
つぎに、各行の2 〃
配列を確保する必要は全く無い。
0459デフォルトの名無しさん
NGNGそこで、ファイルの時間を取得して、
比較するにはどうすればいいんでしょう?
取得はとりあえずstat/fstatでするとして、
比較の方法がわかりません
0460459
NGNGtypedef long time_t;
となってるので、そのままlong値で比較して良いものでしょうか?
0461デフォルトの名無しさん
NGNG平林雅英著 新ANSI C言語辞典によると、
普通に比較演算子で比較してもいいらしい。
0462デフォルトの名無しさん
NGNGえ?どうすりゃいいの?
たとえば、今から「aborn」っていうファイルが何バイト
か知りたいゼ!っていうときは。
厨房でスマソ
0463デフォルトの名無しさん
NGNGちゃんと>>455,>>456に書いてあるだろ。
0464デフォルトの名無しさん
NGNGそれは「読み込んだファイル」とは言わないだろ。
0465
NGNG0466デフォルトの名無しさん
NGNG0467デフォルトの名無しさん
NGNG-------------------
char age[10];
char sage;
scanf("%s", age);
scanf("%c", &sage);
--------------------
ってやると2回目のscanfが実行されてないような気がするのですが…
ひょっとして1回目のscanfでリターンすると%cでそれを入れてしまうのでしょうか?
0468デフォルトの名無しさん
NGNGその通りです。
char linebuff[1024];
char age[10];
char sage;
fgets(linebuff, sizeof(linebuff), stdin);
sscanf("%s", age);
fgets(linebuff, sizeof(linebuff), stdin);
sscanf("%c", &sage);
のほうが安全。
0469468
NGNGsscanf(linebuff, "%s", age);
ね。
0470460
NGNGうまくいきました。
0471デフォルトの名無しさん
NGNG0473 ◆p.oaL5RA
NGNGタスケテー
0474デフォルトの名無しさん
NGNG0475デフォルトの名無しさん
NGNG何が不得意か言ってみろ
0476デフォルトの名無しさん
NGNGTYPE& GetHead();
TYPE GetHead() const;
こんな感じのものがあります。この場合、呼び出されるのは
どちらになるんでしょうか?GetHead()って呼び出しても
どっちが呼び出されるかどのように判断できるんでしょうか?
0477473
NGNG似たような関数がけっこうありますし。
0478デフォルトの名無しさん
NGNG似たようなやつなんか使うな。
分かるようになるまでは使う関数は統一しろ。
身にならない知識を振り回す前にまず足場を固めろ。
0479477
NGNG0480マジレスさん
NGNG0481デフォルトの名無しさん
NGNGB言語の次にできたから
0484デフォルトの名無しさん
NGNG0485デフォルトの名無しさん
NGNGBCPL->B->C
0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNGド言語?
はにほへといろは〜
0488C#
NGNG例えば
CList::GetHead
const リストの場合は、GetHead 関数はリストの先頭要素のコピーを返します。このとき、この関数を代入ステートメントの右辺にしか使えないので、リストは変更されません。
const 以外のリストの場合は、GetHead 関数はリスト要素への参照を返します。このとき、この関数を代入ステートメントの左辺、右辺の両方に使えるので、リストのエントリを変更できます。
です。constか否かで区別。
0489C
NGNGvoid hoge(int conat a);
void hoge(const int *a);この2つはどうちがいますか。
void hoge(int const *a);
0490デフォルトの名無しさん
NGNGvoid hoge(const int *a);
void hoge(int const *a);
これは同じです。int * const aとすれば違いますが。
void hoge(const int a);
void hoge(int conat a);
これはconatがなにかわからないのでなんとも言えません。
0491デフォルトの名無しさん
NGNGint main(void)
{
int i,c;
int cnt[10] = {0};
while(1){
c = getchar();
if(c==EOF)break;
if(c => '0' && c <='9')
cnt[10 - '0']++;
}
puts("数字の出現回数");
for(i = 0;i<10;i++)
printf("%d %d",i,cnt[i]);
return 0;
}
上のif(c => '0' && c <='9')で構文エラーって言われちゃうんだけど
どこがだめなの?後、'0'と0と"0"は意味が違うの?
教えてください。
0492デフォルトの名無しさん
NGNGmain()
{
int aa = 0;
char bb = '0';
char cc[]= "0";
printf("%d,%c,%s", aa, bb, cc);
}
0493デフォルトの名無しさん
NGNG'0'は文字、0は0、"0"は'0'と'\0'の2文字。
体で教えてやろーか?
0494デフォルトの名無しさん
NGNG30H
30H,00H
0495デフォルトの名無しさん
NGNG0496デフォルトの名無しさん
NGNGどうすればいいのでしょうか。
if( $str =~ /abc/ )
こんな感じのことをCでやりたいのですが。
0497デフォルトの名無しさん
NGNGman strstr
正規表現までは出来ないよ
0498デフォルトの名無しさん
NGNGソースの入手可能なプロジェクトがあれば教えてください。
0499デフォルトの名無しさん
NGNG多謝。多謝。
0500デフォルトの名無しさん
NGNGregexpかoro参照
0501デフォルトの名無しさん
NGNG0502デフォルトの名無しさん
NGNG美しいがどうかは知らんが、
gtk や libpng なんかは読みやすいよ。
0503491
NGNGこのプログラムは、数字として数えてるのではなくて、文字として
カウントしているってことでいいですか。
0504デフォルトの名無しさん
NGNG宿題?正直に自分が何でどういうプログラムか教えてくれたら教えてあげる:-)
0505デフォルトの名無しさん
NGNG>正直に自分が何でどういうプログラムか教えてくれたら教えてあげる
…あんたの文章もバグってるぞ…(藁
0506505
NGNG俺が意味を読み取れなかっただだけだな、ゴメソ。
0508デフォルトの名無しさん
NGNGコンパイルが通ってもバグがあったりするように、
文法は正しくても意味は通じなかったりするのだよ。
言語学板にでも行ってみれ。
0510デフォルトの名無しさん
NGNGバグってるのはテメーの頭。
0511デフォルトの名無しさん
NGNGプログラマ板に「プロのプログラマのプログラム教えて」という
スレが立っています。これなんかどうでしょう
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=994898315
0512デフォルトの名無しさん
NGNG質問させてください。
構造体のメンバ変数をポインタで参照するとき
たとえばアロー演算子で pms->data1 のようにすると思うのですが
なぜ 間接演算子の *pms->data1 のようにしてはいけないのでしょうか?
ポインタがまだわかってないのでしょうが、疑問に思っています。
よろしくお願い致します。
0513デフォルトの名無しさん
NGNG(*pms).data1はおんなじ
0514デフォルトの名無しさん
NGNG(*pms).data1でできるぞ。
*pms->data1は*(pms->data1)と同等。
0515デフォルトの名無しさん
NGNG0516デフォルトの名無しさん
NGNGあ なるほど。そうゆうことなのですね。
簡略表記。なるほど、それだと納得できます。
本当にありがとうございました>>514-515
0517516
NGNG2Chってレスが速くてすばらしい。感動しました。
0518デフォルトの名無しさん
NGNGやっぱり、誰が見てもわかりやすいとかそんな感じなんでしょうが、
実際よくわかりません。
学生の時、研究で使うソフトがどうしても動かず、
プログラマの友達に見てもらったとき一言「コードが汚い」
自分ではわかりやすく書いてたつもりだったんですが・・・。
どなたか教えていただけませんか?
参考までに汚いといわれたのはVBです。現在はC++の勉強中です。
0519デフォルトの名無しさん
NGNG見やすい、ではなく分かりやすい。
バグが無い、ではなくバグを直しやすい。
そういうプログラムです。
0520デフォルトの名無しさん
NGNG->と(*).の問題というより、
演算子結合強度について説明する方が親切だと思うのだが、どうか。
0521デフォルトの名無しさん
NGNG演算子の結合順位と、右・左結合はCをやる上での基本事項にもかかわらず
明快に解説した良書が少ないので「難しい」範疇に入っていると思われ。
そこまで解説しなくても、つまずいてるところだけをさくっと答えているので
よいのでは?
0522デフォルトの名無しさん
NGNG0523デフォルトの名無しさん
NGNG同じ優先順位の演算子が複数並んでいるときに、
どういう順序で結合するかっていうこと。
例えば、後置演算子は左から右に結合するから、
a[0]++ は (a[0])++ と同じになる。
0524522
NGNG解説ありがとうございました。
ポインタの間接演算子*が絡んでくると、わけがわからなくなってしまい
これでもか!ってカッコでくくってます(^_^;)
そのようなことも勉強しないといけませんね。
ありがとうございました。
0525デフォルトの名無しさん
NGNG0526デフォルトの名無しさん
NGNGvoid substr(const char* s,
unsigned int offset,
unsigned int length,
char* res)
{
if( offset >= strlen(s) ) {
*res = '\0';
return;
}
s += offset;
while( *s != '\0' && length-- > 0 ) {
res++ = s++;
}
*res = '\0';
}
0527デフォルトの名無しさん
NGNGres++ = s++;
に * がついてないが?
0530デフォルトの名無しさん
NGNGこんなの?
d.HH = a.HH -b.HH; /* -23〜+23*/
d.MM = a.MM -b.MM; /* -59〜 59*/
d.SS = a.SS -b.SS; /* -59〜 59*/
if( 0 > d.SS ){ d.SS = d.SS+60; d.MM = d.MM -1; };
if( 0 > d.MM ){ d.MM = d.MM+60; d.HH = d.HH -1; };
if( 0 > d.HH ){ d.HH = d.HH+24; d.DD = d.DD -1; };
0531デフォルトの名無しさん
NGNGhttp://2ch-dokyuso.virtualave.net/upload/image/051.xxx
(拡張子をexeに変えて実行)
これのトリップ計算の部分だけでも、、お願い!
0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNG不覚にもワラタ・・・
0534デフォルトの名無しさん
NGNG-1で終了
これを、コーディングしてください。
0535デフォルトの名無しさん
NGNGprintf("%d人中%d位 SCORE=%d\n", member_cnt, menber_cnt - 1, sorted_score[menber_cnt - 2]);
0536><
NGNGfputc()を使ってファイルに出力するとき
ファイルの終わりに^@が入ってしまいます。
この現象はなぜ起こるのですか。
またどうすれば^@なしにきれいに書き込めるのでしょうか。
0537デフォルトの名無しさん
NGNG0538デフォルトの名無しさん
NGNGそのうち、CP/Mなんですけど最後に0x1aがついてきますタスケテ
とかってやつが来るのか?
0539><
NGNG>>538
//////赤面しております。ご教示ありがとうございます。
バッファに文字列を詰め込む場合と違ってファイル(ストリーム)に出力する場合は欠に'\0'を詰めなくてよいのですね。いちいちやってゐました(/////恥
0540
NGNGすべてのファイルで同じ構造体を使用しますが、
ファイル1つ1つに長ったらしい構造体宣言を
しなければならないのですか。
extern struct hoge{…};
などと宣言しなければならないのですか?
0541デフォルトの名無しさん
NGNGtypedef
0542名無しさんだよもん
NGNGtypedefしたら?
0543デフォルトの名無しさん
NGNG>extern struct hoge{…};
を見ると
ヘッダに書いてインクルードするって方法を知らないと思われるんだが…
0544
NGNGつまり・・・
--- myheader.h ---
typedef struct{...} Foo;
typedef struct{...] Hoge;
--- EOF ---
というヘッダファイルをつくって、
すべてのファイルに
#include "myheader.h"
とインクルードすればいいのですか?
0545デフォルトの名無しさん
NGNGそれでいいよ。
念のために書いておくけど
すべてのファイルにインクルードというのは
正確には その構造体を使うすべてのファイルのことだね。
まあ、わかってると思うけど一応。
0546540,544
NGNGありがとうございます。
0547デフォルトの名無しさん
NGNGtypedefは関係無くないか?
0548初心者
NGNGchar 配列変数 str[x] の中が空かどうかを判定する場合、
1. if ( strlen( str ) == 0 ) {
2. if ( strcmp( str, "" ) == 0 ) {
のどちらが一般的でしょうか。
0549デフォルトの名無しさん
NGNGif( !str[0] ) {
0550デフォルトの名無しさん
NGNG同意。
0551デフォルトの名無しさん
NGNGstruct base{ int num,sym; }b={0,' '};
enum bdepth { Baddsub,Bmuldiv,Bfactor} ;
#define Bexpression Baddsub
int b_func(enum bdepth depth)
{ struct base save;
if(b.sym==' ') while(' '==(b.sym=getsym()));
switch(depth){
case Baddsub: switch(b.sym){
case '+': b.sym=getsym();b_func(Bmuldiv);break;
case '-': b.sym=getsym();b_func(Bmuldiv);
b.num = -b.num;break;
default : b_func(Bmuldiv);}
while(b.sym == '+' || b.sym == '-'){
save= b; b.sym=getsym(); b_func(Bmuldiv);
switch(save.sym){
case '+': b.num=save.num + b.num;break;
case '-': b.num=save.num - b.num;
};
}break;
case Bmuldiv: b_func(Bfactor);
while(b.sym == '*' || b.sym == '/'){
save = b;b.sym=getsym(); b_func(Bfactor);
switch(save.sym){
case '*': b.num=save.num * b.num;break;
case '/': b.num=save.num / b.num;
};
}break;
case Bfactor:
switch(b.sym){
case '(': b.sym=getsym(); b_func(Baddsub);
if(b.sym == ')') b.sym=getsym();
else /*エラー*/;
break;
case '$':{int n; hex:;
b.num=0; b.sym=getsym();
while((n=hex1(b.sym))>=0){b.sym=getsym();b.num=(b.num<<4)+n;}
};break;
case '0': b.sym=getsym();
if(b.sym=='x'||b.sym=='X') goto hex;
goto bcd;
default:
#define isNum(ch) ((ch>='0') && (ch <='9'))
if(isNum(b.sym)){
bcd:;{int n=b.sym-'0';
b.num=0;
while((n>=0)&&(n<=9)){b.num=(((b.num<<2)+b.num)<<1)+n;
b.sym=getsym();n=b.sym-'0';
}
}
}
}
};
return b.num;
}
0552デフォルトの名無しさん
NGNGどうしても再帰が必要なのかなあ?
だったら関数をaddsub/muldivとか分けた方がいいんだけど、
すると構造体ポインタを引数にしなくちゃいけないからなんか重そう
テスト用のメイン
int main(int argc, char* argv[])
{while(1){
printf("[%5d", b_func(Bexpression) );
printf("sep=%02X ]\n", b.sym);
b.sym=' ';
} return 0;
}
0553デフォルトの名無しさん
NGNG頑張っていると思います。
save先をスタックにし、プログラム構造を
テーブル駆動式にすれば再帰を使わなくても良いのですが
手間は増えますし、とりあえずそこは今のままで先に進むと
いいでしょう
0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNGポインタ引数の重さなんて8bit環境ですら屁みたいなもんだよ。
構造体実体引数ならドキュだが。
再帰を使ってCプログラム自体で演算を実行するか、
VirtualMachineを作るか、のどっちかだろうけど、
子息演算(家族計画の一種か?)くらいならVM作るのはヤリスギ。
0556デフォルトの名無しさん
NGNGでもコマンドラインのしかやったことないし、VCは触ったことないのでサパーソワカラン。
手っ取り早く画面に自由にナニカを表示して動かしたいわけですが、良い方法、参考
になるWEBサイトはありませんか?
0557デフォルトの名無しさん
NGNG君が使える環境をまず書き給え。
0558デフォルトの名無しさん
NGNG0559デフォルトの名無しさん
NGNGSmallTalkへようこそ
0560デフォルトの名無しさん
NGNGいやっぷー(・ε・)
0561デフォルトの名無しさん
NGNGcurses へようこそ。
0562デフォルトの名無しさん
NGNG>>557
Windows2000SP2にVisual C++6.0、で遊んでいますがこれだけじゃ
不十分ですか?
Javaもゆくゆくはかじってみたいと思ってますし、この目的の
ためにはいいらしいですね。運動方程式を数値的に解いた、運動
の様子を見たいのですが、とりあえずCでできるならCでやってみ
ようと思い聞いてみました。
0563デフォルトの名無しさん
NGNG本気でやりたいなら Win32 API 勉強すれば? 窓を開いて GDI 関数
で絵を書くだけなら、それほど道のりは遠くないぞ。とりあえず書店に
行って Petzold の「プログラミング Windows」という本を読んでみて、
自分の手に負えるかどうか判断して下さい。
0564デフォルトの名無しさん
NGNGVCはサパーリじゃなかったのか?
0565デフォルトの名無しさん
NGNGエクセールでいんじゃねーか?
0566デフォルトの名無しさん
NGNGサパーリだけどただのCコンパイラとして使ってます。
Win32コンソールアプリケーションっていうやつです。
学校がMSと契約してるらしくて、学生にくれてるんですよ。
http://www.amazon.co.jp/exec/obidos/tg/detail/glance/-/books/4756136001/qid=998239629/ref=sr_sp_re_1_6/249-0984941-9883563
これですね、APIの本。
高いし上下あるのか(´Д`;)
とりあえずこれ読んでみます。ありがとうございました。
0567デフォルトの名無しさん
NGNGそんな古い本はやめとけって。
0568デフォルトの名無しさん
NGNGまぁVCでも1度作ってしまえばあとの手間は変わらんけどね
C#もよこせって言えば?
0569デフォルトの名無しさん
NGNGしっかり改訂されてるから問題ないぞ。Win32 API プログラミングと
いったら、こいつがバイブルだと思うんだが、他にお勧めある?
0570デフォルトの名無しさん
NGNGMSの開発環境よりいいものなんでしょうか。
友達が昔、VBのC版だ、みたいに言っていましたけど。
MSDNのVCのサンプルみてもワケわかんないッス。
でも、みなさんもやっぱり大変だったんですよね最初は。
0571デフォルトの名無しさん
NGNGコンソールアプリだと、プログラムのロジックが OS にサービスを要求
するわけだが、Win32 だと OS からユーザの登録した関数が呼び出され
る形になるので、パラダイムが全然違うんだよね。
最初は戸惑うと思うが、処理の流れと代表的なコントロール・メッセー
ジを一通り押さえれば見通しが利くようになるよ。
あと、Win32 API の知識と処理の流れに関する大まかな知識は必須で、
いくつか API のみでプログラムを書いて勉強することを勧めるけど、
実際のプログラムを組む段階になったら適当なクラスライブラリを使っ
た方が良い。
正直、素の API だけでプログラミングするのは辛いので。
0572デフォルトの名無しさん
NGNGDeveloper Studioでは字下げされないのですが、
本によってはcaseなどの部分が字下げされているものもあります。
どちらの方が美しく正しい記述なのでしょうか?
0573デフォルトの名無しさん
NGNGこれは完全に俺のシュミなんだけど、
基本は字下げ4文字で、case文は2文字字下げにしてる。
こうするとcaseは出っ張って、カッコは他のと同じ下げになる。
正式なのはしらん。会社で文句いわれたことも無い。
0574デフォルトの名無しさん
NGNG> どちらの方が美しく正しい記述なのでしょうか?
自分で美しいと思った方を使え
ちなみに俺はcaseの字下げはしない方が美しいと思う。
0575デフォルトの名無しさん
NGNGどっちでも良いけど、有名どころのコーディング規約が知りたいなら
Artistic Style のソースを落としてきて astyle.html を読んでみ
れば?
Artistic Style
http://astyle.sourceforge.net/
あと FreeBSD の kernel ソースコードで使われているコーディング規
約が、次の URL で見られる。
http://www.freebsd.org/cgi/man.cgi?query=style&apropos=0&sektion=9&manpath=FreeBSD+5.0-current&format=html
0576デフォルトの名無しさん
NGNG今まではBASICで
if x = "文字列" then...
みたいにやっていたのですが、初めてC言語でプログラムを作っているのですが
if文だと文字列比較ができないみたいなので。
0577デフォルトの名無しさん
NGNG...
}
とやりますが、無理にこのやりかたに慣れるより C++でやった方がいいですよ
0578デフォルトの名無しさん
NGNG0579デフォルトの名無しさん
NGNG気のせい?まあBASICなんていろいろあるからね。
0580576
NGNGありがとうございます。strcmpという関数はしりませんでした。
でも、無理に・・・って事は、C++だともっと上手いやり方があるのですか?
>>578
ねたではありません。C言語は二日前に始めたばかりなのです。
今まではBASICでやっていました。
0581デフォルトの名無しさん
NGNG>C++だともっと上手いやり方があるのですか
VBと同じように比較したり 加算したり出来ますよ
0583デフォルトの名無しさん
NGNGif ("文字列" == z) {
つーのはできんのだな、これが。
0584デフォルトの名無しさん
NGNG0585デフォルトの名無しさん
NGNG持っているんですか?
たとえば他の言語だとすぐHashが使えるけど、Cではなんとかして
Hashのコードを用意しなければ逝けないとか、、、その辺どうしてますか?
0586デフォルトの名無しさん
NGNG職業プログラマでもないかぎり持ってないと思うよ。
どっかから拾ってきて使う。
0587デフォルトの名無しさん
NGNG今時STLでしょ。
0588デフォルトの名無しさん
NGNGGlibなんかどうよ?
オプソアレルギーなドキュ(個人にせよ職場にせよ)には使えぬが。
職業プログラマだっていちいち「毎回」作りたくないよ。
毎回ってのは、ソース「全部」のライセンスを寄越すという契約を
客と交わしている場合、自分で溜めこんだ奴を事実上使えないので。
ま、デュアルライセンスだということにするとか、
「予め」オプソライセンスで自分の名義で公開しとく
(これは誰が言った作戦だったかな)とか、手は有るが。
0589ななしんぐ
NGNG以下のプログラムでオラクルのDBに繋ごうと思ってるんですけど
なかなかうまくいきません。
何か間違ってる部分とか、インクルードされてるファイルで何が
起こってる事が予想されるか誰か教えてください
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <sqlcpr.h> /* オラクルライブラリ */
#include <sqlca.h> /* オラクルライブラリ */
#include <sqlda.h> /* オラクルライブラリ */
#include <stdio.h>
#include <string.h>
int CountOfData; /* データ数 */
int main(
)
{
FILE *fp;
int ii, chk ;
/* DB接続 */
chk = CMNconnectDB( cCMN_DB_USER, cCMN_DB_PASSWORD, 0, &result );
if( chk != cCMN_OK ) { /* 接続エラー */
sprintf ( gMBuf, cCMNCONERR, cMYNAME, chk );
CMNsetMessage ( cCMN_MAINTENANCE_MSG, gMBuf );
exit(-1);
}
EXEC SQL BEGIN DECLARE SECTION;
int CountOfData; /* データ数 */
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT
COUNT(*)
INTO :CountOfData
FROM CMN_TD_CRE
;
if( sqlca.sqlcode != 0 ) { /* データベース参照失敗 */
printf("データベース参照失敗!\n");
exit(1);
}
printf("CRE_DT = %d\n",CountOfData);
}
0590デフォルトの名無しさん
NGNGスレ違い。
0591
NGNG0592デフォルトの名無しさん
NGNGコピペ氏ね
0593
NGNG0594デフォルトの名無しさん
NGNG0595デフォルトの名無しさん
NGNGない。
0596594
NGNG0597585
NGNGそうですか、貴重な意見どうもありがとうございます。
自分の場合も、どっからか拾ってきて使う、というのが多いです。
(イイトコダケ、ツマミグイスルノハムズカシイ)
0598デフォルトの名無しさん
NGNGできる関数とかあります?
0599デフォルトの名無しさん
NGNGstrtol 関数を基数16で呼ぶ
0601デフォルトの名無しさん
NGNG0603デフォルトの名無しさん
NGNGマルチポストですか?
0604デフォルトの名無しさん
NGNGC が使いこなせない人間に C++ は使えない。まず C, そしてオブジェク
ト指向分析・設計を勉強して、最後に C++。
C++の方が安全性に優れてるんだから、そうとも言えんよ。
実際、C++をやるのにCを勉強するべきかは意見が分かれる
ところ。
0606デフォルトの名無しさん
NGNGC++ の方が「安全」というのは、どうかなぁ。
別のスレッドでも書きましたが、例外が絡むと簡単にリークが発生しえ
ますし、メンバ変数にポインタが絡む場合、デフォルトで作成されるコ
ンストラクタや = 演算子の挙動を把握していないと簡単にメモリを破
壊します。
C は文字列操作、キャスト、ポインタ演算に絡んで落とし穴があります。
C++ は文字列操作は std::string なり CString を使うことで落とし穴
を避けられますが、キャストとポインタ演算は相変わらずですし、加え
て例外や暗黙で生成される関数、型変換、デフォルトパラメタの再定義、
非仮想関数の再定義と、落とし穴満載です。
あと実際のコーディングに関してですが、既存の C++ のソースコード
は大半が C 言語流のプログラミングスタイルと C++ 言語流のスタイル
のハイブリッドです。C 言語で書かれたソースコードを読み書きできな
いと、現実にはほとんど役に立たないと思います。
0607デフォルトの名無しさん
NGNGいいだけ。Cからやる必要全く無し。
0608デフォルトの名無しさん
NGNG思うって言ってたな・・・
0609デフォルトの名無しさん
NGNG0610デフォルトの名無しさん
NGNG今、csv形式のファイルからhtml形式のファイルを作るプログラムと思っています。
元のファイルのカンマ(あるいはタブ)があったら、そこにテーブルタグを入れようと
思って、if文で分岐を作り、カンマ・改行・その他で動作を分けようとしたのですが
思いどおりに動いてくれません。どこがいけないのでしょうか??
以下ソース(sは文字列を格納する変数、fin・foutはそれぞれ読み込み・書き込み用
ファイルのポインタです。)
while(getc(fin) !=NULL){
if(s == "\t"){
fputs("〜略〜">\n",fout);
}
else if(s == "\0"){
fputs("〜〜略〜〜">\n",fout);
}
else{
fputs(s,fout);
}
}
0611sage
NGNGCの文字列の扱いを理解していないと思われ。
索引のきちんとついてる本を買って、
「文字列」「文字コード」あたりを調べてみなさい。
0612デフォルトの名無しさん
NGNGタブやNULL文字は文字列ではないので、
シングルクォートで囲まないといけないのでは?
俺も初心者なので間違ってたらスマソ。
0613610
NGNG明日あたり調べてみたいと思います。
>>612
なるほど。でも、それでやってもタブと改行にマッチしなかった(はず)
の場合でも出力されないんです(;´Д`) これいかに??
0614610
NGNGfgetsで拾ってきた文字列の中の任意の文字列を他の文字列に
置き換える事って可能ですか??ちなみに上のはgetc使ってます。
0615デフォルトの名無しさん
NGNGもちろんできます。Cで出来ないことはどういう手段を使ってもできません。
0616sage
NGNGできるよ。
ついでに、君の持っている参考書でいいから、
文字列とポインタのことが書かれているページを
しっかり読み直しときなさい。
0617デフォルトの名無しさん
NGNG(>>612に加えて)
>if(s == "\t"){
としていますが、sはどこで代入されていますか?
0618デフォルトの名無しさん
NGNGつっこみどころが多すぎるから、
放置でいいよ..
0619デフォルトの名無しさん
NGNG左辺値が必要
ってどういう意味?
0620デフォルトの名無しさん
NGNG数学の教科書読めよ。
0621610
NGNGスマソ、代入文忘れてました(;´Д`)
というわけで書き直してみたんですけど、
while((s=getc(fin)) != NULL){
略
}
ってのは無理なんですか??
0622デフォルトの名無しさん
NGNGヘルプぐらい嫁よ。
0623デフォルトの名無しさん
NGNGそうか。
私の周りでは C++ で閉じてるプロジェクトはほとんどなくて、Win32
アプリケーションなら Win32 API を直に呼び出す部分があったり、過
去の資産が C ライブラリのままで C++ のラッパクラス作ってないモノ
も多いです。
それで、C++ プログラマといっても結局 C っぽいコードも読み書きで
きないと仕事にならないのですが、世の中は、そういう時代じゃないの
かな。
0624612
NGNGこれでどうだろうか。
while ((s = fgetc(fin)) != EOF) {
if (s == '\t')
fputs("〜略〜>\n", fout);
else if (s == '\n')
fputs("〜〜略〜〜>\n", fout);
else
fputc(s, fout);
}
ネタじゃないよね…?
0625デフォルトの名無しさん
NGNG意味不明だが、C++はCを含んでるんだぞ?
なんだCっぽいコードってーのは。クラスを使うだけがC++じゃねーぞ?
0626デフォルトの名無しさん
NGNG左辺値は代入可能な変数ですか?
たとえば
int a,b;
&a = &b;
とかすると
左辺値が必要というエラーが出ます。
0627610
NGNG> error C2106: '=' : 左のオペランドが、左辺値になっていません。
って返されちゃってコンパイルできないです。(whileの行)
もちろんネタじゃないんで、もう少しおつきあい下さい。
0628デフォルトの名無しさん
NGNG*(&a)=(int)&b ならアドレスが入るんじゃない?
そうしたら *(int*)a で bの中身が参照できる?
文句言われたら(void)を挟めばいいよね。
0629デフォルトの名無しさん
NGNG>>623の書き方が悪かったんだろうけど、
C++では一般的だがCではそれしか使えない書き方ってのがある。
そこんとこだと思われ。
0630デフォルトの名無しさん
NGNG文字の比較は==じゃできないでしょ?Cは。
strcmpとか使わないとまずいんじゃないの?
初心者だから間違ってたらスマン
0631デフォルトの名無しさん
NGNG0632デフォルトの名無しさん
NGNGなんなんだ「C++では一般的だがCではそれしか使えない書き方」って。
今時Cコンパイラなんて無いってことは分かってるよな?
0633デフォルトの名無しさん
NGNGひっこめ。
>>610
sの型教えて。
0634デフォルトの名無しさん
NGNG*文字*の比較ならできるよ。単なる整数値だから。
0635デフォルトの名無しさん
NGNGなるほど。ひっこんどきます(^_^;
0636デフォルトの名無しさん
NGNG>>626は単なる例です。
>>619を読んだだけでは詳細はわからないので
あんなことをすると「左辺値が必要です」っていうエラーがでるので
同じようなことをしていませんか?
っていう意味です。
0637デフォルトの名無しさん
NGNGヘルプでキーワードでC2106を引けよ。
0638デフォルトの名無しさん
NGNGsの型はchar型です。
getcで一文字づつ拾ってって比較ってやり方でできますよね??
それが楽なやり方かどうかは別として。
0639633
NGNG0640612
NGNG0641610
NGNG今きづいたんですが、左辺がポインタになってなかったっすね(;´Д`)
でもまだ期待どおり動いてくれないんで、精進してみます。
厨房な質問につきあって下さったみなさん、本当にありがとうございました。
またそのうち来るかもしんないっす・・・。
0642633
NGNG0644デフォルトの名無しさん
NGNGポインタでなくていいんですけど・・・
intにする必要はあるが。
0645610
NGNGはやとちりスマソ。
while(getc(fin) !=NULL){
を
while((*s = getc(fin))!=EOF){
にしてみたら近い動きしたもんで・・・。
0646デフォルトの名無しさん
NGNG0647デフォルトの名無しさん
NGNGCのライブラリの知識が必要になったら勉強すりゃいいじゃん。
みんながみんな必要になるわけでもないし。
Cっぽいコードってのがいまいちわからんけど、例えばC++
使う上でC言語の知識が必要なら、それはC++の解説書にも
書いてあるべきことでしょ。逆にC++使う上で不必要なC言語
の知識もあるわけで、C++やるのにC言語からってのはおかしな
話だよ。C++の勉強とは、C言語から拡張された部分だけの勉強で
はないのですよ?あくまでC++を習得したいのであればC++を
初歩からやればいいし、C言語を習得したいor仕事で必要ならC言語
を勉強したらよいのでは?
0649デフォルトの名無しさん
NGNG同意。Cからやらないと意味わからないやつばっかり。
必要なCの知識もみっちり教えてくれる親切なC++本ないのかな
0650デフォルトの名無しさん
NGNG2バイト文字を使ったときにそこで偽カンマを検出することがあるけど
なんかいい対処方法無いですか?
自分は610ではないです、一応。
0651デフォルトの名無しさん
NGNGそもそも「C++ を使うと不要になる C の知識」ってあるのか?
0652デフォルトの名無しさん
NGNGCの文字列の扱いは忘れてしまいたい。(T_T)
0653610
NGNG漏れも同じとこで詰まってます(;´Д`)
fscanfだと比較できないし、getcで得ると2バイト文字対応できないし・・・。
どなたかいい解決方法ないですか??
0654デフォルトの名無しさん
NGNG本末転倒だな。
0655デフォルトの名無しさん
NGNGsetjmp()
あとはポインタを直接いじってリスト操作、とかの機会は減るね。
減るだけでなくなるわけじゃないので、分かってないとダメだが。
>>652
VC++ だと char[] に加えて CString, CComBSTR, _bstr_t とか
増えたり。笑えん。
0656デフォルトの名無しさん
NGNGhttp://www.people.or.jp/~fussy/argo7-4.htm
0658633
NGNG656が出してたね・・・
0661デフォルトの名無しさん
NGNG無いかもしれない。しかし、低級なクラスライブラリ
を作るようなことをするには、Cは必須。
0662デフォルトの名無しさん
NGNG> 低級なクラスライブラリを作るようなことをするには、Cは必須。
そうだね。そして、低レベルの処理をする場合はアセンブラは必須だね。
0663デフォルトの名無しさん
NGNG大きいサイトでも小さいサイトでもいいっす。
0664デフォルトの名無しさん
NGNG0665デフォルトの名無しさん
NGNG俺は勉強するなら本のほうがいいと思うが、一応
http://www.inet-lab.org/ted/program/progdetail.html
0666デフォルトの名無しさん
NGNGどうもどうも。
漏れは最近こんなページにちょっと興味が
http://www.cpluspluscode.com/#categories
http://www.freecode.com/
http://www.cprogramming.com/
http://www.devx.com/sourcebank/
0667デフォルトの名無しさん
NGNG0668_
NGNG漏れは最近こんなページにちょっと興味が
http://community.core-sdi.com/~gera/InsecureProgramming/
0669デフォルトの名無しさん
NGNGブラクラ
0670デフォルトの名無しさん
NGNG何をそんなにムキになっているのか分からんが。いきなり C++ やって
挫折するも良し、C やって遠回りしたと後悔するも良し。これから勉強
するヤツには好きにやらせておけば良いじゃない。
0671デフォルトの名無しさん
NGNG同意。
おれはCやってC++勉強中だけど、
なにげにCの知識かなり役に立ってる。
でも、C++だけでもよかったかなってとこもあるし、
やっぱり好きにしろって感じかな?
つーか、何か必要なときは調べればよし
0673デフォルトの名無しさん
NGNG( ゚Д゚)ハァ・・・
0674デフォルトの名無しさん
NGNG分からんやつだな。だからC++ってのはCを含んでんだよ。C++にないCってのは
ほとんどANSI以前のC、過去の遺物ってやつだってばさ。
0675エクソシスト
NGNGvoid fnc(const char*);
char *p;
void main(){
char *Xa="abcdefghijkl";
fnc(Xa);
}
void fnc (const char* Xa){
while( *Xa != NULL ){
p++;Xa++;
*p=*Xa;
printf("%s",p);
}
}
----------------------------------------
文字列のコピーをしたいのですが、上記のようにやると
変なエラーがでます。初歩な質問かと思いますが、
どのようにすれば片一方のpにコピーできるようになるでしょうか?
0677デフォルトの名無しさん
NGNGCなんかやる必要ねーってんだろがゴラァ。
0678デフォルトの名無しさん
NGNGポインタpがどこを指していると思ってるんだ?
0679671
NGNG>printf("%s",p);
フォーマットが間違ってる。つーか危ない。
正しくは
printf("%c",*p);
それと、NULL != '\0' だから
>while( *Xa != NULL ){
while(* Xa != '\0' ){
あと、 p はfncの ローカルの配列にしたほうがいい。
メモリ領域破壊してる。
つーか、strcpy使えって。
0680デフォルトの名無しさん
NGNG君こそムキになってないかね。
指名されて批判されたと勘違いしたのかな?
一意見として書き込んだだけだが。
0681680
NGNG671->>670ね。
0682671
NGNGごめん。
コピーするやつなのに、結果返さないとね。
/*
p : コピーされる領域のポインタ
cp: コピーもとの文字列のポインタ
*/
int my_strcpy( char* p, const char* cp ){
while( cp != '\0' )
*(p++) = *(cp++);
*p = '\0';
return 0;
}
0683エクソシスト
NGNGさん、ありがとうございます。指摘部分を変更して実行してみると。
b@
と文字化けしています。どうしてなんでしょうか?
-----------------------------------
#include <stdio.h>
void fnc(const char*);
char *p;
void main(){
char *Xa="abcdefghijkl";
fnc(Xa);
}
void fnc (const char* Xa){
p=&Xa;
while( *Xa != '\0' ){
p++;Xa++;
*p=*Xa;
printf("%c",*p);
}
}
0687エクソシスト
NGNG#include <stdio.h>
void fnc(char*,const char*);
void main(){
char *Xa="abcdefghijkl";
char *p;
fnc(p,Xa);
printf("%s",p);
}
void fnc (char *p, const char* Xa){
while( *Xa != '\0' )
*(p++) = *(Xa++);
*p= '\0';
return 0;
}
----------------------------------------------------
上記ではきちんとコピーできますが、へんなエラーメッセージがでるのはどうして?
printf("%s",p);
をコメントアウトすると、エラーがでないので、こいつだと思いますが。
あと、下のは上記のプログラムと同じ働きをするはずですが、エラーがでます。
なぜなんでしょうか?
------------------------------------
#include <stdio.h>
void fnc(const char*);
char *p;
void main(){
char *Xa="abcdefghijkl";
fnc(Xa);
printf("%s",p);
}
void fnc (const char* Xa){
while( *Xa != '\0' )
*(p++) = *(Xa++);
*p= '\0';
return 0;
}
0688デフォルトの名無しさん
NGNG0690671
NGNGchar*p;
これは、このままでは使い物になりません。
なぜなら、宣言されただけじゃ値は不定だからです。
(staticとかはこの際省く)
だから、配列(など)の最初のアドレスを代入してください。
または、メモリを確保してください。
#include <stdio.h>
int fnc(char*,const char*);
int main( void ){
char *Xa="abcdefghijkl";
char *p;
char buf[1024]; /*値は、適当。*/
p = buf; /* 配列の先頭のアドレスを代入 */
fnc(p,Xa);
printf("%s",p);
return 0;
}
int fnc (char *p, const char* Xa){
while( *Xa != '\0' )
*(p++) = *(Xa++);
*p= '\0';
return 0;
}
わかりました?
0691エクソシスト
NGNGメモリ破壊好きでやってませんよ。(泣
任意文字列「abcdefghijklmnopqrstu」
から(任意文字)例g から(任意個)例3文字までを取得 ghi
とするプログラムを書きたいんですが、どうも>>687の
下記エラー理由が分からないと前に進まない気が、。
0693デフォルトの名無しさん
NGNG初心者相手に丁寧な解説で、好感が持てるけど…
ちょっとおかしなところがあるんで軽くツッコミ。
>*(p++) = *(Xa++);
これだと双方インクリメントしてから中身を代入することになる。
(*++p = *++Xa; と同じ。つまり先頭文字はコピーされない。)
*p++ = *Xa++; とするべき。
あと
>return 0;
これはいらない。 void func でいいと思う。
無条件に0を返されたって、使い道ないし。
0694エクソシスト
NGNG>char*p;
>これは、このままでは使い物になりません。
>なぜなら、宣言されただけじゃ値は不定だからです。
親切にどうもありがとうございます、長くつっかえていたものが取れた気分です。感謝
--(test1.c)------------------------------------------------
#include <stdio.h>
void fnc(char*,const char*);
void main(){
char *Xa="abcdefghijkl";
char *p;
char buf[1024];
p=buf;
fnc(p,Xa);
printf("%s",p);
return 0;
}
void fnc (char *p, const char* Xa){
while( *Xa != '\0' )*(p++) = *(Xa++);
*p= '\0';
return 0;
}
------------------------------------
---test2.c----------------------------------
#include <stdio.h>
void fnc(const char*);//(1)
char buf[1024]; //(2)
char *p; //(3)
void main(void){
char *Xa="abcdefghijkl";
p=buf;
fnc(Xa);
printf("%s",p);
return 0;
}
void fnc (const char* Xa){
while( *Xa != '\0' )*(p++) = *(Xa++);
*p= '\0';
return 0;
}
--------------------------------------
test1.cでは出来ました。(うるうる)あと、少し欲をいえば
test2.cでは (1)〜(3)がtest1.cとの相違点です。
これを実行させると、空白しか返ってきません、なぜなんでしょうか?
0696エクソシスト
NGNGvoid fnc(const char*);//(1)
char buf[1024]; //(2)
char *p; //(3)
void main(void){
char *Xa="abcdefghijkl";
p=buf;
fnc(Xa);
printf("2:%s:",p);
}
void fnc(const char* Xa){
int i;
printf("1:%s,%s:\n",Xa,p);
i=0;
while( *Xa != '\0' ){
*p++ = *Xa++;i++;
printf("1:%d,%s,%s\n",i,Xa,p);
}
*p= '\0';
return 0;
}
---------------------------------
C:\>tes2
1:abcdefghijkl,:
1:1,bcdefghijkl,:
1:2,cdefghijkl,:
1:3,defghijkl,:
1:4,efghijkl,:
1:5,fghijkl,:
1:6,ghijkl,:
1:7,hijkl,:
1:8,ijkl,:
1:9,jkl,:
1:10,kl,:
1:11,l,:
1:12,,:
2::
C:\>
なんでコピーされないんだろう?
0697デフォルトの名無しさん
NGNG-1.#IND00e+000
のような不可解な値が返ってきました
原因に心当たりのある方はアドバイスをいただけないでしょうか?
素人くさくてスイマセン
ちなみに、ちゃんとした値が返ってくるコトも当然あります
VC++6を使ってます〜
0698sage
NGNGprintf("%x\n", p);
fnc(Xa);
printf("%x\n", p);
printf("2:%s:",p);
を試してみなさい。
0699693
NGNGえ…偉そうに書いてまちがっとる…。
>*(p++) = *(Xa++);
は
>*p++ = *Xa++;
と同じで、
>*++p = *++Xa;
とはならんのね…。エラソウニイッテゴメンネ >>690
0701エクソシスト
NGNGそっか、
p=buf;
がPublicで、アドレス指定されていない為に、アドレスが違ってきて空白なんすね?(多分)
main と fnc それぞれに有効に任意のアドレス指定する方法ってどうすのですか?
0702デフォルトの名無しさん
NGNGんなわけねーだろ。
0703デフォルトの名無しさん
NGNG698のが十分なヒントになっていると思ったが、そうでもないみたいなので、
test1.c, test2.cのそれぞれのmain()の
printf("%s",p);
を
printf("%s",buf);
として試してみなさい。bufへのコピーができていることが分かるはず。
あとは698のヒントをよく理解すること。pがfnc()復帰後どこ挿してるのか。
0704じみー
NGNG次のようなプログラムを書こうとしたのですが
例えば8月23日の8:00から9月4日の間の経過時間を出す
自分で考えたのですが月をまたがるとややこしく
どうしても良い方法が思いつきません。
どうかヒントでも何でも良いのでお力をお貸しください。
0705じみー
NGNGくだらない質問を書いてしまいすいませんでした。TT
0706デフォルトの名無しさん
NGNG自分で解決できたなら、その方法を書きなさい。
2ちゃんでマナーを言っても仕方ないけど、
普通のところはそれがマナーとされている。
0708デフォルトの名無しさん
NGNGそれ、以前。(後半)
0710名無しさん
NGNGC専門の書籍も買おうと思っていますが、C MAGAZINEのバックナンバーを
4月号からまとめて購入するって言うのもありでしょうか?
0711デフォルトの名無しさん
NGNG0712デフォルトの名無しさん
NGNG> 1.#IND00e+000
浮動小数点数として「不定」な値。
例えば log(-1.0) などの結果。
0713名無しさん
NGNG0714デフォルトの名無しさん
NGNGじっくり読んでみよう。
Cマガを語る
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=992194388
0715名無しさん
NGNGドキュソな自分にとっては4月号からまとめて買うのもありかな。
0717デフォルトの名無しさん
NGNG0718デフォルトの名無しさん
NGNGCマガのCはComputerのCってことになってるんだYO。
0719デフォルトの名無しさん
NGNGWin2KでたらWindows 2000 Magagineに改名したYO
0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNGそのままやんけ。
0722デフォルトの名無しさん
NGNG0723デフォルトの名無しさん
NGNGstruct pen
{
int aaa;
char bbb;
int ccc;
};
main()
{
int count;
struct pen p[1], *point;
point = p;
p[0].aaa = 1;
p[0].bbb = 'a';
p[0].ccc = 10;
p[1].aaa = 2;
p[1].bbb = 'b';
p[1].ccc = 20;
for(count = 0; count <= 1; count++){
printf("p[%d].a = %d\n", count, p[count].aaa);
printf("p[%d].b = %c\n", count, p[count].bbb);
printf("p[%d].c = %d\n", count, p[count].ccc);
printf("p[%d].a = %d\n", count, point->aaa);
printf("p[%d].b = %c\n", count, point->bbb);
printf("p[%d].b = %d\n", count, point->ccc);
point++;
printf("\n");
}
return 0;
}
実行結果:
p[0].aaa = 1
p[0].bbb = a
p[0].ccc = 10
p[0].aaa = 1
p[0].bbb = a
p[0].ccc = 10
p[1].aaa = 1
p[1].bbb = b
p[1].ccc = 20
p[1].aaa = 1
p[1].bbb = b
p[1].ccc = 20
セグメントエラー(coreを出力しました)
何故 p[1].aaa が 1 になるのか、core を吐いてこけるのか、
分かりません。教えてください。
0724デフォルトの名無しさん
NGNGp[1].aaa = 2;
p[1].bbb = 'b';
p[1].ccc = 20;
でメモリー破壊起こしているから何が起こるか誰も予想がつかんよ。
いろいろな環境、異なるベンダで試してみぃ。
0725デフォルトの名無しさん
NGNGひけらかし男爵!!
0726デフォルトの名無しさん
NGNGネタは sage で書けよ。しかも面白くないし。
0727デフォルトの名無しさん
NGNGにすればいいのでは?
pen 構造体ひとつ分しか確保してないから問題発生かと。
0728デフォルトの名無しさん
NGNGどう考えてもネタ。
>セグメントエラー(coreを出力しました)
あたりまえ。
0729デフォルトの名無しさん
NGNGchar* pointer = NULL;
pointer = getenv("KANNKYOU");
や
pointer = crypt("hoge","aa");
とした時にこのpointerの指し示す場所は具体的に何処ですか?
コード領域でなければスタック変数上でも無いですよね?
いったい何処に??とても疑問に思いました。お願いします。
0730デフォルトの名無しさん
NGNGOSが使ってるのを弄ったらまずいってことか。
cryptは関数自体わからないっす
0731デフォルトの名無しさん
NGNG心配するな。キミの言う通り。
693が間違ってるだけ。
0732デフォルトの名無しさん
NGNGOSによるけど、フツーのUNIX系なら弄っても問題ないよ。自プロセスが困るだけで。
0733デフォルトの名無しさん
NGNG0734デフォルトの名無しさん
NGNGネタ?
0735デフォルトの名無しさん
NGNG色々勉強してるものです。
unsigned int a:
として、a に正の大きな値を入れます。それから
printf("a=%ld\n",a);
ってやると、−xxxxx
というように負の値として表示されてしまいます。
MSBを符号ビットとして扱うかどうかという問題
だというとこまではわかったのですが、上のように
大きな正の値をそのまま表示させるにはどうすれば
いいでしょうか?
また計算機は内部で unsigned int で用意された
a をどう扱ってるのでしょう?
質問内容まとまりなくてスマソ。
0736デフォルトの名無しさん
NGNG0737729
NGNGgetenvの事は良くわかりました。
ではcryptはどうなんでしょうか?
どこに文字列を収納しているのですか?
0738デフォルトの名無しさん
NGNG0739729
NGNGサンキュー
0740デフォルトの名無しさん
NGNGまあ、大体そんな感じ。
0741デフォルトの名無しさん
NGNG>>740も「大体」と言ってるように、完全なスーパーセットではない。
『プログラミング言語 C++』の付録Bあたりを読んでくれ。
これが最後の書き込みになっちゃうのかな…。
0743デフォルトの名無しさん
NGNG0744デフォルトの名無しさん
NGNGchar c1[100],*c2;
c2 = malloc(200);
としたとき、c1はsizeof(c1)で100と分かるんだけど、
c2が200であると調べるにはどうしたらいいんだか・・・
0745デフォルトの名無しさん
NGNGない。mallocの呼び出し元で管理しとかないといけない
0746デフォルトの名無しさん
NGNGmalloc()のソース追えば分かるんじゃない?
0747初心者A
NGNGC言語を始めるには何のソフトが必要ですか?あと他にも何か必要な物はありますか?
習いには行かないで独学で基本だけでもマスターしようと思うのですが難しいでしょうか?
0748744
NGNG都合のいい方法でもないかと考えてましたが甘かったようですね。
とりあえず適当に自作してみます。
0749NOS-TAL-GIA
NGNG見てるかどうかしりまへんが…
使っているコンパイラによりますが
"_msize()" という関数を探してみてくださいな
もしかするとあるかもね
----
無理矢理にでも知りたい場合
かなり強引でコンパイラに依存しますが
void *block=malloc(123);
の様に確保した場合
((size _t *)block)[-1]
でサイズを取得できる場合があります
古いOS等では大方この方法が効きます
0750デフォルトの名無しさん
NGNGまぁWebを見る機械は持ってるようだから、i-modeとかだと厳しいかも知れんがとりあえずは検索したら?
Webで済まないなら本だな。しかし、今時Cから始めなくてもC++からやりゃいいから「プログラミング言語C++」買え。
PCを持ってたらGNU/LinuxかFreeBSDかなにかをダウンロードしてきてインストすればg++がロハで使えるよ。
0751デフォルトの名無しさん
NGNG>C言語を始めるには何のソフトが必要ですか?
Cコンパイラ。「Cマガジン」という雑誌に
フリーのやつが付録としてついてたりする。(Cマガ自体は¥1,200)
>独学で基本だけでもマスターしようと思うのですが難しいでしょうか?
十分できる。本人の能力と努力次第。
本選びは以下のスレが参考になる。
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=964560144
0752デフォルトの名無しさん
NGNGC++からはじめるのには賛成だが、いきなり「プログラミング言語C++」
は読めんと思うぞ。プログラムのプの字も知らんのだろ。
それにC++の本て、C言語知ってる人向けのがほとんどだから、
そういった理由でC言語も少しかじる必要があるかもしれん。
>>747
プログラミングなんてもともと習うもんじゃないぞ。とにかく本やソースを読むし
かない。まー、要所要所で聞いてもかまわんが、なるべく自分で調べて自分で
コード書いてみるしかない。本にいくら金かけられるかだと思うぞ。(高いのが多いのだ)
0753名無しさん
NGNG0754デフォルトの名無しさん
NGNGその議論は、白熱するからやめといた方が。好きにやらせておきなよ。
>>750
世の中には
1. いきなりC++やるべし。
2. そのまえにC言語を押さえておいた方が良い。
3. さらにC言語の前にPASCALやっておいた方が良い。
4. C++の前にCとオブジェクト指向について勉強しておいた方が
良い。SMALLTALKやっとけ。
とか、いろいろ薦める人間がいる。当人のプログラミング経験や環境、
目標、そして資質によって最適解は変わるから、好きな方法でやって
くれ。一つの方法で挫折したら、別の方法を試せば良いだけ。
ちなみにC++の言語仕様はCに比べると巨大で全体を把握するのは難
しい、C++のクラス周りの仕様はオブジェクト指向を理解せずに文法
面から意味を把握しようとすると挫折しがち、というのは事実。だから
C++から勉強するのが良くないかというと、それは別の話ね。
0755デフォルトの名無しさん
NGNG基本的に別物って考えてもらわないと困るザンスよ
0756デフォルトの名無しさん
NGNGcをstreamに押し戻すとは、どういうことなのかイメージできません。
特に『押し戻す』という点が良く分かりません。教えて下さい。
0757デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNGもういちどゲットできるようにする。
0759デフォルトの名無しさん
NGNG入力文字を保管するバッファを関数外部に用意しておいて、
ungetch(c, fp) では、c をそのバッファに保管し、
次に getch(fp) する時には、まずバッファ内の c を取り出して返し、
バッファが空になったら、入力ストリーム fp から文字を読み込む。
というようにして、あたかも
>cをstreamに押し戻す
かのように動作しているのが、ungetch()。
この際だからK&R買っては?
上記以外にも malloc() や printf() なんかの仕組みも載ってて
勉強になるよ。
0760デフォルトの名無しさん
NGNG>C言語を始めようと思うのですが、
と言ってるんだよ。C++と言ってるんじゃないだ。
だからC++は特に意識せず、Cを習うべし。
>>756
実際にファイルに何か書くわけではないけれど、入力バッファ
にcを書き込んで、直後のgetc等ではそのcが読み込まれると言
うことだよ。(だから、バッファのサイズを超えてはungetc
出来ないと思う。)
全然意味ないコードだけど
#include <stdio.h> /*getc, ungetc*/
#include <ctype.h> /*islower, toupper */
int main(int argc, char* argvp[]){
unsigned int ch;
do{
ch=getc(stdin);
if(islower(ch))
ungetc(toupper(ch), stdin);
else
putc(ch, stdout);
}while(EOF != ch);
return 0;
}
0761デフォルトの名無しさん
NGNGC++のは「プログラミング言語C++ 第3版」
ただいきなり読めるかはその人による。
0762760
NGNGそれに全然インデントしてないコード、お見苦しいものを
失礼しました。
0763デフォルトの名無しさん
NGNG学ぶメリットなんてあるんかなぁ・・・。仕事とかで
必要ってならともかく、学生が身に付けようってんなら
C++でしょう、このご時世。
C++の準備としてCやるならともかく・・・・。
0764デフォルトの名無しさん
NGNG1つだけハーベストCというのを持っているのですが、使い方が
よく分かりません。
0765デフォルトの名無しさん
NGNG絶対数で言えばC++よりCの方が使用されてる事例の方が多い。
これからのことを考慮に入れても、C++とCどっちやろうかな〜なんて
漠然と考えている程度なら、どう考えてもCを学んだ方が良い。
0766760
NGNG結局は『選択の自由』とは思う。彼の動機がなんなのか
は知らないけれど、例えばrubyの本とか見てて、拡張がC
で説明されていればCに入って行くと思う。
それから、本人がC++書いてるつもりでもvalarrayとかvector
使わないでint[128]なんてやって悶々と無駄な事やってる
人見ると悲しくなってくる。
仕事になるとCのみってことあるじゃん。
そこで new int[128]が通らなくて迷う前にCはCとして
覚えていても良いかも。
0767デフォルトの名無しさん
NGNGungetch ぢゃなくて ungetc のこと聞いてんだろ。(苦笑
>>756
ungetc なら、 FILE構造体 は
そのファイルの何文字目まで読んだかを記憶する変数を持ってるから、
その値を1文字分戻すってことをやっているんだと思う。
0768デフォルトの名無しさん
NGNGhttp://developer.intel.com/software/products/compilers/pix/c_head3.gif
0769デフォルトの名無しさん
NGNG言葉どおりの質問なら答えはYesだが、
行間も読むと答えはNoとなる。
0770デフォルトの名無しさん
NGNG今時Cコンパイラなんてねーって。
0771デフォルトの名無しさん
NGNG0772デフォルトの名無しさん
NGNG煽りでなければ、情報のソースを出してくれ。
0774デフォルトの名無しさん
NGNG多分C/C++コンパイラはある、とか言いそうだ。
0775デフォルトの名無しさん
NGNGCよりC++の方がすぐれた言語なんだから当然よ。
0776デフォルトの名無しさん
NGNG速度は?
0777773
NGNG0778773
NGNGその優れたと言われる新しい所ほど実際には使われてないんだよな。
というより、使う方が大変だよ。いや、使い切ってる例を知りたいよ。
0779デフォルトの名無しさん
NGNGC++はこれからも少しずつ進化していくだろうね。
一方のCはというと、既に言語としては完成している。
これらをメリットと捉えるか、デメリットと捉えるか。
目的によってだいぶ変わるだろうね。
ただ一ついえることは、C++に移りつつある、なんてことは
断じてない。
0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNGまず、本当に速度が必要な部分てのはそうそう無い。
本当に必要な場合でもフツーアルゴリズムをまともにすれば解決する。
それでもダメな本当に必要な部分はCで書いてもダメ。
0782773
NGNGおれはC++でどーしようか、突き詰めて考えてたら鬱になるよ。
あのSTLどうやってホントに使おうか迷うよ。
えっと、algorithmとかfunctionだっけ?
あれ本気で使って、テンプレートだなんだと組み合わせて、
あーだどーだでOOPだなんて、さっさと昔ながらのやり方した
ほうがよっぽど良いように思うよ。
0783デフォルトの名無しさん
NGNG入門レベルではC++の方が簡単でしょ。
stringとか参照を使えば、ポインタの概念を知らなくても一通りプログラム
を組めるしさ。
もしかするとポインタ(参照)を使わざるをえないJavaより簡単かもしれない。
ポインタを理解してないで「C++を使える」とは言えないけど、ポインタやクラス
のような難しい部分は、プログラムそのもの慣れてからマスターすればいいよね。
0784デフォルトの名無しさん
NGNGポインタやクラスを理解しないでC++って学習できるかな?
少なくとも、一番最初に学ぶべきポイントをすっ飛ばしては
慣れるも何もないと思うんだけど、どうよ? ↓
0785デフォルトの名無しさん
01/08/26 18:29ID:Rb2DRqs2Image画像(現在、UNIXのXウィンドウで表示している)をBMP画像(ウィンドウズの環境で表示)に変換するプログラムを作っているのですがうまくいきません。
Image画像はピクセル値2バイトのモノクロデータ(カラーテーブル有り)ですが、BMP画像に変換するとカラー色がついてしまいます。
原因は、カラーテーブルが使われていないようです。
(16bit以上はカラーテーブルが使われないようですが、使うことはできないのですか?)
やっぱり、BITMAPINFOHEADER構造体の指定が間違っているのでしょうか?
0786デフォルトの名無しさん
01/08/26 18:36ID:5xawU9/Mスレ違い。
0787デフォルトの名無しさん
01/08/26 18:41ID:Svg5Z2msポインタやクラスの学習はC++の学習に含まれています。
0788デフォルトの名無しさん
01/08/26 18:47ID:Svg5Z2msMFCだってDirectXだってC++。
もう世の中C++よ。
0789デフォルトの名無しさん
01/08/26 18:48ID:gEEpQCFI0790デフォルトの名無しさん
01/08/26 18:53ID:zzJMGaZYC++関連スレなら山ほどあるだろ。
0791デフォルトの名無しさん
01/08/26 18:59ID:3fbgCCw6話が微妙にずれてるね。>>783 が書いてるのは
プログラミング自体の初心者で「変数って何ですか」のレベルの人
間が、変数や制御構造などの概念を理解するまで。
の話だよね。
それなら個人的には「C, C++ どっちでも大差ない、むしろ変数の型や
#include を気にせずに済む Perl でも使った方が良いよ」と思う。
むしろ問題はその先で、Hello World から実用的なプログラムを組める
ようになるまでの段差じゃないかな? C なら
「プログラミング言語C」
「エキスパートCプログラミング」
それにアルゴリズムとデータ構造を解説した本を一冊読めば、まぁ合格
というところだが、C++ だと
「プログラミング言語C++」
「Effective C++」
「More Effective C++」
「憂鬱なプログラマのためのオブジェクト指向開発講座」
「デザインパターン」
程度まで理解しないと、実用的なコードは書けないし読めない。道のり
は遠いよ。
0792デフォルトの名無しさん
01/08/26 19:06ID:1gb.tnZwいらんのと違うか?なにもC++やるのにすべての機能知ってる必要
ないし、自分の使いこなせる部分だけひろってけばC++は十分使える
のだ。
0793デフォルトの名無しさん
01/08/26 19:11ID:UgfBg/w6あのー、コンパイラの数と質がぜんぜんちがうんですけど。。
0794デフォルトの名無しさん
01/08/26 19:12ID:JomjwhzYそれでSTLとかMFCとか使ってバンバンコード書くんだろ?
それはそれでいいんだが、Cとはやってる事が違うんだよ。
0795デフォルトの名無しさん
01/08/26 19:21ID:23IWzhMAC++ コンパイラを作るのは C コンパイラを作るよりも数段難しいし、
C++ のオーバーヘッドが許容できない実行環境も存在する。
0796デフォルトの名無しさん
01/08/26 19:25ID:pP2VgnkE16bit BMP画像(モノクロデータ)の作成について
Image画像(現在、UNIXのXウィンドウで表示している)をBMP画像(ウィンドウズの環境で表示)に変換するプログラムを作っているのですがうまくいきません。
Image画像はピクセル値2バイトのモノクロデータ(カラーテーブル有り)ですが、BMP画像に変換するとカラー色がついてしまいます。
原因は、カラーテーブルが使われていないようです。
(16bit以上はカラーテーブルが使われないようですが、使うことはできないのですか?)
やっぱり、BITMAPINFOHEADER構造体の指定が間違っているのでしょうか?
0797デフォルトの名無しさん
01/08/26 19:33ID:bFSG.ukQCで書いてたのをC++にしたからってオーバーヘッドなんて無いよ。
速度が重要な時に論理的に美しく書こうとしてCでは無かった構造(継承とか)使うと
そうもなるけどね。
0798デフォルトの名無しさん
01/08/26 19:36ID:1i8tqCTs環境に依存しすぎる質問は無視されやすいから
もう少し質問をスタンダードなものに噛み砕いてから
もう一度書こう。
0799796
01/08/26 19:48ID:pP2VgnkEすいません。
わかりました。
0800デフォルトの名無しさん
01/08/26 20:13ID:YSpgd2FAC++ でいわゆるオブジェクト指向と関係ないものを揚げても
(1) 型保障リンケージ
(2) 強力な型チェック
(3) 関数テンプレート
(4) 関数オーバロード
(5) デフォルト引数
(6) 局所変数をブロックの途中で定義できる
これらの機能使うだけでも C から C++ に移行する価値は十分あると思われ。
0801デフォルトの名無しさん
01/08/26 20:18ID:qOGvKvts仮想関数などのオーバーヘッドは当然ですが、それがなくてもランタイ
ム環境の仕事が増えます。
C++ では例外が飛んできたときに自動変数のデストラクタを呼ぶ必要
があるけど、そのための追跡コードとか、実行時型識別のためのコー
ドとか。
0803デフォルトの名無しさん
01/08/26 21:08ID:xAvBmpd.マニュアルを読んでください。
0804デフォルトの名無しさん
01/08/26 21:26ID:y4vgeGlcランタイム環境の仕事ってなに?Cのコード持ってきた時に何が呼ばれるっての?
例外とかRTTIとかもCのコードなら関係ねーと思うけど。
あったとしてもゴミでしょ。
0805800
01/08/26 21:38ID:T2mfBZtY例外や実行時型チェックを禁止してオーバヘッドを回避する
コンパイルオプションは大抵の処理系にあるはず。
C++ も C 譲りの効率重視の言語であることに変わりはない。
0806デフォルトの名無しさん
01/08/26 21:49ID:8vO3bCFkだから C 言語なんて要らない、と?
0808デフォルトの名無しさん
01/08/26 22:14ID:8vO3bCFk話が噛み合ってなかったか。
かなり脱線してるけど >>801 は元々 >>792 で「C++はC言語を含んでるんだか
ら、C言語なんてものいらん」と書かれていたことに対する反論なんです。主張は
次の二つ。
まずは、C++はCのスーパーセットだけど、コンパイラやランタイム環境を提供
する側からするとC++はCよりも手間がかかる。だから、実装が容易なC言語に
も意味がある。
もう一つは、C++もフルスペックで使うと、リソースが厳しい環境では性能上の
問題が出る。そこでぎりぎりまで絞ると結局Cと大差ないから、それならCでも良
いだろう(もちろん Embedding C++ って選択肢もあるけど、これが使えるかどう
かは場合によるので、素のCも選択肢に残しておいて欲しい)。
C++使える環境なら積極的に使えというのは同意だけど、C++処理系が提供さ
れていてもCの処理系ほど枯れていない場合も多いので、何でもかんでもC++と
はいかないのが現実。
0810デフォルトの名無しさん
01/08/26 22:42ID:oX28S3OMSTLとOOPはあまり関係無いと思うが。
0811800
01/08/26 22:55ID:kIMgTLjk前言を翻すようだけど C++ 勉強する人は いきなり C++ からやるのではなくて、
やはり最初は基本として C の文法を頭に叩き込んでから C++ に入ってほしい。
C++ だけやってるやつはどうも信頼できない気がする。まぁ、単にオレが C++ の
前に C をやってたせいかもしれないけどね。
その場合でもコンパイルは(C++ が使える環境なら)型チェックが強力な C++ で
行った方がよいとは思うけどね。
ただ C も型保障リンケージくらいは導入してほしい、てのもあるのだが。
0812デフォルトの名無しさん
01/08/26 22:58ID:ZfNWoqwQ型保証リンクなんて全然いらないね。ヘッダファイルを使えば済む。
それより、変数宣言だけでも好きな場所でさせてくれ。
0813デフォルトの名無しさん
01/08/26 23:07ID:9zk6TrLQ0814デフォルトの名無しさん
01/08/26 23:11ID:oFIkZVhAできるよ。
0815デフォルトの名無しさん
01/08/26 23:53ID:1sqowansやっぱ違うと思う。
C++では使えるけど、Cでは使えない事ってかなりあるんだから、
Cを知っておくに越したことはないと思う。
Cマガ投稿する時とか困らないようにな(w
0816デフォルトの名無しさん
01/08/27 00:02ID:n/Vu4WNc0817デフォルトの名無しさん
01/08/27 00:02ID:INo6JfbMCは、読める程度でよい。
C++が一通りできれば、Cは読める。
C++は入門には敷居が高いって声が相変わらずあるけど、
入門レベルでは、むしろC++のほうが簡単である。
0818デフォルトの名無しさん
01/08/27 00:03ID:INo6JfbMふつうC++はCのライブラリもリンクできるようになっている。
0819デフォルトの名無しさん
01/08/27 00:06ID:INo6JfbMWinAPIは、処理系が対応すれは、言語にかかわらず呼び出せる。
0820デフォルトの名無しさん
01/08/27 00:13ID:/84EBIzAプログラミング言語の習得と、各プラットホームでのプログラミング
技術の習得は別だよ。
Cプログラミングが一通りできるからといって、すぐに通信関係のプロ
グラムを書けるわけではないし、UNIX プログラマが Win32 に鞍替え
するなら Win32 に関する勉強が必要になる。
あと「入門レベル」というのが曖昧なので、もう少し詳しくかいた方が
良いと思うよ。
0821デフォルトの名無しさん
01/08/27 00:26ID:INo6JfbMべつに、全てのプラットホームで全てのジャンルのプログラミング
スキルを身につける話をしてるわけじゃない。
そんなことは現実的でもないし。
Windowsでプログラムを学ぼうすると、いろいろ選択肢があるが
CかC++に限定して、どちらが良いかということなら、
Cから入るメリットはない。
0822デフォルトの名無しさん
01/08/27 00:38ID:/84EBIzASDK か MFC か、という話?
0823デフォルトの名無しさん
01/08/27 00:47ID:pgWYs8fAAPIの呼び出し形式はPASCAL形式なので、
C前提ってわけではない。
# int PASCAL WinMain()とかって見覚えないかな
0824800
01/08/27 01:30ID:gDY6k4QU> Windowsでプログラムを学ぼうすると、いろいろ選択肢があるが
> CかC++に限定して、どちらが良いかということなら、
> Cから入るメリットはない。
う〜ん、そういういきなりGUI から入るやつが微妙に信頼できないのだよね。
Win 環境でプログラムする場合でも、まずはアルゴリズムの勉強から入るはず
でしょ。とすると、最初はコマンドラインのプログラムから入って基本を身に
つけるべきだと思う。C の標準ライブラリの使い方も知らんやつに Win API が
マトモに使えるとは、ましてや MFC が使いこなせるとは思えない。
オレの考えが古いのかもしれんが。
0825デフォルトの名無しさん
01/08/27 01:43ID:INo6JfbMそういう書き方をすると、C++ってGUI用の言語みたいじゃん。
UIで、CとC++の使いどころを分けるのって認識が間違ってるよ。
0826800
01/08/27 01:54ID:gDY6k4QUなるほど、そういやそうだな。ま、>>817 が Win やるなら C やらなくて
よいみたいなこと言ったから…。
ともかく C++ から入る人でも C の標準ライブラリはマスタしてほしいし、
C だけでできること、できないことをきちんと区別できるようになってほしい。
0827デフォルトの名無しさん
01/08/27 03:07ID:iVLWrpEMPASCAL とついてるから C 前提ではない、というのも短絡な気が少々。
コールゲートあたりにあわせたんじゃ?とも考えられるような気もしますけど。
0828デフォルトの名無しさん
01/08/27 04:18ID:INo6JfbM>なるほど、そういやそうだな。ま、>>817 が Win やるなら C やらなくて
>よいみたいなこと言ったから…。
自分の勘違いを人のせいにすんなよ。
俺は、コンパイラとか、各種の資源の状況から「Windowsでやるなら」って
言ったの。
0829800
01/08/27 05:22ID:OdbfeXSk> 俺は、コンパイラとか、各種の資源の状況から「Windowsでやるなら」って
> 言ったの。
それは悪かった。それについては同意。
でも「C は読める程度でよい」とか、「入門レベルでは C++ の方が簡単」と
いう点では、やはり賛成しかねるな。
C/C++ が実行効率重視の言語であることは、C++ でその比重が多少他の要素に
移ったとは言え、依然として第一の目的であることに変わりはない。
だから入門者に、低レベルの文字列操作やポインタより先に string クラス
とかを教えることは、使えない C++ プログラマを量産することにしかならない
と思う。
入門者には練習問題として string クラスを作らせるべきだ、と言うならわかるが。
0830デフォルトの名無しさん
01/08/27 05:35ID:6h0gcybg議論がかみ合ってない、っていうか議論になってないね。
Windows固有の話ならスレ違いっていうのがまずあるけど、
それを別にしても、828の主張は他人と議論するそれではない。
「入門レベルって何?」ってところも明確にしていないし、>>784,>>787
で触れられているポインタの話だって、クラスとかそこから派生させる
事を考えると必要不可欠。
「そんなのは入門レベルじゃない。」って主張するかもしれないけど、
じゃあそれがどれほどCと違っているのかはこれもまでの説明からは不明。
ただ、WindowでGUIプログラムを学ぼうとすると、C++(むしろVC++&Win方言)
が必須という点には同意。これはオレの経験からの話だけど、通信系でWinAPI
を直で叩いていた頃には、Unix上での知識&Cプログラムで十分だったけど、
Windowsが提供する枠組みの中で、特にGUI系のプログラムを作る場合には、
C++は不可避だし、>>820の言う通り、Windowsがどう動いているのかと言う勉
強は必要。ただ、これらがCに比べて簡単かと言われると同意しかねる。
(すでに>>828が言う入門レベルではないかもしれないが、、、)
まずは、「入門レベルって何?」ってところからはっきりさせて欲しい。
0831デフォルトの名無しさん
01/08/27 09:00ID:WSIwDgS6どっちか片方なんてケチくさいこと言うな。
0832デフォルトの名無しさん
01/08/27 15:52ID:3Bh1bjXY近道、と主張してるんだろうか?
0833デフォルトの名無しさん
01/08/28 12:37ID:qhPN40nM2文字:aa,ab,ac,ad,..............xx,xy,xz
3文字:aaa,aab,aac,aad,...aaz,aba,abb,acc.....azy,azz,baa,bab........xxx
......
n文字:.....
とn文字までの全てのアルファベット(小文字のみ)の組み合わせの文字列を作りたいのですがどうすればいいのでしょうか?
char Moji[] = "abcdefghijklmnopqrstuvwxyz"; //26文字
int main(int argc,char* argv[])
{
  int loop1,loop2,loop3,loop4.....loopn;
  for (loop1 = 0;loop1 <25;loop1++){
    printf("%c%c",Moji[loop1*2],Moji[loop1*2+1]);
    for (loop2 = 0;loop2 <25;loop2++){
      printf("%c%c",Moji[loop2*2],Moji[loop2*2+1]);
      for (loop3 = 0;loop3 <25;loop3++){
        printf("%c%c",Moji[loop3*2],Moji[loop3*2+1]);
        for (loop4 = 0;loop4 <25;loop4++){
          printf("%c%c",Moji[loop4*2],Moji[loop4*2+1]);
          ........
                for (loopn = 0;loopn <25;loopn++){
                  printf("%c%c",Moji[loopn*2],Moji[loopn*2+1]);
以下処理続く
と、すればできない事も無いですが明らかに賢くないですよね・・・・
その上これだと1〜n文字の文字列を作るのではなくn文字の文字列だけしか作れません。
Create_Moji(int n);のような関数をつくるには
どうすればいいのでしょうか?お願いします。
0834デフォルトの名無しさん
01/08/28 13:22ID:3vVKFA1ECreate_Moji(int n);
↓
Create_Moji(int n,char* lpStr);
で考えた方がいいのでは。
STLが使えるならstd::stringを使う。
0835デフォルトの名無しさん
01/08/28 14:00ID:ign9iVXYa-zを26進数で考えればいい
26のn乗で取り得る最大値を求めその数分ループ
あとは数値を26進数に変換すればOK
こんなかんじ
int Create_Moji(int n)
{
int i, max = pow(26, n);
for(i = 0; i < max; i++)
conv26(i);
}
# conv26()は宿題
0836デフォルトの名無しさん
01/08/28 14:19ID:W6L8C4FUそれだと、n文字のものしか作れないと思われ
0837デフォルトの名無しさん
01/08/28 14:44ID:ign9iVXY> それだと、n文字のものしか作れないと思われ
void Create_Moji(int n)
{
int i, j, max;
for(i = 1; i <= n; i++){
max = pow(26, i)
fot(j = 0; j < max; j++)
conv26(i);
}
}
0838デフォルトの名無しさん
01/08/28 15:26ID:qhPN40nMありがとうございました。
これから解読(理解)させてもらいます。(w
0839デフォルトの名無しさん
01/08/28 15:28ID:qhPN40nM0840デフォルトの名無しさん
01/08/28 16:57ID:qhPN40nM∩
∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´Д`)// < 先生! 宿題解りませ〜ん
/ / \_____________
ずっと考えてましたが解りません。a-zを26進数で考えればいい
というのは理解できましたが具体的にコーディングしようとすると・・・・
ヒープ領域を使ってみたり色々しましたが解りませんでした。
conv26()についてもう少し具体的に教えて頂けないでしょうか。
よろしくお願いします。
0841デフォルトの名無しさん
01/08/28 17:13ID:PsZ1SeyABorland C++ Compiler 5.5 環境ファイル/パス設定プログラム(http://cmaga.zdnet.co.jp/setbcc.html)を
落として設定を終えました。
…が、上記サイトの『「ちょっと」使ってみる』で行き詰ってしまいました。
OSはw2kなのですがMS-DOSプロンプトて2kには無いんですよね?
何かいい方法を教えてください。お願いします。
0842デフォルトの名無しさん
01/08/28 17:14ID:u7V458JAなにが足りないのでしょうか?
教えてください。
/*sk2-11 */
#include <stdio.h>
main()
{
int score, i, j, n=0, data[100], work;
do{
printf("%d件目のデータを入力してください。(終了時は-99999)",n+1);
scanf("%d", &score);
if(score!=-99999){
data[n++]=score;
}
}while(score!=-99999);
for(i=0; i<n-1 ;i++){
for(j=i+1; j<n; j++){
if(data[i]<data[j]){
work=data[i];
data[i]=data[j];
data[j]=work;
}
}
0843デフォルトの名無しさん
01/08/28 17:24ID:2hRAXWEYあるよ
0844デフォルトの名無しさん
01/08/28 17:55ID:G/nWj5eY再起呼び出しではだめですか?
#include <stdio.h>
#include <string.h>
char Moji[] = "abcdefghijklmnopqrstuvwxyz"; //26文字
void make_moji( int n, int depth, char * tMoji )
{
char ttMoji[32]; //最大31文字までとしよう
int i;
if(depth>n) {
tMoji[n] = '\0';
printf("%s\n", tMoji);
return;
}
strncpy(ttMoji, tMoji, depth);
for(i=0; i<26; i++) {
ttMoji[depth-1] = Moji[i];
make_moji(n, depth+1, ttMoji);
}
}
int main(int argc,char* argv[])
{
int n;
char tMoji[32]; //最大31文字までとしよう
n=10; //10文字としよう
tMoji[0] = '\0';
make_moji(n, 1, tMoji);
return 0;
}
でもこれってまさかスパムメール作成に使うんじゃないですよね?
0845デフォルトの名無しさん
01/08/28 18:00ID:sorP8m5g作ってみた。
/* include files : stdio.h stdlib.h string.h math.h */
void Create_Moji(int n)
{
char *temp;
const int loop_end = pow(26, n); /* 必要となるループ回数 */
int i, j;
/* 作業用配列の確保と初期化 */
if ((temp = (char *)malloc(n + 1)) == NULL)
fputs("Create_Moji : failed in malloc!", stderr), exit(1);
memset(temp, 'a', n);
temp[n] = '\0';
/* 表示部 */
for (i = 0; i < loop_end; i++) {
puts(temp);
for (j = n - 1; temp[j] == 'z'; j--)
temp[j] = 'a';
temp[j]++;
}
free(temp);
}
ASCII系文字コード以外への対応は宿題ということで…。
0846デフォルトの名無しさん
01/08/28 18:20ID:ign9iVXY基数(今回は26進数なので26)で割りながら、余りを文字列にセットする
割れなくなったら再帰を終了
しかし、それだと上位桁と下位桁が逆転しているのでreverse()で
文字列を逆転する
また、BASE,TBLを設定しなおせば16進数, 62進数も処理できるが
あまり速くはない
#define BASE 26
const static char tbl[] = "abcdefghijklmnopqrstuvwxyz";
void conv26(int i)
{
char buf[256];
conv26str(i, buf);
reverse(buf);
printf("%s\n", buf);
}
void conv26str(int i, char *s)
{
if(i / BASE == 0){
*s++ = tbl[i % BASE];
*s = '\0';
return;
}
*s++ = tbl[i % BASE];
conv26str(i / BASE, s);
}
void reverse(char *s)
{
char *e;
for(e = s + strlen(s) - 1; s < e; s++, e--)
swap(s, e);
}
void swap(char *a, char *b)
{
char buf;
buf = *a; *a = *b; *b = buf;
}
0847デフォルトの名無しさん
01/08/28 18:22ID:ign9iVXYあります。コマンドプロンプトとよばれていますが...
0848デフォルトの名無しさん
01/08/28 18:34ID:ign9iVXY> 教えてください。
こちらもいくつか質問をしたい、それによって回答するかしないかの判断を行う
問1:このソースは自分で考えたものですか?
問2:以下のアルゴリズムが行っている処理を一言で述べてください。
(あなたの提示したソースの下の部分です)
> for(i=0; i<n-1 ;i++){
> for(j=i+1; j<n; j++){
> if(data[i]<data[j]){
> work=data[i];
> data[i]=data[j];
> data[j]=work;
> }
> }
> }
0849デフォルトの名無しさん
01/08/28 18:42ID:TagcTmmE出力を開始すれば逆順にならないよ。
ゼロ埋め(このばあい 'a' 埋め)でちょっと美しくない処理を
してるけど、↓を作ってみた。
#include <stdio.h>
#include <math.h>
void dec2nnn(int dec, int cardinal)
{
if((dec / cardinal) == 0)
printf("%c", dec%cardinal + 'a');
else{
dec2nnn(dec/cardinal, cardinal);
printf("%c", dec%cardinal + 'a');
}
}
void Create_Moji(int n)
{
int i, j, k, max;
for(i=1; i<=n; i++){
printf("[%d文字] ", i);
max = pow(26, i);
for(j = 0; j<i; j++) printf("a");
printf(", ");
for(j = 1; j < max; j++){
for(k=pow(26, i-1); j<=k-1; k=k/26)
printf("a");
dec2nnn(j, 26);
printf(", ");
}
printf("\n");
}
}
int main()
{
Create_Moji(3);
return 0;
}
0850デフォルトの名無しさん
01/08/28 23:17ID:DRFexFbs基本的に君の考えでOKだと思うんだけど。
#include <stdio.h>
#include <string.h>
#define MAX_PLACE 1024
int disp(int n)
{
char t[MAX_PLACE];
int i;
if (n >= MAX_PLACE) {
return -1;
}
memset(t, 'a', n + 1);
while (t[n] == 'a') {
for (i = n - 1; i >= 0; --i) {
putchar(t[i]);
}
putchar('\n');
t[0]++;
for (i = 0; i < n; i++) {
if (t[i] > 'z') {
t[i] = 'a';
t[i + 1]++;
}
}
}
return 0;
}
int main()
{
return disp(3);
}
0851デフォルトの名無しさん
01/08/29 00:23ID:a/JC9lb2∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´Д`)// < 先生達の事は絶対忘れません
/ / \_____________
みなさんありがとうございました。でも、どれもなかなか難しいですね。
ようやく、2,3個理解する事ができたような気がしてる最中です。
残りも含めてアルゴリズムを自分のものにしようと思います。
0852デフォルトの名無しさん
01/08/29 01:33ID:SkRUP4ao如何すればよいですか?
0853デフォルトの名無しさん
01/08/29 01:38ID:GIhJkjc.そんなことできるの?
パレット持ってないと駄目っぽい気がするけど。
0854デフォルトの名無しさん
01/08/29 01:39ID:.vw5ElIM16bitグレースケールなんてマニアックな仕様、まず使えるかどうか調べてから使え。
少なくともそんなもんサポートしてるビデオカードはほとんど無いと思われ。
0855852
01/08/29 03:27ID:SkRUP4aoカラーテーブルは自分で指定しているのですが、使われていない見たいです。
(16bit以上では、普通はカラーテーブルを持たないらしいですね。)
>>854
ビデオカードは問題あるの?
UNIXのXウィンドウでは、綺麗にでました。
0856デフォルトの名無しさん
01/08/29 04:16ID:xEZlTqw216bitグレースケールだと(65535,65535,65535)になるのか?
単純に考えると各カラー16bit対応のビデオが要りそう。
フルカラー相当だと48bit必要。って合ってるかこれ?
あってるとおもう。
>>855のいうようにきれいにでたからといって、
ライブラリーの段階で下位8ビットは無視して上位8ビットだけ表示している可能性もあるので、
それが本当に16ビットで表示されているかどうかはハードに依存するはず。
0859デフォルトの名無しさん
01/08/30 05:27ID:MjfilObQ0860デフォルトの名無しさん
01/08/30 20:53ID:M.Ld2ZAM医療用じゃなくてもフツーのSGIのマシンは12bit以上とかあるよ。
フルカラーなら8bitでも分からないけどモノクロでも12bitあれば
まぁ十分じゃないかな。
0861
01/08/30 23:52ID:cl5gnins0862デフォルトの名無しさん
01/08/30 23:54ID:EkMPJ/Yg0863デフォルトの名無しさん
01/08/30 23:57ID:Esv.WjFE0864デフォルトの名無しさん
01/08/31 01:36ID:FMmhIaGI0865デフォルトの名無しさん
01/08/31 01:44ID:6a8y9j3kヤツが書いた部分はかなり職人だと思ったり。
0867デフォルトの名無しさん
01/08/31 21:22ID:7zNmzfnI頭爆発しそうです。質問させて頂きます。
ポインタへのポインターを動的に確保するには例えば
char **NewStr = NULL;
NewStr = (char**)malloc( sizeof(char**) *7 );
という具合にすればいいのでしょうか?なんか頭が混乱してしまって。
お願いします。
0868デフォルトの名無しさん
01/08/31 21:34ID:7zNmzfnI0869デフォルトの名無しさん
01/08/31 21:48ID:7zNmzfnIすいませんでした。
0870デフォルトの名無しさん
01/08/31 22:23ID:7zNmzfnIお騒がせしてもうしわけありませんでした。
0871デフォルトの名無しさん
01/08/31 23:28ID:7xETyOKMchar **string_array = (char **)malloc( sizeof(char *) * 10);
string_array[0] = "blah blah";
string_array[1] = "sigh sigh";
0872sage
01/08/31 23:45ID:Rxk6Y1v60873デフォルトの名無しさん
01/09/01 00:13ID:vYeYNb6o別に問題はないね。エラーチェックは無いけど。
0874sage
01/09/01 00:21ID:WPZOqF8E間違いではないし。うん
0875デフォルトの名無しさん
01/09/01 00:22ID:8UdnvL3Aちんこぷらぷら
0876デフォルトの名無しさん
01/09/01 01:10ID:LeyymvoYポインタって[]のシンタックスシュガーとからむと死にそうになりますね。
例えば
char **NewStr = NULL;;
NewStr = (char**)malloc( sizeof(char*) * 7 );
*NewStr = (char*)malloc( sizeof( char ) * 256 );
*NewStr = "ABCDEFGHIJKLMNOPQRSTU";
printf( "%s\n" , &*NewStr[0] );
printf( "%s\n" , NewStr[0] );
printf( "%s\n" , *(NewStr + 0 ) );
printf( "%s\n" , &NewStr[0][0] );
で全部同じ表示しますよね。プロの皆さんってこうゆう場合でも
すらすら読めるものでしょうか?
私は一生すらすら読めそうにない(T_T)
0877sage
01/09/01 01:14ID:WPZOqF8Eこれもつっこまないでおくよ。あるいみ間違いでもないし。
0878デフォルトの名無しさん
01/09/01 01:15ID:LeyymvoY頭混乱しまくって死にそうです。
0879sage
01/09/01 01:32ID:WPZOqF8Echar **NewStr = NULL;;
NewStr = (char**)malloc( sizeof(char*) * 7 );
*NewStr = (char*)malloc( sizeof( char ) * 256 );
printf("%x\n", *NewStr);/*(゜д゜)<ナンダコノヤロー*/
*NewStr = "ABCDEFGHIJKLMNOPQRSTU";
printf("%x\n", *NewStr);/*(゜д゜)<ミテンナヨ*/
printf( "%s\n" , &*NewStr[0] );
printf( "%s\n" , NewStr[0] );
printf( "%s\n" , *(NewStr + 0 ) );
printf( "%s\n" , &NewStr[0][0] );
とりあえずこれやっとけ。
で、じっくり考えとけ。
0880デフォルトの名無しさん
01/09/01 01:35ID:LeyymvoY0881パンティーはいたまま排便、好きな人
01/09/01 01:38ID:OK9pI4Coパンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
0882パンティーはいたまま排便、好きな人
01/09/01 01:45ID:OK9pI4Coパンティーはいたまま排便、好きな人
パンティーはいたまま排便、好き
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
0883デフォルトの名無しさん
01/09/01 01:49ID:3D0QdnKM> *NewStr = (char*)malloc( sizeof( char ) * 256 );
> *NewStr = "ABCDEFGHIJKLMNOPQRSTU";
本題と関係ないが、これだと *NewStr に割り当てたメモリがリーク
する。
strcpy(NewStr[0], "ABCD...");
0884パンティーはいたまま排便、好きな人
01/09/01 01:51ID:OK9pI4Coパンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
0885デフォルトの名無しさん
01/09/01 01:52ID:aOy89HzY変な目つきで静観してる連中は見ないことにしよう。
>>880
*NewStr = (char *)malloc...
*NewStr = "ABC...
下のところ、const char * なので少し注意したほうがいいです。
厳密にコンパイルすると警告がでます。そんなところで。
慣れれば大したことないよ。 がんばれっ。
0886デフォルトの名無しさん
01/09/01 01:57ID:LeyymvoYうう 難しいですね。文字列リテラルはどこかに確保された
char型の配列で、式中では先頭ポインタに読み替えられるから
、、、、えっと、たしかに文字列を代入してることにはならないって
理解でいいのでしょうか????うう難しい。
ポインタまではいけそうだと思ったんですがポインタへのポインタ
になったとたん訳がわからなくなってしまいました。
こつとかあるのかな。とほほ。
0887パンティーはいたまま排便、好きな人
01/09/01 01:57ID:OK9pI4Coパンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
パンティーはいたまま排便、好きな人
0888デフォルトの名無しさん
01/09/01 02:02ID:LeyymvoYですが、今日のところは休みます。皆様、おやすみなさいです。
0889デフォルトの名無しさん
01/09/01 02:07ID:aOy89HzYNewStr[0] はこの配列の 0 番目、型は char *
NewStr[1] はこの配列の 1 番目、型は char *
...
NewStr[0] = "ABCDEFG";
strcpy( NewStr[0], "ABCDEFG");
上はすでにある文字列リテラル "ABCDEFG" のアドレスを代入
下はNewStr[0]の指すアドレスに "ABCDEFG" をコピー
動きがちがうのでちうい。
下は NewStr[0] が malloc などで使える領域を指していないと
コアダンプします。
0891デフォルトの名無しさん
01/09/01 07:46ID:q8G9lFA60892デフォルトの名無しさん
01/09/01 14:21ID:MI8SfqKo2次元配列は「配列の配列」と言うのをきちんと理解してない
のが混乱してた原因だったのかもです。
2次元配列が式中では「intの配列」へのポインタに読み替えられるという事が
アドレスをすべて表示する実験でやっとわかりました。
第一次元?のhoge[0][]はどこかに別のところにスタックを確保してるのだと誤解してました。
単に配列への先頭のポインタ?なんですね。
実験して気づいたのですが、hoge[3][3]の時、hoge[0][8];とかやっても要素にアクセス
できますね。やっちゃいけないんでしょうが(^_^;
0893デフォルトの名無しさん
01/09/01 16:35ID:uXCDEcwMhanya[1][0] == hanya[0][2]
で、けっきょく同じことだったと思う。
別にアクセス違反じゃないので、大丈夫(だったと思う。)
ちょっと変わったやり方だけど。
0894デフォルトの名無しさん
01/09/01 16:43ID:uXCDEcwM理解してない、とかもっとCを掘り下げたいって人は
「Cプログラミング専門過程」藤原博文 技術評論社
なんていいのではないかと。「Cプログラミング診断室」の著者
です。けっこうたたかれてるみたいだけど^^;。
入門書の次に読む本としてはなかなかだと思います。
メモリの動作を詳しく見ているので、ポインタとか理解深まる
のではないかと。
0895894
01/09/01 16:46ID:uXCDEcwM専門過程→専門課程
0896デフォルトの名無しさん
01/09/01 17:46ID:MI8SfqKoCプログラミング診断室は熟読しました。面白いですね。
ネットで無料で読めるなんて驚きです。
「Cプログラミング専門課程」も興味あります。どんな本か知らなかった
のですが、そうですか。読んでみます。
叩かれてるってのが気になりますが、今の私では何で叩かれてるか
理解できないと思うのでいいかな。(笑)
0897デフォルトの名無しさん
01/09/01 18:24ID:GmO3PIyEあるので、その辺で衝突するのでしょうか。
C診断室に、たしか1つの関数の長さは60行ぐらいとか書いてあった
と思いますが、60行という制限は短すぎるという人もちらほら。
0898デフォルトの名無しさん
01/09/01 20:25ID:MI8SfqKoあのおかげで関数を短くして分けるくせはつきました。
0899デフォルトの名無しさん
01/09/01 22:08ID:ddv07fY2関数が長いと確かに恥ずかしい。
が、漏れはプログラマやってること自体がそもそも恥ずかしいな。
0900デフォルトの名無しさん
01/09/01 22:21ID:TY5fGfOk1000行でももれなく把握できる、と断言できるなら1000行でもいいでしょ。
だけどそんな人は一握りしかいないし普通の人は馬鹿だから
60行程度に収めとけば馬鹿がメンテすることになっても
まあ大丈夫かなという目安かと。
0901デフォルトの名無しさん
01/09/01 22:27ID:OpA/UgtQ2000行以上だったっけ?あれって。
0902デフォルトの名無しさん
01/09/01 23:14ID:23xXAcjEDLできるよ。↓ここで。
http://www.pro.or.jp/~fuji/mybooks/cdiag/index.html
これってC++かな?
0903デフォルトの名無しさん
01/09/01 23:46ID:Fd.AZCp.藤原本が叩かれるのは、基礎的な内容を大げさに書いているからだよ。
彼の本を遊びで読むのは良いが、それに信じ込まないようにね。
慣れたら多くの本や多くのコードを読みましょう。規格書も、デザイン本も
読んでみるといいよ。それなら井の中の蛙にならない。
0904デフォルトの名無しさん
01/09/02 00:10ID:75FMiF1YCを勉強している者です。Cプログラミング診断室で
プリプロセッサのことが載っています。いい本がないって。
#誰の本の悪口言ってるのか分かりますが(^_^;
それで、プリプロセッサのノウハウを勉強することがいい本とか
ページとかないでしょうか?
グーグルとかで検索すればたくさんヒットしますが、自分自身
プリプロセッサのノウハウがないので、どれを参考にしたらいいのか
わかりません。
皆様、プリプロセッサを勉強するいい方法なり、書籍、ページなど
ご存知ないでしょうか。よろしくお願いします。
0905デフォルトの名無しさん
01/09/02 00:27ID:oK1onob.Q and A読んだ見たら?
0906デフォルトの名無しさん
01/09/02 00:27ID:.f/mjsDIC++とか、Cでも今時のならプリプロに頼ることはほとんどないと思うけど。
デバッグしにくくなるだけだから素直にコード書いた方がいいよ。
0907デフォルトの名無しさん
01/09/02 00:44ID:75FMiF1YQ and Aって{「C言語Q&A」 工学社 竹田仰著 }のことですか?
検索したらそれっぽいのはこれくらいでした。
>906 たしかにデバッグがしんどいですね。それなら別に勉強しなくて
いいのかな。
0908デフォルトの名無しさん
01/09/02 01:02ID:XnpnvR/g> C++とか、Cでも今時のならプリプロに頼ることはほとんどないと思うけど。
マクロを多用しすぎるのは問題だけど、マクロを使うとすっきり書けるコードも
あるよ。
MFC の IMPLEMENT_RUNTIMECLASS() とか ATL の MESSAGE_HANDLER() なんかは
マクロ使った方がマシな例。
0909デフォルトの名無しさん
01/09/02 02:16ID:ElAtzxTUまず>>1を読め。
>>908
templateで解決するような。後者はinlineじゃダメなの?
0910デフォルトの名無しさん
01/09/02 07:05ID:4iR.eRxYgetchar() != EOFという式の値が0か1であることを確認せよ.
アンサーブックの方では
#include <stdio.h>
main()
{
int c;
while(c = getchar() != EOF)
printf("%d\n", c);
printf("%d - at EOF\n", c);
}
ってなってて,最後のprintf("%d - at EOF\n", c);のat EOFの部分が謎なんですが
どういう意味でしょう?atなんて文字は今まで見たことがないのですが.
(c = getchar()) != EOF,が入力から受け取ったのをcに入れて,それがEOFじゃないなら云々.
で,この
c = getchar() != EOFが,優先順位が変わって,入力されたのがEOFであるかないかで真か偽が
cに入ると思うのですけど,解答をみたら上記の通りでした.
わかる人,いましたら解説してくださいませ.
0911sage
01/09/02 07:20ID:PvZGbwyU> EOFであるかないかで真か偽がcに入ると思うのですけど,
これであってます。
c = (getchar() != EOF) と同じことで、真か偽がcに入ります。
それで c が0か1であることを printf で表示して確認している
> ってなってて,最後のprintf("%d - at EOF\n", c);のat EOFの部分が謎なんですが
> どういう意味でしょう?atなんて文字は今まで見たことがないのですが.
実際に実行すればわかると思うけど、- at EOF の部分は特殊文字でも無い。
英語でEOFで、ってこと。
0912デフォルトの名無しさん
01/09/02 08:13ID:4iR.eRxY3時間近くなんだろうなんだろうと考え込んでいましたが,自分はめちゃくちゃ
ドキュソだったことがわかりました....
""で囲まれているのだから
(0か1) - at EOF
って表示させているだけですね...
表示させられれば一瞬できずいたのかも知れませんが,EOFってキーボード
からの入力はできないものでしょうか.
0913デフォルトの名無しさん
01/09/02 08:29ID:PvZGbwyUControl-D だよ(←これって環境依存だっけ?)
0914デフォルトの名無しさん
01/09/02 08:47ID:4iR.eRxYWindows2000SP2のDOS窓を使っていて,Controlといろいろ同時押しを
したらzキーで
Press any Key to continue
と終了時のメッセージが出てくれました.
0916デフォルトの名無しさん
01/09/02 17:49ID:YF/HkYq6ポインタ変数自体の確保領域は何処ですか?ヒープですか?
ヒープに取ったオブジェクト中でポインタを宣言したら、それの確保領域
は当然ヒープでしょうか?
0917デフォルトの名無しさん
01/09/02 18:31ID:pMnOmo0k場所による。Cには何も魔法はないよ。関数の中に書いたら他の変数と同じく
スタック上。ヒープというのは謎だが。
0918sage
01/09/02 18:40ID:O1AzBlvwヒープでもいいし、静的領域でもいいし、スタックでもいいよ。
メモリ上にも取られないことあるしね。
二行目以降よくわからんが
宣言と定義、動的な確保の違いについてよく理解してないなら
一度、参考書を読み直すといいよ。
がんばれ
0919デフォルトの名無しさん
01/09/02 18:41ID:tx6ZtRyQ宣言の仕方によってそれ相応の場所になるのでは?
べつにポインタだからって特別な場所ってわけでもないし。
0920デフォルトの名無しさん
01/09/02 19:05ID:YF/HkYq6オブジェクトが消滅するのと同時に消えるのですか
0921デフォルトの名無しさん
01/09/02 19:30ID:TAJZb8DMここは C のスレだぞ?
お前 C++ の話してないか?
0922sage
01/09/02 20:52ID:O1AzBlvwC++かもしれんな。
CだろうがC++だろうが同時に消えるよ。
だが、ポインタが示す先オブジェクトについては、
明示的にそういうプログラムを書かない限り、消えない。
C++の話しをするなら別スレにおいで。
0923デフォルトの名無しさん
01/09/02 22:01ID:1arUuIGk#include <stdio.h>
void func(int *a[4][5]){
printf("%d\n",a[3][1]);
}
int main(void)
{
int i[3][4][5];
i[2][3][1]=100;
func(i[2]);
printf("%d",i[2][3][1]);
return 0;
}
このようなコードでも動作はするのですが
警告を出さないためにはどのように書けば良いのでしょうか?
0924デフォルトの名無しさん
01/09/02 22:45ID:JF5GVKf2< void func(int a[4][5]){
0925デフォルトの名無しさん
01/09/02 23:18ID:.f0adP9o↓
void func(int (*a)[5])
0926デフォルトの名無しさん
01/09/02 23:21ID:.f0adP9ovoid func(int a[][5])
0927デフォルトの名無しさん
01/09/02 23:53ID:1arUuIGkありがとうございます。
本を読んでも良くわからなかったので助かりました。
0928デフォルトの名無しさん
01/09/03 21:51ID:eo6BxHkY何しろ最大数が不明なので、グローバルでint[10000];とかはやりたくないし・・・。
都合よく増えた分だけ拡張可能な領域確保は、どうしたら良いのでしょうか?
0929デフォルトの名無しさん
01/09/03 22:05ID:eIvnaQUIrealloc とか。
0930デフォルトの名無しさん
01/09/03 22:07ID:H0Bpee16リスト構造体、ヒープ確保&解放。
0931(-_-)さん
01/09/03 22:17ID:xWB.yE86" h "がひとつ、 " i "がひとつ、 " k "がふたつ、 " y "がひとつ、のように
アルファベット毎の個数を数えたいんだけど、
なんかいい方法ありますか?
0932デフォルトの名無しさん
01/09/03 22:26ID:t.4suHxkまぁ高速化はいろいろあるけど。基本は数えるんだな。
#include <stdio.h>
int n[256];
main()
{
char *p = "Hikky";
int i;
while (*p) {
n[*p++ & 0xff]++;
}
for (i = 0; i < 256; i++) {
if (n[i]) {
printf("%c: %d\n", i, n[i]);
}
}
return 0;
}
0933sage
01/09/03 22:29ID:Lup6D7xcchar *p = "Hikky";
while (*p) {
if (isalpha(*p)) hg[toupper(*p)-'A']++;
p++;
}
0934sage
01/09/03 22:30ID:Lup6D7xc0935デフォルトの名無しさん
01/09/03 22:31ID:VgjKZNGYmain(int argc,char **argv)の意味の違いはなんですか?
0938名無の初心者
01/09/03 22:41ID:yeQeWlsoそこで、その関数1に渡す引数の型や数を固定したいのです。
しかし、その関数1の中で使用する関数2(func2)の引数の数が、
ランダムであるため、関数1の引数の数が固定できずに困っています。
関数2はユーザが定義し、そのアドレスを関数1に渡しています。
具体的には
void func1(void (*func2)(), int *a, int *b,....) {
func2(a, b,.....);
}
void func2(int *a, int *b,.....(数はランダム)) {
}
main(){
func1(func2, a, b, .....);
}
func1の引数の型を固定したいのです。(他の対策法でも構いません。)
なにかよい方法はないでしょうか。
0939デフォルトの名無しさん
01/09/03 22:44ID:yPx0fR8.int hoge;
char foo[0];
};
配列の大きさが0の配列とはどういう意味があるのでしょうか?
0942名無しの初心者
01/09/03 23:24ID:JSIp0FKIさがしていたものがズバリ見つかりました。
本当に有難うございました。
今後のためにもvariant型というのも頭に入れておきます。
0943名無しの初心者
01/09/04 01:25ID:aYttRhdQvoid func1(char *format, ...(可変数引数)
{
func2( ...)←ココに受け取った可変数引数をすべて渡すにはどうしたらいいでしょうか?
}
具体的な取り出し方は
void func1(char *format, ...){
va_list ap;
char *p=format;
int si;
double sd;
va_start(ap, format);
while(*p){
switch(*p) {
case 'd': si=va_arg(ap, int);break;
case 'f': sd=va_arg(ap, double);brea;
}
p++;
}
va_end(ap);
呼び出し方は
func1("ddfd", 3, 2, 6.4, -1);
のように呼び出しています。
0944デフォルトの名無しさん
01/09/04 01:41ID:acuYbFiAだから、いつも必ず、先頭要素へのポインタを渡して、配列本体にアクセスしてもらうしかない。
charへのポインタの配列を渡すには、
charへのポインタのポインタを渡すしかないということ。
それで、char **argcということになるんだが、
簡便的にchar *argc[]という表記法でもよいことになっている。
両者に実質的な違いはない。
0946sage
01/09/04 01:51ID:VbosVW6Efunc2を、書式を伝えるための引数+va_list 型引数を受け取るようにすればよい
vsprintfなんかの実装がそれだ。
void func2(char *format, va_list ap);
func1で引数の解析をせず、func2ですべて行うようにするのがポイントなんだが、
943のやろうとしてるfunc1とfunc2の役割によっては、そう行かないかもしれないね。
0947名無しの初心者
01/09/04 02:28ID:aYttRhdQまたお返事ありがとうございました。
946さんのおっしゃるようにfunc2で解析するようにしてみます。
それでなんとか目的は達成できそうです。
ってちょっと難しそうですが・・・
946さんには心から感謝いたします。
0948デフォルトの名無しさん
01/09/04 07:58ID:ZHeJzkIEif (from < _(a) < to ) {
:
}
こーゆー使い方ってダサい?
0949デフォルトの名無しさん
01/09/04 08:11ID:xADXB3S60950デフォルトの名無しさん
01/09/04 08:21ID:2wbT/ats僕お子様なんでそれ知らないんだけど、
#define ever ;;
てなことっすか? おもろいっす。
0951デフォルトの名無しさん
01/09/04 08:34ID:ovWsf9ZU0952デフォルトの名無しさん
01/09/04 11:56ID:DASKlEA.0953946ではないけど、
01/09/04 12:02ID:bgFq5l0E老婆心ながら一言言わせてもらうと、可変引数の関数の引数すべてを別の可変
引数に渡す一般な方法はない。
ただ、用途を限定すれば不可能ではない。
例えば>>943の例では、func1()の中で第1引数の長さを知ることで、その値が
実際の引数の数と違っていることはあるかもしれないが、一応幾つの引数が渡
されたかを別の手段で知ることができる。v[fs]printf()でもフォーマット引
数(%d, %sなど)の数を数えることで、引数の数を解決してる。別の方法として
は、必ず第2引数にfunc1()に渡した引数の数を指定させると言うのも一つの手。
ただ、これらはあくまで、個別のルールを作り込んでの可変引数の受け渡しな
ので、実際に渡している引数の数や型が違ったときに何が起こるかは分からな
いし、コンパイラも指摘してはくれないので十分注意のこと。
0954名無しの初心者
01/09/04 17:31ID:8SeVGOiw可変引数の型(intやdouble)も渡さないといけないのでかなりややこしくなりそうです。
自分一人が使うには問題ないですが、他の人が使うことを考えると・・・
もっとよく考えてみます。
レスありがとうございました。老婆心でもうれしいです。
0955デフォルトの名無しさん
01/09/04 23:09ID:B/j8Xxasなぜおまえが立てない?
0957デフォルトの名無しさん
NGNG#include <stdlib.h>
struct test{
int a, double b;
};
void keep(struct test **f, int I){
struct test *g;
g = (struct test *)malloc(sizeof(struct test)*I);
*f = g;
}
int main(){
int i;
struct test *tester;
keep(&tester, I);
for(i=0;i<I;i++){
tester[i].a = i;
tester[i].b = (double)(i)*0.1;
}
exit(0);
}
みたいにやると
tester[0].a
tester[0].b
tester[1].a
tester[1].b
...
の順番でにメモリに格納されますよね?それを
tester.a[0]
tester.a[1]
...
tester.b[0]
tester.b[1]
...
のようにするにはどうしたらいいですか?
0958957
NGNG0959デフォルトの名無しさん
NGNGってどうなんですか?
K&Rってかいてあるけど
ANSI学びたい人でも買いですかね?
あとこれがあったら
プログラミング言語 第2版
本体はいらないっすか?
0960デフォルトの名無しさん
NGNGhttp://piza2.2ch.net/test/read.cgi?bbs=tech&key=999617524
0961デフォルトの名無しさん
NGNGよく読んでないけど、アンサーブックってあれでしょ?
プログラミング言語Cにある問題の解答集でしょ?
だからプログラミング言語Cがなくちゃしゃーないっしょ
アンサーブックは別にいらない人もいるだろうし
0963デフォルトの名無しさん
NGNGそれに、合計体重、平均体重までいかないんです。9999で終了するのですが・・・
なにがまちがってるのでしょうか?
#include<stdio.h>
#define MAX 1000
int main (void)
{
int i=0;
int sum=0;
int ary[MAX];
puts("整数を入力してください。");
while(i<MAX)
{
printf("No.%d:",i+1);
scanf("%d",&ary[i]);
if(ary[i]==9999)
{
i++;
break;
}
sum+=ary[i+1];
}
if(i>1)
printf("合計体重は%dで平均体重は%.1fです。\n",sum,(double)sum/(i-1));
return(0);
}
0964デフォルトの名無しさん
NGNG入出力と平均計算をごっちゃにするのは良くないよ
input()
output()
weight_average()
に分けて、もう一度作り直せ
0965デフォルトの名無しさん
NGNGレスありがとうございます。
エラー的なものがあればそれもききたいのですが・・。
まぁ3つに分けて作る方向でがんばりますね。
0966デフォルトの名無しさん
NGNG>sum+=ary[i+1];
ここがおかしい。
i の動きをよーく追ってみよう。
0967デフォルトの名無しさん
NGNGありがとうございます
[i++]ですね。
おまけにscanf("%d",&ary[i]);の%dを%.1fにしたほうがいいですかね。
0968仕様書書かないさん
NGNGstruct test{
int *a, double *b;
};
keepで
tester.a=mallocの戻り
tester.b=mallocの戻り
すると
tester.a[i]
tester.b[i]
のようにアクセスできる。
レス数が950を超えています。1000を超えると書き込みができなくなります。