繁体   English   中英

C:将字符串数组作为函数参数传递

[英]C : Pass Array of string as function argument

所以我所拥有的是一个文件main.c ,它包含一个我创建的utils.h头文件,包含我的源文件utils.c中函数的前向引用。

在utils.c中:

我有一个函数接受一个字符串数组作为参数,并将其打印为菜单:

void showMenu(const char *menu[])
{
    int menulen = sizeof(menu)/sizeof(*menu);

    int i;
    for(i = 0; i < menulen; i++)
    {
        printf("[%d] .. %s\n", (i+1), menu[i]);
    }
}

在main.c中:

我只是调用这个函数:

const char *menu[] =
{
        "Customers",
        "Orders",
        "Products"
};

int main(void)
{
    showTitle("Customer Orders System");
    int menulen = sizeof(menu)/sizeof(*menu);
    showMenu(menu);
    getch();
}

我的问题:

我的showMenu函数正在计算数组的长度,然后迭代它,打印字符串。 当函数在main.c中时 ,这曾经工作,但是我需要在单独的文件中组织这个项目。

现在长度计算为1.在做了一些调试后,我认为这是一个与指针相关的问题,但我似乎解决了它。 调用后showMenu的参数是type

const char** menu

只有我原始数组的第一个元素。

我尝试引用该参数,同时传递一个数组的指针。
奇怪的是,同一行代码在main函数中起作用。 我真的不想通过向函数添加一个数组参数长度来解决这个问题。

任何帮助是极大的赞赏。

这是因为当传递给像你这样的函数时,数组会衰减成指向第一个元素的指针,并且没有关于元素数量的信息。 在声明数组的范围内,此衰减尚未发生,因此sizeof有效。

您必须添加数组长度作为额外参数,或者确保数组以适当的sentinel值终止。 一个流行的此类值为NULL ,即您确保最后一个有效索引包含一个字符串指针,其值为NULL ,然后指示“不再有数据,停止”:

const char *menu[] =
{
    "Customers",
    "Orders",
    "Products",
    NULL /* This is a sentinel, to mark the end of the array. */
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM