2010-02-20 7 views
6

एक असाइनमेंट के लिए, मुझे अपने सी प्रोग्राम के लिए कमांड लाइन तर्क होना आवश्यक है। मैंने बिना किसी परेशानी के पहले (सी ++ में) argc/argv का उपयोग किया है, लेकिन मुझे यकीन नहीं है कि सी स्टाइल स्ट्रिंग इस काम को कैसे प्रभावित कर रही हैं। , उत्पादन: "गलत प्रयोग ... त्रुटि" भी मेरी printf हालांकिसी में argv का उपयोग कर?

int main(int argc, char *argv[]){ 

    if(argc>1){ 
    printf("0 is %s, 1 is %s\n",argv[0],argv[1]); 
    if(argv[1]=="-e"){ 
     // Do some stuff with argv[2] 
     system("PAUSE"); 
    } 
    else{ 
     printf("Error: Incorrect usage - first argument must be -e"); 
     return 0; 
    } 
    } 

तो मैं के रूप में "program.exe -e myargstuff" मेरे कार्यक्रम बोल रहा हूँ, लेकिन मैं हो रही है: यहाँ अपने मुख्य की शुरुआत है() मुझे बताता है कि argv [1] "-e" है। कुछ मदद, कृपया? धन्यवाद!

+0

@Joe: आप StackOverflow करने के लिए नए दिखाई देते हैं; आप जिस भी उत्तर का जवाब देते हैं उसके बगल में स्थित बॉक्स को चेक करने पर विचार कर सकते हैं। – jgottula

+0

टिप के लिए धन्यवाद! – Joe

उत्तर

14

लाइन

if(argv[1]=="-e"){ 

संकेत दिए गए, नहीं तार तुलना करती है। बजाय strcmp समारोह का उपयोग करें:

if(strcmp(argv[1],"-e")==0){ 
+1

हाहा। मेरे उत्तर की तरह 6 जवाब मुझे जवाब लिखने के लिए ले गए। –

+0

ठीक है, यह बिल्कुल किया। इसे सुधारने के लिए धन्यवाद, मैं सी के लिए बहुत नया हूँ! – Joe

3

आप इस तरह सी तार तुलना नहीं कर सकते। Strcmp का प्रयोग करें (संदर्भ here)।

क्योंकि सी-स्ट्रिंग वास्तव में पॉइंटर्स हैं, == ऑपरेटर पहले वर्ण के पते की तुलना करता है जो इस मामले में कभी बराबर नहीं होगा।

2

आप सी में तारों की तुलना करने के लिए == का उपयोग नहीं कर सकते हैं। यह केवल argv [1] और आपके शाब्दिक के पते की तुलना कर रहा है, जो कि अलग होने की काफी गारंटी है।

इसके बजाय strcmp का उपयोग करें। उदाहरण के लिए:

if (!strcmp("-e", argv[1])) { 
5

बदलें:

if(argv[1]=="-e"){ 

if(strcmp(argv[1], "-e") == 0){ 

करने और string.h शामिल हैं।

5

getopt() और संबंधित कार्यों की जांच करें; यह आपके जीवन को बहुत आसान बना देगा।

1

मुख्य समारोह का प्रोटोटाइप कहता है कि आप char* पॉइंटर्स से निपट रहे हैं। सी में, कोई ऑपरेटर ओवरलोडिंग नहीं है; इसलिए, == दो char* के बीच परीक्षण करेगा यदि वे उसी स्थान पर इंगित करते हैं। यह मामला नहीं है, और शायद ही कभी मामला है। का प्रयोग करें समारोह <string.h> से strcmp (हालांकि यह एक सी ++ साइट की ओर इशारा समारोह के लिए संदर्भ भी मान्य है):

strcmp(argv[1], "-e") == 0