我有以下代码
#include <iostream>
#include <cstdio>
volatile char s[7] = "test";
int main() {
std::cout << s << std::endl;
std::printf("%s\n", s);
}
它打印&#34; 1&#34;用std :: cout和&#34; test&#34;与std :: printf。为什么打印&#34; 1&#34;对于第一种情况?!我的系统是&#34; Linux debian 4.9.0-3-amd64#1 SMP Debian 4.9.30-2 + deb9u5(2017-09-19)x86_64 GNU / Linux&#34;,我的C ++编译器是&#34; g ++(GCC)7.3.0&#34;。
如果我删除&#34; volatile&#34;关键字然后std :: cout打印预期的&#34;测试&#34;。
答案 0 :(得分:4)
| PARSENAME('JOHN123DOE').GETFIRSTNAME() | PARSENAME('JOHN123DOE').CLEANNAMES().GETFIRSTNAME() |
|----------------------------------------|-----------------------------------------------------|
| John123 | John |
是可变参数,因此可以使用任何类型的参数。 printf
是更强类型的C ++ thingie。 cout
不会隐式转换为char const volatile*
。但它转换为char const*
。因此1。