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

时间:2013-05-10 10:59:28

标签: 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");

...

printf("The key pressed was %c", key[colnum][rownum]);

4 个答案:

答案 0 :(得分:4)

正如@BLUEPIXY在评论中指出的那样,你的类型是错误的。

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

const char *keys[] = { "CD.Z", "89AB", "4567", "0123" };

上面将keys声明为char *的数组,这是C的“字符串类型”(它实际上只表示“指向字符的指针”,但它通常用于字符串)。没有为数组指定长度,编译器会根据=右侧的初始化表达式自动计算它。

所以,索引如下:

printf("keys[2] is '%s'\n", keys[2]);

将为您提供第3个元素(C索引来自0的数组)。

由于指针也可以编入索引,你也可以这样做:

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

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

答案 1 :(得分:2)

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

将其修改为此版本。

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

答案 2 :(得分:0)

定义你的角色数组,如

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);
      }
   }
}

这可能对你有帮助。

答案 3 :(得分:0)

key[0] 

意味着它只能容纳一个字符,而您只能容纳四个字符。为此,您需要声明如下:

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