调用函数时char数组[100]和char *数组之间的区别?

时间:2017-07-18 09:36:38

标签: c arrays pointers recursion palindrome

我想知道为什么此代码可以与char tab[100]一起正常使用,但如果我使用char *tab则无法正常工作? fgets函数将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);
    }
}

1 个答案:

答案 0 :(得分:7)

“不工作”可能意味着您会收到一些严重的错误报告,例如分段错误。

char tab[100]char *tab之间的区别在于第一个分配了存储空间而第二个没有分配存储空间。当您使用数组作为参数调用函数时,编译器会将指针传递给数组的第一个元素,因此对于被调用的函数,它不会看到是否使用数组参数调用它或使用指针参数。

因此,为了让你的程序与char *tab;一起工作,你必须首先为这个指针分配存储,例如使用char *tab=malloc(100);现在已经分配了有效存储(并且指针现在指向它),你可以使用此tab作为参数调用您的函数。