Why in the for
loop the value of st1
is not saved ie: when I'm printing st1
nothing is being printed?
#include <stdio.h>
#include <stdlib.h>
int main() {
char s[40] = "Who are you to tell me that I can not code?";
char st1[15];
for (int i = 2; i < 9; i ) {
st1[i] = s[i];
printf("%c", s[i]);
}
printf("\n Now Printing the Whole at once \n");
printf("%s", st1);
return 0;
}
Here is the Output.....
o are y
Now Printing the Whole at once
Process returned 0 (0x0) execution time : 0.052 s
Press any key to continue.
CodePudding user response:
In your code st[0]
and st[1]
are never set, so printing the string with printf
has undefined behavior. st[0]
probably happens to be a null byte, so printf
prints nothing.
You should use a different index into st1
and set a null byte at the end.
Beware also that s
is not null terminated either because it has exactly 40 characters so no space for a null terminator byte.
Here is a modified version:
#include <stdio.h>
int main() {
char s[] = "Who are you to tell me that I can not code?";
char st1[15];
int j = 0;
for (int i = 2; i < 9; i ) {
st1[j ] = s[i];
printf("%c", s[i]);
}
st1[j] = '\0';
printf("\nNow Printing the whole at once\n");
printf("%s\n", st1);
return 0;
}
CodePudding user response:
This loop
for (int i = 2; i < 9; i ) {
st1[i] = s[i];
reads from s
at indices [2, 8], but also writes to st1
at indices [2, 8]. This means indices [0, 1] and [9, 14] of st1
contain indeterminate values, having never been initialized. Reading these values is a form of undefined behaviour.
Use a separate index to place values from the start of st1
, and make sure to null-terminate the result.
int j = 0;
for (int i = 2; i < 9; i ) {
st1[j ] = s[i];
printf("%c", s[i]);
}
st1[j] = '\0';
Aside: this initializer, being of type char [44]
, is too long for the array being initialized.
char str[40] = "Who are you to tell me that I can not code?";
XXX.c:5:18: warning: initializer-string for char array is too long
char s[40] = "Who are you to tell me that I can not code?";
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Use an empty size declarator to have the array automatically sized to match its initializer.
char str[] = "Who are you to tell me that I can not code?";