Вообще говоря C++ строки так не сортируют, так как они - не-POD. По факту в данном случае qsort меняет местами внутренности std::string, что напрямую делать нельзя (UB).
Сортировать не-POD типы надо при помощи std::sort.
Да и вообще, std::sort - шаблонная функция; лучше инлайнится, чем qsort, а посему лучше использовать его в C++ коде.
#include <string>
#include <cstdlib>
#include <iostream>
#include <algorithm>
int str_compare(std::string const & l, std::string const & r)
{
if (l == r)
return 0;
return l < r ? -1 : 1;
}
int str_compare(void const * l, void const * r) { return str_compare(*static_cast<std::string const *>(l), *static_cast<std::string const *>(r)); }
int main()
{
std::string strs[3] = { "foo", "bar", "baz" };
std::qsort(strs, 3, sizeof(std::string), str_compare); // В общем, работает, но UB
// std::sort(&strs[0], &strs[0] + 3); // вот так - лучше
for (auto & s : strs)
std::cout << s << std::endl;
return 0;
}