2014-09-10 40 views
0

我需要檢查一個像'Hello'這樣的數組,並檢查終止元素是什麼時候,然後返回一個新行。我一直在嘗試這樣的代碼:如何檢查數組元素是否爲終止元素並返回新行?

char * my_strchr(const char * string, int ch) 
{ 
    int count; 
    int length = strlen(string); 

    for(count = 0; count < length; count++) 
    { 
    if(string[count] == '\0') 
    { 
     return '\n' ; 
    } 
    } 

我的編譯器不喜歡當我使用這些出於某種原因。在函數聲明爲字符串,它讀取const char * string

+0

當你說你的「編譯器不喜歡」這個 - 什麼是實際的錯誤信息? – 2014-09-10 22:14:19

+0

返回使得整型指針沒有強制轉換 – 2014-09-10 22:20:15

+0

'string [count] =='\ 0'':在'count BLUEPIXY 2014-09-10 22:20:47

回答

0

strlen函數返回字符串的長度沒有NULL終止。這意味着你的函數不返回指針,因爲你的代碼永遠不會達到條件string[count] == '\0'

此外,即使您確實達到了該條件,您將返回一個char,而不是char *,這是一個錯誤。您的功能同意返回char *,因此需要返回某種char *,即使它指向NULL

它也不清楚你的函數代碼,因爲它沒有終止括號,但你的函數可能永遠不會返回任何東西。

0

從你的描述猜測的種類,但也許是這樣的?

char * my_strchr(const char * string, int ch) { 

    int i; 
    int c; 

    for (i = 0; (c = string[i]) != '\0'; ++i) { 
     if (c == ch) return string + i;   /* aka &string[i] */ 
    } 
    return "\n";  /* got to the end w/o finding ch in string */ 
} 
0
char *my_strchr(const char *string, int ch){ 
    if(*string == '\0') 
     putchar('\n');//side effect 
    while(*string){ 
     if(*string == ch) 
      return (char*)string; 
     ++string; 
    } 
    return *string == ch ? (char*)string : NULL; 
} 
+0

是的,但如果OP的問題沒有解釋根本原因。 – 2014-09-10 23:57:51

+0

@FelixFrank評論已經在OP的問題上。 – BLUEPIXY 2014-09-11 00:02:16