c - 小功能段错误

标签 c sorting segmentation-fault

我一直在这个上遇到段错误,有人知道原因吗?

void str_sort(char s[]) {
    int i, j;
    char c;

    for (i = strlen(s) - 1; i > 0; i--)
        for (j = 0; j < i; j++)
            if (*(s+j) > *(s+j+1)) {
                c = *(s+j);
                *(s+j) = *(s+j+1);
                *(s+j+1) = c;
            }
    return;
}

最佳答案

字符串文字存储在不允许修改的内存区域中。如果您创建一个数组来存储字符串,它应该可以正常工作(假设您的函数是正确的,乍一看是这样的):

int main()
{
    char str[] = "PC-spiel";
    str_sort(str);
    return 0;
}

不同之处在于像 "PC-spiel" 这样的字符串文字是指向不可修改常量的指针。但是字符串 str 像普通数组/变量一样位于堆栈上,并在运行时获取复制到其中的值 "PC-spiel"

关于c - 小功能段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35873727/

相关文章:

arrays - 如何按字典 Swift 中包含的数组值对字典进行排序

c - malloc 结构指针抛出段错误(核心已转储)

C/Fortran 混合代码以一种奇怪的方式使用 MPI/ScaLAPACK 段错误

c - SIMD 与 Altivec : why is multiplying two vectors faster than adding two vectors?

C程序打印自己的地址空间?

CUDA:是否保证合并对全局内存的连续字节的半扭曲访问?

c - 如何通过 C 中的递归排列来更改叶位置字符串?

java - 如何从时间戳列表中获取开始和结束范围?

php - 如何找到多维数组中第一个具有特定值的元素?

c - 初始化数组时出现段错误