繁体   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