三个指针的值,为什么会一一起改变,有什么办法可以不改变吗?
#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








