سؤال

لدي صفيف حرف و أنا في محاولة لمعرفة ما إذا كان يتطابق مع سلسلة حرفية ، على سبيل المثال:

char value[] = "yes";
if(value == "yes") {
   // code block
} else {
   // code block
}

ونتج عن هذا الخطأ التالية:مقارنة مع سلسلة حرفية النتائج في السلوك غير محدد.كما أنني حاولت شيئا مثل:

char value[] = "yes";
if(strcmp(value, "yes")) {
   // code block
} else {
   // code block
}

هذه لم تسفر عن أي أخطاء برنامج التحويل البرمجي ولكن لا تتصرف كما هو متوقع.

هل كانت مفيدة؟

المحلول

std::strcmp بإرجاع 0 إذا سلاسل متساوية.

نصائح أخرى

والتحقق من الوثائق لstrcmp. تلميح: أنه لا يرجع قيمة منطقية

وETA: == لا تعمل بشكل عام بسبب cstr1 == cstr2 يقارن <م> مؤشرات ، بحيث مقارنة سيكون صحيحا فقط إذا cstr1 ونقطة cstr2 إلى موقع الذاكرة نفسه، حتى لو كانوا موجودين لكلا تشير إلى السلاسل التي تساوي lexicographically. ما حاولت (المقارنة بين cstring لحرفي، على سبيل المثال cstr == "yes") <م> خاصة لن تنجح، لأن المعيار لا يتطلب أن. في تنفيذ معقول أنا أشك في ذلك أن تنفجر، ولكن cstr == "yes" المرجح أن تنجح أي وقت مضى، لأن cstr غير المرجح أن أشير إلى العنوان الذي يعيش "yes" ثابت سلسلة في.

strcmp يعود ثلاثي الدولة قيمة الإشارة إلى النظام النسبي من اثنين من السلاسل.عند إجراء مكالمة مثل strcmp(أ ، ب) ، فإن الدالة ترجع

  • قيمة < 0 عندما < ب
  • 0 عندما a == b
  • قيمة > 0 عندما a > b
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top