【问题标题】:change string to point to next character in function将字符串更改为指向函数中的下一个字符
【发布时间】:2016-07-10 11:59:33
【问题描述】:
#include <stdio.h>


void change(char *str)
{
    (*str++);
    return;
}

int main()
{
    char *str = "ABC";
    printf("before change %s \n",str);
    change(str);
    printf("after change %s \n",str);
    return 0;
}

程序的输出是

ABC
ABC

我希望输出是

ABC
BC

我不想返回字符串,str需要在change函数中修改;更改函数的返回类型应保持无效。我不知道该怎么做。

我确实尝试谷歌它,但我没有找到解决方案。

【问题讨论】:

  • 您正在传递指针按值,这意味着change 函数内的局部变量str 是原始的副本指针。更改副本不会更改原件。要么返回新指针,要么搜索并阅读关于在 C 中模拟通过引用传递
  • 我只是按值和按引用搜索指针,清除了很多关于双指针的疑问。感谢您的评论。

标签: c string


【解决方案1】:

在 C 语言中,如果您想将参数的值更改为函数,则需要通过指针获取该参数。既然你在这里试图改变一个指针,它需要是一个指向指针的指针:

void change(char **str)
{
    (*str)++;
}

然后:

change(&str);

【讨论】:

    【解决方案2】:

    表达式(*str++); 递增str 的本地副本,而不是main 中的str。这是因为 C 对函数参数使用了传值技术。

    您需要更改您的函数以获取指向指针的指针,并将指针传递给str 以达到预期的效果。

    【讨论】:

      【解决方案3】:

      正如我们在 C 中一样,您是否需要一个指向指针的指针。

      void change(char **str) 
      {
          *str = *str + 1;
      }
      

      然后

      int main()
      {
          char *str = "ABC";
          printf("before change %s \n",str);
          change(&str);
          printf("after change %s \n",str);
          return 0;
      }
      

      https://ideone.com/Ouo19v

      【讨论】:

      • "双指针" 可能会引起混淆,人们可能会认为它是指向double 的指针。我建议改用“指向指针的指针”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 2011-02-19
      • 2010-11-16
      相关资源
      最近更新 更多