Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

char arrays in C

Name: Anonymous 2012-09-12 20:46

So, I'm trying to learn C, and currently I'm testing out characters and character arrays. I've put together this code:


#include <stdio.h>
int main()
{
    char hello[7];
    int a, b;
   
    puts("Enter to start:\n");
    getchar();
    fflush(stdin);
   
    puts("Intiated:");

    for(a = 0; a <= 7; ++a){
          hello[a] = getchar();
      }
      fflush(stdin);
     
      for(a = 0; a <= 7; ++a){
            putchar(hello[a]);
            }
           
            fflush(stdin);
            getchar();
            return(0);
}


And it works well (or as well as it is suppose to), but if I change the char array hello's size to something smaller than 7, or change the 7 in both the 'for' parts, than I'll capture more than the number the char array was set to.

So, for example:


#include <stdio.h>
int main()
{
    char hello[3];
    int a, b;
   
    puts("Enter to start:\n");
    getchar();
    fflush(stdin);
   
    puts("Intiated:");

    for(a = 0; a <= 9; ++a){
          hello[a] = getchar();
      }
      fflush(stdin);
     
      for(a = 0; a <= 9; ++a){
            putchar(hello[a]);
            }
           
            fflush(stdin);
            getchar();
            return(0);
}


This will capture 9 characters, even though 'hello' is set to 3. Frankly, I don't mind this. It's better than an overflow or some other error. But what exactly happens? Does it just change the amount of characters the array can hold?

Name: Anonymous 2012-09-12 21:26


Discarding the return value of getchar.
Not comparing the return value of getchar with EOF and handling the case usefully.
Passing an input stream to fflush.

You are a bad man.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List