C语言 该内存不能为read?!
请各位大侠看一下吧~~没看出来哪里超了啊……#include"stdio.h"main(){intn,i,a[1000],j,max,s;charx[1100];scan...
请各位大侠看一下 吧~~ 没看出来哪里超了啊……
#include "stdio.h"
main()
{
int n,i,a[1000],j,max,s;
char x[1100];
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%s%d",&x[i],&a[i]);
for(i=1;i<=n;i++)
{
max=a[i]; s=i;
for(j=1;j<=n;j++)
if(a[j]>max)
{
max=a[j];
s=j;
}
printf("%s",x[s]);
a[s]=0;
}
return 0;
} 展开
#include "stdio.h"
main()
{
int n,i,a[1000],j,max,s;
char x[1100];
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%s%d",&x[i],&a[i]);
for(i=1;i<=n;i++)
{
max=a[i]; s=i;
for(j=1;j<=n;j++)
if(a[j]>max)
{
max=a[j];
s=j;
}
printf("%s",x[s]);
a[s]=0;
}
return 0;
} 展开
6个回答
展开全部
printf("%s",x[s]);//这里 你没有在任何地方设置0结束标记
scanf("%s%d",&x[i],&a[i]);//在输入字符数+i大于1098时 x写入越界 i>999 a 写入越界 不过一般来说 输入的n不会很多 大了输入累 这是一个潜在的 难以出现的错误
scanf("%s%d",&x[i],&a[i]);//在输入字符数+i大于1098时 x写入越界 i>999 a 写入越界 不过一般来说 输入的n不会很多 大了输入累 这是一个潜在的 难以出现的错误
更多追问追答
追问
可是n为2 也出现不能为read啊
追答
上面第一句 弄错了 如果是printf("%s",&x[n])才是我上面说的
你这是将 x[s]一个char对象作为传个printf而printf由%s认为这是一个地址 所以出错
展开全部
第一个for循环后面的scanf不可以用%s 然后&x[i],应该改为for(i=1;i<n;i++)scanf("%s%d",x,&a[i]);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是把a数组中的最大的位置对应的x数组的值输出呗 你这个 printf("%s",x[s]);语法都是错的 如果要输出整个数组就直接是数组名 输出一个就%c
你的for循环找最大值的时候就有问题 你重复找了n次最大值 输出了n次数组
你的for循环找最大值的时候就有问题 你重复找了n次最大值 输出了n次数组
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
内存出错往往都是对地址操作不当,看你的这一句
scanf("%d",score);
,是不是要改为
scanf("%d",&score);,前面加一个取地址。
scanf("%d",score);
,是不是要改为
scanf("%d",&score);,前面加一个取地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf("%s%d",&x[i],&a[i]);
%s应该%c
%s应该%c
追问
为什么呢?
那不是只能输入一个字符了么?
追答
for(i=1;i<=n;i++)
scanf("%s%d",&x[i],&a[i]);
这种写法,就是循环输入的,这样的话,如果循环次数大于一次,不越界输入的数据也是会被变化的。
printf("%s",x[s]);这个地方打印是超了,出问题应该是这,上面那个是后续会发现的问题,数据不对。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询