はじめまして。
テキストエディタを自作で作っています。
文字列分のメモリの確保の方法なのですが、
vector<char> を使用するか HeapAlloc で動的確保するか迷っています。
数MBのファイルを開くとき vector に上限があって開けないということにはならないで
しょうか?
よろしくおねがいします。
vecterのメモリアロケータは変更可能ですが、
Windows環境でデフォルトが数MB以下という実装はまずないでしょう。
(開発環境は書いた方がいいですよ)
#文字列だと用途次第ではstd::stringの方がいい可能性もあるかも
環境は Visual C++ 6.0 SDK です。
std::stringはほとんど知らないのですが例えばTextOut関数でstring型は使用できるので
しょうか?
初心者なものですいません(^_^;)
環境は Visual C++ 6.0、SDK です。
std::stringはほとんど知らないのですが例えばTextOut関数でstring型は使用できるので
しょうか?
初心者なものですいません(^_^;)
std::stringクラスにはconst char*型を返すメソッドがあります。
c_str
http://www.cppll.jp/cppreference/cppstring_details.html#c_str
これを使えば、可能です。
# 厳密に言うと、c_strメソッドから使えるのはTextOut関数ではなく、
# TextOutA関数ですね。
std::stringをまず調べて見てはどうでしょう。
STLの話なので調べればわかりそうな気がします。
TextOutの引数に引き渡せる形でstringからデータが取り出せれば、
使えると判断してよいのではないでしょうか?
あと、自分で実験してみる事もお勧めします。
開発環境があるのであれば、出来るはずです。
例えばstring::c_str()でconst char*が、
vecterと違って文字列長とかも取れます。
すいません調べずに質問してしまいました。
c_strを使ってみましたが
error C2664: 'TextOutA' : 4 番目の引数を 'const char *(void) const' から
'LPCSTR' に変換できません。
とでるのですが'const char *(void) const'とは何なんでしょうか?
正直C++はほとんど知りません。。
c_strはメソッドです。メンバ変数ではありません。
末尾に () をちゃんとつけてください。
(()をつけないと、関数ポインタを渡すことになってしまいます。)
s.c_str()
>とでるのですが'const char *(void) const'とは何なんでしょうか?
それはc_strメソッドの関数の型です。
すいません c_str の後に () を付け忘れていました。
うまくコンパイルできました。
vectorで文字列を確保できそうですし解決です。
どうもありがとうございました。
チャレンジするのは良い事だけど、言語の知識無しでプログラミングをいきなりするのは
効率が悪いと思いますよ。
C++言語の勉強をしてちゃんと文法の基礎は頭に入れておいた方が正解です。
肝心のエディタの中身よりも文法で躓いてしまう事が多いと思いますから。