我正在尝试按字母顺序对所有参数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;
}
}
}
}
答案 0 :(得分:1)
您正在向<%#= render @submissions %>
#<%# %> This is the way to comment embedded ruby code
传递一个char数组。
因此,当您将swap
的元素与argv
函数进行比较时,您正在比较char而不是字符串(char数组)。
所以你不应该调用strcmp来比较char。 (strcmp找不到'\ 0'符号,因此引发错误。)
您可以将char与'&gt;'进行比较操作
swap
编辑:
如果你想使用字符串。你应该在C中研究记忆中的rappresentation。
所以你的错误发生'原因(argv + j)不是j-string。
答案 1 :(得分:-1)
我优化了您的代码以有效地对argv[]
数组进行排序;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(int argc, char *argv[]);
int main(int argc, char **argv)
{
swap(argc, argv);
int n;
for (n = 1; n < argc; n++) {
printf("%s\n", argv[n]);
}
//system("PAUSE");
return 0;
}
void swap(int argc, char *argv[])
{
int i, j;
char *temp;
for (i = 0; i < argc; i++)
{
for (j = 1; j < (argc - i - 1); j++)
{
if (strcmp(argv[j], argv[j + 1]) > 0)
{
temp = argv[j];
argv[j] = argv[j + 1];
argv[j + 1] = temp;
}
}
}
}