#include
#include
#include
int main()
{
int i,k;
char st[] = "asdfghjkl";
char *p = &st[0] ;
k = strlen(st);
while(*p!='\0')
{
printf("p = %c\n",*p);
*p++;
}
printf("\n");
printf("123%c123\n",*p);
p = NULL;
p = &st[0];
for(i = 0;i<=k;i++)
{
printf("%c\n",p[i]);
}
return 0 ;
}
如果把p=NULL;
p = &st[0];
删除之后后面的输出就会成为乱码,这个怎么解决?
因为在你的while()循环里面p已经移动了,现在p指向了‘\0’的位置。所以在你的 printf("123%c123\n",*p)这一句实际上输出的是空字符,也就是''\0'
必须将p的指向重新指向字符串的起始地址 ,才能进行for()语句的输出,即需要添加p=stu。也就是你所写的p=&stu[0]
p = &st[0];
的作用就是把p指向字符串第一个位置;
你把它删了,p,就指向st字符串后的地址位置;
而这些位置内容是不确定的[如果你去调试,会发现是p的定义];
对于printf来说,它不是合法的字符,显示为乱码。
这个删了除非你不再用p来输出,否则乱码是正常的,应为你在前面已经移动指针到末尾了。