在C ++中为什么引用std :: string的单个字符会给出一个数字

时间:2013-04-21 14:10:28

标签: c++ string character substring

我有一个这样的字符串:

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

1 个答案:

答案 0 :(得分: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;
}  

显示单个小写l(使用g++ -Wall itsols.cc -o itsols编译,包括GCC 4.7.2和GCC 4.8.0以及GCC 4.6.3)

所以我无法重现你声称的内容(我相信你可能错了,因为当你阅读C ++参考资料时,operator [] on strings会得到一个const char&结果,使用std::cout <<输出作为单个字符,而不是数字)。

附加物

即使采用你的[最终]示例(因为main签名不正确而导致C ++不正确,并且GCC发出警告),我得到两个A输出(并使用GCC 4.6.3,或GC 4.7.2,或GCC 4.8.0)。此外,您的示例缺少std::endl和最终putchar('\n'); return 0; ....

习惯性地始终将-Wall传递给g++gcc(在使用-g调试程序时也传递gdb,稍后使用当没有错误时-O2,并且还要g++ -v检查您运行的是您认为的编译器,并获取其版本。