A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Dmajor 于 2014-4-19 10:22 编辑
  1. {
  2.     char s[]="hello";
  3.     char *pstr=s;
  4.     char ah[]="World";
  5.     char *pah=ah;
  6.     while((*pstr=*pah)!='\0')
  7.     {
  8.          pstr++;
  9.          pah++;

  10.     }
  11.     printf("%s\n",pstr);
  12. }  
复制代码

想通过指针把s值改为“world”。 我这样写错在哪呀?谢谢

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

6 个回复

正序浏览
Dmajor 中级黑马 2014-4-19 10:21:10
7#

多谢啊,知道哪出问题了
回复 使用道具 举报
为什么并不while((*pstr++=*pah++)!='\0')呢?求加技术分啊
回复 使用道具 举报
直接
  1. char s[]="hello";
  2.     char *pstr=s;
  3.     pstr="World";
  4.     while(*pstr!='\0')
  5.     {         
  6.                 printf("%c",*pstr);
  7.                 pstr++;
  8.     }
  9.     printf("\n");
  10.         return 0;
复制代码
不就好了!
额 如果你坚持自己那种,那就改成这样
  1.     char s[]="hello";
  2.     char *pstr=s;
  3.     char ah[]="World";
  4.     char *pah=ah;
  5.     while((*pstr=*pah)!='\0')
  6.     {
  7.             printf("%c",*pstr);
  8.          pstr++;
  9.          pah++;
  10.     }
  11.     printf("\n");
  12.     return 0;
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 戴文婷 于 2014-4-18 22:37 编辑

    while((*pstr=*pah)!='\0') // 是在不明白这里是要判断什么。
    {
         pstr++;
         pah++;

    }

附上个人的做法,以及注释
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(int argc, const char * argv[])
  4. {
  5.    
  6.     char s[]="hello";
  7.     char *pstr=s;// 字符串中,s是字符串的首地址直接复制给指针pstr
  8.     char ah[]="World";
  9.     char *pah=ah;// 同上
  10.    
  11.     printf("执行循环之前:pstr=%s\n",pstr);
  12.     printf("执行循环之前:pah=%s\n",pah);
  13.    
  14.     int i=0;
  15.     unsigned long str_len= strlen(ah);
  16.     printf("ah字符串的长度len=%ld\n",str_len);

  17.     while(1)// 一直保持循环
  18.     {
  19.         
  20.         pstr[i]=pah[i];// pstr储存的就是s,字符串中可以直降把pstr当s用。
  21.         i++;

  22.         if(i>str_len){// ,直到代表字符串数组下标i超过,字符串长度
  23.             break;
  24.         }
  25.     }
  26.     printf("执行循环之后:pstr=%s\n",pstr);
  27.     printf("执行循环之后:pah=%s\n",pah);
  28.    
  29.     return 0;
  30. }
复制代码


啊,刚重新看了下,明白  while((*pstr=*pah)!='\0') 是什么意思了。

就像2楼这样改。因为循环到最后pstr这个指针,已经指到,s[]的\0字符了。这时打印pstr指向的字符串,输出就是没有东西了。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
想通过指针改变s,直接
pstr = pah;  不就得了么
  1. while((*pstr=*pah)!='\0')
  2.     {
  3.          pstr++;
  4.          pah++;

  5.     }
复制代码

pstr++每执行一次就会改变一次,知道pstr指向的值为“”
回复 使用道具 举报
  1. int main()
  2. {

  3.         char s[]="hello";
  4.         char *pstr=s;
  5.         char ah[]="World";
  6.         char *pah=ah;
  7.         char *p = pstr; // 保存pstr的指向
  8.         while((*pstr=*pah)!='\0')
  9.         {
  10.             pstr++; // pstr 指向改变
  11.             pah++;
  12.             
  13.         }
  14.         printf("%s\n",p);

  15. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马