- Strings are character array.
 - Character array are stored in contiguous memory location.
 
- A string constant is a one-Dimensional array of characters terminated by a null character('\0').
 - Each character in the array occupies one byte of memory and the last character is always '\0' 
Example:
char str[]={'C','P','U','\0'}; - The terminating null character('\0') is very important in a string because its the only way for the compiler to know where the string ends.
 
- '\0' is called null character.
 - '\0' and 0 are not same because both has different ASCII value. ASCII value of '\0' is 0 but ASCII value of 0 is 48.
 
-  A string can be initialized without adding the terminating null character as,
Here C inserts the NULL character automatically. 
-  Similar to integer array we can access array elements   #include< stdio.h >
int main()
{
int i=0;
char str[]="WELCOME";
while(str[i]!='\0')
{
printf("%c",str[i]);
i++;
}
return;
} - This can be done by using pointer also. Mentioning th name of the array we get the base address(zeroth element) of the array.#include< stdio.h >
int main()
{
char str[]="WELCOME",*ptr;
ptr=str;
while(*ptr!='\0')
{
printf("%c",*ptr);
ptr++;
}
return;
} 
- For reading and writting a string the format specifier is %s and no & is needed#include< stdio.h >
int main()
{
char str[30];
printf("Enter the string\n");
scanf("%s",str);
printf("String=%s",str);
return;
}
The scanf() function fills in the character typed at keyboard into the str[] array until the blank space or enter key is hit. If blank space or enter key is hit scanf() automatically place a '\0' in the array. - Normally the %s will read a string upto a blank space. To read a muti word string  untill the end of line including blank space use  %[^\n]s#include< stdio.h >
int main()
{
char str[100];
printf("ENter the string\n");
scanf("%[^\n]s", str);
printf("String=%s",str);
return;
}
Output:
Enter the string
welcome honey
String=Welcome honey - Other way of reading multiword string is gets() and puts(). But it is dangerous to use gets() in programs so try to avoid gets() #include< stdio.h >
int main()
{
char str[30];
printf("Enter the string\n");
gets(str);
puts(str);
return;
} 
- A string can be stored in 2 forms 
- char str[]="Welcome"; //here Welcome is stored in a location called str
 - char *str="Welcome"; //here Welcome is stored in some other location i memory and assign the address of the string in a char pointer
 
 - The advantage of pointing a string using a character pointer is we cannot assign a string to another string but we can assign a char pointer to another char pointer
#include< stdio.h >
int main()
{
char str1[]="Welcome",str2[30];
char *ptr1="Welcome",*ptr2;
//str2=str1; //error
ptr2=ptr1;
printf("ptr2=%s",ptr2);
return;
} - Once a string has been defined it cannot be initialized to another set of characters but using char pointer we can redefine the string. 
#include< stdio.h >
int main()
{
char str1[]="Welcome";
char *ptr1="Welcome";
// str1="Good";//error
ptr1="Good";
printf("ptr1=%s",ptr1);
return;
}
 
- The size of the string depends on the size of declaration not the number of characters in the string 
#include< stdio.h> 
void main()
{
char str[30]="Network programming";
printf("%d",sizeof(str));
}
The output here is 30 not 1 
char str[]="WELCOME";