стрлен в массиве - PullRequest
       1

стрлен в массиве

0 голосов
/ 24 июля 2010

Я отлаживаю код, в котором файл .ini читается для значения строки с именем Timeout (которая берется в переменную с именем rbuf). Пожалуйста, сообщите мне содержимое файла .ini, когда условие следующим образом:

if((strlen(rbuf) > 0) && (rbuf[strlen(rbuf)-1] == '\n')){
    rbuf[strlen(rbuf)-1] = '\0';
   }

Когда отладчик перейдет в вышеуказанный цикл if? Пожалуйста, укажите точное содержание значения rbuf (значение буфера)

Ответы [ 2 ]

4 голосов
/ 24 июля 2010

Когда строка имеет «длину строки» (что-либо больше 0, не считая нулевого терминатора) и последний символ перед нулевым терминатором является новой строкой, она войдет в условный блок и установит эту новую строку равнойнулевой терминатор.

Чтобы сообщить вам точное содержимое rbuf, мне нужно знать содержимое ini-файла.Но, например, если у вас была строка текста, например:

i love programming

И давайте предположим, что в конце есть неиспользованный символ новой строки, если он.

Тогда rbuf будет начинаться с:

`я люблю программировать \ n \ 0 '

То есть 20 байтов.Strlen вернет 19 (не включая нулевой терминатор в конце).

rbuf [strlen (rbuf) -1] будет символом \ n (с индексом 18 в буфере).

Таким образом, ваш код увидит, что символ новой строки находится в индексе 18, и установит его в '\ 0', так что вы получите:

i love programming\0\0

в вашем буфере.

0 голосов
/ 24 июля 2010

Трудно сказать с информацией, которую вы дали, но:

(strlen (rbuf)> 0): rbuf содержит непустую строку (rbuf [strlen (rbuf) -1] == '\ n'): rbuf содержит строку, заканчивающуюся переводом строки.

Кроме этого, rbuf может содержать только разрыв строки. Или он может содержать ряд символов и заканчивается разрывом строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...