我有一个函数,它将字符串数组作为输入,如果为空则添加字符串,然后返回数组。如果数组不为空,则应显示数组的内容。
如果条件通过检查大小来检查空虚。我的问题是,即使数组不为空,大小也始终为零。我知道数组不是空的,因为我可以打印出它的内容。
这是我的代码:
char **check(char **words) {
if(sizeof (words) / sizeof (**words) == 0) {
words[0] = "vacation";
words[1] = "vaccaciones";
words[2] = "vancances"
}
else {
//do something else
}
}
无论我尝试做什么,它都不会进入其他条件。我检查了数组,它不是空的,我的if条件的值总是为零。我做错了什么?
答案 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)。你有一个额外的星号(假设你要检查传递的指针数组中的指针数)。
其次,该技术不适用于指针。将数组传递给函数会将其转换为指针(包含第一个元素的地址),并且无法从这样的指针中检索数组的元素数。
如果您希望函数访问数组的大小,则需要以某种其他方式传递大小(例如,作为函数的附加参数)。