void removeVowels(char* array){
int i,j,v;
i=0;
char vowel[]={'a','e','i','o','u'};
while(array[i]!='\0')
{
for(v=0;v<5;v++)
{
if (array[i]==vowel[v])
{
j=i;
while(array[j]!='\0')
{
array[j]=array[j+1];
j++;
}
i--;
break;
}
}
i++;
}
}
在函数removeVowels()
中,如果我不包含i=0
;并且只是说int i;
为什么它会给出分段错误?是不是自动0
?
完整代码here
答案 0 :(得分:5)
是不是自动为0?
不,不是。它i
具有自动存储功能,因此其默认初始化使其保持未初始化状态,并保持不确定的值。在初始化之前从中读取它是未定义的行为。
答案 1 :(得分:0)
在您的代码中,int i
是一个自动局部变量。如果未明确初始化,则该变量在不确定性中持有的值。
因此,在没有显式初始化的情况下,以任何形式使用(读取值)i
,如array[i]
调用undefined behaviour,副作用就是分段错误。
是不是自动为0?
不,具有 static 存储类的变量将获得隐式初始化的“设施”,而不是自动局部变量。
答案 2 :(得分:0)
如果您在全局范围内声明int
,则会使用值0
启动它。否则它包含垃圾值。您可以尝试以下代码。
#include<stdio.h>
int global;
int main()
{
int local;
printf("global = %d, local = %d\n", global, local);
return 0;
}