2017-07-18 110 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作为参数。