#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void stringSort(char* p[5])
{
int i, j;
char temp[100];
for(i = 0; i < 5; i++)
{
for (j = 0; j < 5-i; j++)
/* if (strcmp(p[j], p[j+1]))
{
*temp = *p[j];
*p[j] = *p[j+1];
*p[j+1] = *temp;
}
首先strcmp函数用错, 由于只有两个字符串相等时才返回0, 此时显然不能达到目的其次后面的三个交换语句用错, 这里只是将p[j]所在的单元内容赋值给temp所指向的单元,所以最终只有第一个字母进行了排序。再次感谢一楼的提醒
*/
if (strcmp(p[j], p[j-1]) < 0)
{
strcpy(temp, p[j]);
strcpy(p[j], p[j-1]);
strcpy(p[j-1], temp);
}
}
return;
}
int main()
{
char* p[5];
char temp[100];
int i;
for (i = 0; i < 5; i++)
{
scanf("%s", temp);
p[i] = (char*)malloc(sizeof(temp)+1); /*这里一定要分配内存,不然会出现segmentation falut*/
strcpy(p[i], temp);
}
stringSort(p);
for (i = 0; i < 5; i++)
{
printf("%s\n", p[i]);
}
return 0;
}
写的东西很简单, 就是用指针数组实现字符串的排序。 原先查了下这个Segmentation fault, 发现是没有分配内存。可现在内存已经分配了, 仍然出现这个错误, 而且还没找出这个错误在哪。。