带有char数组的pid_t的初始值是多少? [复制]

Posted

技术标签:

【中文标题】带有char数组的pid_t的初始值是多少? [复制]【英文标题】:what is initial value of pid_t with char array? [duplicate] 【发布时间】:2020-08-10 21:49:11 【问题描述】:

当我试图了解流程时,我注意到了一些事情

int main()

pid_t pid,w;

printf("value of w: %d\n", w);

return 0;


当我运行上面的代码时,w的值为0。到目前为止没有问题。

但是

当我在下面的代码中添加 char 数组时

int main()

pid_t pid,w;
char arr [3];

printf("value of w: %d\n", w);

return 0;


每次运行时 w 的值都是随机变化的。搞不懂这是什么原因,char数组的作用是什么?

【问题讨论】:

这能回答你的问题吗? (Why) is using an uninitialized variable undefined behavior? 【参考方案1】:

变量的值是不确定的。当您读取不确定的值时(根据pid_t 的定义,在这种情况下可能会或可能不会应用异常,通常不会应用),程序的行为是未定义的。

由于某些未知原因,您选择期望在对程序进行更改时行为保持不变。当程序未定义时,无法保证程序的行为,这样的期望不是一个合理的假设。

【讨论】:

【参考方案2】:

在 C 和 C++ 中,变量在声明时不会自动初始化。如果您未能初始化它们,则这些变量的状态是未定义的。您需要更改代码以初始化您的 pid_t 变量:

int main()
  pid_t pid = 0;
  pid_t w = 0;
  char arr [3] = 0, 0, 0;
  
  printf("value of w: %d\n", w);
  
  return 0;


【讨论】:

旁注:有时它们会为您初始化。全局变量,例如 好点。也许更好的答案是:C/C++ 中的变量并不总是为您初始化,您可能应该始终初始化它们,除非您有理由不避免现在的错误或将来维护您的代码的人的错误。

以上是关于带有char数组的pid_t的初始值是多少? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

c语言定义一维数组,元素未初始化,那数组元素默认值是啥

verilog的寄存器默认初始值是多少?

Java中char数组的默认值是啥?

38 数组动态赋值和数值的访问

java 数组的初始化方式

c中“”的确切返回值是多少?它是一个指针吗? [关闭]