簡體   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