
圖一
#include <stdio.h>
int main (void){
char ch1, ch2, ch3, a[20] = {0};
int i;
printf("Enter a first and last name: ");
for (;(ch1 = getchar()) == ' ';)
;
for (;(ch2 = getchar()) != ' ';)
;
for (i = 0;(ch3 = getchar()) != '\n';i++)
a[i] = ch3;
for (i = 0;i <= 19;i++) {
putchar(a[i]);
}
putchar(',');
putchar(ch2);
putchar(ch1);
putchar('.');
return 0;
}

圖二

圖三

圖四
我知道正確的寫法是第十四行改為for (i = 0;a[i] != 0;i++) {。
1.但是為什么這個錯誤的代碼的顯示結果中(圖二),名字后面是“a”呢?十進制的0不是應該是"空字符"嗎?
2.為什么第十四行寫為for (i = 0;i <= 20;i++) {,代碼的顯示結果中(圖三)多出的一個還是“a”?
3.為什么第十四行寫為for (i = 0;;i++) {,代碼的顯示結果中(圖四),亂碼的部分里面還是有大量的“a”?
uj5u.com熱心網友回復:
其實電腦開機后物理記憶體的每個位元組中都有值且都是可讀寫的,從來不會因為所謂的new、delete或malloc、free而被創建、銷毀。區別僅在于作業系統記憶體管理模塊在你讀寫時是否能發現并是否采取相應動作而已。作業系統管理記憶體的粒度不是位元組而是頁,一頁通常為4KB。uj5u.com熱心網友回復:
因為那片記憶體里面原來的值為位元組0x61轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/281461.html
標籤:新手樂園
