黑马程序员技术交流社区
标题:
通过指针把 s 值改为“world”。 我这样写错在哪呀?
[打印本页]
作者:
Dmajor
时间:
2014-4-18 20:13
标题:
通过指针把 s 值改为“world”。 我这样写错在哪呀?
本帖最后由 Dmajor 于 2014-4-19 10:22 编辑
{
char s[]="hello";
char *pstr=s;
char ah[]="World";
char *pah=ah;
while((*pstr=*pah)!='\0')
{
pstr++;
pah++;
}
printf("%s\n",pstr);
}
复制代码
想通过指针把s值改为“world”。 我这样写错在哪呀?谢谢
作者:
Er01c
时间:
2014-4-18 20:49
int main()
{
char s[]="hello";
char *pstr=s;
char ah[]="World";
char *pah=ah;
char *p = pstr; // 保存pstr的指向
while((*pstr=*pah)!='\0')
{
pstr++; // pstr 指向改变
pah++;
}
printf("%s\n",p);
}
复制代码
作者:
李烨
时间:
2014-4-18 21:11
想通过指针改变s,直接
pstr = pah; 不就得了么
while((*pstr=*pah)!='\0')
{
pstr++;
pah++;
}
复制代码
pstr++每执行一次就会改变一次,知道pstr指向的值为“”
作者:
戴文婷
时间:
2014-4-18 22:18
本帖最后由 戴文婷 于 2014-4-18 22:37 编辑
while((*pstr=*pah)!='\0') // 是在不明白这里是要判断什么。
{
pstr++;
pah++;
}
附上个人的做法,以及注释
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[])
{
char s[]="hello";
char *pstr=s;// 字符串中,s是字符串的首地址直接复制给指针pstr
char ah[]="World";
char *pah=ah;// 同上
printf("执行循环之前:pstr=%s\n",pstr);
printf("执行循环之前:pah=%s\n",pah);
int i=0;
unsigned long str_len= strlen(ah);
printf("ah字符串的长度len=%ld\n",str_len);
while(1)// 一直保持循环
{
pstr[i]=pah[i];// pstr储存的就是s,字符串中可以直降把pstr当s用。
i++;
if(i>str_len){// ,直到代表字符串数组下标i超过,字符串长度
break;
}
}
printf("执行循环之后:pstr=%s\n",pstr);
printf("执行循环之后:pah=%s\n",pah);
return 0;
}
复制代码
啊,刚重新看了下,明白 while((*pstr=*pah)!='\0') 是什么意思了。
就像2楼这样改。因为循环到最后pstr这个指针,已经指到,s[]的\0字符了。这时打印pstr指向的字符串,输出就是没有东西了。
作者:
悠悠·漠漠
时间:
2014-4-18 22:29
直接
char s[]="hello";
char *pstr=s;
pstr="World";
while(*pstr!='\0')
{
printf("%c",*pstr);
pstr++;
}
printf("\n");
return 0;
复制代码
不就好了!
额 如果你坚持自己那种,那就改成这样
char s[]="hello";
char *pstr=s;
char ah[]="World";
char *pah=ah;
while((*pstr=*pah)!='\0')
{
printf("%c",*pstr);
pstr++;
pah++;
}
printf("\n");
return 0;
复制代码
作者:
魅影穿眸
时间:
2014-4-18 22:54
为什么并不while((*pstr++=*pah++)!='\0')呢?求加技术分啊
作者:
Dmajor
时间:
2014-4-19 10:21
Er01c 发表于 2014-4-18 20:49
多谢啊,知道哪出问题了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2