即使数组不为空,数组大小也为零

时间:2015-01-31 04:40:59

标签: c arrays string

我有一个函数,它将字符串数组作为输入,如果为空则添加字符串,然后返回数组。如果数组不为空,则应显示数组的内容。

如果条件通过检查大小来检查空虚。我的问题是,即使数组不为空,大小也始终为零。我知道数组不是空的,因为我可以打印出它的内容。

这是我的代码:

 char **check(char **words) {
        if(sizeof (words) / sizeof (**words) == 0) {
            words[0] = "vacation";
            words[1] = "vaccaciones";
            words[2] = "vancances"
        }
        else {
             //do something else
        }
 }

无论我尝试做什么,它都不会进入其他条件。我检查了数组,它不是空的,我的if条件的值总是为零。我做错了什么?

2 个答案:

答案 0 :(得分:3)

sizeof (words) / sizeof (**words)

words是指针的指针,sizeof(pointer)/sizeof(element)就是你得到的。所以你得到了

sizeof(pointer) = 4 /* Assuming */
sizeof(element)  = 1

结果将为4/1 != 0,因此if()条件永远不会过去。

您的检查与数组的内容/大小无关。

答案 1 :(得分:2)

检查数组中元素数量的技术是sizeof(array)/ sizeof(* array)。你有一个额外的星号(假设你要检查传递的指针数组中的指针数)。

其次,该技术不适用于指针。将数组传递给函数会将其转换为指针(包含第一个元素的地址),并且无法从这样的指针中检索数组的元素数。

如果您希望函数访问数组的大小,则需要以某种其他方式传递大小(例如,作为函数的附加参数)。