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

发布于 2022-09-05 09:27:32 字数 2211 浏览 29 评论 0

#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;
}
*/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

驱逐舰岛风号 2022-09-12 09:27:32

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

只是偏爱你 2022-09-12 09:27:32

请反复看下面这句话:

if (*ret = ' ') {
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文