What’s difference between char s[] and char *s in C?
Consider below two statements in C. What is the difference between the two?
char s[] = "geeksquiz";
char *s = "geeksquiz";
Below are the key differences:
The statements ‘char s[] = “geeksquiz”‘ creates a character array which is like any other array and we can do all array operations. The only special thing about this array is, although we have initialized it with 9 elements, its size is 10 (Compiler automatically adds ‘\0’)
C
#include <stdio.h>
int main()
{
char s[] = "geeksquiz" ;
printf ( "%lu" , sizeof (s));
s[0] = 'j' ;
printf ( "\n%s" , s);
return 0;
}
|
Output
10
jeeksquiz
The statement ‘char *s = “geeksquiz”‘ creates a string literal. The string literal is stored in the read-only part of memory by most of the compilers. The C and C++ standards say that string literals have static storage duration, any attempt at modifying them gives undefined behavior.
s is just a pointer and like any other pointer stores address of string literal.
C
#include <stdio.h>
int main()
{
char *s = "geeksquiz" ;
printf ( "%lu" , sizeof (s));
return 0;
}
|
Output
8
Running above program may generate a warning also “warning: deprecated conversion from string constant to ‘char*’”. This warning occurs because s is not a const pointer, but stores address of the read-only location. The warning can be avoided by the pointer to const.
C
#include <stdio.h>
int main()
{
const char *s = "geeksquiz" ;
printf ( "%lu" , sizeof (s));
return 0;
}
|
Output
8
Last Updated :
14 Sep, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...