-7

次のような文字列があります。

std::string N;

次のような(テスト)値を割り当てます。

N = "Ant";

最初の文字を印刷するには、次のようにしました。

std::cout << N[0];

しかし、出力は65(つまり、ASCII 値) であり、実際の文字ではありません。だから私はこれを試しました:

putchar(N[0]);

古いヘッダー ファイルの使用を避けることができるputchar の代替手段はありstdio.hますか?

ありがとう!

追加情報: コンパイラ: gcc バージョン 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)

完全なコード サンプル:

#include <iostream>
#include <string>
#include <stdio.h>
main()
{
 std::string N;

 N = "Ant"; 
 std::cout << N[0]; //output 65
 putchar(N[0]); //output A
}

次のようにコンパイルされます。

g++ c.cpp -o c
4

1 に答える 1

1

私のDebian/Sid/x86-64では、以下のプログラム(itsols.ccコマンドでコンパイルされたソースファイル内g++ -Wall itsols.cc -o itsols

#include <iostream>
#include <string>

int main(int, char**) {
  std::string s = "Hello";
  std::cout << s[3] << std::endl;
  return 0;
}  

単一の小文字を表示します( GCC 4.7.2 と GCC 4.8.0 の両方、および GCC 4.6.3 でlコンパイルされます)。g++ -Wall itsols.cc -o itsols

したがって、あなたの主張を再現することはできません (C++ リファレンス資料を読むと、文字列の演算子 [] が結果を返し、数値ではなく単一の文字としてconst char&出力されるため、おそらく間違っていると思います)。std::cout <<

補遺

あなたの[最終]の例(署名が悪いためC ++ではなくmain、GCCがそれについて警告している)を使用しても、2つのA出力が得られます(これはGCC 4.6.3、またはGC 4.7.2、またはGCC 4.8のいずれかを使用しています.0)。また、あなたの例には astd::endlと finalがありませんputchar('\n'); return 0;....

常にorに渡す習慣-Wallを身につけ(また、 でプログラムをデバッグしている間も渡し、後でバグがないときに最適化し ます)、信頼できるコンパイラを実行していることを確認し、そのバージョンを取得します。g++gcc-ggdb-O2g++ -v

于 2013-04-21T14:21:23.480 に答える