C 段错误

标签 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[] 中,但我收到错误消息,说达到了最大声明或类似的东西。那是我做的吗,或者你不能像那样将字符串存储在 char 数组中吗?

最佳答案

将大括号放在 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;
        }
}

关于C 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24717521/

相关文章:

c++ - 使用 std::count 计算字符串 vector 中特定字符的数量 (C++)

c - 不兼容的 C 指针加上结构采用的 seg 错误

c - 为什么在打印特定范围的素数后会得到内存位置值?

c - 使用 C 查找元素是否在数组中(语法问题)

python - 将 Pandas 数据帧的行映射到 numpy 数组

php - 在 PHP 中将一个键分离两个数组值并插入到数据库

c - 用空字符串初始化字符串

javascript - 有没有办法使用命令行将字符串传递给 html javascript?

c - C 中的内存泄漏是什么?

c - 如何将数据存储在动态结构数组中?