c - 按特定顺序对 argv 进行排序

标签 c sorting pointers

我试图按字母顺序对所有参数 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 中的内存表示。

C memory rappresentation

所以你的错误发生是因为 (argv + j) 不是 j 字符串。

请研究一下。

关于c - 按特定顺序对 argv 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36838408/

相关文章:

c++ - 在 C++ 的析构函数中删除指针后,将 NULL 分配给指针是否有任何用处?

C - 链表

c++ - 尝试引用已删除函数的唯一指针

c - 一维数组作为二维数组传递给函数

c - 在 select 上设置 max fd 有多重要?

c - 指针数组作为 C 函数中的参数

c++ - 使用不遵循 'strict weak ordering' 的比较函数对列表进行排序

c++ - 了解源代码中头文件连接的库

c++ - C++ 中更大/更小的函数对象

ios - 如何在nsmutabledictionary ios中按顺序打印键