2013-08-04 5 views
0

Я помню, как читал объяснение об использовании этой строки кода, но я читал так много книг о сокетах на прошлой неделе, что больше не могу их найти ,Какова цель buffer = " 0"

Я помню, как в книге, они написали свой код, используя = \ 0, то сказал, что было бы лучше, чтобы он на 1

Я попытался найти его, но не везло, это кусок код, который я читаю, где он используется

nread = recv(newsock, buffer, 25, 0); 
buffer[nread] = '\0'; 
+3

Я надеюсь, что 'buffer' по крайней мере, 26 долго ... А код должен обязательно проверить' nread == -1' перед началом работы. (Вернее, что перед установкой конечного маркера это не -1. ​​ –

+0

@Borgleader Я не знал, как это было вызвано, прежде чем они сказали мне. Поэтому я не смог найти его правильно. – user2644360

ответ

5

это превращает полученный буфер в NUL-концевого C-строки, которые вы можете использовать с strlen, strcpy, etc. Я предполагаю код, который вы показать для иллюстративных целей только, а не производственный код, потому что вы не проверяете возвращаемое значение recv, whic h может быть -1. Если это произойдет, это приведет к повреждению памяти.

0

Это означает, что строка заканчивается на этом байте. В этом случае последний.

\ 0 - нулевой символ.

Таким образом, вы не получите мусор, как: «Это мой message.aG¤ (Ag4h98av¤» G # ¤». Просто представьте себе, что есть \ 0 в конце этой строки.

При работе с сетью, вы обычно хотите отправить данные как целые числа, а наиболее распространенной практикой является отправка его в двоичном, а не в виде открытого текста. Например, целое число может выглядеть как «$% \ 0n». 4 байта, а третий - это \ 0. Таким образом, вы должны учитывать, что может быть \ 0, поэтому вы не должны хранить двоичное представление данных как строку, а скорее как буфер/строковый поток.

Конечно, может быть, вы не хотите распечатайте его двоичное представление, но вы должны помнить об этом. Возможно, вы хотите распечатать его, кто знает.

Смежные вопросы