如果我不说 int i=0 就会出现分段错误

Segmentation Fault if I don't say int i=0

void removeVowels(char* array){
  int i,j,v;
  i=0;

  char vowel[]={'a','e','i','o','u'};
  while(array[i]!='[=10=]')
  {
    for(v=0;v<5;v++)
    {
      if (array[i]==vowel[v])
      {
          j=i;
          while(array[j]!='[=10=]')
          {
            array[j]=array[j+1];
            j++;
          }
          i--;
          break;
      }
    }
    i++;
  }


}

在函数 removeVowels() 中,如果我不包含 i=0;就说 int i; 为什么会出现分段错误?不是自动0吗?

完整代码here

Isn't it automatically 0?

不,不是。它 i 具有自动存储功能,因此其默认初始化使其处于未初始化状态,并保留一个不确定的值。在初始化之前读取它是未定义的行为

在您的代码中,int i 是一个自动局部变量。如果未明确初始化,则该变量所持有的值是不确定的。

因此,在没有显式初始化的情况下,以任何形式使用(读取值)i,例如 array[i] 调用 undefined behaviour,副作用是分段错误。

Isn't it automatically 0?

不,具有 static 存储 class 的变量将获得此 "facility" 隐式初始化,而不是自动局部变量。

如果您全局声明 int,则它会以值 0 启动。否则它包含垃圾值。您可以试试下面的代码。

#include<stdio.h>

int global;

int main()
{
    int local;
    printf("global = %d, local = %d\n", global, local);
    return 0;
}