0

いくつかのグラフィックスに cpw ライブラリを使用しようとしています。セットアップしましたが、コンパイルに問題があるようです。つまり、文字列ヘッダーでは、次を介してユニコードのサポートを提供します

#if defined(UNICODE) | defined(_UNICODE)
#define altstrlen wstrlen
#else
#define altstrlen strlen

さて、Windows afaikにはwstrlenのようなものはないので、それをwcslenに変更しようとしましたが、char *をwchar_t *に変換しようとしたため、エラーが発生しました。どちらかの方法で strlen を使用すると、何かが台無しになるのではないかとちょっと怖いです。

スタックオーバーフローはどう思いますか?

4

4 に答える 4

1

データが最初からchar*ベースの場合、Unicodeバージョンのstrlen()を呼び出す必要はありません。入力としてchar *を受け取るため、通常のstrlen()を単独で使用します。char *データが実際にUTF-8でエンコードされていて、エンコードされていないUnicodeの長さを判別しようとしている場合を除きます。この場合、最初にUTF-8をデコードしてから、wcslen()を呼び出す必要があります。

于 2010-07-29T23:40:18.143 に答える
1

libヘッダーを含める前のwcslenように定義できるかもしれません:wstrlen

#define wstrlen wcslen
#include "cpw.h"

char*あなたが得ているエラーは、それらの関数のいずれかを呼び出すことになるものにそれを渡すことが原因である可能性があります。

于 2010-07-28T03:12:51.400 に答える
0

Visual Studio には既にそのようなマクロがあります。 を参照してくださいtchar.h

#include <tchar.h>

TCHAR *str = _T("Sample text");
int len = _tcslen(str);

-- コンパイラの設定に応じて、ANSI、MBCS、および UNICODE モードで動作します。

詳細については、この記事を参照してください。

于 2015-03-08T16:29:19.790 に答える
0

Windows で Unicode を使用している場合は、すべての文字タイプをwchar_t. つまり、次の代わりに:

char *str = "Hello World";
int len = strlen(str);

必要なもの:

wchar_t *str = L"Hello World";
int len = wcslen(str);

文字タイプが に変更されwchar_t、文字列リテラルの前に が付けられていることに注意してくださいL

于 2010-07-28T00:27:58.977 に答える