编译器在编译以下代码时显示警告

时间:2017-11-23 14:21:08

标签: c++ c

#include<stdio.h>
int main()
{
  char str[6][50] ;    // a 2d character array
  int  i ;
  for(i = 0 ; i < 6 ; i++)
  {
    scanf("%s",(str+i)) ; // in here the warning was shown
  }
  return 0 ;
}`

输出期间: - scanf()在编译时显示警告 - 警告:格式'%s'需要类型为'char '的参数,但参数2的类型为'char()[50]'[ - Wformat =] < / p>

2 个答案:

答案 0 :(得分:2)

还记得数组自然地衰减到指向第一个元素的指针吗?这意味着str本身被视为指针。使用str + i,您正在进行指针运算,其结果是另一个指针(在本例中为i:th元素)。该指针的类型是指向数组的指针char (*)[50],它不是数组本身。

您需要做的是取消引用指针:*(str + i)。或者它是相同的,str[i]

答案 1 :(得分:0)

您似乎正在尝试依次访问str的每个元素。为此,请使用scanf("%s",str[i]);(根据usr的评论)。