C 函数中的指针更改了地址,但超出了地址的点0x0

C 函数中的指针更改了地址,但超出了地址的点0x0,c,function,pointers,null,C,Function,Pointers,Null,我有一个文件函数.c和main.c。在函数c中有一个 作用 int GetRow(int descriptor,char* src) { char app[1]; char* carattere= (char*)malloc(sizeof(char)); int count=0; int capp=0; while((capp=read(descriptor,app,sizeof(char)))>0 &&app[0]

我有一个文件函数.c和main.c。在函数c中有一个 作用

int GetRow(int descriptor,char* src)
{
    char app[1];
    char* carattere= (char*)malloc(sizeof(char));
    int count=0;
    int capp=0;

    while((capp=read(descriptor,app,sizeof(char)))>0
        &&app[0]!=';')
    {
        if(app[0]!='\n')
        {
            carattere[count]=app[0];
            carattere=(char*)realloc(carattere,sizeof(char)*(++count +1));
        }
    }
    src=carattere;
    if(capp<0)
    {
        return -1;
    };
    #define DEBUG
    #ifdef DEBUG
    printf("The line Detected was %s %s\n",carattere,src);
    #endif

}
因为当我使用printf itprint null时。
使用gdb然后调用GetRow我知道指针指向0x0,所以请任何人告诉我并解释我的问题??谢谢并原谅我的英语。

您仍然按值传递char*src。如果要更改指针的值,需要向其传递引用。使用char**src并设置*src=carattere


传递指针并不意味着必须通过引用传递。如果在main中malloc memory for src,然后将引用传递给该内存(因为您有char*src),您可以通过*src=*caratter更改该引用处的值,但这可能不是您想要的。

您仍然通过值传递char*src。如果要更改指针的值,需要向其传递引用。使用char**src并设置*src=carattere


传递指针并不意味着必须通过引用传递。如果在main中malloc memory for src,然后将引用传递给该内存(因为您有char*src),您可以通过*src=*carattere更改该引用处的值,但这可能不是您想要的。

。这需要很多。将签名更改为
intgetrow(intdescriptor,char**src)
,将指针传递给指针,并相应地更改其余代码。更改函数内输入参数的值,不影响函数外此参数的值。@dasblinkenlight请您向我解释原因好吗?这是一个很大的问题。将签名更改为
int GetRow(int descriptor,char**src)
,将指针传递给指针,并相应地更改其余代码。更改函数内输入参数的值不会对函数外此参数的值产生影响。@dasblinkenlight请向我解释原因好吗?
char* pointer;
int file=open("prova.conf",O_RDWR);
GetRow(file,pointer);
printf("%s",pointer);