Согласно моему коду, я предполагаю, что каждый греческий символ хранится в 2 байтах. sizeof
возвращает размер каждого символа, как (т.е. SizeOf int
)sizeof character и strlen string несоответствие
Как strlen
обратный ? [Заставляет меня думать, что каждый символ занимает 2 байта] (не должно быть 4 * 8 = 32, так как оно подсчитывает количество байтов.)
Также, как printf("%c",bigString[i]);
печатать каждый символ должным образом? Должен ли он читать 1 байт (символ), а затем отображать из-за %c
, почему в этом случае греческий символ не разбивается.
strcpy(bigString,"ειδικούς");//greek
sLen = strlen(bigString);
printf("Size is %d\n ",sizeof('ε')); //printing for each character similarly
printf("%s is of length %d\n",bigString,sLen);
int k1 = 0 ,k2 = sLen - 2;
for(i=0;i<sLen;i++)
printf("%c",bigString[i]);
Выход:
Size is 4
ειδικούς is of length 16
ειδικούς
Но почему 'strlen' дает' 16'? Есть 8 символов типа 'int' shouldnt, которые дают 4 * 8 = 32? –
№ Символьный литерал - это 'int'. Символы в строке имеют любой размер, который им нужен - в вашем случае это выглядит как два байта за штуку. –
btw, sizeof ('ε') в визуальной студии печатает 1 ... и в любом случае это 'ε' не является строковым литералом, а символьным символом. –