的指針我有一個問題的指針**焦炭
char** color;
我需要做的
*color;
價值的副本,因爲我需要傳遞*顏色的功能,但值將被修改,我無法修改原始值。
你會怎麼做?
整個代碼看起來像這樣
Function1(char** color)
{
Function2(char * color);
return;
}
我不得不提的是,在功能1和2的指針被用作返回值。
的指針我有一個問題的指針**焦炭
char** color;
我需要做的
*color;
價值的副本,因爲我需要傳遞*顏色的功能,但值將被修改,我無法修改原始值。
你會怎麼做?
整個代碼看起來像這樣
Function1(char** color)
{
Function2(char * color);
return;
}
我不得不提的是,在功能1和2的指針被用作返回值。
版本1
functionTwo(const char* color)
{
//do what u want
}
functionOne(char** color)
{
functionTwo(*color);
}
或二版
functionTwo(const char* color)
{
//do what u want
}
functionOne(char** color)
{
char* cpMyPrecious = strdup(*color);
functionTwo(cpMyPrecious);
free(cpMyPreciuos);
}
心連心
馬里奧
我不認爲這是可行的,如果我需要修改它在函數2中。 – DogDog 2010-10-13 13:51:57
然後你去版本2,從constcntionTwo刪除常量,並且不釋放cpMyPresious。按照您的想法使用它 - 一旦完成,就釋放它! – 2010-10-13 18:47:17
我會建議使用strncpy()來複制該值。你指向的字符串只在內存中一次,使另一個指針不能解決你的問題。
假設你沒有strdup()
用(這不是標準庫的一部分) ,你會做這樣的事情:
#include <stdlib.h>
#include <string.h>
...
void function1(char **color)
{
char *colorDup = malloc(strlen(*color) + 1);
if (colorDup)
{
strcpy(colorDup, *color);
function2(colorDup);
/*
** do other stuff with now-modified colorDup here
*/
free(colorDup);
}
}
我認爲「Char **」應該是「char **」? – andrewmu 2010-10-13 13:05:44