C語言中關於未填滿字元陣列的值(VS2015)
阿新 • • 發佈:2019-01-28
今天遇到一個bug,除錯了半天發現是因為字串未填滿部分的值超出了函式引數範圍造成的。以前看書上說未初始化的陣列是垃圾資料,未填滿的字串會被自動初始化為0。今天發現僅當在定義陣列的同時對陣列進行初始化時是這樣。在已經定義字串後,利用函式對字串進行賦值時,未填滿打的部分並不是自動為零(在VS2015中)。且有兩種情況。
先看下面一個程式,這是定義陣列時給陣列初始化:
int main(void)
{
char ch[10]="ss";
int i;
for(i=0;i<10;i++)
printf("%d",ch[i]);
return 0;
}
未填滿部分字元陣列皆為0。
下一個,這是利用gets_s給字串賦值:
int main(void)
{
char ch[10];
int i;
gets_s(ch);
for(i=0;i<10;i++)
printf("%d",ch[i]);
return 0;
}
未填滿部分皆為-2。
以下分別是利用scanf_s和getchar給ch賦值,未填滿部分均為-52.
int main(void)
{
char ch[10];
int i;
for(i=0;i<5;i++)
scanf_s("%c",&ch[i]);
for(i=0;i<10;i++)
printf("%d",ch[i]);
return 0;
}
int main(void)
{
char ch[10];
int i;
for(i=0;i<5;i++)
ch[i]=getchar();
for(i=0;i<10;i++)
printf("%d",ch[i]);
return 0;
}