【发布时间】:2021-03-11 21:46:37
【问题描述】:
我刚开始学习 C++,我试图通过 printf 输出一个字符串。 它不起作用,因为我必须先将字符串转换为 char 数组。 我用谷歌搜索了一下,似乎最好的解决方案是:
char *a = &b[0];
我有点理解:它获取对第一个字符的引用并将 a 设置为该字符。 我不明白的部分是,如果字符串存储在堆栈中,这对我来说才有意义,我知道有时可以。如果字符串在堆上,那么 [0] 索引究竟会返回什么?它是否将指针返回到第一个索引,因为 & 不是必需的吗?如果它返回字符,该字符不是采用堆栈上的单个值的形式,当被引用时,它不会给你正确的 char 数组?
【问题讨论】:
-
谁说这是最好的解决方案而不是c_str 方法?
-
附带说明,您不应该在 C++ 中使用
printf,而是使用cout。 -
@RemyLebeau 我听说 printf 更快。我还看到有人查看生成的二进制文件,而 printf 中的指令要少得多。如果 printf 更快,我真的没有理由不使用它。
-
@NikTedig
printf()可能比cout快(这是有争议的,这取决于正在执行的格式化类型),但这种速度部分是由于printf()没有比cout更安全。为了性能,它更容易出现用户错误。 -
@RemyLebeau 什么样的用户错误?