2017-02-08 3 views
-1
#include <stdio.h> 
#include <string.h> 

int convert(char *str) 
{ 
    int i, number = 0; 
    for (i = 0; str[i] != '\0'; ++i) { 
    number = number * 10 + str[i] - '0'; 

    } 
    return number; 
} 

int main(int argc, char *argv[]) 
{ 
    int j; 
    int c = convert(argv[2]); 
    if (argc == 3) { 
    for (j = 0; j < c; j++) { 
     printf("Hello, %s!\n", argv[1]); 
    } 
    } else if (argc < 3) { 
    printf("Not Enough Arguments\n"); 
    } else if (argc > 3) { 
    printf("Too Many Arguments\n"); 
    } 
    return 0; 
} 

Fehler beim Segmentieren, wenn weniger als 3 Argumente angegeben werden. bei weniger als 3 Argumente sollte es "nicht genug Argumente" drucken, aber es gibt Fehlersegmentierungsfehler.c Befehlszeilenargumente

input: ./a raju erwartete Ausgabe: not enough arguments

+8

Die Verwendung von 'argv [2]' vor der Überprüfung ist eine schlechte Idee, denke ich ... Wirklich, können Sie nicht Ihren eigenen Code lesen (nicht von der verrückten Formatierung sprechen)? –

Antwort

2
int c = convert(argv[2]); 

Wenn argc 2 ist, wird argv[2]NULL sein. Was erwarten Sie von dieser Codezeile, da sie als erstes ausgeführt wird, wenn das Programm ausgeführt wird?

Refactoring, so dass das conditionals darunter gegen diese Bedingung eine Wache bilden, hier ist etwas näher an, was Sie wahrscheinlich gedacht:

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

int convert(char *str) 
{ 
    int i, number = 0; 
    for (i = 0; str[i] != '\0'; ++i) { 
    number = number * 10 + str[i] - '0'; 
    } 
    return number; 
} 

int main(int argc, char *argv[]) 
{ 
    if (argc != 3) { 
    printf( argc < 3 ? "Not Enough Arguments\n" 
      /*argc > 3*/ : "Too Many Arguments\n" ); 
    exit(EXIT_FAILURE); 
    } 

    int c = convert(argv[2]); 
    for (int j = 0; j < c; j++) { 
    printf("Hello, %s!\n", argv[1]); 
    } 
    return 0; 
} 

P. S. Da argv[0] normalerweise der Programmname und nicht ein Argument ist, werden argv[1] und argv[2] Ihre Argumente sein, argv[3] wird NULL sein und wenn Sie sie zählen, zählen Sie zwei Argumente, nicht drei; erwarten Sie argc == 4, wenn drei Argumente angegeben werden.

0

Das könnte Sie auch interessieren: getopt.h library. Es behandelt alle Standardfunktionen von Befehlszeilenargumenten.