2017-10-14 58 views
0

簡單的編程只是替換字符數組的一封信努力學習指針來代替焦炭。不知道是什麼問題,我只是得到輸出「senrence」 也許我宣佈一個字符串或者是我的指針邏輯錯了嗎?使用指針在字符數組

void replace(char *s,char *ptr_r,char *ptr_t); 

int main() 

{ 

    char s[] = "senrence"; 
    char ch ='r'; 
    char replacer = 't'; 
    char *ptr_r = &ch; 
    char *ptr_t = &replacer; 

    replace(s,ptr_r,ptr_t); 

    int i; 

    for(i=0;i<8;i++) 
    { 
     printf("%c",s[i]); 
    } 

    return 0; 

} 


void replace(char *s,char *ptr_r,char *ptr_t) 

{ 

    char *p; 

    for(p=s;*p != '\0';p++) 
    { 
     if(*p==*ptr_r) 
      *(ptr_t) = *(p); 
    } 

    s= '\0'; 

} 
+2

在'replace()'中嘗試'* p = * ptr_t'。 –

+0

工作正常!非常感謝你!! – John

+1

順便說一句's ='\ 0';'沒有必要(這沒有意義)。對於'ch'和'replacer',爲什麼你需要將參數作爲一個指針? – BLUEPIXY

回答

0

你的任務是錯誤的:

void replace(char *s,char *ptr_r,char *ptr_t) 

{ 

char *p; 

    for(p=s;*p != '\0';p++) 
    { 
     if(*p==*ptr_r) 
      *(p)=*(ptr_t); //modified line 
    } 
} 

編輯:

  • 我已經去除了不必要的s='\0';

  • 您可以使用puts(s)打印char[]而不是通過循環迭代它 。只是一個建議,可以節省您編寫代碼 for循環。

  • 從給定的代碼,我知道你正在試圖學習 指針的概念。因此,我不建議你做同樣的任務char variablescall by value,而不是使用pointers (call by reference)用。

+0

您可以評論或更正其他問題嗎?或者你會寫下你寫的內容嗎? –

+0

回答您的其他評論,你不需要S =「\ 0」因爲你沒有在字符串添加任何字符。你只是替換角色。所以不需要。 –

+0

啊好的,再次感謝。 – John