1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

C gets function

  1. May 27, 2005 #1
    Im trying to learn some c after java.

    Im writing a linked list and i have this problem

    from main i call : add( (x *)&head, (x *)&tail)

    inside the function add i try to get input from user

    blah balh
    strcpy(tail->name, gets(str));

    why does the program goes to next line without letting me to input the name ?

    i hope im clear if not let me know

  2. jcsd
  3. May 27, 2005 #2
    probably there is still a newline in the buffer, to find out you can do this:

    blah balh
    printf("ABC %s DEF", gets());
    strcpy(tail->name, gets(str));

    if ABC and DEF get printed on different lines you know for sure
  4. May 27, 2005 #3
    *agrees with gerben*
    This has happened with me one times too many.
    If you are sure that at no point in your program, a new line is making its way in, then try using fflush(stdin) . Ofcourse for some reasons, this is not guaranteed to work.

    -- AI
  5. May 27, 2005 #4


    User Avatar
    Staff Emeritus

    Just a note: Whenever doing strcpy operations make sure to check bounds. This is how you create buffer overflow problems.
  6. May 27, 2005 #5
    thanx a lot

    one more seemly unrelated question.

    char *str="blabh";
    Why tail->name=str //does not work ?

    why do i have to use the strcpy ?
  7. May 27, 2005 #6
    tail->name and str are both pointers (char *).
    tail->name = str;
    means assign the adress that str points to to the pointer variable tail->name, so that that pointer variable points to the same adress. So you will get a problem when the memory that str points to gets freed.

    Probably both pointers (str and tail->name) already have some declared memory to which they point and you just want to copy the content of the memory to which str points to the memory that tail->name points to.
    You could do this:
    *(tail->name) = *str;
    but that will only copy the first character of the string, so you should use strcpy()
  8. May 27, 2005 #7
    Of course you should also never use gets for the same reason.
  9. Jun 10, 2005 #8
    first of all str should be declare:
    char str[] = "blabh"
    to ensure the compiler generate the correct code to allocate memory for the array and not just a char pointer.

    tail->name = str;
    tail->name and str point to the same data in memory, if str is a local variable then that memory is gone when the function exit and tail->name is no longer valid. that is why you need you need to copy the data into tail->name location. Another danger of tail->name = str is that now you just lost the memory location of where tail->name was pointed to earlier, and the memory location allocate for tail->name is now loss. You just have cause a memory leak.
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?

Similar Discussions: C gets function
  1. Trigama Function in C (Replies: 1)

  2. C++ Friend Functions (Replies: 2)