Zyy*_*ins 9 c arrays string arguments function
所以我所拥有的是一个文件main.c,它包含一个我创建的utils.h头文件,包含我的源文件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]);
}
}
Run Code Online (Sandbox Code Playgroud)
我只是调用这个函数:
const char *menu[] =
{
"Customers",
"Orders",
"Products"
};
int main(void)
{
showTitle("Customer Orders System");
int menulen = sizeof(menu)/sizeof(*menu);
showMenu(menu);
getch();
}
Run Code Online (Sandbox Code Playgroud)
我的showMenu函数正在计算数组的长度,然后迭代它,打印字符串.当函数在main.c中时,这曾经工作,但是我需要在单独的文件中组织这个项目.
现在长度计算为1.在做了一些调试后,我认为这是一个与指针相关的问题,但我似乎解决了它.调用后showMenu的参数是type
const char** menu
Run Code Online (Sandbox Code Playgroud)
只有我原始数组的第一个元素.
我尝试引用该参数,同时传递一个数组的指针.
奇怪的是,同一行代码在main函数中起作用.我真的不想通过向函数添加一个数组参数长度来解决这个问题.
任何帮助是极大的赞赏.
unw*_*ind 10
这是因为当传递给像你这样的函数时,数组会衰减成指向第一个元素的指针,并且没有关于元素数量的信息.在声明数组的范围内,此衰减尚未发生,因此sizeof
有效.
您必须添加数组长度作为额外参数,或者确保数组以适当的sentinel值终止.一个流行的这样的值是NULL
,即你确保最后一个有效索引包含一个值为的字符串指针NULL
,然后指示"不再有数据,停止":
const char *menu[] =
{
"Customers",
"Orders",
"Products",
NULL /* This is a sentinel, to mark the end of the array. */
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8902 次 |
最近记录: |