مقارنة حرف صفائف سلسلة حرفية في C++
-
08-07-2019 - |
سؤال
لدي صفيف حرف و أنا في محاولة لمعرفة ما إذا كان يتطابق مع سلسلة حرفية ، على سبيل المثال:
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