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.
4

3 回答 3

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';
于 2013-03-09T17:17:36.617 回答
1

13 是 的 ASCII 值'\r',因此您有一个尾随回车符。您可以添加一个'\r'- 并且很可能还有一个'\n'- 到一个,

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

或将其从另一个中删除以在比较时获得相等。

于 2013-03-09T17:18:13.110 回答
0

在 gdb 中运行您的程序,并在 strcmp 行上打断,然后您可以执行 print /x myString 和 print /x button 并直观地比较两者。会有区别。

于 2013-03-09T18:27:12.910 回答