繁体   English   中英

尝试在 qsort function 中打印字符串

[英]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, p2scmp是指向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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM