我很困惑为什么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是:F
val是:F
val是:F
val是:F
val是:F
0按任意键继续。 。点。
编辑: 我初始化数组以包含main中的所有0。所以我期待打印0。我不确定O(就像在哦!)事物的上下文。有人可以解释一下吗?
我期待这个o / p
val是:0 F
编辑 - 2: 伙计们,谢谢。谢谢你指出了这个bug。 另外我不明白为什么以下行只用'a'而不是整个数组初始化大括号[0]。 WHat是初始化整个数组而不是运行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
内部主要:a
val是:aX
val是:X
val是:X
val是:X
val是:X
val是:X
val是:X
val是:X
答案 0 :(得分:2)
尝试:
std::cout<<"val is:"<< (int)(c_braces_array[i]) <<"F\n";
答案 1 :(得分:2)
似乎你的大多数问题都得到了回答,但为了完整起见,我们来回顾一下。
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
值填充数组。我认为您的下一个问题可能与“如何用不同的值填充它?”相符。如果没有明确说明每个元素的每个值,就无法更改数组的初始化方式。 但 - 您可以设置每个值。
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-strings来更好地理解它们可能是有用的。请注意,'0'
和0
之间存在差异,0
只是零值,而'0'
是零字符的字符值。 (阅读:48
)。因此,如果要将memset设置为打印0,则必须memset(myArray, '0', 100);
答案 2 :(得分:0)
正在尝试打印您的变量值。该值为0,不是'0'
。 0不是可打印字符,因此无法打印任何内容。