下面是我的代码。我知道这是一个非常简单的问题,但我不知道为什么这段代码不起作用。我只是想计算我的数组中的字符串数,但它总是显示我的计数1.
#include<stdio.h>
#include<string.h>
int main()
{
char *str[]={"Bharti","Bharat","Akas"};
int a=PalindromeLengthPuzzle(str);
return 0;
}
int PalindromeLengthPuzzle(char* input1[])
{
//const char *mystr=input1;
int i;
int sarray= sizeof(input1)/sizeof(input1[0]);
printf("%s",input1[0]);
//int sarray=sizeof(mystr)/sizeof(mystr[0]);
//int x=sizeof(mystr[0]);
printf("%d",sarray);
//printf("%s",input1[1]);
/*for( i=0;i<sarray;i++)
{
printf("%s",input1[i]);
}*/
return 0;
}
上述代码的输出为Bharti1
,应为3而不是1.任何帮助都会感激不尽。
答案 0 :(得分:2)
将您的代码更改为:
#include<stdio.h>
#include<string.h>
int main()
{
char *str[]={"Bharti","Bharat","Akas"};
int a=PalindromeLengthPuzzle(str, sizeof(str)/sizeof(str[0]));
return 0;
}
int PalindromeLengthPuzzle(char* input1[], int sarray)
{
//const char *mystr=input1;
int i;
printf("%s",input1[0]);
//int sarray=sizeof(mystr)/sizeof(mystr[0]);
//int x=sizeof(mystr[0]);
printf("%d",sarray);
//printf("%s",input1[1]);
/*for( i=0;i<sarray;i++)
{
printf("%s",input1[i]);
}*/
return 0;
}
数组在方法中衰减为指针,因此无法计算函数内部的大小 - 而是在函数调用中传递大小。
答案 1 :(得分:0)
当数组作为参数传递给函数时,它会隐式转换为指向其第一个元素的指针。
因此这三个函数声明是等价的
int PalindromeLengthPuzzle(char* input1[3]);
int PalindromeLengthPuzzle(char* input1[]);
int PalindromeLengthPuzzle(char** input1);
并声明相同的一个函数。
在函数中,参数是char **
所以陈述
int sarray= sizeof(input1)/sizeof(input1[0]);
相当于
int sarray= sizeof( char ** )/sizeof( char * );
并评估为1。
你应该声明第二个参数,它将包含数组中的元素数量或者我们的一些sentinel值,例如NULL作为数组的最后一个元素,在函数中通过使用此sentinel来确定元素的数量。
以下是两种方法的演示
#include<stdio.h>
#include<string.h>
int PalindromeLengthPuzzle( char* input1[], size_t n )
{
// ...
}
int main()
{
char *str[] = { "Bharti", "Bharat", "Akas" };
int a = PalindromeLengthPuzzle( str , sizeof( str ) / sizeof( *str ) );
return 0;
}
和
#include<stdio.h>
#include<string.h>
int PalindromeLengthPuzzle( char* input1[] )
{
// ...
}
int main()
{
char *str[] = { "Bharti", "Bharat", "Akas", NULL };
int a = PalindromeLengthPuzzle( str );
return 0;
}
这是一个带有sentinel的工作示例
#include <stdio.h>
void PalindromeLengthPuzzle( char* input1[] )
{
while ( *input1 ) puts( *input1++ );
}
int main(void)
{
char *str[] = { "Bharti", "Bharat", "Akas", NULL };
PalindromeLengthPuzzle( str );
return 0;
}
输出
Bharti
Bharat
Akas