重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

#include<stdio.h>
#include<string>
using namespace std;
int main() {
string d;
d = "文字列";
printf("%s\n", d);
return(0);
}
でデバッグなしに開始すると、
0�#
の文字化けして表示されます。
解消策を教えてください。

質問者からの補足コメント

  • OSがWindows8.1で統合開発環境はVisual Studio Community 2017です。eclipseでも同じ現象でした。

      補足日時:2018/03/17 11:13
  • 補足の追加です。プロジェクトはWin32コンソールアプリケーションです。

      補足日時:2018/03/17 11:25

A 回答 (3件)

ソースよく読んでませんでした。


No.2さんの指摘どおり、printfに渡してるdが指すことになる内容が問題だと思います。

printfに渡されるべきなのは、文字列の格納されている領域へのポインタですが、質問のソースだとstringをそのまま渡しています。

コンパイル時にワーニングとか出てるハズですが。


一般的に、stringの持ってる文字列のアドレスを渡すためには、

printf("%s\n", d.c_str());

とします。
    • good
    • 0
この回答へのお礼

printf("%s\n", d.c_str());で問題が解決しました。お礼申し上げます。

お礼日時:2018/03/18 14:31

そもそも


printf("%s\n", d);
の部分が未定義動作だから, そこを解決すべきではないかなぁ.
    • good
    • 0
この回答へのお礼

ご回答ありがとうございまいます。
#include<iostream>
using namespace std;
int main() {
string d;
d = "文字列";
cout<<d<<endl;
return(0);
}
なら正しくでますが、
あくまでC言語のみによって実現したいのです。

お礼日時:2018/03/18 07:18

開発環境などが不明ですが、単純にプログラムソースが適正な文字コードで保存されていないとか。


英数字は文字コードが変わっても変化しないので、コンパイラにしてみれば、プログラムソース中の「"文字列"」の部分だけ変な文字が入ってるものとして扱われます。
ただし、ダブルクォートで囲まれてる文字列なのでエラーってわけでもないし、そのままコンパイルされて別の文字コードで出力されるべき場所に出力されるとか。

環境が分からないので具体的な低処方は提示できないですが、例えばエディタに「文字コードを指定して保存」の機能があるなら、適正な文字コードで保存、再度コンパイルとか。
    • good
    • 0
この回答へのお礼

ありがとうございます。補足で環境を加えました。

お礼日時:2018/03/17 11:14

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