我正在尝试使用 C 中的 argv 从命令行读取单词,然后根据它们的长度按降序对它们进行排序。然而,我的排序算法产生了意想不到的输出。
我使用的代码如下:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
for (int i = 1; i < argc - 1; i++) {
for (int j = 1; j < argc - i - 1; j++) {
if (strlen(argv[j]) < strlen(argv[j + 1])) {
char temp_word[20];
strcpy(temp_word, argv[j]);
strcpy(argv[j], argv[j + 1]);
strcpy(argv[j + 1], temp_word);
}
}
}
puts("\n");
for (int i = 1; i < argc; i++) {
printf("%s ", argv[i]);
}
return 0;
}
gcc test.c -o test
./test I put this words
puwordI wordI I %
我使用 argv 从命令行读取单词,然后尝试按长度对它们进行排序。不幸的是,输出已损坏。我怀疑我的排序逻辑或处理命令行参数的方式可能存在问题。有人可以检查我的代码并提供有关如何在从 argv 读取单词时按长度正确排序单词的指导吗?
任何帮助或建议将不胜感激。
谢谢!
您不应该修改参数字符串的内容,但您可以修改
argv
中的指针。因此,您应该只交换指针而不是字符串。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
for (int j = 1; j < argc - i - 1; j++) {
if (strlen(argv[j]) < strlen(argv[j + 1])) {
char *temp = argv[j];
argv[j] = argv[j + 1];
argv[j + 1] = temp;
}
}
}
for (int i = 1; i < argc; i++) {
printf("%s ", argv[i]);
}
printf("\n");
return 0;
}