使用带有std :: cout的volatile c-string

时间:2018-04-05 14:51:35

标签: c++ std volatile ostream

我有以下代码

#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;。

1 个答案:

答案 0 :(得分:4)

| PARSENAME('JOHN123DOE').GETFIRSTNAME() | PARSENAME('JOHN123DOE').CLEANNAMES().GETFIRSTNAME() | |----------------------------------------|-----------------------------------------------------| | John123 | John | 是可变参数,因此可以使用任何类型的参数。 printf是更强类型的C ++ thingie。 cout不会隐式转换为char const volatile*。但它转换为char const*。因此1。