2016-10-06 5 views
2

Я пытаюсь передать свои аргументы с помощью командной строки.Строка из командной строки

Есть В мою программу могут быть переданы 3 разных типа: int, char, string. Он корректно работает для ints и char, но я получаю seg faulted, в случае, если я передаю строки.

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


int main(int argc, char *argv[]) 
{ 
if (argc > 2){ 
    if (strcmp(argv[1], "int") == 0){ 
     cmp_t cmp = CompareInt; 
     int arr[argc - 2]; 
     for(int i = 2; i < argc; i++) sscanf (argv[i], "%d", &arr[i - 2]);; 
     merge_sort(arr, argc - 2, sizeof(int), cmp); 
     for(int i = 0; i < argc - 2; i++) printf("%i ", arr[i]); 
    } 
    else if(strcmp(argv[1], "char") == 0){ 
     cmp_t cmp = CompareChar; 
     char arr[argc - 2]; 
     for(int i = 2; i < argc; i++) sscanf (argv[i], "%c", &arr[i - 2]);; 
     merge_sort(arr, argc - 2, sizeof(char), cmp); 
     for(int i = 0; i < argc - 2; i++) printf("%c ", arr[i]); 
    } 
    else{ 
     cmp_t cmp = CompareStr; 
     char* arr[argc - 2]; 
     for(int i = 2; i < argc; i++) sscanf (argv[i], "%s", arr[i - 2]); 
     merge_sort(arr, argc - 2, sizeof(char*), cmp); 
     for(int i = 0; i < argc - 2; i++) printf("%s ",arr[i]); 
    } 
} 
return 0; 
} 
+2

Вы не выделили хранилище для своих строк. Вы просто использовали необработанные, неинициализированные указатели и начали писать в произвольные места, на которые они указывали. – paddy

+1

Что показывает отладчик, когда вы проходите через этот раздел кода? –

+0

'char * arr [argc - 2];'. необходимо выделить память для каждой из строк. Каждый из этих элементов в настоящее время является неинициализированным указателем. 'sscanf' не выделяет вам память. – kaylum

ответ

1

я могу просто скопировать указатели из argv в arr как: arr[i-2] = argv[i];

Второй способ - выделить память для строк.

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