C++ printf string.c_str() char[]

本文解析了在C++中使用printf打印string类型变量的常见错误,并提供了正确的实现方式。强调了string对象与C风格字符串的区别,以及如何通过c_str()方法正确转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下代码错误,不能直接printf string。

int main() {
 std::string str1 = "test abc";
 printf("%s", str1);
}

正确代码应为:

int main() {
 std::string str1 = "test abc";
 printf("%s", str1.c_str());
}

printf输出字符串是针对char*或char[]的。即printf只能输出C语言中的内置数据,string不是c语言内置数据。
以上代码中str1是string类型的对象,并非单单只有字符串,其内还有许多用于操作的函数,于是&str1并非字符串“test abc”的首地址,而是str1这个对象的首地址。

但string类型的数据可以用cout直接输出:

int main() {
 std::string str1 = "This is string.";
 cout << str1 << endl;
}

对于char[]或char*定义的字符串可以直接printf。
如下代码正确:

int main() {
 char str1[] = "123456";
 const char* str2 = "test";
 printf("%s\n",str1);
 printf("%s", str2);
}

运行结果为:
123456
test

改编自:
https://blog.csdn.net/qq_36561697/article/details/81182408

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值