इस लाइन का क्या मतलब है?

if (strcmp(argv[0],"./lower")==0)

लोअर या अपर केस में कनवर्ट करने से पहले इस स्थिति की जाँच क्यों की जाती है? इसका क्या परिणाम होता है?

c
-3
Akash Nair 14 जिंदा 2018, 11:56

2 जवाब

सबसे बढ़िया उत्तर

जैसा कि आपने अनुमान लगाया होगा, यह वास्तविक रूपांतरण नहीं करता है। लेकिन वास्तव में यह निर्धारित करता है कि निष्पादन योग्य नाम के आधार पर कौन सा रूपांतरण करना है। नीचे एक उदाहरण है

यहाँ है केसफाइल_48248048.c

#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(int argc,char* argv[]){
char str[30]="Some string";
short i=0;
printf("argv[0] = %s\n",argv[0]);
if(strcmp(argv[0],"./tolower")==0){
  printf("String in lower case : ");
  while(str[i])
   printf("%c",tolower(str[i++]));
  printf("\n");
}
else if(strcmp(argv[0],"./toupper")==0){
  printf("String in upper case : ");
  while(str[i])
   printf("%c",toupper(str[i++]));
  printf("\n");
}
else
  printf("No changes to be made to string");
return 0;
}

लिनक्स में, मैंने इसे नीचे की तरह gcc का उपयोग करके संकलित किया है

gcc  casefile_48248048.c -o  casefile_48248048

फिर उससे दो सांकेतिक कड़ियाँ बनाईं

ln -s casefile_48248048 toupper
ln -s casefile_48248048 tolower

फिर नीचे परिणाम देने के लिए toupper और tolower चलाएं

$ ./toupper 
argv[0] = ./toupper
String in upper case : SOME STRING
$ ./tolower
argv[0] = ./tolower
String in lower case : some string

बात साफ है, उम्मीद है :-)

1
sjsam 14 जिंदा 2018, 12:45

argv[0] की तुलना निष्पादन योग्य के नाम की जांच कर रही है।

मुझे लगता है कि आप busybox के समान कोड देखते हैं जिसमें आप उस निष्पादन योग्य की जांच करते हैं जिसका उपयोग उपयोगकर्ता ने किया था ताकि आप जान सकें कौन सी क्रिया करनी है।

2
Igal S. 14 जिंदा 2018, 12:02