gpt4 book ai didi

c - 二维数组问题

转载 作者:行者123 更新时间:2023-11-30 18:22:15 27 4
gpt4 key购买 nike

在这个简单的一维数组程序中,&p 和 p 都与 scanf 语句中的 %s 一起使用。它没有显示任何错误。

#include<stdio.h>
int main()
{
char p[5];
scanf("%s",&p);
printf("%s",p);
scanf("%s",p);
printf("%s",p);
return 0;
}

但是在二维字符数组中它显示错误。为什么?例如:这里,masterlist是一个二维字符数组。为什么这段代码有效?

for(i=0;i<5;i++)
scanf("%s",&masterlist[i][0]);

为什么这段代码不起作用?为什么编译器没有显示任何错误?

for(i=0;i<5;i++)
scanf("%s",masterlist[i][0]);

实际代码:我的程序正在运行,我只想知道我上面问的是什么。谢谢。

#include<string.h>
#include<stdio.h>
#define FOUND 1
#define NOTFOUND 0
int main()
{
char masterlist[6][10]={"akshay","parag","raman","srinivas","gopal","rajesh"};
int i,flag,a;
char yourname[10];
printf("Enter your Name:");
scanf("%s",yourname);
flag=NOTFOUND;
for(i=0;i<=5;i++)
{
a=strcmp(&masterlist[i][0],yourname);
if(a==0)
{
printf("Welcome,you can Enter The place\n");
flag=FOUND;
break;

}
}

if(flag==NOTFOUND)
printf("Sorry,Yoy are a trespasser\n");
return 0;

}

最佳答案

在第一个示例中,您使用 p&p,它们都是指向 p[0] 的指针。

在上一个示例中,masterlist[i][0] 相当于 p[0],它是一个 char,并且因此发送到printf的参数被提升为int。扫描代码"%s"需要一个指向可写内存的指针。 masterlist[i][0] 不太可能指向可写内存。

并非所有编译器都会检查 printf 的扫描代码。有些会这样做,并且在适当的警告级别下,您将收到警告。尝试将 -Wall 添加到编译器命令行,它会调高 gcc 和其他一些编译器的警告级别。

关于c - 二维数组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26175731/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com