問)wchar_t型の動的配列について

サイト
記事: 0
登録日時: 14年前

問)wchar_t型の動的配列について

投稿記事 by サイト » 14年前

wchar_t型の動的配列(文字列用)を作るとき、
メモリ確保はどうすればいいのでしょうか?

以下を想定でお願いします。
言語 : C++
環境 : VC++ 2008
文字セット : Unicode 文字セットを使用する

CODE:

#define _CRT_SECURE_NO_WARNINGS
 
#include 
#include 
#include 
#include 
 
int main()
{
	_wsetlocale(LC_ALL, L"");
 
	wchar_t *str1 = NULL;
	wchar_t str2[] = L"テストStrings";
	
	int len = wcslen(str2);
	int size = 0;
	
	// サイズの確保 - 問)3種類の中でどれが正しいの?
 
	/* パターンA */
	size = sizeof(wchar_t) * (len + 1);
	
	/* パターンB */
	//size = len + 1;
	
	/* パターンC */
	//size = len + sizeof(wchar_t);
	
	// 文字列が入るためのバッファを確保
	str1 = new wchar_t[size]();
	
	wcscpy(str1, str2);
	
	wprintf(L"%s\n", str2);
	
	fflush(stdin);
	getchar();
	return 0;
}

最後に編集したユーザー サイト on 2010年10月29日(金) 11:53 [ 編集 1 回目 ]

アバター
バグ
記事: 130
登録日時: 14年前

Re: 問)wchar_t型の動的配列について

投稿記事 by バグ » 14年前

型名 *ポインタ変数 = new 型名[要素数]

なので、パターンBやないかな?

たかぎ
記事: 328
登録日時: 14年前

Re: 問)wchar_t型の動的配列について

投稿記事 by たかぎ » 14年前

明らかにパターンB。
ただ、基本的にはstd::wstringを使うのが筋では?
それでうまくいかないときに、std::vectorとか生の配列を考えるべきです。

サイト
記事: 0
登録日時: 14年前

Re: 問)wchar_t型の動的配列について

投稿記事 by サイト » 14年前

お二人ともありです><
なんかなしパターンAで作ってたんですが普通に考えたらパターンBですよねorz

std::stringやらstd::wstringも一時は考えたのですが、
フォーマット文字列を結構使うので敬遠してました。

std::ostringstreamというのを知ったのも最近ですし、
慣れないからMFCのCString的なものを自作してるとこです。

たかぎ
記事: 328
登録日時: 14年前

Re: 問)wchar_t型の動的配列について

投稿記事 by たかぎ » 14年前

> フォーマット文字列を結構使うので敬遠してました。

そういうときは、boost::formatを使いましょう。