Skip to main content

Array of characters - Strings

String is a sequence of characters terminated by null character.  Character array can be used to store strings.  Below is the general form of character array declaration.

char array_name[size];

Consider the following declaration,char str[100];

Here, str is a character array which has the capacity to store 100 characters or string of length 100 character(99 char + 1 null char).

Let us see how to initialize character array.  Basically, character array can be initialized in either of the following ways.

char str[6] = {'I', 'N', 'D', 'I', 'A', '\0'};
char str[6] = "INDIA";
char str[]  = {'I', 'N', 'D', 'I', 'A', '\0'};
char str[]  = "INDIA";

Here, all the above statement gives same meaning.  The string "INDIA" is stored inside the array str.

When a string is stored in an array in the form of comma delimited characters, then user has to explicitly include null character at the end as shown below.
char str[6] = {'I', 'N', 'D', 'I', 'A', '\0'};

For strings within double codes, null character would be added implicitly.
char str[] = "INDIA";

  #include <stdio.h> 
int main() {
int i;
char str[6] = "INDIA";
for (i = 0; i < 6; i++) {
printf("character: %c\tASCII: %d\n", str[i], str[i]);
}
return 0;
}

  Output:
  jp@jp-VirtualBox:~/$ ./a.out
  character: I ASCII: 73
  character: N ASCII: 78
  character: D ASCII: 68
  character: I ASCII: 73
  character: A ASCII: 65
  character: ASCII: 0


Note: ASCII of null character is 0 and null character won't be displayed on the output screen.

From the above output, we could see that the null character is added implicitly at the end of string literal.

String literal can be assigned to character array only during the time of declaration or initialization. Assigning string literal to character array after initialization or declaration would result in below error.

  #include <stdio.h> 
int main() {
char str[100] = "INDIA"; // allowed
// assign string literal after declaration
str = "string"; // not allowed
return 0;
}

  Output:
  jp@jp-VirtualBox:~/$ gcc ex71.c 
  pgm.c: In function ‘main’:
  pgm.c:5: error: incompatible types when assigning to type ‘char[100]’ from type ‘char *’


But, user is allowed to change the contents of the character array which is initialized to string literal as shown below.
char str[] = "INDIA";
str[0] = 'E';
str[1] = 'L';
Here, we are altering the string contents character by character.

What happens when we assign a string literal with length greater than the size of the array?
Consider the following,
char str[4] = "INDIA";
Here, the size of the array is 4 bytes(1 character = 1 byte).  So, str array can hold 4 characters.  But, we have assigned a string literal(6 characters - including null character) with length greater than the original size of the array.  During compilation, we won't get any error message.  But still, we will end in memory corruption. Because, we are writing data in a memory block which is not allocated for us.

Comments

Popular posts from this blog

Array of pointer to structure

Array of pointer to structure is nothing but an array whose elements are pointers to structure How to declare array of pointer to structure? Below is an example declaration for array of pointer to structure. struct student *arr[10]; Here, arr is an array 10 of pointer to structure student. Dynamic memory allocation: Below is the procedure to perform dynamic memory allocation for the structure pointers in an array. struct student { int age; char name[32]; }; fun() { int i = 0; struct student *arr[10]; for (i = 0; i < 10; i++) { /* dynamic memory allocation for 5 structure objects */ arr[i] = (struct student *)malloc(sizeof(struct student) * 5); } } Write a c program to pass an array of structure pointers to another function   #include <stdio.h>   #include <stdlib.h>   #include <string.h>   struct student {         int age, rollno;         char name[32];   };   /* printing details of stude...

Nested function in C

What is nested function? If a function is defined inside another function, then it is called as nested function.  Nested function example in C: Consider the following example, int add(int a, int b) {        void print(int res) {          printf("Result is %d, res);       }       print(a+b);       return 0; } Here, print() is a nested function.  Because, it is defined inside another function named add() . Example C program using nested functions: #include <stdio.h> void add(int a, int b) { void print(int res) { // nested function printf("Result is %d\n", res); return; } print(a + b); // passing sum of a and b as parameter return; } int main() { add(10, 20); return 0; }   Output:   jp@jp-VirtualBox:~/$ ./a.out   Result is 30 Previous Next

Difference between asterisk and ampersand operators in c

Address Operator (& - Ampersand): Returns address of the given variable.  Consider the following example, int *ptr, var = 10; ptr = &var; ptr = &var sets the address of the variable var to pointer ptr.  & is also called as reference operator. Let us try to understand the purpose of reference operator using the following example program.   #include <stdio.h>   int main() {         int var = 10, *ptr;         /* assigning address of variable var to pointer ptr */         ptr = &var;         /* printing the address of the variable var */         printf("Address of var is 0x%x\n", &var);         /* printing the value of pointer ptr */         printf("Value of ptr is 0x%x\n", ptr);         return 0;   }   Output:   jp@jp-VirtualBox:~/$ ./a.out   Address of var is 0x...