【发布时间】:2019-12-17 20:04:35
【问题描述】:
我试图通过 C 中的命令行参数接收两个字符串,然后比较它们。我知道malloc 返回一个void 指针,尽管我不明白如何将它传递给我的比较函数,因为它正在寻找一个const void 指针。我假设我将不得不强制转换指向将分配字符串的堆上的内存的指针(?)虽然我不确定如何去做,但感谢任何帮助。
int cmpstringp(const void *arg1, const void *arg2);
int main(int argc, char **argv) {
char *strOne;
char *strTwo;
int n = 10;
strOne = (char *)malloc((n + 1) * sizeof(char));
strTwo = (char *)malloc((n + 1) * sizeof(char));
strOne = argv[1];
strTwo - argv[2];
cmpstringp(strOne, strTwo);
}
int cmpstringp(const void *arg1, const void *arg2) {
const char * const * ptr1 = (const char **)arg1;
const char * const * ptr2 = (const char **)arg2;
const char *str1 = *ptr1;
const char *str2 = *ptr2;
return strcmp(str1, str2);
}
【问题讨论】:
-
你可以直接比较
argv[1]和argv[2]:strcmp(argv[1], argv[2])。 -
您不需要任何分配,因为在下一行您通过为变量分配另一个值来泄漏分配的内存。当它们只是指针时,也没有理由强制转换为双指针。只需按原样使用指针即可。
-
您的代码中有
strTwo - argv[2];,应该是strTwo = argv[2];,是输入错误还是您运行了它? -
所有 cmets/answers 都是正确的,但没有人说你做错了什么:1)
strOne = argv[1];在你的情况下会导致内存泄漏。如果您想要一个副本,请使用strdup或strcpy到您分配的缓冲区中。 2)cmpstringp()是一团糟。您将指针传递给它,然后将参数视为** -
您始终可以将指向非
const的指针传递给需要const的函数。函数声明中的const只是表示它不会修改数据,即使参数数据是可修改的也很好。