【发布时间】:2016-10-06 01:45:08
【问题描述】:
我正在尝试使用命令提示符传递我的参数。
有 可以将 3 种不同的类型传递给我的程序:int、char、string。它适用于整数和字符,但如果我传递字符串,我会遇到段错误。
#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;
}
【问题讨论】:
-
您没有为字符串分配存储空间。你只是使用了原始的、未初始化的指针并开始写入它们指向的任何随机位置。
-
当您单步执行该部分代码时,调试器会向您显示什么?
-
char* arr[argc - 2];。需要为每个字符串分配内存。这些元素中的每一个都是当前未初始化的指针。sscanf不会为你分配内存。 -
或者,您可以只存储
argv中已经可用的指针,而无需分配或复制字符串。 -
不,请不要在我们在这里的时候把这样的问题串起来。接受那个建议,去学习,如果你有困难再回来。因为即使我们帮助您处理字符串,您接下来要问的是为什么合并排序不起作用,我们会说这是因为您需要
cmp函数的字符串版本,而您'我会问“我该怎么做”,然后我们就兜兜转转。
标签: c string function command-line