H5W3
当前位置:H5W3 > 其他技术问题 > 正文

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

#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 = ' ') {

本文地址:H5W3 » 三个指针的值,为什么会一一起改变,有什么办法可以不改变吗?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址