2015-04-17 88 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