Серверная программа C ++ Печать во время цикла - PullRequest
0 голосов
/ 30 апреля 2018

Я создаю программу сокета сервера / клиента и нахожусь в процессе создания метода для печати ввода с сервера.

Вот мой код:

void *admin_handler (void *ptr) {
    char strBuf [100000];
    const char strExit [20] = "Server: terminated.";

    while(1) {
        scanf ("%s", strBuf);
        int i;
        for (i=0; i < nClient; i++){
            if (strBuf == "Exit"){
                write (nFDList [i], strExit, strlen (strExit) + 1);
            }
            else {
                write (nFDList [i], strBuf, strlen (strBuf) + 1);
            }
        }
    };
}

Однако, когда я выполняю, даже когда я набираю «Выход», он все равно выполняет оператор else. Как я могу изменить оператор if для выполнения, когда я набираю "Выход"?

1 Ответ

0 голосов
/ 30 апреля 2018

Лучший способ сравнить строки в C - использовать strcmp() (или strncmp(), если кто-то заинтересован в безопасности с неизвестными строками).

Оператор равенства == сравнивает операнды напрямую после того, как они "распадаются" до указателей; указатели не меняются и, конечно, отличаются. strcmp(), напротив, проверяет содержимое памяти, на которую указывает , , которая может быть равна.

Кроме того, такая же проблема существует в Java: == проверяет, являются ли обе стороны одинаковыми объектами , аналогично эквиваленту C, в то время как .equals() проверяет объект содержимое , аналогично strcmp().

C # , напротив, перегружен == для строк, чтобы он действительно смотрел на содержимое, что имеет большой смысл для языка, где возможна перегрузка операторов (а C - нет) : Проверка идентичности объектов почти никогда не требуется и, как мы видим, является распространенным источником ошибок.

...