我想知道为什么此代码可以与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);
}
}
答案 0 :(得分:7)
“不工作”可能意味着您会收到一些严重的错误报告,例如分段错误。
char tab[100]
和char *tab
之间的区别在于第一个分配了存储空间而第二个没有分配存储空间。当您使用数组作为参数调用函数时,编译器会将指针传递给数组的第一个元素,因此对于被调用的函数,它不会看到是否使用数组参数调用它或使用指针参数。
因此,为了让你的程序与char *tab;
一起工作,你必须首先为这个指针分配存储,例如使用char *tab=malloc(100);
现在已经分配了有效存储(并且指针现在指向它),你可以使用此tab
作为参数调用您的函数。