Problem with pointers and getstring function

Posted by volting on Stack Overflow See other posts from Stack Overflow or by volting
Published on 2010-04-20T20:52:29Z Indexed on 2010/04/20 22:13 UTC
Read the original article Hit count: 226

Filed under:
|

I am trying to write a function to get a string from the uart1. Its for an embedded system so I don't want to use malloc.

The pointer that is passed to the getstring function seems to point to garbage after the gets_e_uart1() is called. I don't use pointers too often so I'm sure it is something really stupid and trivial that Im doing wrong.

Regards, V

int main()
    {   
        char *ptr  = 0;
        while(1)
        {

        gets_e_uart1(ptr, 100);
        puts_uart1(ptr);

    }
        return 0;
}*end main*/ 

//-------------------------------------------------------------------------
//gets a string and echos it
//returns 0 if there is no error

char getstring_e_uart1(char *stringPtr_, const int SIZE_)

{

char buffer_[SIZE_];
stringPtr_ = buffer_;
int start_ = 0, end_ = SIZE_ - 1;
char errorflag = 0;

/*keep geting chars until newline char recieved*/
while((buffer_[start_++] = getchar_uart1())!= 0x0D)
{       
    putchar_uart1(buffer_[start_]);//echo it

    /*check for end of buffer 
     wraparound if neccesary*/
    if(start_ == end_)
    {
        start_ = 0;
        errorflag = 1;
    }
}
putchar_uart1('\n');
putchar_uart1('\r');

/*check for end of buffer 
 wraparound if neccesary*/
if(start_ == end_)
{
    buffer_[0] = '\0';
    errorflag = 1;
}
else
{
    buffer_[start_++] = '\0';
}
return errorflag;
}

Update:

I decided to go with approach of passing a pointer an array to the function. This works nicely, thanks to everyone for the informative answers.

Updated Code:

 //-------------------------------------------------------------------------
 //argument 1 should be a pointer to an array, 
 //and the second argument should be the size of the array
 //gets a string and echos it
 //returns 0 if there is no error
char getstring_e_uart1(char *stringPtr_, const int SIZE_)
{

    char *startPtr_ = stringPtr_;
    char *endPtr_  = startPtr_ + (SIZE_ - 1);
    char errorflag = 0;

    /*keep geting chars until newline char recieved*/
    while((*stringPtr_ = getchar_uart1())!= 0x0D)
    {       
        putchar_uart1(*stringPtr_);//echo it
        stringPtr_++;

        /*check for end of buffer 
         wraparound if neccesary*/
        if(stringPtr_ == endPtr_)
        {
            stringPtr_ = startPtr_;
            errorflag = 1;
        }
    }
    putchar_uart1('\n');
    putchar_uart1('\r');

    /*check for end of buffer 
     wraparound if neccesary*/
    if(stringPtr_ == endPtr_)
    {
        stringPtr_ = startPtr_;
        *stringPtr_ = '\0';
        errorflag = 1;
    }
    else
    {
        *stringPtr_ = '\0';
    }
    return errorflag;
}

© Stack Overflow or respective owner

Related posts about c

    Related posts about pointers