2012-07-01 17 views
6

में pluralize कर हैरान स्ट्रिंग मैं प्लस बूलियन त्रिगुट आपरेशन के समान प्रभाव पड़ता है:स्थिरांक स्ट्रिंग प्लस बूलियन सी

int apple = 2;                  
printf("apple%s\n", "s" + (apple <= 1)); 

तो apple <= 1, यह सेब प्रिंट होगा। यह क्यों काम करता है?

उत्तर

11

क्योंकि स्थिति या तो 0 या 1 का मूल्यांकन करती है, और स्ट्रिंग "s" में 0-टर्मिनेटर से पहले बिल्कुल एक वर्ण होता है। तो "s" + bool"s" के पते पर मूल्यांकन करेगा यदि bool गलत है, और उसके पीछे एक वर्ण है, तो 0-टर्मिनेटर का पता सही है।

यह एक अच्छा हैक है, लेकिन कभी भी इस तरह के कोड का उपयोग ईमानदारी से नहीं करें।

+0

आह, मैं देखता हूं ... धन्यवाद – Oxdeadbeef

संबंधित मुद्दे