字典程序中"Subscripted Value is Neither Array Nor Pointer"错误



我正在尝试编写一个字典程序。用户输入一个条目和一个定义。我写的显示功能遇到了问题。我得到这个错误:

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])
{

然后,您将遇到另一个问题,即从未初始化组成数组dictionarychar *值。在它们指向某个合理的位置之前,您不能将它们传递给scanf()

void display (char *array) {
...
printf("%s %sn", array[i][0], array[i][1]);

arraychar*类型,所以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"格式是危险的。它将任意多个字符读入指定的目标数组;不能将其限制为数组的大小。

最新更新