Win32apiの文字列について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
notebook

Win32apiの文字列について

#1

投稿記事 by notebook » 8年前

LPTSTR型の文字列へのリテラルの代入の仕方がわかりません。

char *x ="123";

このxをLPTSTR lptStrに渡したい場合

LPTSTR lptStr = TEXT(x);
LPTSTR lptStr = x;

としてもダメでした…
なぜでしょう?

アバター
へにっくす
記事: 634
登録日時: 11年前
住所: 東京都

Re: Win32apiの文字列について

#2

投稿記事 by へにっくす » 8年前

LPTSTRは設定によってwchar*かchar*に切り替わる型です。
そこにchar*固定であるxを代入しても無理があります。

リテラルの文字列であればあなたの示した通り、TEXTマクロを使います。
それをchar*変数であるxを入れるのは間違いです。
xの型もLPTSTRにしないといけません。

コード:

LPTSTR x = TEXT("123");
LPTSTR lptStr = x;
written by へにっくす

notebook

Re: Win32apiの文字列について

#3

投稿記事 by notebook » 8年前

へにっくすさん回答ありがとうございます。
win32プロジェクトでchar型の亜種が出てきまくって大変手こずっております。
もう少し教えてほしいのですが

シングルバイト文字、マルチバイト文字、ユニコード、ワイド文字の違いを教えてください。
頭がおかしくなりそうです。

char xはマルチバイト?シングルバイト?ユニコード?

notebook

Re: Win32apiの文字列について

#4

投稿記事 by notebook » 8年前

LPTSTR a[20];

a[0]='x';
a[1]='y';
LPTSTR lptStr = a;

これエラーでました…

lptstrがxyという文字列になってほしいだけなのに…

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: Win32apiの文字列について

#5

投稿記事 by みけCAT » 8年前

LPTSTRはPが入っていることからわかるようにポインタなので、aの型が間違っています。

コード:

TCHAR a[20];
とするべきでしょう。
さらに、文字定数もTEXTマクロを使って

コード:

a[0]=TEXT('x');
a[1]=TEXT('y');
とするといいでしょう。
また、aの内容を文字列として使用するには最後にナル文字をいれないといけないことに注意してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

notebook

Re: Win32apiの文字列について

#6

投稿記事 by notebook » 8年前

????

でも同じポインタ型である

char *は

char *x

x[0]='a';

ってできますよね????

LPTSTRの場合はできないと?

notebook

Re: Win32apiの文字列について

#7

投稿記事 by notebook » 8年前

TCHAR x[20];

x[0]=TEXT('a');
x[1]=TEXT('\0');

LPTSTR lptStr=x


これで文字列aが実現できました。

ちなみに連結とかはどうすれば?

lptstr=x+TEXT("bcd");

でabcdってしたくても無理でした。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: Win32apiの文字列について

#8

投稿記事 by みけCAT » 8年前

notebook さんが書きました:????

でも同じポインタ型である

char *は

char *x

x[0]='a';

ってできますよね????

LPTSTRの場合はできないと?
できます。同じようにやればいいです。charではなくchar *がポインタ型であることに注意してください。
なお、配列とポインタは同じものではありません。

コード:

LPTSTR x;

/* xに有効な領域へのポインタを代入する */

x[0] = TEXT('a');
notebook さんが書きました:ちなみに連結とかはどうすれば?
StringCchCat関数が使えるはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

notebook

Re: Win32apiの文字列について

#9

投稿記事 by notebook » 8年前

俺にはWin32 APIは敷居が高すぎるということで、あきらめることにしました。
大変申し訳ありません。Windows フォーム アプリケーションで作ろうと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る