我尝试从用户输入字符串的简单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
中的问题并不需要地址
当我删除&
运算符时,没有警告但代码没有正确运行
答案 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");
}