2017-03-27 9 views
5

नीचे दिए गए कोड में मैं दो तारों की तुलना करने के लिए strcmp का उपयोग करता हूं और यह तुलना किसी कथन की स्थिति को बनाता हूं। नीचे दिए गए कोड के साथ, आउटपुट hello world होगा, क्योंकि स्ट्रिंग "एक" स्ट्रिंग "दो" के बराबर है।सी - एक कथन से संबंधित strcmp

#include <stdio.h> 
#include <string.h> 

char one[4] = "abc"; 
char two[4] = "abc"; 

int main() { 

    if (strcmp(one, two) == 0) { 
     printf("hello world\n"); 
    } 
} 

अब मैं कार्यक्रम बदलने के लिए, और यह hello world मुद्रित करता है, तो दो स्ट्रिंग कर रहे हैं अलग तो मैं प्रोग्राम बदल बनाना चाहते कि जिस तरह से:

#include <stdio.h> 
#include <string.h> 

char one[4] = "abc"; 
char two[4] = "xyz"; 

int main() { 

    if (strcmp(one, two) == 1) { 
     printf("hello world\n"); 
    } 
} 

मैं कारण क्यों यह नहीं है न कुछ भी प्रिंट करें।

+2

बदलें 'अगर (strcmp (एक, दो) == 1)' 'अगर करने के लिए (strcmp (एक, दो)! = 0)'। – AntonH

+0

@EdHeal आप बिल्कुल सही हैं, मुझे पूरा यकीन था कि स्ट्रिंग्स बराबर नहीं हैं, तो अगली बार यह पहली बात होगी जो मैं करूँगा – scugn1zz0

उत्तर

6

कर रहे हैं परीक्षण करने के लिए क्योंकि strcmp() इस मामले में एक नकारात्मक पूर्णांक वापस आ जाएगी।

तो यह बदलने के लिए:

if (strcmp(one, two) == 1) { 
इस के लिए

:

if (strcmp(one, two) != 0) { 

खाते में सभी मामलों है कि तार अलग लेने के लिए।

सूचना आपको देखा है हो सकता है कि अपने आप को कि या तो ref पढ़कर या उसका प्रिंट क्या कार्यों रिटर्न, इस तरह से:

printf("%d\n", strcmp(one, two)); 
// prints -23 
+0

निश्चित @FREE_AND_OPEN_SOURCE जो भी काम करेगा! – gsamaras

1

आपने गलत समझा कि कैसे strcmp काम करता है। तार विभिन्न उपयोग

if(strcmp(one, two)) 
2

strcmp रिटर्न शून्य जब दोनों तार बराबर हैं तो यह अन्य कुछ देता है शून्य से जब वे अलग है, इसलिए आप इस

if (strcmp(one, two) != 0) { 
    printf("hello world\n"); 
} 
2

की तरह कुछ करने के लिए अपने कोड में अगर आपके बदलने के लिए सी मानक (7.23.4.2 strcmp समारोह) के अनुसार की जरूरत है

3 strcmp समारोह एक पूर्णांक से अधिक है, के बराबर देता है, या कम से कम शून्य, तदनुसार के रूप में स्ट्रिंग एस 1 द्वारा की ओर इशारा अधिक से अधिक से, के बराबर है, या कम से कम स्ट्रिंग की ओर इशारा किया है एस 2 द्वारा।

तो आप क्या जरूरत है

if (strcmp(one, two) != 0) { 

या

की तरह अगर बयान लिखने के लिए
if (!(strcmp(one, two) == 0)) { 
1

सही व्यवहार है:

if (strcmp(one, two) != 0) { 
    printf("hello world\n"); 
} 

वास्तव में, यह फ़ंक्शन अंतर दोनों के बीच तार:

  • < 0: पहले वर्ण से मेल नहीं खाता ptr2 की तुलना में ptr1 में एक कम मूल्य है।
  • 0: दोनों स्ट्रिंग्स की सामग्री बराबर
  • > 0: पहला अक्षर जो मेल नहीं खाता है, ptr2 में ptr1 में अधिक मूल्य है।

This is an example of how strcmp could be implemented

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