函数中的指针改变地址但在它之外指向0x0

时间:2016-10-31 14:50:46

标签: c function pointers null

我有一个文件function.c和main.c.在function.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查看src是否指向新地址返回相同的东西时,它工作。 问题出现在main.c中,我称之为GetRow

char* pointer;
int file=open("prova.conf",O_RDWR);
GetRow(file,pointer);
printf("%s",pointer);

当我使用printf itprint null时。 使用gdb然后调用GetRow我明白指针指向0x0,所以请任何人可以告诉和解释我的问题??谢谢,请原谅我的英语。

1 个答案:

答案 0 :(得分:2)

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

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