2017-10-14 59 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