簡體   English   中英

C - 為什么我的程序沒有輸出任何東西?

[英]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元素將越界訪問該數組,從而調用未定義的行為

即使您沒有越界訪問數組,您的代碼仍然是錯誤的。 函數scanfstrcmp都需要一個指向數組第一個元素的指針。 因此,通過寫入location[25]location[0]來傳遞單個字符的值是錯誤的。 相反,您應該簡單地編寫location 這樣,數組將衰減為指向第一個元素的指針,即&location[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM