我的程序从端口获取输入,然后我发送此字符串以检查几个字符串。我首先尝试比较,java风格,只使用“myString”,但我比较时得到13(十三)。我认为这是因为我应该使用一个字符指针,但我仍然得到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.
答案 0 :(得分: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';
答案 1 :(得分:1)
13是'\r'
的ASCII值,因此您有一个尾随回车符。您可以将'\r'
- 很可能也是'\n'
添加到一个
char *button = "mystring\r\n";
或从另一个中移除它以在比较时获得相等。
答案 2 :(得分:0)
在strcmp行中使用break在gdb中运行程序,然后可以执行print / x myString和print / x按钮并直观地比较两者。会有所不同。