2017-10-20 136 views
-1

我想做一個程序,檢查輸入的字符串是否是迴文或使用遞歸。這是下面的代碼。通過char *指針傳遞段錯誤

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

int isPalindrome(char* s, int i, int j) { 
    if (i >= j) 
     return 1; 

    if (s[i] != s[j]) 
     return 0; 

    return isPalindrome(s, i+1, j-1); 
} 

int main() { 

    char* word; 
    printf("Enter a word \n"); 
    scanf("%s", word); 

    if (isPalindrome(word, 0, strlen(word) - 1)) 
     printf("Palindrome \n"); 
    else 
     printf("Not Palindrome \n"); 

    return 0; 
} 

程序似乎給出由函數isPalindrome()引起的段錯誤。我的代碼在哪裏出錯?

謝謝。

+6

'的scanf( 「%S」 字);'調用*未定義的行爲* - 你需要初始化指針'word'來首先指向有效的(和足夠的)內存 – UnholySheep

+0

你還沒有爲'word'分配內存 - 它只是一個指針。 –

+0

表示沒有爲「word」分配內存,您可以將其改爲例如'char word [80];' – macroland

回答

0

當你有一個字符指針,你應該要麼已分配另一個字符串,使其指向

或者你直接將字符串動態分配空間。

你的代碼的工作,如果你的malloc一些空間

char *word = malloc(20); 

或者你可以創建一個字符串

char word[20]; 
+0

這工作!非常感謝。 – AribAlam