2015-10-14 29 views
1
#include <stdio.h> 
#include <stdlib.h> 


int countArrayChars(char *strArray[]){ 
    int i=0; 
    while (strArray[i] != '\0'){ 
     i++; 
    } 
    printf("%d\n", i); 
    return i; 
} 

int main(int argc, const char * argv[]) { 
    char *dog[] = {"dog"}; 
    countArrayChars(dog); 

由於某種原因,它會打印「5」。當在c中排列數組時出現錯誤答案

不應該打印3嗎? 我甚至試圖在「g」後加\ 0。

+0

- >'而(strArray [0] [i]!='\ 0'){' – BLUEPIXY

+0

or'char dog [] = {「dog」};''count'ArrayChars(char strArray []){' – BLUEPIXY

+1

就像BLUEPIXY所說的那樣,strArray是一個字符串數組,因此strArray [0]是指向數組中第一個字符串的指針,strArray [1]不存在。你迭代的是指向字符串的指針地址中的字節。 –

回答

1

您聲明字符串數組,並與dog初始化。

char *dog[] = {"dog"}; 

其實它表示爲

dog[0] = "Dog";  //In your case only element index with 0. 
............... 
............... 
dog[n] = "tiger"; //If there Have n+1 element 

因此您的數組大小爲1。持有常量字符串dog。要訪問它,你應該使用dog[0]

因此,沒有改動較小,您可以使用您的代碼爲:

int countArrayChars(char *strArray[]) 
{ 
    int i=0; 
    while (strArray[0][i] != '\0') 
    { 
     i++; 
    } 
    printf("%d\n", i); 
    return i; 
} 

int main(int argc, const char * argv[]) 
{ 
    char *dog[] = {"dog"}; 
    countArrayChars(dog); 
} 

或者,如果你要聲明一個字符串中使用

char *dog = "dog"; 

char dog[] = "dog"; 
0

請試試這個

#include <stdio.h> 
#include <stdlib.h> 


int countArrayChars(char *strArray){ 
    int i=0; 
    while (strArray[i] != '\0'){ 
     i++; 
    } 
    printf("%d\n", i); 
    return i; 
} 

int main(int argc, const char * argv[]) { 
    char *dog[] = "dog"; 
    countArrayChars(dog); 
    } 
+2

你的代碼甚至沒有編譯http://ideone.com/FKsOXV – ashiquzzaman33

+0

對不起,它編譯並運行並給出3. – BobRun

+0

你可以嘗試一個C編譯器嗎?這就是我正在使用的,而不是C++ – BobRun