Skrivet av jookeer:
Leker lite med C programmering.
char c;
c = 'x'; där x kan vara alla tecken på tangentbordet UTOM å, ä, ö
kompilatorn säger: "warning: multi-character character constant [-Wmultichar]"
så hur fixar man detta?
En char (character) är vanligtvis en byte stor. En byte kan representera 2^8 = 256 olika värden, alltså 256 olika tecken.
Om du kan få kompilatorn att använda en teckenkodning där å, ä, ö (och eventuellt Å, Ä, och Ö) är kodat med ett värde mellan 0-255 så kan din char representera ditt tecken och du löser problemet. @Kladdpapper föreslår just detta; att försöka få kompilatorn att använda Windows Code page 850.
Du borde likväl kunna ersätta ditt tecken med en så kallad escape sequence, då skriver du istället det värde som motsvarar det tecken du vill visa:
char a = '\x86'; /* å enligt Windows code page 850 */
char b = '\xE5'; /* å enligt Windows code page 1252 - vanligare(?) än 850 */
Observera att båda förslag förutsätter att kommandotolken i Windows är inställd på att använda motsvarande eller kompatibel teckenkodning, dvs. Windows code page 850 eller 1252.
Edit:
Ett annat alternativ kan vara att spara din kod teckenkodat som UTF-16, sen köra med wchar_t och wprintf istället.
W står för wide och syftar alltså på att datatypen är bredare, alltså består den av fler bitar och kan representera fler tal. wchar_t kan ha lite olika storlekar, men på Windows borde den vara 16-bitar och därmed funkar perfekt med UTF-16 (som använder just 16 bitar för att representera åtminstone BMP i Unicode).
Eftersom wchar_t är en annan datatyp än char så måste du använda en annan funktion för att skriva ut texten; wprintf istället för printf.
För att kompilatorn ska förstå att strängen ska sparas som wchar_t så måste strängen föregås av prefixet L.
#include <wchar.h>
int main(int argc, char *argv[])
{
wprintf(L"åäöÅÄÖ");
return 0;
}