小白求助

EnableF 2019-01-23 10:53:24


图片这个警告怎么去除













/////代码如下
#include<stdio.h>

int main()
{
char *str[7];
int i;
for(i=0;i<7;i++)
{
printf("请输入第%d个学生的姓名:\n",i+1);
scanf("%s",str+i);
}
for(i=0;i<7;i++)
{
printf("第%d个学生的姓名为%s\n",i+1,str+i);
}
return 0;
}
...全文
66 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
northwesternwind 2019-01-23
  • 打赏
  • 举报
回复
首先str的每个元素都是一个char*指针,你为它们装入内容之前没有分配内存。所以需要利用malloc分配内存。
其次, str+i的类型是 char**, 它的意思是数组的第i个元素的地址,而第i个元素本身是char*, 所以它的类型是char **.
去掉这个警告,修改为 str[i]就可以了。 str[i]表示数组的第i个元素,所以类型为char*.
或者用*(str+i) 也可以。修改代码如下:

#include<stdio.h>
#include <stdlib.h>

int main()
{
char *str[7];
int i;
for(i=0; i<7; i++)
{
printf("请输入第%d个学生的姓名:\n",i+1);
str[i] = (char*)malloc(100); //分配内存。估计长度100够用。
scanf("%s",str[i]);
//scanf("%s",*(str+i)); 这个也可以
}
for(i=0; i<7; i++)
{
printf("第%d个学生的姓名为%s\n",i+1,str[i]);
//printf("第%d个学生的姓名为%s\n",i+1,*(str+i)); 这个也可以
}
//这里需要释放内存
return 0;
}
RR-RR 2019-01-23
  • 打赏
  • 举报
回复
%s表示输出一个char *的变量,类型不匹配
你可以试一试改成

printf("第%d个学生的姓名为%s\n",i+1,(char*)str+i);
自信男孩 2019-01-23
  • 打赏
  • 举报
回复
取出警告的方法:
scanf("%s",str[i]);

printf("第%d个学生的姓名为%s\n",i+1, str[i]);

这只是取出警告。不能保证程序正常运行。因为你没有给str[i]分配有效的空间。

解决方法:
#include<stdio.h>
#include <stdlib.h>

#define MAX_STR_SIZE 32

int main()
{
char *str[7];
int i;
for(i=0;i<7;i++)
{
printf("请输入第%d个学生的姓名:\n",i+1);
str[i] = (char *)malloc(sizeof(char) * MAX_STR_SIZE);
if (!str[i])
return -1;
scanf("%s",str[i]);
}
for(i=0;i<7;i++)
{
printf("第%d个学生的姓名为%s\n",i+1, str[i]);
free(str[i]);
}

return 0;
}

供参考!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧