c - My strlen code segfaults -


can tell m why getting sigsegv on this?

#include <stdio.h> #include <string.h>  int main () {   char szinput[256];   printf ("enter sentence: ");   fgets (szinput, 256, stdin);    size_t n = (unsigned)strlen(szinput);   printf ("the sentence entered %ld characters long.\n", n);   return 0; } 

when run segfaults.

unix>strlen_ex enter sentence: foo bar burr segmentation fault 

i can see no reason crash is, there potential...

it best pass sizeof szinput instead of explicit 256. prevents accidentally getting wrong size in fgets.

char szinput[256]; printf ("enter sentence: "); fgets (szinput, sizeof szinput, stdin); 

for example if set array 8 bytes, leave fgets call @ 256 , enter "hello world":

char szinput[8]; printf ("enter sentence: "); fgets (szinput, 256, stdin); 

then fgets call write beyond end of szinput. on stack potentially overwrite important (such fgets stack frame). segfault (or fail anyway).


Comments

Popular posts from this blog

image - ClassNotFoundException when add a prebuilt apk into system.img in android -

I need to import mysql 5.1 to 5.5? -

Java, Hibernate, MySQL - store UTC date-time -