[英]Trying to print a string in a qsort function
我在将有效值传递给qsort
function 时遇到了一些麻烦,但无法完全弄清楚它出了什么问题。 这是我到目前为止所拥有的:
int main(void)
{
char* strings[4] = {"Onus", "deacon", "Alex", "zebra"};
printf("%zu\n", sizeof(strings));
qsort(strings, 4, 8, scmp);
}
int scmp(const void *p1, const void *p2)
{
printf("%s\n", (char*) p1);
return 0;
// ignore return value -- I'm just looking to print the string.
}
当我这样做时,它似乎只是打印乱码。 这是因为qsort
期望一个值是一个指向值的指针,而我将一个指向 (char) 指针的指针传递给它? 那么引用它的正确方法是什么?
相反,它似乎应该是: printf("%s\n", *(char* const*) p1);
? 这是来自一些反复试验,但不确定为什么会这样 - 即*(char**)
。
例如,为了传递一个int
我可以这样做:
const int *v1 = p1;
但是一个char*
需要是:
const char *s1 = *(char* const *) p1;
为什么不只是const char *s1 = (char*) p1;
?
strings
是指向char
的指针数组。 qsort
的比较 function 获得了指向应该比较的数组的两个元素的指针。 由于数组的元素是指向char
的指针,因此 arguments p1, p2
到scmp
是指向char
的 (const) 指针的指针,应该转换为char **
(或者更确切地说是char * const *
)。
需要传递给printf
的是指向char
本身的指针,因此您必须取消引用参数才能获取该指针。 如果您想查看字符串的各个字符,则必须再次取消引用。 类型名称中有两个*
,因此您必须应用*
两次才能回到底层的原始类型。
printf("The first character of the string is %c\n", **(char * const *)p1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.