C 声明字符串数组并选择单个字符

C 声明字符串数组并选择单个字符,c,arrays,string,declaration,C,Arrays,String,Declaration,我是c编程新手,正在尝试在屏幕上打印按下键盘的哪个键。我有一个程序,它可以打印被按下键的行号和列号。我在想,如果我可以声明一个包含所有16个关键字符的字符串数组,那么行和列的编号就可以对数组进行索引。这是我无力的尝试 char key[4]; strcpy(key[0], "CD.Z"); strcpy(key[1], "89AB"); strcpy(key[2], "4567"); strcpy(key[3], "0123"); 此代码片段不应编译。 您试图将字符数组复制到字符。

我是c编程新手,正在尝试在屏幕上打印按下键盘的哪个键。我有一个程序,它可以打印被按下键的行号和列号。我在想,如果我可以声明一个包含所有16个关键字符的字符串数组,那么行和列的编号就可以对数组进行索引。这是我无力的尝试

 char key[4];
 strcpy(key[0], "CD.Z");
 strcpy(key[1], "89AB");
 strcpy(key[2], "4567");
 strcpy(key[3], "0123");


此代码片段不应编译。 您试图将字符数组复制到字符。 编译器应该发出一个错误

将其修改到此版本

char key[4][5];
strcpy(key[0], "CD.Z");
strcpy(key[1], "89AB");
strcpy(key[2], "4567");
strcpy(key[3], "0123");
正如在评论中指出的,您的类型是错误的

此外,使用运行时
strcpy()
复制字符也没有意义,您只需使用编译时初始值设定项来设置字符串数组:

const char *keys[] = { "CD.Z", "89AB", "4567", "0123" };
上面声明的
字符*
的数组,这是C的“字符串类型”(它实际上只表示“指向字符的指针”,但通常用于字符串)。没有为数组指定长度,编译器会根据
=
右侧的初始值设定项表达式自动计算该数组

所以,像这样的索引:

printf("keys[2] is '%s'\n", keys[2]);
将获得第三个元素(从0开始的C索引数组)

由于指针也可以编制索引,因此您还可以执行以下操作:

printf("second char of '%s' is '%c'\n", keys[2], keys[2][1]);

这里,
keys[2][1]
表示“首先从
keys
数组中获取第三个元素,然后从该数组中获取第二个元素”。这将字符指针视为数组(通过使用
[]
索引操作符),但在C语言中这很好,所有指针都可以这样视为数组。

定义字符数组

char *keys[] = { "CD.Z", "89AB", "4567", "0123" };
按此键后,您可以将行和列编号显示为

c = getchar();
for(i=0;i<4;i++)
{
   for(j=0;j<4;j++)
   {
      if(keys[i][j]==c)
      {
           printf("Key of Row %d and Column %d was pressed",i+1,j+1);
      }
   }
}
c=getchar();
对于(i=0;i
意味着它只能容纳一个字符,而您只能容纳四个字符。为此,您需要如下声明:

char key[4][5]= {"CD.Z", "89AB", "4567", "0123"};

char-key[4];
-->
char-key[4][5];
char*key[4]={“CD.Z”、“89AB”、“4567”、“0123”};
@BLUEPIXY这是个错误。感谢您的帮助。
key[0] 
char key[4][5]= {"CD.Z", "89AB", "4567", "0123"};