C分段故障错误

时间:2014-07-12 21:33:08

标签: c arrays string segmentation-fault

我目前正在编写一个程序,其目的是将一个字符串数组发送到一个函数,然后该函数将对该数组进行冒泡排序,将数组中较短的字符串移到前面,将较长的字符串移动到后面,因此预期的输出应为"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[]时,但我得到错误,说达到最大声明或类似的东西。那是我做过的事情还是你不能把字符串存储在这样的字符数组中?

1 个答案:

答案 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;
        }
}