C:char *不可修改

时间:2017-04-02 01:34:23

标签: c arrays char

我在我的代码中编写了一个非常基本的修剪函数:

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”。

需要社区的帮助。真的很感激!!!

2 个答案:

答案 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值后起作用。