2016-10-06 29 views
2

我想使用命令提示符傳遞我的參數。來自命令提示符的字符串

有 3種不同的類型可以傳遞給我的程序:int,char,string。它適用於整數和字符,但我收到seg錯誤,在這種情況下,如果我傳遞字符串。

#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

我可以簡單的複製指針從argvarr,如:arr[i-2] = argv[i];

第二種方法是爲字符串分配內存。