C:格式'%s'期望类型' char *'的参数,但参数2的类型为' char **'

时间:2015-05-19 18:06:26

标签: c

我尝试从用户输入字符串的简单2D数组并打印它

void in(char* n[3][2]);
void show_name ()
{
    char* n[3][2];
    in(n);
    unsigned int i,j;
    for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
            printf("%s ", &n[i][j]);
        printf("\n");
    }
}

int main(void)
{
    show_name();
    return 0;
}
void in(char* n[3][2])
{

   int i,j;
    for(i=0;i<3;i++)
        for(j=0;j<2;j++)
            scanf("%s",&n[i][j]);

    printf("\n");
}

它工作正常,但我有警告说:

  

警告:格式&#39;%s&#39;期望类型&#39; char *&#39;的参数,但参数2   有类型&#39; char **&#39; [-Wformat] |

我搜索了原因,发现%s中的问题并不需要地址 当我删除&运算符时,没有警告但代码没有正确运行

1 个答案:

答案 0 :(得分:1)

我已经简化并纠正了你的程序,评论了我改变它的地方。

编辑如何轻松更改字符串数量,现在6如上所述

#include <stdio.h>

#define STRINGS 6

void in(char n[][200]);         // no need for * and array

void show_name ()
{
    char n[STRINGS][200] = {};  // allow some string space and init for security
    int i;
    in(n);
    for(i=0; i<STRINGS; i++)    // only need to iterate one dimension
        printf("%s\n", n[i]);
}

int main(void)
{
    show_name();
    return 0;
}

void in(char n[][200])          // needs length of each row, but not number of rows
{
    int i;
    for(i=0; i<STRINGS; i++)    // only need to iterate one dimension
        scanf("%199s", n[i]);   // restrict the input length
    printf("\n");
}