LINUX.ORG.RU

Количество байт в строке


0

1

Немного может быть глупый вопрос, но я что-то не нашел ничего.

В общем, как определить количество байт в строке? Именно байт, а не символов. Локаль UTF8. Язык - Си. Желательно работа с типом gchar (gtk).

★★★★★

Ответ на: комментарий от Boy_from_Jungle

Нет.

#include <stdio.h>
#include <string.h>

int main (int argc, char *argv[])
{
  char *string1="string1 here";
  char string2[]="string2 here";
  printf("sizeof(string1) is %u\n", sizeof(string1));
  printf("sizeof(string2) is %u\n", sizeof(string2));
  printf("strlen(string1) is %u\n", strlen(string1));
  printf("strlen(string2) is %u\n", strlen(string2));
  return 0;
}
$ ./test 
sizeof(string1) is 4
sizeof(string2) is 13
strlen(string1) is 12
strlen(string2) is 12
А автору темы нужен strlen()+1, видимо.

tim239 ()
Ответ на: комментарий от Boy_from_Jungle

>интересно sizeof()-1 даст тот же результат?!

sizeof от указателя даст размер указателя, который никак не коррелирует с размером куска памяти, который мы именуем строкой.

yoghurt ★★★★★ ()
Ответ на: комментарий от hibou

Это где такое написано, если не секрет? Наоборот, обычно спрашивают, как посчитать количество символов в utf8-строке, потому что strlen считает количество байт.

> echo $LANG
ru_RU.UTF-8
> echo '#include <stdio.h>
#include <string.h>
int main() {char s[] = "привет"; printf("%d\\n", strlen(s));}' | gcc -x c -
> ./a.out 
12
Laz ★★★★★ ()
Ответ на: комментарий от Laz

Ага, я давно уже ничего не программировал. Вспоминаю потихоньку.

hibou ★★★★★ ()
Ответ на: комментарий от alex_custov

>В UTF-8 могут быть управляющие символы с нулём

Можно хоть один пример? :D Ты не путай с UTF-16 символами...

В UTF-8 всё, что не ASCII - всё с установленным старшим битом. Более того, в этой кодировке сразу ясно что это, ASCII-символ (0xxxxxxx), начальный байт многобайтового символа (11xxxxxx) или последующий байт многобайтового символа (10xxxxxx).

В общем - http://ru.wikipedia.org/wiki/Utf-8

KRoN73 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.