字符串数组计数

时间:2015-04-17 09:32:33

标签: c

下面是我的代码。我知道这是一个非常简单的问题,但我不知道为什么这段代码不起作用。我只是想计算我的数组中的字符串数,但它总是显示我的计数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.任何帮助都会感激不尽。

2 个答案:

答案 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