Q: String is initialized to be all '\0' in C? I tried this:
char s[100];

for(int i=0; i<100; i++) {
if(*(s+i) == '\0')
   printf("end of string\n");
}

and "end of string" will be printed 96 times.
if I change string definition to char *s[120];
I will get "end of string" 100 times
why is that?  how is a string get initialized exactly.
I am trying to check every 3 char in a string, need to 
test what is going to happen if my pointer pass the end 
of string.
Edit: sorry, typo. should be char s[100] instead of char *s[100]

A: If array s is an automatic variable, the pointers in the array have an indeterminate value. They are not initialized to anything you can de-reference or even read from without invoking undefined behaviour.
Note: you have an array of pointers, not a "string".

A: if char s[100]; is declared at global scope it will be zeroed, if it is in an automatic scope it will contain whatever garbage was left on the stack (generally)... but it isn't defined, if you are in a place where you are initializing the variable you can use the shorthand notation...
char s[100] = {0};
if it is a variable you are reusing then you may have to use memset...
of course generally you don't care what is after the end of a null terminating char is a string so just setting the first byte to '\0' is generally enough...

A: The line
char *s[100];

defines s as an array of pointers to strings, not as a string. What you want to use is probably
char s[100];

instead.
If using the original definition, you use *(s + i) == '\0' then you are comparing a pointer to string to the '\0' character. You really don't want to do this even though it compiles.
As for why you get 96 times the end of string is that the values of the pointers can be initialized to any data because you haven't explicitly initialized them.
