在C中传递和修改char指针之间的混淆(引用与值)

Nic*_*ick 2 c string pointers pass-by-reference

我想知道你是否可以帮我解决C字符串问题,我不太明白.我有一个函数,我发送3个char指针.在此函数中,char指针被正确移位和修改.但是,当我返回到调用它们的main函数时,所述函数不会改变.我的价值是错误吗?这是我的代码示例:

int main(void) 
{ 
    LPSTR path = (char*)malloc(strlen(START_PATH));

    strcpy( path, START_PATH );

    char* newstr = (char*)malloc(PATH_SIZE);

    TrimVal(path, "*.*", newstr);

    //Do Stuff

    return 0;
}

void TrimVal(char* modify, char* string, char* newstr)
{ 
      newstr[0] = '\0';

      modify = strncat(newstr, modify, (strlen(modify) - strlen(string)));

      return;
}      
Run Code Online (Sandbox Code Playgroud)

注意:假设PATH_SIZE是一个大小值,并且START_PATH是一个char数组

Sal*_*gar 6

这样做

 modify = strncat(newstr, modify, (strlen(modify) - strlen(string)));
Run Code Online (Sandbox Code Playgroud)

您正在修改指针,而不是指针指向的指针.

当你传递path给TrimVal.它将传入path例如0x12345 的存储位置

当你这样做时modify =,将局部变量更改modify为新的内存位置,例如0x54321

当你返回main时,它只有一个指向0x12345的指针,当它看到那里时,没有任何改变.

您可以轻松解决问题

{ 
...
TrimVal(&path, "*.*", newstr);
... 
}

void TrimVal(char** modify, char* string, char* newstr)
{ 

      newstr[0] = '\0';

      *modify = strncat(newstr, *modify, (strlen(*modify) - strlen(string)));

      return;

}    
Run Code Online (Sandbox Code Playgroud)