【发布时间】:2020-08-14 00:31:55
【问题描述】:
这是我循环遍历字符串数组的尝试。
我创建了一个 id 数组, 将每个 id 与从控制台读取的 voterID 进行比较。
// helper function
int verifyVoterID(char *uidDB[], char *voterID)
{
for (int i = 0; i < sizeof(uidDB[0]); i++)
{
if (uidDB[0][i] == voterID)
return 0;
}
return 1;
}
int main()
{
char *uidDB[] = {"001", "002", "003"}, *voterID;
printf("\n\nEnter ID: ");
scanf("%s", voterID);
// Verify voter's ID
if (voterID)
verifyVoterID(uidDB, voterID) == 0
? doSomthing()
: doSomethingElse();
return 0;
}
输出:
./03.c: In function 'verifyVoterID':
./03.c:19:21: warning: comparison between pointer and integer
19 | if (uidDB[0][i] == voterID)
|
我也试过用strcmp()来比较
int verifyVoterID(char *uidDB[], char *voterID)
{
for (int i = 0; i < sizeof(uidDB[0]); i++)
{
if (strcmp(uidDB[0][i], voterID) == 0)
return 0;
}
return 1;
}
输出:
./03.c: In function 'verifyVoterID':
./03.c:19:24: warning: passing argument 1 of 'strcmp' makes pointer from integer without a cast [-Wint-conversion]
19 | if (strcmp(uidDB[0][i], voterID) == 0)
| ~~~~~~~~^~~
| |
| char
我错过了什么?
【问题讨论】:
-
您需要
strcmp(uidDB[i], voterID)。此外,您需要传入数组的大小。sizeof(uidB[0])给出了char *的大小,这不是我们想要的。 -
@kaylum 感谢您的回复。请你更清楚一点,我是c的新手。我尝试使用
sizeof(uidDB[0])和(sizeof(uidDB) / sizeof(uidDB[0]))获取数组的长度。我分别得到4、3。但是在 helper function 中使用第二个实例我得到另一个错误: -
@kaylum
./03.c: In function 'verifyVoterID': ./03.c:16:30: warning: 'sizeof' on array function parameter uidDB' will return size of 'char **' [-Wsizeof-array-argumen ] 16 | for (int i = 0; i < (sizeof(uidDB) / sizeof(uidDB[0])); i++) | ^ ./03.c:13:25: note: declared here 13 | int verifyVoterID(char *uidDB[], char *voterID) | ~~~~~~^~~~~~~ -
您无法计算从函数内部传递给函数的数组的大小。需要在调用者中获取大小并将其传递给函数。 How do you get the size of array that is passed into the function?