[英]C - Why my program isn't outputing anything?
我是編程新手,所以我不知道如何解決這個問題。 如您所見,我想制作一個輸出您想要的位置的程序。 也有用於位置變量的 typedef 結構。
char location[25];
printf("Which place info you want? (Home, School): ");
scanf("%s", location[25]);
if(!strcmp(location[25], "home"))
{
printf("%s\n", home.country);
printf("%s\n", home.city);
printf("%s\n", home.street);
printf("%s\n", home.building_number);
}
else if(!strcmp(location[25], "school"))
{
printf("%s\n", school.country);
printf("%s\n", school.city);
printf("%s\n", school.street);
printf("%s\n", school.building_number);
}
else
{
printf("I don't have an info about this place\n");
}
我認為您應該寫,strcmp(location, "home")
,因為 location[25] 超出范圍並導致 UB(對於 strcmp 的第二次調用也是如此)。
kaylum 解決的問題:scanf("%s", location[25]); -> scanf("%24s", 位置); 和 strcmp(location[25], "home") -> strcmp(location, "home")
在聲明內部, [25]
的含義與聲明外部完全不同。
在行
char location[25];
這意味着您要聲明一個大小為25
的數組。 然而,在行
scanf("%s", location[25]);
和
if(!strcmp(location[25], "home"))
[25]
表示您要訪問數組中的特定元素,在這種情況下是數組中的第 26個元素(數組索引從 0 開始計數,而不是 1)。
由於該數組只有 25 個字符,因此嘗試訪問第 26個元素將越界訪問該數組,從而調用未定義的行為。
即使您沒有越界訪問數組,您的代碼仍然是錯誤的。 函數scanf
和strcmp
都需要一個指向數組第一個元素的指針。 因此,通過寫入location[25]
或location[0]
來傳遞單個字符的值是錯誤的。 相反,您應該簡單地編寫location
。 這樣,數組將衰減為指向第一個元素的指針,即&location[0]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.