The code posted is incorrect: a_static and b_static should be defined as arrays.
There are two ways to correct the code:
- you can add null terminators to make these arrays proper C strings:
#include <stdio.h>
int main(void) {
char a_static[] = { 'q', 'w', 'e', 'r', '\0' };
char b_static[] = { 'a', 's', 'd', 'f', '\0' };
printf("value of a_static: %s\n", a_static);
printf("value of b_static: %s\n", b_static);
return 0;
}
Alternately, printf can print the contents of an array that is not null terminated using the precision field:
#include <stdio.h>
int main(void) {
char a_static[] = { 'q', 'w', 'e', 'r' };
char b_static[] = { 'a', 's', 'd', 'f' };
printf("value of a_static: %.4s\n", a_static);
printf("value of b_static: %.*s\n", (int)sizeof(b_static), b_static);
return 0;
}
The precision given after the . specifies the maximum number of characters to output from the string. It can be given as a decimal number or as * and provided as an int argument before the char pointer.