I am trying to create a duplicate of a string but reversed. I am able to strcpy each char and print them individually but I get nothing when I print the entire duplicate string.
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[101] = "Lieur a Rueil";
char temp[101];
int i;
int j;
i = 0;
j = strlen(str);
while (str[j] - 1)
{
strcpy(&temp[i], &str[j]);
printf("%c", temp[i]);
j--;
i ;
}
printf("\n");
printf("temp: %s\n", temp);
return (0);
}
output:
lieuR a rueiL
temp:
CodePudding user response:
#include <stdio.h>
#include <string.h>
#include <stdint.h>
int main(void)
{
char str[101] = "Lieur a Rueil";
char temp[101];
size_t sz = strlen(str);
for(size_t i=0;i<sz; i)
{
temp[sz-i-1] = str[i];
}
temp[sz]=0;
printf("temp: %s\n", temp);
return (0);
}
Output:
temp: lieuR a rueiL
CodePudding user response:
With minimal changes to original code:
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[101] = "Lieur a Rueil";
char temp[101];
int i;
int j;
i = 0;
j = strlen(str);
temp[j] = '\0';
while (j)
{
temp[j -1] = str[i];
printf("%c", temp[j]);
j--;
i ;
}
printf("\n");
printf("temp: %s\n", temp);
return (0);
}
CodePudding user response:
This while loop
while (str[j] - 1)
{
strcpy(&temp[i], &str[j]);
printf("%c", temp[i]);
j--;
i ;
}
does not make a sense. The condition of the loop can invoke undefined behavior
due to accessing memory beyond the array. The same problem exists with the call of strcpy.
The main logic of the program can be implemented simpler. For example
size_t i = 0;
for ( size_t j = strlen( str ); j-- != 0; i )
{
temp[i] = str[j];
}
temp[i] = '\0';
printf("\ntemp: %s\n", temp);
Here is a demonstrative program.
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[] = "Lieur a Rueil";
char temp[sizeof( str )];
size_t i = 0;
for ( size_t j = strlen( str ); j-- != 0; i )
{
temp[i] = str[j];
}
temp[i] = '\0';
printf("\ntemp: %s\n", temp);
}
The program output is
temp: lieuR a rueiL
