我正在尝试编写一个字典程序。用户输入一个条目和一个定义。我写的显示功能遇到了问题。我得到这个错误:
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 %sn", 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("%sn", dictionary[i][0]);
printf("Please enter its definition:");
scanf("%s", dictionary[i][1]);
break;
}
}
if (command == 2)
display(dictionary);
}
return 0;
}
我不确定我是否理解。字典不是一个数组吗?为什么我会出现此错误?
在display()中,数组被声明为指针,因此它可以被视为一维数组;但您将其用作二维数组。
display()
的参数array
的类型不正确。如果您希望将dictionary
传递给它,它应该具有类型char *(*)[2]
:
void display (char *array[][2])
{
然后,您将遇到另一个问题,即从未初始化组成数组dictionary
的char *
值。在它们指向某个合理的位置之前,您不能将它们传递给scanf()
。
void display (char *array) {
...
printf("%s %sn", array[i][0], array[i][1]);
array
是char*
类型,所以array[i]
是char
类型。不能将[]
索引运算符应用于char
。
char *dictionary[10][2];
...
display(dictionary);
display()
需要类型为char*
的参数。dictionary
的类型为char*[10][2]
,或指向字符的指针的2元素数组的10元素数组。它被隐式地转换为指向char的指针的2元素数组的指针,但这仍然与char*
不兼容。
需要记住的一些事项:
二维数组只是数组的一个数组。
在大多数上下文中,数组表达式被隐式转换为指向数组第一个元素的指针;有关详细信息,请参阅comp.lang.cFAQ的第6节。
使用索引运算符时,x[y],
x is a pointer and
y`是一个整数。指针值通常是转换数组的结果,但它可以只是一个指针(恰好指向数组的第一个元素)。
哦,scanf
和"%s"
格式是危险的。它将任意多个字符读入指定的目标数组;不能将其限制为数组的大小。