【发布时间】:2017-12-05 07:03:50
【问题描述】:
我正在尝试编写一个代码,根据给定的命令行参数,按字母顺序或反向字母顺序对字符串数组进行排序。
“-o a”表示字母。
"-o r" 表示反转。
这是我目前的代码。
#include<stdio.h>
#include<string.h>
int string_compare(char *str1,char *str2){
int ret;
ret=strcmp(str1,str2);
if(ret < 0) {
return 0;
}
else if(ret > 0) {
return 1;
}
else {
return -1;
}
}
void swap(char *str1, char *str2)
{
char *temp = str1;
str1 = str2;
str2 = temp;
}
int main(int argc,char *argv[]){
char *planets[9]={"Mercury","Venus","Earth","Mars","Jupiter","Saturn","Uranus","Neptune","Pluto"};
int i,j;
int a_ret=strcmp(argv[2],"a");
int r_ret=strcmp(argv[2],"r");
int cmp;
for(i=0;i=8;i++){
for(j=8;j=(i+1);j--){
cmp=string_compare(planets[j],planets[j-1]);
if(a_ret==0){
if(cmp==0){
swap(planets[j],planets[j-1]);
}
}
else if(r_ret==0){
if(cmp==1){
swap(planets[j],planets[j-1]);
}
}
}
}
printf("%s",planets[0]);
return 0;
}
该程序应该像这样工作:
./planets –o a
The planets in alphabetical order are: Earth, Jupiter, Mars, Mercury, Neptune, Pluto, Saturn, Uranus, Venus
或者这个:
./planets –o r
The planets in reverse alphabetical order are: Venus, Uranus, Saturn, Pluto, Neptune, Mercury, Mars, Jupiter, Earth
程序编译没有错误,但是当我运行它时,我得到了
Segmentation fault(core dumped)
我是 C 新手,我不太了解如何操作内存分配。非常感谢任何帮助或建议。
【问题讨论】:
-
您的
swap函数无法按照您认为的方式运行。做一些关于在C中模拟通过引用传递的研究。 -
另外,您应该了解使用
=分配和使用==比较相等之间的区别。也许您应该get a good beginners book or two 阅读? -
此外,在像
i = 0这样的初始化之后,i == 8将永远为真,因此您的外部循环将永远不会执行。也许您应该使用i < 9(或i <= 8)作为条件? -
最后,遇到这样的崩溃,你应该learn how to debug your programs。最好使用调试器。
-
你本质上是在问为什么
int x=1; func(x); ... void func (int a) { a=2; }不会改变 x 的值。
标签: c string segmentation-fault