2015-04-17 59 views
1

下面是我的代码。我知道它是一个非常简单的问题,但我不知道为什么这个代码不工作。我只是想数清我数组,但它总是向我展示计数上面的代码1.String Array Count

#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

当一个数组作为参数传递给函数时,它会隐式转换为指向其第一个元素的指针。

因此,这三个函数声明是等效

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

你应该要么声明第二个参数将包含数组中元素的数量,或者使用一些标记值,例如NULL作为函数内数组的最后一个元素,用于通过使用此标记来确定元素的数量。

下面是证明这两种方法

#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; 
} 

这里是前哨一个工作示例

#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 
+0

这是允许在我的代码'while(input1 [i]!= NULL){一些逻辑;我++;}'? –

+0

@GS Abhaypal是的,你可以检查下一个值是否是哨兵。:) –

+0

这就是我得到的'BhartiBharatAkasÀÁo·àÃo·p°o·d°o·d°o'',:/我想它会去在无限循环中,并在实际值之后添加垃圾值。 –

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; 
} 

数组衰变为指针的方法,因此你无法计算大小的功能里面 - 而传递函数调用的大小。

+0

其实在功能'PalindromeLengthPuzzle()'我不想传递任何东西。还有其他的选择吗? –

+1

然后让变量'sarray' Global。 – Sadique