如果我有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 .