[英]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.