如何编写一个函数来永久更改传递的字符串

use*_*033 4 c string function

如果我有char* str;如何编写一个接受str并可以进行更改的函数,str那么在函数返回后更改仍然存在?

我所拥有的是:

char *str = (char *) malloc(10);
sprintf(str, "%s", "123456789");
//str points to 1
move_ptr(&str);
//str points to 2

void move_ptr(char** str)
{
    *str++;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

unw*_*ind 14

只需通过指针访问数据,在函数中:

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

void change_string(char *str)
{
  size_t i;

  /* As an example, make it all upper case. */
  for(i = 0; str[i]; ++i)
    str[i] = toupper(str[i]);
}

int main(void)
{
  char buffer[32];
  char *str = buffer;

  strcpy(str, "test string");
  change_string(str);
  printf("it's now %s\n", str);

  return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

想想看,你会发现标准strcpy()功能完全属于你描述的类别.这是C中非常常见的操作.

更新:问题已被重写,现在似乎更多的是更改指针本身,而不是数据.也许这就是一直以来的意思,但我不明白.

问题的解决方案很好,但我个人觉得如果可能的话,使用返回值会更方便:

char * change_pointer(char *str)
{
  return str + 1;
}

int main(void)
{
  char *str = "test string";

  printf("now '%s'\n", str);
  str = change_pointer(str);
  printf("now '%s'\n", str);
  return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

指针当然也可以是const-declared,并且如果不需要对缓冲文本进行更改则应该是.declared .