c++ - Visual Studio (std::cout) 不打印我的变量值

标签 c++ visual-studio-2010 cout

我很困惑为什么 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 . . .

enter image description here

编辑: 我将数组初始化为在 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

最佳答案

您的大部分问题似乎都已得到解答,但为了完整起见,让我们回顾一下。

  1. 之所以没有在您期望的位置打印任何内容,是因为您已将数组初始化为包含所有 0值。 0是 c 字符串的空终止符,意味着它标记字符串的结尾。它也是一个非打印字符,我们不想以打印字符结束每个 c 字符串,那没有意义。如果你想要 ASCII 字符 0,你需要 '0'这是十进制 48 . (参见:http://www.asciitable.com/)
  2. 当用数据声明和初始化数组时,它将用初始化列表中的相应数据填充每个元素。例如; char myArray[10] = {'a', 'b', 'c'};将使用值 myArray[0] = 'a'; myArray[1] = 'b'; myArray[2] = 'c'; 初始化数组但是所有其他元素呢?它不假设您想要重复一个元素,并且还假设您不想要垃圾。相反,它用 0 填充数组值(value)观。
  3. 我假设您的下一个问题可能是“我怎样才能用不同的值填充它?”如果不明确说明每个元素的每个值,就无法更改数组的初始化方式。 但是 - 您可以设置每个值。

    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/

相关文章:

asp.net - 如何使用ASP.NET上传

c++ - cout 输出乱码消息行而不是实际用户 cout 语句

c++ - 在多行中 C++

C++11 实现移动构造函数并移动成员 vector

c++ - 通过指针和名称将函数传递给另一个函数

c++ - Visual Studio : Creating a simple GUI

linq - 错误的存储属性 : unknown cause

c++ - stdout 除了控制台窗口之外还有其他东西吗?

c++ - union 中位域的 VStudio C++ 对齐

c++ - 如何初始化一个类然后卡住它的参数值