Here's my code
#include <stdio.h>
#include <string.h>
int main(){
char pal[8] = "ciaooaic";
char pal1[7] = "ciaoaic";
int lenPal = strlen(pal);
int lenPal1 = strlen(pal1);
printf("strlen('%s'): %d\n", pal, lenPal);
printf("strlen('%s'): %d\n", pal1, lenPal1);
return 0;
}
The problem is that when I run this code the output is:
strlen('ciaooaicP@'): 11
strlen('ciaoaic'): 7
The first string has also another non-printable char between P and @. I'm a noob, so maybe I missed something obvious. Can someone help me?
edit:
just give one extra space like char pal[9] = "ciaooaic"; char pal1[8] = "ciaoaic";
It works, but why? I understand that there should be a space for \0, but "ciaoaic" works without it...
Both the above answers are sufficient to solve your doubts. Increase the the length of both pal and pal1 by one as there there is no space for the assignment of the null character( '\0') at the end. However there is small trick to print the non null terminated character using printf
Link for the above trick:BRILLIANT
1. You don't leave spaces for null terminator , as you pass them to
strlen()
,therefore your code exhibits undefined behaviour -Leave a space for
'\0'
. Declare and initialize like this -2. And
strlen()
returnssize_t
notint
, so write like this -and use
%zu
specifier to print these both variables .You have not kept space for the NULL terminating character
\0
.Either increase the size of the array by
1
OR
Do not specify the length at all