C++和printf-奇怪的字符输出
C++ and printf - strange character output
我是C++的新手,但不是Java、C#、JavaScript和VB的新手。我正在使用Visual Studio 2010中的默认C++控制台应用程序。
在尝试打印时,我遇到了一些奇怪的角色。每次都不一样,告诉我,每次我运行它时,他们可能会看到不同的内存位置
代码:
#include "stdafx.h"
#include <string>
using namespace std;
class Person
{
public:
string first_name;
};
int _tmain(int argc, _TCHAR* argv[])
{
char somechar;
Person p;
p.first_name = "Bruno";
printf("Hello %s", p.first_name);
scanf("%c",&somechar);
return 0;
}
问题是printf
/scanf
不是类型安全的。您提供的是一个std::string
对象,而printf
需要const char*
。
解决此问题的一种方法是写入
printf("Hello %s", p.first_name.c_str());
但是,由于您使用C++进行编码,因此最好优先使用I/O流而不是printf
/scanf
:
std::cout << p.first_name << std::endl;
std::cin >> c;
将字符串转换为c字符串。
printf("Hello %s", p.first_name.c_str());
此外,由于您使用的是C++,您应该了解cout,而不是printf!
使用printf("Hello %s",p.first_name.c_str());
!
printf("Hello %s", p.first_name.c_str());
但是,如果您使用的是c++,为什么不使用iostream呢?
不能将C++std::string
对象传递到printf
中。printf
只理解像int
、float
和char*
这样的基元类型。您的编译器应该在那里向您发出警告;如果不是,提高你的警告级别。
既然您使用的是C++,那么您实际上应该使用std::cout
进行文本输出,这确实理解了std::string
对象。如果出于某种原因确实必须使用printf
,那么通过调用c_str()
方法将std::string
转换为const char*
。
printf("%s")
接受以' '
结尾的c样式字符串。然而,string
对象是C++对象,它不同于C风格的字符串。您应该使用重载的std::cout
来直接处理string
类型,如下所示。
std::cout << p.first_name;
相关文章:
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 字符的输入/输出操作
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- C++输出奇怪的字符而不是数字 (Windows)
- 如何存储 unicode 字符并将其输出到文件?
- C++中附加的字符*的奇怪输出
- 来自无符号字符缓冲区的虚拟输出
- 将未签名的字符写入输出文件
- 在大小为 10 的 char 数组中输入超过 10 个字符的字符串并输出时,它会显示整个数组而不是前 10 个数组.为什
- 如何在C++中正确地将我的语言字符输出到HTML文件中
- x86 上的指针大小和奇怪的字符输出
- 如何修复C++中的随机字符输出?
- Visual Studio-怪异的字符输出
- 需要我当前的字符输出,这是它在C++中的整数值
- 宽字符输出结果
- 将字符输出随机化为文本文件
- C++和printf-奇怪的字符输出
- 显示无符号字符*和有符号字符*输出的结果是否完全相同
- 下一个回文 .奇怪的字符输出
- 不要将宽字符输出到命令提示符