2017-07-18 106 views
-2

我想知道爲什麼此代碼與char tab[100]正常工作,但如果我使用char *tab不起作用? fgets函數需要一個char*數組作爲參數嗎?調用函數時char數組[100]和char *數組之間的區別?

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

Int Palindrome(char* str, int i, int j); 

int main() 
{ 
    char tab[100]; 
    printf("Enter your string : \n"); 
    fgets(tab, 100, stdin); 
    int j = strlen(tab); 
    printf("%d\n", Palindrome(tab, 0, j - 2)); 
    return 0; 
} 

int Palindrome(char* str, int i, int j) 
{ 
    if (i >= j) 
    { 
     printf("My word is a Palindrome !\n"); 
     return printf("<(^w^)>\n"); 
    } 
    else if (str[i] != str[j]) 
    { 
     printf("My word is not a Palindrome !\n"); 
     return printf("<(X.X)>\n"); 
    } 
    else 
    { 
     return Palindrome(str, i + 1, j - 1); 
    } 
} 
+3

那是'char tab' thingy? –

+4

它將與'char * tab = malloc(100);' –

+1

「不起作用」如何?你得到了什麼錯誤?這個'char * tab'聲明在哪裏?你有沒有打擾過爲它分配內存?花更多的精力來問一個可用的問題。 –

回答

7

「不工作」你可能意味着你得到了一些嚴重的錯誤報告像分段錯誤。

char tab[100]char *tab之間的區別在於第一個存儲已分配,第二個沒有分配。當你用一個數組作爲參數調用一個函數時,編譯器會傳遞一個指向數組第一個元素的指針,所以對於被調用的函數來說,它看不到使用數組參數調用的函數或者用指針參數。

所以讓與char *tab;你的程序工作,你必須先分配存儲到這個指針,如與char *tab=malloc(100);現在有分配的有效存儲(和指針現在指向它),你可以調用函數與此tab作爲參數。

相關問題