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;
}
Вы не выделили хранилище для своих строк. Вы просто использовали необработанные, неинициализированные указатели и начали писать в произвольные места, на которые они указывали. – paddy
Что показывает отладчик, когда вы проходите через этот раздел кода? –
'char * arr [argc - 2];'. необходимо выделить память для каждой из строк. Каждый из этих элементов в настоящее время является неинициализированным указателем. 'sscanf' не выделяет вам память. – kaylum