2016-10-06 9 views
2

コマンドプロンプトを使用して引数を渡そうとしています。コマンドプロンプトからの文字列

ありがとうございました 私のプログラムに渡すことができる3つの異なるタイプ:int、char、string。 intとcharのために正しく動作しますが、文字列を渡している場合は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

私は単純に同じようargvからarrへのポインタをコピーすることができます。arr[i-2] = argv[i]

2番目の方法は、文字列のメモリを割り当てることです。

関連する問題