[英]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.