2017-02-08 9 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; 
} 

Получение ошибки сегментации при задании менее трех аргументов. при предоставлении менее 3 аргументов он должен печатать «недостаточно аргументов», но он дает ошибку сегментации ошибок.c аргументы командной строки

вход: ./a raju ожидается выход: not enough arguments

+8

Использование 'argv [2]' перед проверкой - плохая идея, я думаю ... Действительно, вы не можете проверить свой собственный код (не говоря о сумасшедшем форматировании)? –

ответ

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

Когда argc 2, argv[2] будет NULL. Что вы ожидаете от этой строки кода, поскольку она выполняется в первую очередь при запуске программы?

Рефакторинга так что условные под ним образуют меры против этого условия, вот что-то ближе к тому, что вы, вероятно, предназначены:

#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. Поскольку argv[0] обычно является именем программы, а не аргументом, argv[1] и argv[2] будут вашими аргументами, argv[3] будет NULL, и если вы их посчитаете, вы посчитаете два аргумента, а не три; ожидайте argc == 4, когда даны три аргумента.

0

Возможно, вас заинтересует getopt.h library. Он обрабатывает все стандартные функции аргументов командной строки.

 Смежные вопросы

  • Нет связанных вопросов^_^