すみません、初歩的な質問だと思いますが、
よろしくお願いします。

LPSTR aaa = "test";

と現在なっているのですが、
"test"の後ろにm_hWndの値を入れたいのです。
そのため、

LPSTR aaa = "test" + (LPSTR)m_hWnd;

のように記入したのですが、
(当たり前ですが)エラーになってしまいます。
エラーの内容は、
「error C2110: ポインタにポインタを加えようとしました。」
というものです。

エラーになってしまうのは分かっているのですが、
この解決方法が分かりません(初歩的だとは思うのですが…)。
伝わりにくい文章で恐縮ですが、
どなたかお分かりになる方(型?:笑)、よろしくお願いします。

A 回答 (1件)

LPSTR aaa = "test";


と定義した時点でaaaに格納できる文字数は"test"のサイズになります。
ゆえに変数aaaに文字を追加することは出来ません。

ほかの変数でいいなら
char sBuf[256];
sprintf(sBuf,"%s%d",aaa,m_hWnd);

#(LPSTR)m_hWndとキャストして文字にはなりません
    • good
    • 1
この回答へのお礼

参考になりました、ありがとうございました。
初歩的な段階で戸惑ってしまうので、とても助かりました。
今後も躓いてしまった時にお世話になるかも知れませんが、
その時はまたよろしくお願いします。

お礼日時:2002/03/27 11:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC++ の typedef の 使い方の質問

C++のtypedefの使い方の質問ですが、typedefは、別名の定義として、知られていますが。
以下のソースの意味がよく読み取れないです。windows プログラミングとC++
が分かるかたがいれば、以下のソースの意味を教えていただきたいです。

よろしくお願いします。
typedef BOOL (WINAPI *AddAccessAllowedAceFn)(
PACL pAcl,
DWORD dwAceRevision,
DWORD AceFlags,
DWORD AccessMask,
PSID pSid
);

Aベストアンサー

関数ポインタの別名定義です。
「関数ポインタ typedef」をキーワードにWeb検索してみてください。
丁寧に解説されているサイトが見つかるでしょう。

QhDC=::GetDC(m_hWnd)とhDC=GetDC(m_hWn

hDC=::GetDC(m_hWnd)とhDC=GetDC(m_hWnd)の違いについて

表題について,お伺いします。
ビットマップをダイアログに表示するソースコードを
書いてますが,参考書やさまざまなHPでは,
ウィンドウハンドルをゲットする際に

hDC=::GetDC(m_hWnd) ○
↑と書かれております。

hDC=GetDC(m_hWnd)  ×
↑はなぜだめなのでしょう。

 ●このスコープ演算子::は何の為につけているのですか?

::が無いとエラーになるので必要みたいですが・・

Aベストアンサー

どういうエラー(リンクエラー、コンパイルエラー)なのかがわからないので、
あくまで憶測ですが、
Windows.hで定義されているGetDC()の他に、
別のスコープに(例えばクラスのメソッドとして)、
GetDC()が定義されているのではないでしょうか?

上記の状態でスコープ演算子がないときには、
同じクラス(スコープ)にあるGetDC()を先に呼ぶことになるので、
目的のWindows.hのGetDC()を呼ぶことができないのだと思います。

参考URL:http://wisdom.sakura.ne.jp/programming/cpp/cpp7.html

QC++.NET の String型の使い方

初めて質問いたします。
C++ .NET 2005 Express Beta版を入手し、Windows Formsのプログラミングを勉強してます。

TextBoxのTextに値を変数で指定したいのですがどうすれば良いのかわかりません。

  textBox1->Text = "Test";
とダイレクトに値を指定すればできるのですが、

  #include <string>
  using namespace std;
   (省略)
  string str = "Test";
  textBox1->Text = str;
は、エラーになってしまいます。

C++標準のstringクラスではなく、.NETはStringクラスがあるようですが、これの使い方がMSDN等で調べているのですが分かりません。
分かりやすいURLなどありましたら教えていただけませんか。

Aベストアンサー

textBox1->Text = new String(str.c_str());
でいけるんじゃないかなあ。
試してないのでなんですが、
C++のstringクラスからは、c_str()で、いわゆるNULL終端文字列へのポインタが得られて
.NETのStringクラスは、NULL終端文字列でのコンストラクタがありますから。

Qfor(s=p; *p; p++)の*p(ポインタ)の意味

for(s=p; *p; p++)の*p(ポインタ)の意味
C言語初心者です。
今ポインタを勉強しているのですが、
for文で上記のようなものが出てきて、意味が分からず困っています。
*pで*p != NULL と同じような意味になるみたいなのですが…。
どうしてそのような意味になるのでしょうか?

ちなみにsとpはポインタで、
sには配列(入力した文字列)の先頭アドレスが入っています。
pは文字列を指していて○○○○○NULL ←になるから上記のような条件で
回るんだろうなぁとはなんとなく考えているのですが。

Aベストアンサー

念のため:
ヌルポインタは「ビットパターンとして」0 じゃないかもしれませんが, ソースプログラムにおいて「ポインタが要求される場面」で「0」とあれば, それは「ヌルポインタ」です.
もうちょっと厳密に書くと「整定数 0」はヌルポインタに変換される.

Qc++ stringの使い方

お世話になります。
最近c++始めました。
stringの使い方がよくわかりません。
以下のstringの使い方が問題ないか確認頂けますか。
スマホで書くため、文法が合ってないと思いますが、stringの使い方だけ確認させてください。
引数にstringで囲って渡すのは実装として普通行いますか。
やってはいけないですか。
是非ご教示ください。

#define STR1 "mojiretu"
main()
if(check(string(STR1)))



bool check(string str)

Aベストアンサー

間違っちゃいないけど、直に const string でかまわんのでは?

#include <iostream>
#include <string>

const std::string STR1 = "mojiretu";

bool even_length(const std::string& str) {
return str.length() % 2 == 0;
}

int main() {
if ( even_length(STR1) ) {
std::cout << STR1 << " : even\n";
} else {
std::cout << STR1 << " : odd\n";
}
}

QVC++ Express m_hWnd

VC++ Express edition 2008で、Command Promptを起動、directoryを替えようとして、

HINSTANCE ret = ShellExecute(m_hWnd,"open","cmd.exe",NULL,"c:\\Program Files",SW_SHOW)

で、m_hWndが定義されていないとエラーが出てきました。VC++2005 standard version では出るようですが、Express edition 2008では定義されてないようです。この部分、Expression editionではどのように定義するのか教えてください。2008 Express editionで別の変数が適当であれば、そちらを教えていただけませんか?

Aベストアンサー

Express EditionにはMFCライブラリは入っていないはずです。Standard Editionには入っています。
で、m_hWnd変数はCWndクラスのメンバ変数なのですが、そのCWndクラスまたはその派生クラスを使っているんでしょうか?
また、ShellExecute関数はWin32APIです。MFCライブラリの関数ではありません。
ご提示された、”外部プログラムを実行する”というのは、通常C++/CLIで、.Net Frameworkに用意されている関数やクラスでは実現できないコードを書くためにWin32APIや外部DLLの関数を呼び出したりするために使用するものでしょう。
勉強のためならばいいのですが、そうでないのならC++/CLIでShellExecute関数などのWin32APIありきなコードを書くのはやめることをおすすめします。

補足
ShellExecute関数のm_hWndの部分は、親ウィンドウのハンドルを渡します。今回の場合、Formクラスが親ウィンドウになるので、以下のような記述になるでしょう。

HINSTANCE ret = ShellExecute((HWND)this->Handle,"open","cmd.exe",NULL,"c:\\Program Files",SW_SHOW);

Express EditionにはMFCライブラリは入っていないはずです。Standard Editionには入っています。
で、m_hWnd変数はCWndクラスのメンバ変数なのですが、そのCWndクラスまたはその派生クラスを使っているんでしょうか?
また、ShellExecute関数はWin32APIです。MFCライブラリの関数ではありません。
ご提示された、”外部プログラムを実行する”というのは、通常C++/CLIで、.Net Frameworkに用意されている関数やクラスでは実現できないコードを書くためにWin32APIや外部DLLの関数を呼び出したりするために使用する...続きを読む

QVisial C++おけるπの使い方

自宅でCプログラミングの練習をするためVisial C++ 2008を使って
プログラムをしています。y<sin(πx)となった時の
割合などを計算するプログラムで                「M_PIが定義されていない識別子です」
とでてきます。所持している本を参考にしてもM_PI=πとして用いる
と書いてあり、math.hもインクルードしてるので原因が分からなくて
困ってます。Visial c++ではπの使い方には何か別の使い方がある
のでしょうか?よろしくお願いします。
*↓が実際に作ったプログラムです。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int main(void){
int i,n,count=0;
double x,y,r,error;

srand((unsigned)time(NULL)); /*乱数の初期化*/

printf("How many trials?");
scanf("&d",&n);

for(i=0;i<n;i++){
x=rand()/(RAND_MAX+1.0);
y=rand()/(RAND_MAX+1.0);

if(y<sin(M_PI*x)){
count++;
}
}

r=(double)count/n; /*キャスト演算子を使用*/
error=2/M_PI-r;

printf("Result is %f (Error: %f)\n",r,error);

return 0;
}

自宅でCプログラミングの練習をするためVisial C++ 2008を使って
プログラムをしています。y<sin(πx)となった時の
割合などを計算するプログラムで                「M_PIが定義されていない識別子です」
とでてきます。所持している本を参考にしてもM_PI=πとして用いる
と書いてあり、math.hもインクルードしてるので原因が分からなくて
困ってます。Visial c++ではπの使い方には何か別の使い方がある
のでしょうか?よろしくお願いします。
*↓が実際に作ったプログラムです。
#include ...続きを読む

Aベストアンサー

★アドバイス
・math.hをインクルードする前に『_USE_MATH_DEFINES』定数を define します。

#define _USE_MATH_DEFINES
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

int main( void )
{
 :
 return 0;
}
必ず include する前に定義して下さい。

Qint kosuu; とstruct tanka_kosuu kosuu[10]; の関係は

同プログラムの内容で現在3個の質問をしておりますが!
 その質問を解決する上で4つ目の質問をさせていただきます。
 悪しからず・・・
 さて
以下のサイトのプログラムで 些細な疑問がございます。
https://oshiete.goo.ne.jp/qa/9062058.html
 で
 struct tanka_kosuu {
int tanka; 
int kosuu; 
int kingaku; /
以上の中にあるkosuuと
 struct tanka_kosuu kosuu[10];のkosuu[10]とは直接関係がありますか?
 馬鹿な質問ばかりで申し訳ございませんがよろしくお願いいたします。

Aベストアンサー

#No.1です。

>kosuu[10];をakb[10];変えたところ 以下の errorでてコンパイルできません!?
> example10.c(15) : error C2065: 'kosuu' : 定義されていない識別子です。


宣言している変数名を変更したら、その変数を利用している場所(エラーメッセージで15行目と書かれています)の変数名も変更する必要があると思いませんか?

下の例で、1行目も変数をaからbに変えたら、2行目,3行目のaも、bに変える必要があのはご理解いただけますよね?
01: int a;
02: a = 10;
03: printf("a=%d\n", a);

QcygwinでのC++の使い方

cygwinでC言語で書いたプログラムを実行したいのですがcygwinを起動すると
私の名前@なにやらアルファベット
が表示され次の行に

と表示されるんですがこの後にどんなことを書けば
#include<・・・>
としてC++のプログラムを書いていくことができるんですか?そもそもcygwinの使い方が根本的に違うんですかねえ?それともメモ帳かなんかにプログラムを書き保存しそれをcygwinで実行するんですかねえ?とりあえずプログラムを実行できるようにしてください。おねがいします。

Aベストアンサー

> それともメモ帳かなんかにプログラムを書き保存しそれをcygwinで実行するんですかねえ?

おおむねその通りです。

メモ帳でも何でもよいので、エディタでソースファイルを作成してください。作成したソースファイルは、とりあえずホームディレクトリに格納するとよいでしょう(C:\cygwinにCygwinをインストールしたのであれば、C:\cygwin\home\アカウント名がホームディレクトリになります)。

作成したソースファイルがfoo.cppだった場合、

g++ foo.cpp

とすれば、a.exeという実行ファイルが同じディレクトリにできるはずです。そこで、

./a

と入力すれば、a.exeを実行することができます。

Q猫でもわかるC言語の本で勉強された方教えてー;_;

猫でもわかるC言語を勉強しています

Microsoft Visual C++2008 Express Edition のバージョンのコンパイラで

第5章のscanf関数のところで困っていることになっていますsos
本の通りに

/*scan01.c*/

#include <stdio.h>

int main()
{
int seisu;

printf("整数値を入力してください----125");
scanf("%d",&seisu);
printf("あなたの入力した数値は%dですね",seisu);

return 0;
}
と書いてビルドをしても警告1になります、あと

/*scan01.c*/

#include <stdio.h>
#define _CRT_SECURE_NO_DEPRECATE

int main()
{
int seisu;

printf("整数値を入力してください----125");
scanf_s("%d",&seisu);
printf("あなたの入力した数値は%dですね",seisu);

return 0;
}

と書いてもエラーや警告は0になるけどデバッグ→デバッグなしで開始でいつもどうりに画面に(コマンド プロンプト?っぽいやつに)出力をすると本の通りに

整数値を入力してください----125
あなたの入力した数値は125ですね

とならず

整数値を入力してください----125

だけが出力されます(コマンド プロンプトに)・・・
みなさんはどうやって突破したの!?いや、されたのッ!!!それともいらってはいないんですけどコンパイラの設定が悪いんでしょうか?;_;

何をどこをヘルプしたらいいやら分かりません教えてください先輩僕は一体どうしたらいいの!!!!
これ以降いっぱいscanfのこといっぱい出るのにぃ~~OTL←やっぱ僕これになるんでしょうかね・・。

猫でもわかるC言語を勉強しています

Microsoft Visual C++2008 Express Edition のバージョンのコンパイラで

第5章のscanf関数のところで困っていることになっていますsos
本の通りに

/*scan01.c*/

#include <stdio.h>

int main()
{
int seisu;

printf("整数値を入力してください----125");
scanf("%d",&seisu);
printf("あなたの入力した数値は%dですね",seisu);

return 0;
}
と書いてビルドをしても警告1になります、あと

/*scan01.c*/

#include <stdio.h>
#define _CRT_SECURE_NO_DEPRECATE

int ...続きを読む

Aベストアンサー

これより前のサンプルでは、実行したら最後まで進むものだったのでは?
このプログラムは、実行したら全部一気に表示されるものではないんです。
このプログラムは、途中でユーザーからの入力を待ちます。

繰り返しになりますけど。

> printf("整数値を入力してください----125");
で"整数値を入力してください----125"と表示されて

> scanf_s("%d",&seisu);
で入力待ちで止まっているのが今の状態です。
入力があるまで、いつまでもいつまでもここで止まっています

ここで、「数値を入力してEnter」と入力があると、
そこではじめてscanf_sを抜けて、次の
> printf("あなたの入力した数値は%dですね",seisu);
へ進みます。

#1
> 整数値(例えば125)を入力したらどうなる?
#5
> 「125」をちゃんと自分で入力して、Enterキーを押してますか?
とすでに指摘があるのですが、それはやったのですか?
勝手に数値が入ったりしません。


あと、「猫でもわかるC言語 scan01.c」で検索したら、次のサイトが見付かりました。
http://www.mogumagu.com/bamboo_lath_by_mogumagu/2010/03/c1.html
あなたのプログラムと違うのですが、こちらの方がサンプル通りに動作するように思います。
本のプログラムはどちらなのでしょう?

これより前のサンプルでは、実行したら最後まで進むものだったのでは?
このプログラムは、実行したら全部一気に表示されるものではないんです。
このプログラムは、途中でユーザーからの入力を待ちます。

繰り返しになりますけど。

> printf("整数値を入力してください----125");
で"整数値を入力してください----125"と表示されて

> scanf_s("%d",&seisu);
で入力待ちで止まっているのが今の状態です。
入力があるまで、いつまでもいつまでもここで止まっています

ここで、「数値を入力してEnter」と入力があ...続きを読む


人気Q&Aランキング

おすすめ情報