字符串和字符*的错误比较

时间:2013-03-09 17:16:22

标签: c string string-comparison

我的程序从端口获取输入,然后我发送此字符串以检查几个字符串。我首先尝试比较,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.

3 个答案:

答案 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按钮并直观地比较两者。会有所不同。