【发布时间】:2021-06-03 19:58:46
【问题描述】:
我正在编写一个基本的qsort 来对字符串数组进行排序。到目前为止我所拥有的是:
int scmp(const void *p1, const void *p2)
{
const char* s1 = p1;
const char* s2 = p2;
// ...
}
int main(void)
{
char* strings[] = {"Onus", "deacon", "Alex", "zebra"};
qsort(strings, sizeof(strings), sizeof(*strings), scmp);
}
请注意,sizeof(strings) 上面给了我 32(4 个指针),而我想要的是 sizeof(strings)/sizeof(*strings)。这解决了这个问题,但我很好奇“堆栈粉碎”是什么意思以及它是如何发生的?
【问题讨论】:
-
堆栈粉碎只是意味着代码正在写入它不应该写入的堆栈部分。发生这种情况是因为
qsort写入了您给它进行排序的数组。既然你告诉它,数组中的条目比实际要多,它会写入它不应该写入的地方。
标签: c