реклама на сайте
подробности

 
 
> STRLEN с указанием явного кол-ва байт
__Alexander
сообщение Jun 8 2009, 18:23
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 76
Регистрация: 18-07-07
Из: Киев
Пользователь №: 29 202



Это скорее не по ИАР, а вобщем по С. Но ответ на вопрос мне хочеться узнать.
Почему при явном указании на длину массива, например Mass[1], функция strlen выдает на три байта больше, а при написании массива просто Mass[] нормальное количество байт, входящего в него?

Например:

chat Str[] = "YO";
chat Str1[2] = "YO";

так вот на strlen(Str1) выдает что байт аж 5!
При этом на strlen(Str) говорит честно что там два байта.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
sergeeff
сообщение Jun 8 2009, 18:50
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Потому, что
Код
chat Str1[2] = "YO";
резервирует только 2 элемента в массиве, а С-ная строка - это набор символов с '\0' в конце. Этот последний символ в массив и не попадает при таком объявлении. А то, что strlen выдает 5, то это чисто случайное число.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 8 2009, 19:21
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



А где у вас определен тип переменных chat? wink.gif Если это банальная описка и chat это на самом деле char, то размер массива для строки из двух символов должен быть как минимум 3. Не забывайте про завершающий строку нуль!, который в случае объявления массива Str добавляется автоматически так, что размер Str на самом деле 3, а не как вы предполагаете 2. Возварщает же strlen(Str) размер 2 потому, что завершающий нуль функцией strlen не учитывается. Как говорится - RTFM, то бишь изучайте стандарт С laughing.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 06:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016