C++で文字列の中から,文字列の右端から特定の文字までの文字列を取り出すというものを作りたいと思っています。

右端から○文字取り出す。といった感じのコードは書けるのですが、特定の文字まで、というのがどうもうまくいきません。こちら、良いアドバイスをいただける方がいましたらよろしくお願いします。

例:ファイル名を抽出
文字列\system32\notepad.exeからnotepad.exeの部分だけを取り出したい。というものです。
初めに見つけた\まで取り出す・・とやればよいのでしょうが、その方法が今ひとつ良くわからないので、どうかご助力お願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

具体的なコードにもよりますが、



> 右端から○文字取り出す。といった感じのコードは書けるのですが

だったら、ほぼできていると思います。

char src[1000]; に文字列が入っているとして、

そのコードに、

int j = src[] にある、最後の文字を示すインデックス
for(int i = 0; i < ○; i++)
{
src[j] を取り出す;
j--;
}

という部分があるなら、

while(src[j] != '\\')

に書き直すだけ。

または、

for(int j = src[] にある、最後の文字を示すインデックス; (j >=0 ) && src[j] != '\\'; j--)

にするとか。

でも、「どうもうまくいきません」なら、「こういうことをしたら、こうなってしまいました」というのがあるほうが親切ですね。
    • good
    • 0

次のようにします。



#include <iostream>
#include <string>

int main()
{
 std::string s("\\system32\\notepad.exe");
 std::string::size_type pos = s.find_last_of('\\');
 std::cout << s.substr(pos + 1) << std::endl;
}
    • good
    • 0

※文字列をchar型の配列およびchar型のポインタで保持している場合のケースについてです。



strrchrという関数があります。

が、Shift_JISコードの場合、2つのコードで1つの文字を表すものがあり、その後ろのコードに'\'と同じコードが使われることがあります。
ですので、strchrを扱うと意図しない位置を取得する可能性があります。

Visual C++ であれば、Shift_JISコード(マルチバイト)用の_mbsrchrという関数を使ったほうがよいです。
http://msdn.microsoft.com/ja-jp/library/ftw0heb9 …


対象の文字列が完全にファイルのフルパスであれば、splitpathって関数が使えるのですが。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

Q歯を削るときなんで痛く感じるのですか? 歯を削るだけなら痛くないのに

歯を削るときなんで痛く感じるのですか?
歯を削るだけなら痛くないのに

Aベストアンサー

歯は基本的に硬組織と呼ばれる硬い結晶で出来ています。一番表面はエナメル質と呼ばれ この硬い結晶成分のみでできています。この部分は削っても痛みは全くありません。
2層目は象牙質(dentin)と呼ばれやや硬い組織で出来ています。そして歯の中央・最深部は歯髄・いわゆる神経と呼ばれる軟組織(普通の神経・血管組織)となっています。
この2層目の象牙質には 歯髄から細い繊維が入り込んでいてエナメル質直下まで 神経組織が伸びています。従って 歯を削る時にこの象牙質を削ると いっしょに神経組織まで削ってしまう事になり 強い痛みを発する事になるんです。普通 象牙質だけを削るよりも、この神経繊維の末端・つまりエナメル質と象牙質の境目を削る時の方がはるかに強く痛みを感じますねぇ~ 痛みを感じない部分から突然痛みを感じる部分に入った瞬間に急激な痛み・あの独特の痛みがあるわけです。
もちろん 歯を削る時の痛みは、神経だけの問題ではありません。タービンと呼ばれる機器・ドリルによって削る事が多いですが、この切削具の振動・回転する摩擦熱等が歯の知覚組織に伝わる事も痛みの原因となります。最近では、タービンを使わないレーザー光線による切削も多くなり、削る時の痛みは大幅に軽減されています。また、機器の振動を抑える工夫もなされており、機器の振動と似た振動を他の箇所に与える事により、痛みの閾値を上げてしまう(わかりやすく言うと 振動で神経を麻痺させて痛みを感じにくくする事)方法も行われています。

さて、通常の治療で歯を削る時は、神経のある歯(虫歯が小さい場合)や 神経を取る処置の場合、麻酔を使うことがほとんどでしょう。
えまく麻酔が効けば 痛みは全く感じなくなります。ただ、歯科の麻酔は歯の神経を麻痺させねばなりません。歯の神経の出口は 歯の根の先端・つまり骨の中にあるんです。
これを麻酔することはなかなかに難しい事なんです。普通 顎の骨は硬く厚い骨が多く なかなか麻酔薬が内部に浸潤してくれません。かなりの力を入れて圧力をかけないと 硬い骨を通り越してくれませんので、歯科の麻酔はそれだけでも痛いのです(^o^;...この時 骨の厚さによって麻酔が効く効かないが別れますね~
実は同じように 歯のエナメル質の厚さによっても削る時の痛みに差があるのです。例えば同じ歯でも、切端部・先っぽの方はエナメル質が厚いので少々削っても痛みません。逆に根元に近い部分はエナメル質が薄く 象牙質がすぐ直下にあるために痛みが感じやすいと言えます。
また、年齢によっても痛み方に大きな差があります。歯は生えたばかりはまだ幼弱で 歯髄が大きく象牙質が薄いのです。それだけ削る時に神経に近くなってしまい痛みが出やすいですねぇ~
逆に生えてから何十年も経った歯は・・・・つまり老人の歯は 多少削っても痛みません。これは長い間に神経が退化したり象牙質が石灰化して硬化したために 痛みを感じる神経が退化して・あるいは無くなってしまったからです。麻酔を使わずにどんなに削っても 全く痛まないことも しばしばあります。

いずけにしても痛みの感じ方には大きな個人差があります。痛いと感じたなら 左手を挙げて・・・・・ヽ(;^^)/ まぁ、歯科医師にお伝え下さい。

歯は基本的に硬組織と呼ばれる硬い結晶で出来ています。一番表面はエナメル質と呼ばれ この硬い結晶成分のみでできています。この部分は削っても痛みは全くありません。
2層目は象牙質(dentin)と呼ばれやや硬い組織で出来ています。そして歯の中央・最深部は歯髄・いわゆる神経と呼ばれる軟組織(普通の神経・血管組織)となっています。
この2層目の象牙質には 歯髄から細い繊維が入り込んでいてエナメル質直下まで 神経組織が伸びています。従って 歯を削る時にこの象牙質を削ると いっしょに神経組織...続きを読む

QC,C++,C++/CLIの構造体とクラス

C++の構造体・クラスって、メンバのアクセス指定子のデフォルトが
privateかpublicかという違い「だけ」しか全くないのでしょうか?

クラスにおける
value class / ref class
という分類はC++/CLIのもので
これについては
value class の方は C言語の構造体に近いという事でいいでしょうか?

ref classの方は
ネイティブのC++のクラスを
マネージ用にしたようなもので

C++/CLIの構造体は
C++のそれと同じで
OKですか?

そしてそれらの構造体には、値型・参照型といった分類はないのでしょうか?

Aベストアンサー

> ということは、structも継承可、という事でしょうか?

structでも継承可能です。

> 継承のアクセス指定の方は
> クラスと構造体ではどうなるのでしょうか?

class A : Base {};



class A : private Base {};

と等価です。
一方、

struct A : Base {};



struct A : public Base {};

と等価です。

> そして「集成体」というのが初めて知ったのですが
> これはいわゆる、配列や・・・ある条件下でのクラス・・?
> なのでしょうか?

配列と以下の条件をすべて満たすクラスのことです。
・ユーザー定義のコンストラクタを持たない
・非公開または限定公開のメンバを持たない
・基底クラスを持たない
・仮想関数を持たない

ちなみにC言語の集成体は、配列と構造体の総称です(共用体は集成体ではありません)。

Q歯を削る(レーザー、カリソルブ、水流、ドリル)比較について

【質問・要点】
昨日、インレーが取れました。そこで、少し削って新しいインレーを入れると思うのですが、以下4つを考えたのですが、いったい、どれが最も良い治療法なのでしょうか?

レーザー
カリソルブ
水流で削る
ドリルで削る

【一応私が考える判断基準】
最も歯を削る体積が小さい治療法、
術後、2次齲蝕が最も少ない治療法
最も痛くない治療法

他に、もっと良い治療法やアドバイスがあれば、ご教示、何卒、宜しくお願い致します。

Aベストアンサー

歯科医です。
>レーザー
>カリソルブ
>水流で削る
>ドリルで削る
沢山質問されていますが
ここでまとめて。
まず、レーザーでインレーが入れられるほど削るのはできないです。削除量が圧倒的にすくなくて、綺麗な形態に削ることができないから。
カリソルブも同様です。
水流で削るのは歯に対して現在そういう器具はありません。
ドリルで削る・・・・ドリルというのは恐らくエアタービンもしくはエンジンのどちらかをさしておられる
のでしょうか。タービンで削ることが一番でしょうね。

インレーがはずれたのではなく
新しい虫歯であるのなら削除量のことを考える余地があります。しかし
何分にもすでにインレーの体積分は歯が失われているので
削除量を少なくする事に意義は見出せません。
さらに虫歯になっていなければ大抵の場合はほとんど削らなくてもよいでしょう。
取れたところがさらに虫歯になっているのであれば
削除量云々言う前に
虫歯をとりさることが肝要です。二次カリエスにならないためにはこれがもっとも大切なことです。
痛くない治療法・・・は麻酔を的確に使用して治療することでしょう。

それから
インレーはわりと易しい技工物ですので
一般的なレベルの技工士さんであれば
十分な適合の良いきれいなインレーを作りますよ。

異種金属が口腔内にあることの是非は討論の余地があるのですが
一般的に言って
接しているところでなければ
大きな問題はおきないです。
接するところではそこに小さな電池ができるようなものなので
電流が流れます。

それよりなにより
一日も早く治療を受けてください。
放置しておくことに良い点は一つもありません。

歯科医です。
>レーザー
>カリソルブ
>水流で削る
>ドリルで削る
沢山質問されていますが
ここでまとめて。
まず、レーザーでインレーが入れられるほど削るのはできないです。削除量が圧倒的にすくなくて、綺麗な形態に削ることができないから。
カリソルブも同様です。
水流で削るのは歯に対して現在そういう器具はありません。
ドリルで削る・・・・ドリルというのは恐らくエアタービンもしくはエンジンのどちらかをさしておられる
のでしょうか。タービンで削ることが一番でしょうね。

イン...続きを読む

Q3週間でC,C++,VC++の勉強を済ませるのですが・・・

こんにちは。
私は、未経験でプログラマの職に就いた者です。
会社より、まずは勉強をしてほしいとのことで、

第1週 : 独習C(第3版 翔泳社)で、C言語の勉強
第2週 : 独習C++(第3版 翔泳社)で、C++の勉強
第3週 : MSDNライブラリのVisualC++チュートリアルで、VC++の勉強

というスケジュールで、勉強しています。
今は第3週の2日目ですが、なかなかはかどりません。

上司は、「これから先に実践で必要なことを覚えてもらうけれど、その基本を身に着けてもらいたい」と言っていましたし、
時間の関係もあるので、それぞれの項目の内容をほぼ理解できるまで読み、
例題などは極力とばして進めてきました。
そして今週VC++の勉強に入ったのですが、MFCなど新たなものが沢山でてくるし、
今までの本と違いMSDNライブラリは初心者の私にはあまり親切ではなく、プログラムの全体を把握することができずに頭がこんがらがってきています。

上司は別の場所で働いているのでなかなか意思の疎通がとれず、
勉強の指針など話す機会に恵まていない状況です。

そこで経験者の方に質問なのですが、
MSDNライブラリ以外に副読本として役に立つ本や役立つサイトなどオススメはありませんでしょうか?
また、この3週間のスケジュールで求められていることは、おおまかな全体の把握以外に、具体的にどのようなことと思われるでしょうか。
(例えば、このスケジュールで勉強するならVC++の~の事は重点的に覚えておいてほしい、など)

曖昧な質問で申し訳ありません。
この質問内容では不十分であれば指摘していただければ補足しますので、
どうぞよろしくお願いします。

こんにちは。
私は、未経験でプログラマの職に就いた者です。
会社より、まずは勉強をしてほしいとのことで、

第1週 : 独習C(第3版 翔泳社)で、C言語の勉強
第2週 : 独習C++(第3版 翔泳社)で、C++の勉強
第3週 : MSDNライブラリのVisualC++チュートリアルで、VC++の勉強

というスケジュールで、勉強しています。
今は第3週の2日目ですが、なかなかはかどりません。

上司は、「これから先に実践で必要なことを覚えてもらうけれど、その基本を身に着けてもらいたい」と言っていました...続きを読む

Aベストアンサー

ゼロから学ぶVisual C++
http://www.amazon.co.jp/exec/obidos/ASIN/4822216934/250-7140492-7151432
Visual C++〈3〉はじめてのMFCプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4881358235/250-7140492-7151432

とりあえず初心者向けMFC本を2冊。
後、最終的にはWin32 APIというものに対する知識も必要なので、
Win32API完璧マスター
http://www.amazon.co.jp/exec/obidos/ASIN/4789836908/ref=pd_sim_dp_5/250-7140492-7151432
も挙げておこう。

むしろMSDNのチュートリアルを後回しにして良いと思う。あれは、ある程度わかるようになってからでしょ。

> この3週間のスケジュールで求められていることは、
> おおまかな全体の把握以外に、具体的にどのようなことと思われるでしょうか。
 さて・・・・君の会社が何を作っているのか知らないので一概には言えないのだが、やはりアプリの作り方、だな。何を置いても一通り作れるようになってからだ。ただ、その前に人のソースを読めるようになっておく方が上達が早いかも知れない。
 ところで今思ったんやけど、君の会社はMFCで作っているのかな?
> 第3週 : MSDNライブラリのVisualC++チュートリアルで、VC++の勉強
とあるが、もしこれで君の会社がWin32APIだけで作りよるとしたら、MFCの知識はかえって邪魔かも知れない。

 私はC言語(とWindowsでのC)を本当にマスターしたと言えるまで、2年かかった。NECのN88BASICという言語の経験が1年あった上での話だ。んな急に全部作れるようになれとは決して言わないはず。
 書けるよりは、まず人のプログラムを読めるようになると良いだろう。

ゼロから学ぶVisual C++
http://www.amazon.co.jp/exec/obidos/ASIN/4822216934/250-7140492-7151432
Visual C++〈3〉はじめてのMFCプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4881358235/250-7140492-7151432

とりあえず初心者向けMFC本を2冊。
後、最終的にはWin32 APIというものに対する知識も必要なので、
Win32API完璧マスター
http://www.amazon.co.jp/exec/obidos/ASIN/4789836908/ref=pd_sim_dp_5/250-7140492-7151432
も挙げておこう。

むしろMSDNのチュートリアルを後回し...続きを読む

Q勉強の為に睡眠削るのは確かにダメですが 勉強スケジュール上、このままでは間に合わないという状況では、

勉強の為に睡眠削るのは確かにダメですが
勉強スケジュール上、このままでは間に合わないという状況では、削るのは仕方なくないですか?エナジードリンクなり、使って

Aベストアンサー

まあその前に 遊びの時間は削るはな
その上で足りなければ トイレの時間中や バスや電車の移動中 そして場合によると食事中なども勉強する。
それでも足りない時は 睡眠5時間とかになるかな。

コーヒー 音楽 エナジードリンク ハーブ 辛い食べ物 いろいろ使いながら。
最低必要な睡眠時間ってのは人によっても違うが 短期的なら4時間睡眠でも案外行けると思う。
ただ 何というか 考え方が狭くなるように思う。
ヒラメキが出ないのだな。

別に問題はないと思うのだ。
こういう経験も大切だし 焦りさえしなければ十分得るものはある。
脳にも緩急は必要だし 時にフルスロットルも良い・・が あまり長くやると痛む。

よほど深く眠らないと4時間で2週間以上続けるのは難しかった。
そして6時間程度寝ないと 自律神経系は慣れでなんとかなるみたいなんだが どうもホルモンバランスが悪くなる感じ。
そこは注意すべきかと。

QC,C++,C#には共通点があるのでしょうか?

Cという言語に+や#が付いているだけ、と考えるとC言語がベースで、それに何か変更を加えてC++やC#に派生した、と思っているのですが、実際なにかつながりはあるのでしょうか?

C++を始める前にCをマスターしてから、というアドバイスをよく見かけますが、それもCがベースだからということなのでしょうか?

Aベストアンサー

この手の話では以下の読み物がオススメです
http://www.mwsoft.jp/column/program_top10.html


私の理解では、

C:
機械語を高級にしたもの

C++:
Cに、言語仕様的にオブジェクト指向を拡張したもの
Objective-C:
Cに、マクロ的にオブジェクト指向を追加したもの

Java:
C++の構文を下敷きに、JVM という仮想環境向けに簡単にしたもの
C#:
Javaの構文を下敷きに、.NET という仮想環境向けに複雑にしたもの


CとC++は関連があるので、難解なC++/ObjCを覚える最初の段階としてのCは、良い考えだと思います。
C/C++とJava/C#は無関係なので、Cを覚えても無駄でしょう。

Q固定された木材を削る道具は?

部屋のドアを、内開きから外開きに変える計画を立てています。上、左右のドア枠は内側と外側のサイズが同じなのですが、下側のドア枠は削る必要があります。ドアと枠は共に木製です。
そこで質問なのですが、ドア枠のように固定された木材を削る道具は、どういったものが最適でしょうか?
回答、よろしくお願いします。

Aベストアンサー

こんにちは。
どれくらい削るかにもよりますが。

ごくわずかであれば、電動〈仕上げ)サンダーっていう、電動紙やすりみたいな機械があります。
レンタルしてるかもしれないですね。

カンナを使うなら、角は(何種類かの目の粗さの)木工ヤスリを使って、仕上げは紙やすりで。

ところで、ドアの方を削るわけにはいかないんでしょうか?
大工さんが間違えてドア枠を作って取り付けてしまった時に、ドア下部を削ってましたよ。(^^;
問題がなければ、ドアを削った方が得策かと思いますが。

QWindows上のマウス操作をプログラムで実現したい(C,C++,C#)

Windows上で、マウスで右クリック→ファイル名をコピー→貼り付け

という動作をプログラミングによって実現したいのですが、どのようにしたら良いのでしょう?
やはり、APIを使うと思うのでC#が適しているかと自分では思っているのですが、CでもC++でもかまいません。
どなたかご教授願えますか?よろしくお願いいたします。

Aベストアンサー

★『ファイル名をコピー』の処理を自分のプログラムに組み込んでみるのはどう?
・もう少しだけ詳しい動作の仕組みを補足要求します。
・また『mouse_event』という API 関数は古いので新しい関数『SendInput』を使いましょう。
・ただし、この『SendInput』関数はマウス以外にキーボードのエミュレートも行えるため
 少しだけ複雑な指定になります。慣れれば何てことないが…。→また紹介します。
・まぁ、とにかくもう少し何を行いたいのかを補足して下さい。
・まさか、本当に『右クリック』→『ファイル名をコピー』→『貼り付け』の3ステップを
 行いたいのですか?

参考URL:http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200412/04120036.txt

Q歯を削る時痛かったを英語で?

教えて頂きたいのですが、歯医者さんで虫歯を削る時に痛かったと英語で言いたいのですが
I was pain when I shave bat tooh.
であってますか?
削るというのもshaveでいいのかわからないのですが、いい単語があれば教えて頂きたいです!

Aベストアンサー

こんにちは。4/11のご質問ではお礼のお返事を有難うございまして。

ご質問:
<I was pain when I shave bat tooh.であってますか?>

以下の点で訂正を要します。

1.I=painではないのでbe動詞はここでは不適です。

2.動詞はhadなどを使って、
I had a pain「痛みがあった」→「痛かった」
とするのが自然です。

3.shaveはどちらかというと「削ぎ落とす」「削ぐ」の意味に近くなります。歯医者でいう「削る」とは、「穴をあけること」ですから、ここはdrillが適切です。

4.I shave:「私が削る」のではないので、ここでは使役動詞haveなどを使って「削ってもらう」にします。
例:
I have my tooth drilled.
「私の歯を、削らせる」→「削ってもらう」

ここでdrilledと過去分詞になっているのは、目的語Oであるmy toothと、補語Cであるdrilledの関係が、受動の関係になるからです。
例:
my tooth is drilled「歯が、削られる」

5.虫歯はbad toothと綴りを正します。

6.以上を踏まえて原文に忠実な訂正例は
I had a pain when I had my tooth drilled by dentist.
「歯医者に歯を削ってもらった時、痛かった」
となります。

7.他にも以下のような表現もあります。
I felt some pain when I had my tooth drilled.
「歯医者に歯を削ってもらった時、少し痛かった」

以上ご参考までに。

こんにちは。4/11のご質問ではお礼のお返事を有難うございまして。

ご質問:
<I was pain when I shave bat tooh.であってますか?>

以下の点で訂正を要します。

1.I=painではないのでbe動詞はここでは不適です。

2.動詞はhadなどを使って、
I had a pain「痛みがあった」→「痛かった」
とするのが自然です。

3.shaveはどちらかというと「削ぎ落とす」「削ぐ」の意味に近くなります。歯医者でいう「削る」とは、「穴をあけること」ですから、ここはdrillが適切です。

4.I shave...続きを読む

QC++ ハードウェアから文字列受信 文字化け

C++初心者のため大変困っております。
正直に申し上げますと、だれか助けて下さい。
どなたかご教授宜しくお願いいたします。


まずは簡単な仕様から

JavaでC++を呼び出し、C++でハードウェアを動かします
ハードウェアから文字列を受け取り、Javaに返すというプログラムを開発しております。

以下に現在の状況を示します
・C++のプロジェクト→プロパティ→マルチバイト文字を使用する にチェックを入れました
・ソースです↓ 以下をJavaから呼び出し、戻り値を取得しています
printfがたくさんありますが、文字列をチェックするためのものです。ご了承ください。

JNIEXPORT jstring JNICALL Java_rewritecard_JNI001_DT(JNIEnv *env, jobject obj) {

BSTR s1 = ::SysAllocString(L"s1");
BSTR s2 = ::SysAllocString(L"s2");
BSTR s3 = ::SysAllocString(L"s3");

    //ハードウェアにコマンドを送信する関数です
    //レスポンスが、s3のアドレスに格納されます。
    
crwSendCommandRR(
          4,        //ポート番号
          1,        //ポーリングフラグ
          10000,     //タイマー
          0,        //タイマー
          1,        //DSR信号線チェックフラグ
          "DT",     //コマンドコード
          ":1",      //ハードウェアに送信するパラメータ
          2,        //パラメータの長さ
          &s1,      //レスポンスを格納するアドレス 1 
          &s2,      //レスポンスを格納するアドレス 2
          &s3      //レスポンスを格納するアドレス 3
   );

printf("s3:\n", s3);
printf("s3:%d\n", s3);
printf("s3:%x\n", s3);
printf("s3:%s\n", s3);

//BSTR を char に変換----------------------------------------------
char buf[64]="";

WideCharToMultiByte(
CP_ACP,           // コードページ ANSI コードページ
WC_NO_BEST_FIT_CHARS,// 処理速度とマッピング方法を決定するフラグ
(OLECHAR*)s3,      // ワイド文字列のアドレス
-1,             // ワイド文字列の文字数
buf,            // 新しい文字列を受け取るバッファのアドレス
sizeof(buf) - 1,    // 新しい文字列を受け取るバッファのサイズ
NULL,          // マップできない文字の既定値のアドレス
NULL          // 既定の文字を使ったときにセットするフラグのアドレス
);


int len = strlen(buf);
for(int i = 0; i < len; i++) {
printf("\nbuf:", buf[i]);
printf("\nbuf:%d", buf[i]);
printf("\nbuf:%x", buf[i]);

}


char* src = buf;
printf("\nsrc:",src);
printf("\nsrc:%d",src);
printf("\nsrc:%x",src);
printf("\nsrc:%s",src);

jstring jstr = env->NewStringUTF(src);

printf("\njstr:", jstr);
printf("\njstr:%d", jstr);
printf("\njstr:%x", jstr);
printf("\njstr:%s", jstr);

::SysFreeString(s1);
::SysFreeString(s2);
::SysFreeString(s3);

return jstr;
}

・実行結果

Java側 ?????   //?になります。本来なら 1:19900309


C++側 

s3:
s3:3150196
s3:301174
s3:1:19900309

c:
c:3150196
c:301174
c:1:19900309

buf:
buf:63
buf:3f
buf:
buf:63
buf:3f
buf:
buf:63
buf:3f
buf:
buf:63
buf:3f

src:
src:71756992
src:446ecc0
src:????

jstr:
jstr:65927816
jstr:3edfa88
jstr:Pァ$@ヌ#@ヌ#@ヌ#(CO

どうもWideCharToMultiByteの使い方が悪いのかと思うんですが
C++初心者のため、どこがどうおかしいのか答えが出せずにおります
他に何かございましたら補足致しますので宜しくお願い致します。

C++初心者のため大変困っております。
正直に申し上げますと、だれか助けて下さい。
どなたかご教授宜しくお願いいたします。


まずは簡単な仕様から

JavaでC++を呼び出し、C++でハードウェアを動かします
ハードウェアから文字列を受け取り、Javaに返すというプログラムを開発しております。

以下に現在の状況を示します
・C++のプロジェクト→プロパティ→マルチバイト文字を使用する にチェックを入れました
・ソースです↓ 以下をJavaから呼び出し、戻り値を取得しています
printfがたくさんありますが、文...続きを読む

Aベストアンサー

実行結果の

>s3:1:19900309

からするとs3はWideCharToMultiByte()を使うまでもなくマルチバイトキャラクターだと思いますが。
s3がワイドキャラクターならprintf()ではまともに出力できませんから。
そこから考えるとcrwSendCommandRR()の使い方も間違ってそうな気がします。

>C++初心者のため大変困っております。

内容からするとC++はあんまり関係ないと思う(C++の機能ぽいのほとんど使われてないし)

ひとまず
・ハードウェアから文字列受信
・JNIを使ってCからJavaに文字列を渡す
のをそれぞれに出来るようにしてから組み合わせた方がいいと思いますよ。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング