我有一个这样的字符串:
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
答案 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
检查您运行的是您认为的编译器,并获取其版本。