[英]sorting an array of strings with qsort function
我正在使用qsort
function 对字符串数组进行排序。
char treeName[100][31];
通过反复试验,我发现应该这样做:
qsort(&treeName[0], count, sizeof(*treeName), Comparar_nome);
但是,我不完全确定为什么sizeof(*treeName)
。 不应该是sizeof(char) * 31
或类似的东西吗?
qsort(&treeName[0], count, sizeof(*treeName),Comparar_nome);
可以细分如下:
qsort
function 电话。
&treeName[0]
数组的起始地址。 可以简化为treeName
。
count
treeName
中实际使用的条目数。
sizeof(*treeName)
数组元素的大小。 我会写这是sizeof(treename[0])
但没有区别。 sizeof(char)*31
确实应该有效。 您确定尝试时没有其他东西坏了吗? 我们无法找到一个真正的编译器,这对它不起作用。 无论如何, sizeof(*treename)
的可读性更好,而且31
是否应该改变。
Comparar_nome
比较树节点的地址function。 你写对了; &Comparar_nome
是古老的风格。
如果treeName
确实被定义为char treeName[100][31];
在 function 调用qsort
的 scope 中,您的代码是正确的:
qsort(&treeName[0], count, sizeof(*treeName), Comparar_nome);
你可以等效地写这个:
qsort(treeName, count, sizeof treeName[0], Comparar_nome);
但是请注意Comparar_nome
必须具有正确的原型:
int Comparar_nome(const void *a, const void *b);
一个简单的实现是:
#include <stdio.h>
int Comparar_nome(const void *a, const void *b) {
return strcmp(a, b);
}
传递strcmp
而不是Comparar_nome
将是一种类型不匹配,会调用未定义的行为,这 go 在许多体系结构中都不会被注意到,但仍然是不正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.