В чем разница между printf («% s»), printf («% ls»), wprintf («% s») и wprintf («% ls»)?

Рассмотрим этот пример программы:

#include <cstdio>
#include <cwchar>
#include <string>

int main()
{
    std::string narrowstr = "narrow";
    std::wstring widestr = L"wide";
    printf("1 %s \n", narrowstr.c_str());
    printf("2 %ls \n", widestr.c_str());
    wprintf(L"3 %s \n", narrowstr.c_str());
    wprintf(L"4 %ls \n", widestr.c_str());

   return 0;
}

Выход этого:

1 narrow 
2 wide 

Я задаюсь вопросом:

почему 3 и 4 не печаталив чем различия между 1 и 3 и 2 и 4.Имеет ли какое-либо значение, если в поле utf8 есть utst8, а в utf16 - widestr?

Ответы на вопрос(3)

Ваш ответ на вопрос