【问题标题】:C Segmentation Fault ErrorC 分段错误错误
【发布时间】:2014-07-12 21:33:07
【问题描述】:

我目前正在编写一个程序,其目的是将字符串数组发送到函数,然后该函数将对数组进行冒泡排序,将数组中较短的字符串移动到前面并移动后面的字符串较长,因此预期的输出应该是"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() 子句之后有一个卷曲,并在其他两个关闭子句之间有一个匹配的卷曲。
  • 构建调试版本(将-g标志添加到gcc)并在调试器中运行。调试器将在崩溃发生的地方停止,并让您检查调用堆栈。如果崩溃不在您的代码中,您可以向上遍历堆栈,直到到达您的代码,然后您可以检查变量的值。至少编辑您的问题以包含来自调试器的调用堆栈。

标签: c arrays string segmentation-fault


【解决方案1】:

在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;
        }
}

【讨论】:

    猜你喜欢
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多