1

strtokの結果が供給されたとき、strcmpは、次のコードで露骨に私に嘘をついているようです。

int fSize;
char * buffer=NULL;
char * jobToken = "job";
char * nextToken=NULL;
job * curJob=NULL;
struct node * head=NULL;
struct node * parseList(FILE* file){
    fseek(file,0,SEEK_END);
    fSize=ftell(file);
    buffer = (char*)malloc(fSize+1);
    printf("%d chars: reading buffer now:\n",fSize);
    fseek(file,0,SEEK_SET);
    fread (buffer,1,fSize,file);
    nextToken = strtok(buffer, " \n");
    while (nextToken!=NULL){
            printf("**Running  Token: %s**\n",nextToken);
            if (strcmp(nextToken,jobToken)){
                    printf("Accepted %s  as %s\n",nextToken,jobToken);                
            }else{
                    printf("not %s, %s\n",jobToken,nextToken);
            }

            printf("End of state - %s\n",nextToken);

            nextToken = strtok(NULL, " \n");
    }
    free (buffer);
    return NULL;
}

parseListパラメーターのファイルにこの入力を使用すると、次のようになります。

job 23
job 10

この出力を提供します:

14 chars: reading buffer now:
**Running  Token: job**
not job, job
End of state - job
**Running  Token: 23**
Accepted 23  as job
End of state - 23
**Running  Token: job**
not job, job
End of state - job
**Running  Token: 10**
Accepted 10  as job
End of state - 10

嘘!

4

3 に答える 3

6

strcmp比較している文字列が等しい場合は0を返します。を使用する必要がありますif (!strcmp(...))

于 2010-01-22T01:30:43.330 に答える
1

文字列が等しい場合、strcmpは0を返します。参照:http ://www.elook.org/programming/c/strcmp.html

于 2010-01-22T01:33:54.757 に答える
1

あなたの質問とは関係ありませんが、いくつかのポイント:

  • の後にfread()を設定する必要がbuffer[fSize] = 0;あります。そうしないと、文字列ではありません。
  • . _ fseek(file,0,SEEK_END); _

個人的には、次のようにmalloc()呼び出しを記述します。

buffer = malloc(fSize+1);

忘れた場合に警告が表示され#include <stdlib.h>、読みやすくなるためです。C ではキャストは必要ありません。

于 2010-01-22T01:39:56.940 に答える