2013-03-09 3 views
2

Моя программа получает входные данные от порта, а затем я отправляю эту строку для проверки на несколько строк. Сначала я попытался сравнить java-стиль, используя только «myString», но при сравнении я получил 13 (тринадцать). Я думал, что это потому, что я должен использовать указатель на char, но я все равно получаю 13. Затем я увидел, что буфер был передан с новой строкой, поэтому я добавил \ n, но я получил 3 (Три). Отсюда я не знаю, как уменьшить его до 0. Это должно быть то, как я передаю строку.Неверное сравнение строки и символа *

Получение строки:

bzero(buffer,256); 
n = read(sockfd,buffer,255); 
if (n < 0) 
    error("ERROR reading from socket"); 
printf("String at start: %s",buffer); 
testingMethod(buffer); 

Метод тестирования:

void testingMethod(char *string) { 
    char *button = "mystring"; 
    printf("myString: %s-", string); 
    printf("strcmp: %i", strcmp(myString,button)); 
... 
} 

Выход:

String at start: mystring 
string: mystring 
-strcmp: 13 //NOTE the - on the nextline. 

ответ

2

Существует остающаяся символ новой строки ('\n') в строке. Вы просто должны удалить его:

#include <string.h> 

/* Gets a pointer to the last newline character in the string. */ 
char *pend=strrchr(string, '\n'); 

/* Avoids the undefined behavior by checking pend against NULL. */ 
if(pend!=NULL) *pend='\0'; 
+0

Поведение все тот же, выход 13 + новая строка перед -. Я попытался изменить \ r для \ n, но это также приведет к сбою программы. То же самое с ответом Даниэля Фишера. – Juan

+0

Плохо, проблема была снова в моей печати. – Juan

1

13 это значение ASCII из '\r', поэтому у вас есть задний возврат каретки. Вы можете либо добавить '\r' - и очень вероятно, также '\n' - к одному,

char *button = "mystring\r\n"; 

или удалить его из другой, чтобы получить равенство при сравнении.

+0

Я попытался добавить строку \ r \ n в строку, но программа будет сбой при сравнении. Если я сниму \ r, он все равно дает 3, но не падает. Любая идея почему? – Juan

+1

Что произойдет, если вы установите 'char * button =" mystring \ r ";'? (Я вроде бы ожидаю, что вы получите результат '-10'.) Обычно авария намекала на один аргумент на' strcmp', который не заканчивается 0, но одна 'кнопка' указывает на то, что, конечно, есть, и переданный 'buffer' тоже должен быть, так как вы' bzero (256) 'и только' read' 255 байтов, поэтому, похоже, это не так. Попробуйте больше отладочного вывода, 'for (int i = 0; i <256 && string [i]; ++ i) {printf ("% d:% d \ n ", i, string [i]); } ', чтобы узнать, что у вас есть (и, возможно, где он сбой). –

+0

Mange, чтобы исправить это, стало проблемой при печати. Спасибо за помощь. – Juan

0

Запустите программу в gdb с перерывом на строке strcmp, затем вы можете сделать print/x myString и кнопку print/x и визуально сравнить их. Будет разница.

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