StrcaseCMP في C إرجاع 156 بدلاً من 0 ، أي أفكار لماذا؟

StackOverflow https://stackoverflow.com/questions/2512591

  •  22-09-2019
  •  | 
  •  

سؤال

لدي الرمز التالي:

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"));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top