繁体   English   中英

为什么我的代码中出现“分段错误”错误?

[英]Why am I getting a 'Segmentation Fault' error in my code?

我有这段代码来检查 C 中的回文:

#include <stdio.h>

int main(void) {
    char* test="racecar";
    Palindrome(test, 7);
}

int Palindrome(char mystr[], int len){
    if(len<2)
        printf("Palindrome");
    else if (mystr[0]==mystr[len-1]){
        char* newstr;
        int i=0;
        int j=1;
        while(j<len-1){
            newstr[i]=mystr[j];
            i++;
            j++;
        }
        printf("%s", newstr);
        return Palindrome(newstr, len-2);
    }
    else
        printf("Not palindrome");
}

但我收到此错误:分段错误(核心已转储)

为什么是这样?

  1. char *newstr未初始化,当您引用它时会导致您的段错误。
  2. 当您声明 function 时返回一个 int。
  3. (建议)用\n终止行是个好主意。

您构建代码的方式我认为您正在使用递归算法:

#include <stdio.h>
#include <string.h>

int Palindrome(char mystr[], size_t len) {
    if(len < 2) {
        printf("Palindrome\n");
        return 1;
    }
    if(mystr[0] != mystr[len-1])
        printf("Not palindrome\n");
        return 0;
    }
    return Palindrome(mystr + 1, len - 2);
}

int main(void) {
    char *test = "racecar";
    Palindrome(test, strlen(test));
}

对应的output为:

Palindrome

这是我编写迭代版本的方式:

int Palindrome(char mystr[], int len){
    for(; len > 1; mystr++, len -= 2) {
        if(*mystr != mystr[len - 1]) {
            printf("Not palindrome\n");
            return 0;
        }
    }
    printf("Palindrome\n");
    return 1;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM