创建字符串的副本但在 C 中反转
Create a duplicate of a string but reversed in C
我正在尝试创建一个字符串的副本,但被颠倒了。
我能够对每个字符进行 strcpy 并单独打印它们,但是当我打印整个重复字符串时我什么也得不到。
#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);
}
输出:
lieuR a rueiL
temp:
#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);
}
输出:
temp: lieuR a rueiL
这个while循环
while (str[j] - 1)
{
strcpy(&temp[i], &str[j]);
printf("%c", temp[i]);
j--;
i++;
}
没有意义。循环的条件可以调用未定义的行为
由于访问数组以外的内存。 strcpy
.
的调用也存在同样的问题
程序的主要逻辑可以更简单地实现。例如
size_t i = 0;
for ( size_t j = strlen( str ); j-- != 0; i++ )
{
temp[i] = str[j];
}
temp[i] = '[=11=]';
printf("\ntemp: %s\n", temp);
这是一个演示程序。
#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] = '[=12=]';
printf("\ntemp: %s\n", temp);
}
程序输出为
temp: lieuR a rueiL
对原始代码进行最少的更改:
#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] = '[=10=]';
while (j)
{
temp[j -1] = str[i];
printf("%c", temp[j]);
j--;
i++;
}
printf("\n");
printf("temp: %s\n", temp);
return (0);
}
我正在尝试创建一个字符串的副本,但被颠倒了。 我能够对每个字符进行 strcpy 并单独打印它们,但是当我打印整个重复字符串时我什么也得不到。
#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);
}
输出:
lieuR a rueiL
temp:
#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);
}
输出:
temp: lieuR a rueiL
这个while循环
while (str[j] - 1)
{
strcpy(&temp[i], &str[j]);
printf("%c", temp[i]);
j--;
i++;
}
没有意义。循环的条件可以调用未定义的行为
由于访问数组以外的内存。 strcpy
.
程序的主要逻辑可以更简单地实现。例如
size_t i = 0;
for ( size_t j = strlen( str ); j-- != 0; i++ )
{
temp[i] = str[j];
}
temp[i] = '[=11=]';
printf("\ntemp: %s\n", temp);
这是一个演示程序。
#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] = '[=12=]';
printf("\ntemp: %s\n", temp);
}
程序输出为
temp: lieuR a rueiL
对原始代码进行最少的更改:
#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] = '[=10=]';
while (j)
{
temp[j -1] = str[i];
printf("%c", temp[j]);
j--;
i++;
}
printf("\n");
printf("temp: %s\n", temp);
return (0);
}