I have been reading C Primer Plus (5th edition) by Stephen Prata. The Program listing 11.9 is a program to show what may the puts() function do if we declare a string and assign a value without an ending null character. (Of course this is viewed as a grammar mistake, but I want to know what error will this bug cause.) I experimented on my computer (with CodeBlocks my ide) a similar program, and tried different ways to declare the string.
For the program
#include <stdio.h>
int main()
{
char a[]={'a','b','c','d'};
char b[100]="Stack Overflow";
puts(a);
return 0;
}
in which I used a[] to declare the string, the program indeed output some thing other than abcd . I tried several times, and it always output abcd< and an empty line:
output:
abcd<
If I declare the string by a[100] , i.e. the program
#include <stdio.h>
int main()
{
char a[100]={'a','b','c','d'};
char b[100]="Stack Overflow";
puts(a);
return 0;
}
Then it seems quite normal. The program always output abcd and an empty line after I have repeated several times:
output:
abcd
If I use the pointer to declare the string:
#include <stdio.h>
int main()
{
char *a={'a','b','c','d'};
char b[100]="Stack Overflow";
puts(a);
return 0;
}
Then it only output an empty line:
output:
Why different ways of declaring the string, which is assigned a value without an ending '\0' yields different outputs?