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;
}
ストリングにストレージを割り当てていません。あなたは生の初期化されていないポインタを使用して、彼らが指したランダムな場所に書き始めました。 – paddy
コードのその部分を踏んだとき、デバッガはあなたに何を表示しますか? –
'char * arr [argc-2];'。各文字列にメモリを割り当てる必要があります。それらの要素のそれぞれは現在、初期化されていないポインタです。 'sscanf'はあなたのためにメモリを割り当てません。 – kaylum