-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;
}  

显示单个小写字母lg++ -Wall itsols.cc -o itsols使用 GCC 4.7.2 和 GCC 4.8.0 以及 GCC 4.6.3 编译)

所以我无法重现您声称的内容(而且我相信您可能错了,因为当您阅读 C++ 参考资料时,字符串上的运算符 []会给出const char&结果,该结果使用std::cout <<单个字符而不是数字输出)。

附加物

即使通过您的 [final] 示例(这不是正确的 C++,因为main签名错误,并且 GCC 对此发出警告)我得到两个A输出(并且使用 GCC 4.6.3、或 GC 4.7.2 或 GCC 4.8 .0)。另外,您的示例缺少一个std::endl和一个final putchar('\n'); return 0;...。

养成始终传递-Wallg++or的习惯(在您使用 调试程序时gcc也传递,稍后 在没有错误时使用它进行优化),并检查您是否正在运行您相信的编译器,并获取它的版本。-ggdb-O2g++ -v

于 2013-04-21T14:21:23.480 回答