[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: A simple C doubt



Hi 

Try this function getstr. I hope there is no buffer overflow...

#include <unistd.h>
#include <stdio.h>

char *getstr(void)
{
        unsigned char *dst;
        int c;
        if ((dst=(unsigned char *)malloc(1)) == NULL) return 0;
        dst[0]='\0';
        while((c = getchar()) != '\n')
        {
                if ((dst=(unsigned char *)realloc(dst, strlen(dst)+3)) == NULL)
                        return 0;
                sprintf(dst, "%s%c", dst, c);
        }
        return dst;
}
int main(int argc, char *argv[])
{
        char *str;
        printf("Text: ");
        fflush(stdout);
        if ((str = getstr()) == NULL)
        {
                printf("Error: No memory free!\n"); exit(1);
        }

        printf("Text = %s\n", str);
        return 0;
}


On Wed, 20 Aug 2003 01:39:50 -0300
Igor Cabral Corr <imortis@uol.com.br> wrote:

> Hi people!
> 
> How can I try to read a line from stdin (in fact, a file piped into stdin) and know if the read line is empty or not?
> I want to read, for example:
> 
> asdakldakl
> 
> aljdajkdja
> aljkdk
> 
> How can I read these 4 lines? Using something like
> 
> for (int i=0; i<4; i++) scanf("%s", line);
> 
> the empty line will be skipped, and I don´t know that. Someone knows an easy way to do it?
> PS.:  I know how many lines I want to read.
> 
> []´s
> Igor Cabral Corrêa
> 

-- 
http://www.againsttcpa.com/ - Don't let them take YOUR RIGHTS!