مساعدة! STRCMP يكذب علي عندما تتغذى على نتائج Strtok
سؤال
STRCMP ، عندما يتغذى على نتائج Strtok ، في الكود التالي يبدو أنه يكذب عليّ بشكل صارخ.
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;
}
مع هذا الإدخال في ملف في المعلمات الضعيفة:
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
يكذب!
المحلول
strcmp
إرجاع 0 عندما تكون الأوتار التي تقارنها متساوية. تحتاج إلى استخدام if (!strcmp(...))
.
نصائح أخرى
يعود STRCMP 0 عندما تكون الأوتار متساوية. يرى: http://www.elook.org/programming/c/strcmp.html
لا يتعلق بسؤالك ، ولكن بضع نقاط:
- بعد
fread()
, ، يجب عليك تعيينbuffer[fSize] = 0;
, ، وإلا فإنها ليست سلسلة. - تحديد أرقام الأحرف التي يجب قراءتها في ملف نصي أو ملف ثنائي باستخدام
fseek(file,0,SEEK_END);
ليس مضمونًا للعمل.
شخصيا ، سأكتب malloc()
استدعاء على النحو التالي:
buffer = malloc(fSize+1);
لأن ذلك سيحذرني إذا نسيت ذلك #include <stdlib.h>
, ، وأسهل للقراءة. الممثلون غير مطلوبون في C.
لا تنتمي إلى StackOverflow