我很困惑为什么 cout 语句没有在函数 find_depth 中打印数组 c_braces_array 的内容;
我想做的就是传递一个数组并打印它的值。
#include <iostream>
int find_depth(char c_braces_array[], int no_of_braces)
{
for(int i=0; i<no_of_braces; i++)
{
std::cout<<"val is:"<<c_braces_array[i]<<"F\n";
}
return 0;
}
int main()
{
char braces[100] = {0};
int ret_val = find_depth(braces, 100);
std::cout<<ret_val;
system ("pause");
return 0;
}
O/P:
...
val is: F
val is: F
val is: F
val is: F
val is: F
0Press any key to continue . . .
编辑: 我将数组初始化为在 main 中包含所有 0。所以我期待打印 0。我不确定 O(如 Oh!)的上下文。有人可以对此做更多解释吗?
我很期待这个o/p
val is:0 F
编辑 - 2: 伙计们谢谢。感谢您指出错误。 我也不明白为什么下面的行只用'a'而不是整个数组初始化大括号[0]。什么是初始化整个数组而不是运行 for 循环的正确方法。
现在我的代码如下所示。
main(){
...
char a_char = 'a';
char braces[100] = {a_char};
}
find_depth(..)
{
...
std::cout<<"val is:"<<c_braces_array_ptr[i]<<"X\n";
}
O/P
内部主要:一个
值是:aX
值是:X
值是:X
值是:X
值是:X
值是:X
值是:X
值是:X
最佳答案
您的大部分问题似乎都已得到解答,但为了完整起见,让我们回顾一下。
- 之所以没有在您期望的位置打印任何内容,是因为您已将数组初始化为包含所有
0
值。0
是 c 字符串的空终止符,意味着它标记字符串的结尾。它也是一个非打印字符,我们不想以打印字符结束每个 c 字符串,那没有意义。如果你想要 ASCII 字符 0,你需要'0'
这是十进制48
. (参见:http://www.asciitable.com/) - 当用数据声明和初始化数组时,它将用初始化列表中的相应数据填充每个元素。例如;
char myArray[10] = {'a', 'b', 'c'};
将使用值myArray[0] = 'a'; myArray[1] = 'b'; myArray[2] = 'c';
初始化数组但是所有其他元素呢?它不假设您想要重复一个元素,并且还假设您不想要垃圾。相反,它用0
填充数组值(value)观。 我假设您的下一个问题可能是“我怎样才能用不同的值填充它?”如果不明确说明每个元素的每个值,就无法更改数组的初始化方式。 但是 - 您可以设置每个值。
unsigned int i; char myArray[100]; // Don't waste time initializing any data yet. for(i = 0; i < 100; ++i) { myArray[i] = 'a'; // Set each element to 'a' - Now it's initialized! }
另一种选择是使用
memset();
,它是<string.h>
的一部分.这会将每个元素设置为给定值,并且对于您的情况可能是您需要的。这是这样做的:#include <string.h> char myArray[100]; // Declare, don't initialize. memset(myArray, 'a', 100); // Initialize by setting each value to 'a'!
希望这对您有所帮助!练习和使用 C 字符串可能有助于更好地理解它们。请注意,'0'
之间存在差异和 0
, 0
只是零值,而 '0'
是零字符的字符值。 (阅读:48
)。所以如果你想 memset 打印 0,你必须 memset(myArray, '0', 100);
关于c++ - Visual Studio (std::cout) 不打印我的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11180930/