2

私のプログラムはポートから入力を取得し、この文字列を送信していくつかの文字列と照合します。私は最初に「myString」のみを使用してJavaスタイルを比較しようとしましたが、比較すると13(13)になりました。charポインタを使用する必要があるためだと思いましたが、それでも13を取得します。その後、バッファが改行で渡されるのを確認したので、\ nを追加しましたが、3(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'-を1つに追加することができます。

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

または、比較するときに同等になるように、もう一方から削除します。

于 2013-03-09T17:18:13.110 に答える
0

strcmp行を中断してgdbでプログラムを実行すると、print /xmyStringとprint/xボタンを実行して、2つを視覚的に比較できます。違いがあります。

于 2013-03-09T18:27:12.910 に答える