- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 lfind
与此代码一起使用:
int StringPtrCompare(const void *ptr1, const void *ptr2)
{
return strcmp(*(char(*)[])ptr1, *(char**)ptr2);
}
void Unique()
{
char* array[1000] = {0};
char buffer[200] = {0};
size_t count = 0;
FILE* fp = fopen("text", "r");
if (fp == NULL)
{
error(1, 0, "Couldn't open text for reading");
}
while (count < 1000 && fscanf(fp, "%199s", buffer) == 1)
{
if (!lfind(buffer, array, &count, sizeof(char*), StringPtrCompare))
{
array[count++] = strdup(buffer);
}
}
fclose(fp);
for (int i = 0; i < count; i++)
{
printf("%s\n", array[i]);
free(array[i]);
}
}
这可行,但最初,如果在 StrPtrCompare
中,我将 strcmp
中第一个参数的转换替换为
*(char**)ptr1
从概念上讲,我不明白为什么会出现这种情况。不是
(char(*)[]) equivalent to (char**)?
此外,我发现如果我在 while 循环语句中将 buffer
替换为 &buffer
,该函数仍然有效。
谁能给我解释一下这两个奇怪的地方吗?
最佳答案
&buffer
和 buffer
将具有相同的值。数组的名称充当指向其第一个元素的指针,这就是为什么您会得到相同的值。
现在,如果我们谈论你的第二个问题(char(*)[]) 相当于(char**)?
(char(*)[])
不是函数指针。它是指向字符数组的指针。数组和指针不一样。数组可能会像指针一样衰减。
请看一下here
关于c - 如何使用lfind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18081668/
我正在尝试使用结构体的第一个元素作为键来搜索大量结构体。由于数组已排序,因此 bsearch 很好并且适合我。然后我尝试使用 lfind 来仔细检查结果,但它给了我一些奇怪的输出。代码如下,正确的输出
我在使用此代码的 lfind 调用中遇到段错误。 CVector 是一个带有名为 elems 的数组的结构。我知道 CVectorCreate 和 CVectorAppend 函数有效。第一 bloc
具有某种类型元素的数组。有没有办法使用 lfind 来检索元素的索引而不是指向元素的指针? 最佳答案 你有指针。 从返回的指针中减去数组的开头 - 即索引。 编辑解释更多,以防万一: 当你声明一个数组
我正在用 C 编写一个 vector 。CVectorSearch 函数在排序时使用 bsearch,在未排序时使用 lfind。为什么我在调用 lfind 时收到警告“赋值从整数生成指针而不进行强制
做lfind/lsearch比检查每个项目直到匹配的典型循环解决方案执行得更好?存在这些功能是否有任何特殊原因/原因? 最佳答案 可能它们并不比自制版本更高效,甚至可能更低一些,因为无法内联比较函数。
我试图在 lfind 和 bsearch 返回指向它找到的元素的指针后获取数组中元素的索引。到目前为止我有这个: (char *) (found - cv->baseAddress); where f
我已经看过这个并尝试实现,但它总是给我一个段错误来这样做: Determining index from bsearch and lfind? - 这是供引用的链接。 基本上,我试图从 bsearch
我是一名优秀的程序员,十分优秀!