我正在尝试编写字典程序。用户输入条目和定义。我遇到了我写的显示功能问题。我收到了这个错误:
dictionary.c:7: error: subscripted value is neither array nor pointer
这是我的代码:
#include <stdio.h>
void display (char *array) {
int i;
for (i=0; i<11; ++i)
printf("%s %s\n", array[i][0], array[i][1]);
}
int main(void) {
char *dictionary[10][2];
int command;
int i;
while (command != 3) {
printf ("1. Define or 2. Lookup or 3. Exit");
scanf ("%d", &command);
if (command == 1) {
for (i=0; i<11; ++i) {
printf("Please enter a word to define:");
scanf("%s\n", dictionary[i][0]);
printf("Please enter its definition:");
scanf("%s", dictionary[i][1]);
break;
}
}
if (command == 2)
display(dictionary);
}
return 0;
}
我不确定我理解。字典不是数组吗?为什么我会收到此错误?
答案 0 :(得分:2)
在display()中,数组被声明为指针,因此可以将其视为一维数组;但是你将它用作二维数组。
答案 1 :(得分:2)
函数array
的参数display()
的类型不正确。如果您希望将dictionary
传递给它,则其类型应为char *(*)[2]
:
void display (char *array[][2])
{
然后您将遇到另一个问题,即您从未初始化组成数组char *
的{{1}}值。你不能将它们传递给dictionary
,直到它们指向一个合理的地方。
答案 2 :(得分:1)
void display (char *array) {
...
printf("%s %s\n", array[i][0], array[i][1]);
array
的类型为char*
,因此array[i]
的类型为char
。您无法将[]
索引运算符应用于char
。
char *dictionary[10][2];
...
display(dictionary);
display()
需要char*
类型的参数。 dictionary
的类型为char*[10][2]
,或者是指向char的2元素数组的10元素数组。它隐式转换为指向char的2元素指针数组的指针,但仍与char*
不兼容。
要记住的一些事情:
二维数组只是一个数组数组。
在大多数情况下,数组表达式被隐式转换为指向数组第一个元素的指针;有关详细信息,请参阅comp.lang.c FAQ的第6部分。
使用索引运算符时,x [y] ,
x is a pointer and
y`是一个整数。指针值通常是转换数组的结果,但它可以只是一个指针(恰好指向数组的第一个元素)。
哦,具有scanf
格式的"%s"
是危险的。它会将任意多个字符读入指定的目标数组;你不能将它限制为数组的大小。