我目前正在编写一个程序,其目的是将一个字符串数组发送到一个函数,然后该函数将对该数组进行冒泡排序,将数组中较短的字符串移到前面,将较长的字符串移动到后面,因此预期的输出应为"shortest is cat, longest is elephant"
。
这看起来很简单,但是我遇到了分段错误,我查看了代码的索引,但它似乎没有超出界限,所以我不确定是什么时候发生的。这是我的示例代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fx(char* array[],int size);
int main()
{
char* t[]= {"horse","elephant","cat","rabbit"};
int n;
n = sizeof(t)/ sizeof(t[0]);
fx(t,n);
printf("shortest is %s, longest is %s\n",t[0],t[n-1]);
}
void fx(char* array[],int size)
{
int i;
int current,next,unsorted;
char* stringTemp;
do {
unsorted = 0;
for(i = 0; i < size-1; i++)
current = strlen(array[i]);
next = strlen(array[i+1]);
if( current > next )
{
stringTemp = array[i];
array[i] = array[i+1];
array[i+1] = stringTemp;
unsorted = 1;
}
}
while(unsorted);
}
也是关于字符串的快速问题。早些时候,当我盯着我将字符串存储在char array[]
时,但我得到错误,说达到最大声明或类似的东西。那是我做过的事情还是你不能把字符串存储在这样的字符数组中?
答案 0 :(得分:6)
在for
循环体周围放置大括号。
for(i = 0; i < size-1; i++){
current = strlen(array[i]);
next = strlen(array[i+1]);
if( current > next )
{
stringTemp = array[i];
array[i] = array[i+1];
array[i+1] = stringTemp;
unsorted = 1;
}
}