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


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

【初心者歓迎】C/C++室 Ver.49【環境依存OK】



1 名前:デフォルトの名無しさん [2008/02/20(水) 12:33:41 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.48【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1202141921/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

574 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:09:11 ]
>>573
JavaScript同様、文字列を連結してから表示すればいい。

575 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:19:27 ]
>>574
char msg[20] = "文字列";
char tmp[10];
itoa(123, tmp, 10);
strcat(msg, tmp);
MessageBox(NULL, msg, "test", NULL);
こんな感じですか?

メッセージ毎にこのコードを書くのも面倒臭いのと、
いつも "文字列"+数字 の組み合わせと言うわけでもなく
数字+"文字列"+数字+"文字列" という事もあるため
自作関数でmsgbox(char*, int){}という決め撃ちではやく、
文字列や数字を混同で表示できる方法はないかと考えています。

576 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:20:07 ]
お願いします。C言語初心者なんですが、
ソース内に日本語を入れるとエラーになるんですが、
どこをどうすればいいのでしょうか?

超初心者です。よろしくお願いします。

577 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:21:41 ]
× ああああ
○ //ああああ

578 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:22:14 ]
ソースから日本語を消す

579 名前:576 mailto:sage [2008/02/24(日) 17:27:51 ]
説明へたですいません。

/* hello02.c */

#include <stdio.h>

int main()
{
printf("今日はよい天気です。\n");
printf("明日もよい天気でしょう。 \n");

return 0;
}

これなんですけど…

580 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:30:51 ]
>>576
どんなエラー?

581 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:34:42 ]
>>570-572
ありがとうございます、Boost 試してみます。
手元の mingw にはなさそうなので、まずはgooって
Boost 環境揃えてみますね。

>>576
・ソースの文字コードを変えてみる
・処理系を変えてみる

582 名前:576 mailto:sage [2008/02/24(日) 17:36:23 ]
本当にすいません。

普通に表示されました。
なんか間違ったやりかたしてたみたいです…


申し訳ないです。



583 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:41:12 ]
>575
そのためのsprintf、とだけいっておくけど。

584 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:48:41 ]
>>583
sprintfだとメッセージウィンドウは生成されないですよね?

外見としてはMessageBoxの中身に数字や文字列を表示している様な方法がいいんです。

585 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:54:21 ]
sprintfのsは何の意味か知っているか、とだけ言っておくけど。

586 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:55:05 ]
>>584
ならsprintfしてMessageboxにいれる処理の関数つくればよくね?

587 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:56:41 ]
要はフォーマット→MessageBox()と
二段構えになるのが嫌、というだけの話とエスパー

vsprintf()使って自作ラッパー関数でも書くんだな

588 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:58:37 ]
>>584
boost::lexical_cast
を使うと幸せになれると思う

589 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:04:51 ]
>>585-588
失礼しました。printfと勘違いしてました。
sprintfだと文字列に格納できるんですね。
boostは自分にはまだ早そうなので(正規表現使えるのは魅力的ですが)、sprintfでやってみます。
ありがとうございました。

590 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:05:19 ]
>>588
効率が悪いのが難点

591 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:07:23 ]
>>588
俺も最初それ思いついたけど、連結する数値がたくさんあると見苦しくなるから
std::stringstreamに流し込んで取り出す方がいいんじゃないかなあ。

592 名前:デフォルトの名無しさん [2008/02/24(日) 18:45:34 ]
DLLの読み込みで、コンパイラによって失敗します
序数で指定しても動きません どのような理由でしょうか?
VC++だと動かないですが、BCCとDMCで動きます



593 名前:デフォルトの名無しさん [2008/02/24(日) 18:47:43 ]
HINSTANCE hd=LoadLibrary("*****.dll");
FN = (fnc) GetProcAddress(hd, (LPCSTR)4); //序数での指定

このような記述はWindowsXPなら万能ではないんでしょうか?

594 名前:デフォルトの名無しさん [2008/02/24(日) 18:50:46 ]
訂正
読み込みはしますが、実行時にエラーになります 序数がずれるのかも・・と思い全ての番号で試したのですがだめです

595 名前:デフォルトの名無しさん [2008/02/24(日) 18:52:47 ]
継承について教えてください
CFooから派生したCFooEx0、CFooEx1、CFooEx2、CFooEx3があるとします。
そして、それぞれCJissou0、CJissou1、CJissou2、CJissou3に派生してるとします。
その上、CJissou0、CJissou1はIHoge0を、CJissou2、CJissou3はIHoge1を実装しているとします。
図にするとこんな感じ。
CFoo─CFooEx0┬CJissou0
IHoge0┘
CFoo─CFooEx1┬CJissou1
IHoge0┘
CFoo─CFooEx2┬CJissou2
IHoge1┘
CFoo─CFooEx3┬CJissou3
IHoge1┘

CFooとCFooEx〜は弄らないとして、IHoge〜のインターフェイス関数をCJissou〜に実装します。
で、マネージャー的な物例えば、std::vector<CFoo *> vecにそれぞれの実態を入れて、
CJissou〜の関数を呼びたいのですが呼ぶ際には、
dyanamic_cast<CJissou0 *>(vec[0])->Test();見たいな事をしないといけないと思います。
でもそういう呼び出しだとIHoge〜も意味が無くなってしまうし、数が多くなると厳しくなります。(IHoge〜は数個)
だから、dyanamic_cast<IHoge0 *>(vec[0])->Test();//エラー
見たいな呼び方をしたいのですがどうすればいいのでしょうか?

596 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:59:37 ]
>>595
そもそもそのような継承にしてる理由は?

597 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:59:59 ]
>>595
CFoo のメンバ関数ならキャストは要らないはず。
IHoge〜 に意味が無くなると言うが、こっちからしたら CFoo や vec の使い方も
ひっくるめて最初からその継承関係の意味がわからん。

598 名前:595 mailto:sage [2008/02/24(日) 19:06:57 ]
えっと、まあ、CFooがMFCのCViewで、CFooEx〜がCTreeViewとかCListViewなのでどうした物かと質問しました・・・。

599 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:10:28 ]
なんでvector<IFoo>とかにしないわけ?
あるいは、virtual Test()をもつ何かインターフェースに。

600 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:18:44 ]
CFooEx の状態で持てないのなら
ダウンキャストすることになるだろうな。

601 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:05:03 ]
>>590
もう自前でパースしてるよ

602 名前:592 [2008/02/24(日) 20:05:24 ]
最適化オプション関係でした



603 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:10:05 ]
>>601
車輪の再発明

604 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:25:22 ]
boostが?

605 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:29:54 ]
ごめん勘違い

606 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:58:50 ]
文字コード?jisコード?って覚えるべきもの?

607 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:06:12 ]
必要になったときに表を見れば十分

608 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:06:13 ]
>>606
全てのJIS漢字のJISコードなんて、そうそう覚えられるもんじゃないと思うが。

609 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:14:12 ]
class Piyo{

};

class Hoge{
public:
  void hoge(Piyo[][256]);
};

void Hoge::hoge(Piyo[][256] piyo){

}

こんな実装をした時に、Hoge::hogeのpiyoを書いておくと'Piyoは未定義のシンボル'と怒られてしまいます。
仮引数をPiyo[][256]だけにすればコンパイルは通りますが、どう使えというのか・・・といった感じです。
コンパイラはBCC5.5を使っています。クラスの2次元配列をできれば「参照」で渡したいのですが、
どうすればいいんでしょうか?

610 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:15:36 ]
単に書き方がおかしいだけだ。
void Hoge::hoge(Piyo piyo[][256]) {
しかもこれいわゆる参照渡しの挙動をするが、
正確にはポインタ渡しだし。

611 名前:609 mailto:sage [2008/02/24(日) 21:29:18 ]
うわ・・・。確かにおかしな書き方してた・・・。
自分でもドン引きです・・・。ありがとうございました

612 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:16:37 ]
streaming.linux-magazin.de/en/program_fosdem.htm
cmakeについてのリアルタイム講演が聞けるそうな



613 名前:デフォルトの名無しさん [2008/02/24(日) 23:20:24 ]

ReadFile(fp , &(buf[N]) , 1500 , &sz , NULL);

でエラーで止まります bufは十分にとってあります なぜでしょうか

614 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:24:57 ]
>>613
bufの宣言がどうなっているかにも拠るが、&(buf[N])をbufにしてみろ。
それで巧くいくなら、お前は馬鹿だ。

615 名前:デフォルトの名無しさん [2008/02/24(日) 23:31:32 ]
位置を変えてループして読もうとしてるんです bufにすると上手くいきますが前のデータが消えます
原因不明ですが、変数の位置変えたらエラーでなくなり一応うごくようになりました 

616 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:34:06 ]
たまたま動いてるだけくさいな。
単純にバッファオーバーフローしてるだけじゃないのか?

617 名前:デフォルトの名無しさん [2008/02/24(日) 23:36:56 ]
メモリ関係のエラーみたいです また止まりました
別のところから変更しないと直りそうにありません
設計やり直してきます

618 名前:デフォルトの名無しさん [2008/02/24(日) 23:48:58 ]
coutやnewの多重定義ってどうやるのかわかりません できますか

619 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:51:19 ]
>>613
char buf[NMAX*1500]
なら、&(buf[N*1500])

char buf[NMAX][1500];
なら、&(buf[N][0])

char *buf[NMAX]
for(...) buf[N] = malloc(sizeof(char) * 1500);
なら、buf[N]

620 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:52:38 ]
cout の多重定義??

621 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:55:54 ]
<<のオーバーロードに違いない

622 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:56:41 ]
ostream& operator<<(ostream& ostr, const Hoge& hoge) {
 ostr << hoge.str();
}

みたいなやつか。



623 名前:デフォルトの名無しさん [2008/02/25(月) 00:07:21 ]
stringは連続していますか? memcpyとかはできますか?

624 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:08:24 ]
なんでstringにmemcpyしたがる人が多いんだろう。

625 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:09:43 ]
stringにmemcpyはまずいんじゃね

626 名前:デフォルトの名無しさん [2008/02/25(月) 00:10:45 ]
string s="9999999999";
strcpy( &s[5], "000");
は正しいですか

627 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:14:03 ]
詳しいことわすれたけど、s[i]で文字を取得できるならできるんじゃね?
やった後、stringオブジェクトは壊れるとおもうけど

628 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:15:06 ]
この日本語不自由そうなとこが同一人物くさい

629 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:15:58 ]
>>623
規格ではそんな保障はされていません。

630 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:17:13 ]
>>627
あっ嘘、s[i]で取得できてもできないと思う
置き換えたいなら、replaceを使いなさい

631 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:17:23 ]
>626
std::stringのことなら、正しくない。

632 名前:デフォルトの名無しさん [2008/02/25(月) 00:21:59 ]
これが動くのですが、stringはchar*の拡張であることは保証されていませんか?だめな例はありますか


int main(){
string str="9999999999";

char *pointer=&str[5];

memcpy( pointer, "000", 3);

str+=(string)"add";

cout<<str;

return 0;}



633 名前:デフォルトの名無しさん [2008/02/25(月) 00:25:35 ]
stringの制御情報はどこへ格納されていますか?
ユーザーは合法的でない方法を使ってもアクセスできませんか?

634 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:28:12 ]
>632
必要のないポインタ操作はやめましょう。
動くか動かないかがプログラムの正しさの判定基準ではありません。

635 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:28:47 ]
>>632
あるコンパイラのあるバージョンで動くとしても、規格で保証されていなければ、
他のコンパイラや同じコンパイラの別バージョンでは動かないかもしれない。
それでもいいなら、どうぞ?
今後ずっと同じコンパイラを使い続けて、決して変えないのなら、たぶん問題ないだろう

636 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:30:23 ]
>>633
なんのためのクラスだと思う?

637 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:00:06 ]
例外の使い方について

エラーの通知にはエラーメッセージより例外を使う方がいいと聞いたのですが
オリジナルな例外クラスを投げたり、charを投げまくる仕様にしていいのですか?

例外というと、これ以上の実行に支障が出るときに使うようなイメージがあるのですが実際の現場ではどうなのでしょうか?

638 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:01:51 ]
例外処理を主要処理に書くと遅くなったりしませんか?

639 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:14:59 ]
コンパイラによって例外処理用のコードが追加されるから
パフォーマンスは落ちる。禁止オプションもあるくらいだからな。
特に組み込みでは。。。。。。

640 名前:デフォルトの名無しさん [2008/02/25(月) 01:17:11 ]
クラスメンバー変数は、自動で0やNULLで初期化されますか? 

641 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:20:04 ]
>>637
好きなように使え。

ただ、エラーメッセージと例外では通知する相手が違うぞ。
エラーメッセージはエンドユーザ、例外はプログラマに通知するもんだ。
ユーザがいきなり「0x00d2345でlogic_error例外が発生しました」とか見せられても訳わからんだろ。

charも投げられるが、標準との整合を考えて投げるのはオリジナルも含めてstd::exception派生のクラスにしとけ。

642 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:21:41 ]
>>640
static領域に配置したオブジェクトのメンバなら、コンストラクタで何もしていなければ0になります。
それ以外は不定です。



643 名前:デフォルトの名無しさん [2008/02/25(月) 01:29:37 ]
static つけたらクラスが消滅しても値が残るんですか?
クラスが消滅したらアクセスできなくなると思いますが
つけなくても自動でstaticになりますか

644 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:50:30 ]
>>641
なるほど・・・

戻り値でエラーを知らせたり、NULLを返したりという方法もあるのでどういう方法が主流なのかなと思ってまして

自分はたいていの場合
何が起こったのか確認して、何事もなかったかのように受け流してさいごにエラーログを確認する
位のデバッグライト的な使いか確かしてないのですが・・・

645 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:59:21 ]
>>644
どれが主流というのは無い。場面によって適切な方法があるだけ。
ライブラリとか、設計思想によりエラーの返し方がある程度統一されてたりすることもあるけどね。

とにかく作ってみなさい。できたものを自分なりに分析して、ここはこうした方がよかったとか、省みることで成長するんだから。

646 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:09:23 ]
>>643
残ります、というかクラスを複数生成しても全部同じstaticメンバ変数をさすんですよ?

三行目がいまいちなに言ってるのかわからんstaticつけないとstaticにはならないよ

647 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:12:48 ]
まずインスタンスという言葉を覚えようや

648 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:13:09 ]
>>643
>static つけたらクラスが消滅しても値が残るんですか?
(クラスではなくインスタンスのことを言いたいのだと思うが…)
staticで宣言した変数は、main関数の開始前から終了後まで存在する。
破棄されるのがmain関数終了後だから通常はそれへのアクセスが問題になることはないが、
staticの変数が異なるファイルで定義されて、一方のデストラクタからもう一方を参照するような
処理があるとまずい。
意味が分からないようなら気にしなくていい。

>つけなくても自動でstaticになりますか
ならない。


649 名前:648 mailto:sage [2008/02/25(月) 02:14:21 ]
ちょっと訂正
×staticの変数が
○2つのstaticの変数が

650 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:24:32 ]
質問があるのですが、
include " "
include < >
" ", < > の違いを教えて頂けませんか?

651 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:30:32 ]
>>650
コンパイラのマニュアルか入門書を読みなさい。


652 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:47:52 ]
>>650
www.google.co.jp/search?q=C%E8%A8%80%E8%AA%9E+include
上から順に読んでいけばそのうち解説してるサイトにたどり着く



653 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 07:25:36 ]
>>632
std::string の内部バッファの連続性は次の規格で保証されるようになる。
おそらく現状全ての実装でそうなっていることが、その規格変更を実現したんだろう。
だから一応そう言うことをしても問題は無いはずだが、
メンバ関数でできることはメンバ関数でやった方がいい。
replace 使うといい。

654 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 09:45:12 ]
例外ねぇ、何も考えずにint型のエラーコードを投げちゃうなぁ
返り値でエラーコード返しちゃうと返り値の型が拘束されちゃうしメンドクサ

結局こういう使い方だと例外のありがたみを半分も得ていない気がする

655 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 10:00:21 ]
例外はstd::exceptionみたいな基本クラスを決めとかないと
ありがたみが半減する。

656 名前:デフォルトの名無しさん [2008/02/25(月) 11:44:36 ]
ガベージコレクションは、標準のC++でつくれますか?ライブラリでは動作するのか不安です
自作したいです
あと、整数変数は、初期化なしでアクセスしてもエラーは出ませんか?

657 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 11:46:47 ]
素人が自作した方が不安だと思うんだが

658 名前:デフォルトの名無しさん [2008/02/25(月) 12:00:29 ]
これ動かすとクラス変数は値がほぼ一定ですが理由はなぜですか? 

#include <iostream>
using namespace std;

class cl{public: int i; cl(){cout<<"class "<<i;} };

int main(){
int n, a[100];
for(n=0; n<100; n++){
cl *x=new cl;
cout<<" arrey "<<a[n]<<"\n";
}
getchar();
}

659 名前:デフォルトの名無しさん [2008/02/25(月) 12:09:11 ]
動的確保による違いでした たぶんヒープ領域は値があまり変化しないことが原因かも・・・

#include <iostream>
using namespace std;

class cl{public: int i; };

int main(){
int n, a[100] ;
cl x[100];
for(n=0; n<10; n++){
cout<<"class="<<x[n].i<<" arrey="<<a[n]<<endl;
}
getchar();
}

660 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 12:12:41 ]
>>656
整数変数を初期化しなくてもエラーは出ませんが、ローカルな場合に不定値なので初期化しましょう。

661 名前:デフォルトの名無しさん [2008/02/25(月) 12:37:27 ]
定数文字列は値渡しにして、動的な文字列は参照渡しにしたいのですが、これだとメモリリークしますよね
どうやれば直りますか?

#include <iostream>
using namespace std;

class cl{
char *str;
public:

cl(char* const& x){ str=x; }

template <size_t n> cl(char (&x)[n]) {
str=new char[n]; strcpy(str,x);}

};

main(){
cl str="rrrr";
str="oooo";
getchar();
}

662 名前:デフォルトの名無しさん [2008/02/25(月) 12:42:21 ]
値渡しされているかフラグを作って、されていれば解放する様にすればいいのですが、
初期化前にコンストラクタで代入されてしまうとフラグが確認できません



663 名前:デフォルトの名無しさん [2008/02/25(月) 12:47:11 ]
>>661は間違えました 定数式が期待する方へ行っていませんでした それもどうやれば直りますか

664 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 12:56:55 ]
>>661
やりたいことがよくわからん。せめて、コンパイルできるソース(の断片)を貼ってくれ。

665 名前:デフォルトの名無しさん [2008/02/25(月) 13:00:43 ]
まとめるとテンプレート関数で、
定数文字列"   "と
固定文字列char [n]と
可変文字列char *を
区別して、上の二つならメモリを確保して値渡しにしたいんです
値を書き換えたいため

666 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 13:01:40 ]
最近ずっとこいつ出没してるな

667 名前:デフォルトの名無しさん [2008/02/25(月) 13:02:01 ]
それと、新たにメモリを確保するときに、以前確保したメモリを解放してメモリリークしないようにしたいです

668 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 13:06:38 ]
>>667
要は、const char *でコンストラクトするときはメモリを確保して、char *でコンストラクトするときは確保しなければ委員でね?
それと、書き換えのときはconst char *でもchar *でも以前の状態に応じて解放しないといけないんでね?

669 名前:デフォルトの名無しさん [2008/02/25(月) 13:07:20 ]
簡略化すると関数の引数で、" "型と、char[]型と、char*型を区別したいって事です

670 名前:デフォルトの名無しさん [2008/02/25(月) 13:17:48 ]
>>668
constつけるだけでは無理です

#include <iostream>
using namespace std;

class cl{
char *str;
public:
cl(char const *x) { cout<<"文字列は定数です\n"; }
cl(char *x){ cout<<"文字列は可変長です\n"; }
};

main(){
cl str="xxx"; //定数で初期化
char ch[]="yyy"; str=ch; //固定配列の代入
str="zzz"; //定数の代入
getchar();
}

671 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 13:19:34 ]
すまん、そもそも char ch[] = "yyy"は固定長でも書き換え可能な配列なんだが
それを定数として扱ってはいけない理由を教えてくれ。

672 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 13:22:36 ]
あ、聞き方が変だ。

char ch[] = "yyy"は書き換え可能なんだから可変長と同一視すればいいし
const char ch[] = "zzz"は書き換え不可能なんだから定数と同一視すればいいのでは?



673 名前:デフォルトの名無しさん [2008/02/25(月) 13:22:41 ]
可変長文字列と {定数文字列、固定長文字列} ( ← 一緒でいいです)
を分類する方法教えてください
あと、すでにメモリが確保してあればそれを解放する方法教えてください

674 名前:デフォルトの名無しさん [2008/02/25(月) 13:23:36 ]
長さも書き換えられないといけません






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

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

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