我在我的代码中编写了一个非常基本的修剪函数:
void trim(char a[]){
if (a[0] == 'a')
{
a += 4;
}else{
a += 5;
}
}
int main(){
char a[] = "add abc";
char* b = "find abc";
trim(a);
trim(b);
printf("a=%s, b=%s\n", a,b);
}
对于trim函数,它应该只为a和b返回“abc”。我检查了gdb,trim(a)在trim功能内完美运行。在修剪功能结束时,a指向“abc”。然而,当它返回到main函数时,a再次成为“add abc”。
需要社区的帮助。真的很感激!!!
答案 0 :(得分:4)
a
按值传递给trim
,因此在函数返回后它的值会丢失。通过引用传递它(指向数组的指针或指向指针的指针)以保留调用程序中的值。
答案 1 :(得分:1)
char* trim(char* a){
if (a[0] == 'a')
{
a += 4;
}else{
a += 5;
}
return a;
}
int main(){
char a[] = "add abc";
char* b = "find abc";
char* c = trim(a);
char* d = trim(b);
printf("a=%s, b=%s\n", c,d);
}
这将在我更改修剪的返回类型并使用两个新指针捕获main函数中的retuen值后起作用。