StrcaseCMP في C إرجاع 156 بدلاً من 0 ، أي أفكار لماذا؟
سؤال
لدي الرمز التالي:
printf("num: %d\n", strcasecmp(buf, "h\n"));
وأحصل على النتائج التالية عندما أحاول توصيل رسائل مختلفة:
a: -7
g: -1
i: 1
j: 2
h: 156
H: 156
ينبغي strcasecmp
لا تعود 0 عندما يكون BUF يساوي H
أو h
؟ أي أفكار لماذا تعود 156؟ أحتاج إلى معرفة كيفية التحقق مما إذا كانت أنواع المستخدمين ح أو ح.
شكرًا!
تحرير: أنا أقرأ BUF بالطريقة التالية:read(0, buf, MAXBUFLEN);
المحلول
printf("num: %d\n", strcasecmp(buf, "h"));
لماذا \n
في النهاية ، إذا كنت تريد المقارنة مع h
أو H
?
main(){
char *s = "hH";
printf("%d\n", strcasecmp(s, "Hh"));
}
0
read()
أيضا مخازن المساحة البيضاء. لذلك ، إذا كنت تستخدم read
, ، قارن مع "H n".
main(){
char *buf = malloc(sizeof(char)*10);
read(0, buf, 10);
printf("%s %d %d\n", buf, strcasecmp(buf, "h\n"), strcasecmp(buf, "h"));
}
ح
ح
0 10
دخلت ح في الحالة أعلاه.
أيضا استخدام strncasecmp
إذا كنت تريد مقارنة عدد ثابت من الأحرف.
نصائح أخرى
حاول مقارنته بـ "h\r\n"
- إذا كنت على ويندوز ، كلاهما \r
و \n
سوف ينهي الخط.
read
لا يضع الصفر في النهاية. إنه يتعامل فقط مع صفائف البايتات ، ولا يعرف شيئًا عن الأوتار المنتهية الخالية. هكذا مثل هذا:
char buf[MAXBUFLEN+1];
int readResult = read(0, buf, MAXBUFLEN);
if(readResult < 0)
{
// handle error
}
else
{
buf[readResult] = 0;
printf("num: %d\n", strcasecmp(buf, "h\n"));
}
يفعل buf
تحتوي على خط جديد زائد؟
هل جربت
printf("num: %d\n", strcasecmp(buf, "h"));