我试图按字母顺序对所有参数 argv 进行排序,但我不明白为什么当我输入 3 个或更多参数时我的代码不起作用。
#include <stdio.h>
#include <stdlib.h>
void swap(int argc, char argv[]);
int main(int argc, char **argv) {
swap(argc, argv);
system("PAUSE");
return 0;
}
void swap(int argc, char argv[]) {
int i, j;
char temp;
for (i = 0; i < argc; i++)
{
for (j = 0; j < argc; j++)
{
if (strcmp(*(argv + j), *(argv + j + 1)) > 0)
{
temp = *(argv + j);
*(argv + j) = *(argv + j + 1);
*(argv + j + 1) = temp;
}
}
}
}
最佳答案
您正在向 swap
传递一个字符数组。
因此,当您将 argv
的元素与 swap
函数进行比较时,您是在比较 char 而不是字符串(char 数组)。
所以你不应该调用 strcmp 来比较 char。 (strcmp 找不到 '\0' 符号,因此引发错误)。
您可以将 char 与 '>' 运算符进行比较。
if (*(argv + j) > *(argv + j + 1 ))
编辑:
如果你想使用字符串。你应该研究一下 C 中的内存表示。
所以你的错误发生是因为 (argv + j) 不是 j 字符串。
请研究一下。
关于c - 按特定顺序对 argv 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36838408/