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;
}
您沒有爲您的字符串分配存儲空間。你只是使用原始的,未初始化的指針,並開始寫入他們指向的任何隨機位置。 – paddy
當您逐步完成該代碼段時,調試器會顯示什麼內容? –
'char * arr [argc - 2];'。需要爲每個字符串分配內存。其中每個元素都是未初始化的指針。 'sscanf'不會爲你分配內存。 – kaylum