三个指针的值,为什么会一一起改变,有什么办法可以不改变吗?

#include<stdio.h>

char replaceblank(char s[]);

char replaceblank(char *s) {

char *ret = s;

char *rett = s;

int oldsize = 0;

int newsize = 0;

while (*ret!= '\0')

{

++oldsize;

if (*ret = ' ') {

newsize += 2;

}

else {

++newsize;

}

ret++;

}

printf("%d\n", oldsize);

printf("%d\n", newsize);

int indexofold = oldsize;

int indexofnew = newsize;

char *r;

rett = s + oldsize - 1;

r = s + newsize - 1;

while (rett!=r)

{

if (*rett == ' ')

{

*r-- = '0';

*r-- = '2';

*r-- = '%';

}

else {

*r--= *rett--;

}

}

return s;

}

void main() {

char s[] = "we are";

printf("%s\n", s);

printf("%s\n", replaceblank(s));

}

上面是我的程序,主要是s,rett,ret这三个指针变量的值,在执行下面这段程序前,值是 we re:

while (*ret!= '\0')

{

++oldsize;

if (*ret = ' ') {

newsize += 2;

}

else {

++newsize;

}

ret++;

这个循环执行第一次后,三个值一起变成 e are;

图片描述

求解答

这里由别人的另一段程序,他的指就不会改变:

#include <stdio.h>  

#include <assert.h>

char* replace(char* p)

{

char* ret = p;

char* q = p;

int num = 0;

int oldlen = 0;

int newlen = 0;

char* r;

assert(p != NULL);

while (*p != '\0')

{

if (*p == ' ')

{

num++;

}

oldlen++;

p++;

}

p = q;

newlen = oldlen + 2 * num;

q = p + oldlen - 1;

r = p + newlen - 1;

while (q != r)

{

if (*q == ' ')

{

*r-- = '0';

*r-- = '2';

*r-- = '%';

}

else

{

*r = *q;

r--;

}

q--;

}

return ret;

}

int main()

{

char p[20] = "we are happy.";

printf("原字符串是:%s\n", p);

printf("替换后的字符串是:%s %s\n", replace(p),p);

return 0;

}

*/

回答:

打开你的编译器警告或者提高你的编译器的警告等级,然后把警告基本改正,就不会出现这个问题了。。

回答:

请反复看下面这句话:

if (*ret = ' ') {

以上是 三个指针的值,为什么会一一起改变,有什么办法可以不改变吗? 的全部内容, 来源链接: utcz.com/p/195197.html

回到顶部