簡體   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