-1

ファイルを読み込んで、等号の左側を右側から分離し、左側が「HOME」かどうかを確認しようとしています。最初のトークンが「HOME」であることがわかりますが、それが「HOME」に等しいかどうかはわかりません。基本的にファイルに書かれている行は「HOME = /cs/nsf」です。

何がうまくいかないのですか?

while (fgets(buffer,80,file)) //while end of file
{
   char *token = strtok(buffer,"=");
   printf("first token: %s\n",token); //this correctly prints "HOME"
   if (strcmp(token,"HOME") == 0)
   {
       printf("it doesn't get here");
       token = strtok(NULL,"\n");         //this should return "/cs/nsf" but it doesn't;
       if (token == NULL || strcmp(token," ") == 0)
       {
           fprintf(stderr,"HOME isn't initialised\n")
       }
    }
}
4

6 に答える 6

3

=の唯一の区切り文字として使用したためstrtok、最初のトークンには=入力文字列の の前にスペースが含まれます。したがって、解析する最初のトークンは実際には"HOME ". それはあなたprintfが印刷しているものです。端のスペースが見えないだけです。

明らかに、"HOME "と同じではありません"HOME"。の区切り文字のリストにスペースを追加しstrtokます。

于 2012-10-24T18:12:09.273 に答える
2

「最初のトークン:HOME」(HOMEの後にスペースを含む)を印刷している必要があります。

于 2012-10-24T18:14:25.140 に答える
1

最初のprintfはを印刷し"HOME "ます。"= \t"トークン文字列として使用して、 "HOME"(空白ではなく)返す必要があります。

于 2012-10-24T18:17:54.453 に答える
1

トークンの末尾から空白を削除する必要があります。印刷されている可能性があります"HOME "(余分なスペースに注意してください)。

于 2012-10-24T18:13:24.177 に答える
0

ファイルの HOME の後に空白があります。

使用する:

printf("first token <<%s>>\n", token);

問題を確認します。次に、比較する前に先頭と末尾の空白を取り除きます。文字列の先頭と末尾を and のようなもので明示的にマークする<<>>(私が XML テキストをあまり扱っていないことがわかります)、先頭と末尾の空白やその他の予期しない効果を簡単に確認できることに注意してください。いつも貴重な技術だと思います。

于 2012-10-24T18:12:58.030 に答える
0
HOME = /cs/nsf

したがって、実際には前の最初のトークンは違います"HOME""HOME "、左側のスペースに注意してください。

" = "の 2 番目の引数として使用するか、目的を達成するためにstrtok()書き込みます。strcmp(token, "HOME ")

于 2012-10-24T18:13:01.800 に答える