这段反转字符串的 C 代码有问题,但我不知道是什么?请帮忙
我是编程初学者。我写了这个小程序来反转字符串。但是,如果我尝试反转长度小于 5 个字符的字符串,则会给出错误的输出。我似乎找不到什么问题。
#include<stdio.h>
#include<string.h>
int main()
{
char test[50];
char rtest[50];
int i, j=0;
printf("Enter string : ");
scanf("%s", test);
int max = strlen(test) - 1;
for ( i = max; i>=0; i--)
{
rtest[j] = test[i];
j++;
}
printf("Reversal is : %s\n", rtest);
return 0;
}
I am beginnner to programming. I wrote this little program to reverse a string. But if I try to reverse a string which is less than 5 characters long then it gives wrong output. I cant seem to find whats wrong.
#include<stdio.h>
#include<string.h>
int main()
{
char test[50];
char rtest[50];
int i, j=0;
printf("Enter string : ");
scanf("%s", test);
int max = strlen(test) - 1;
for ( i = max; i>=0; i--)
{
rtest[j] = test[i];
j++;
}
printf("Reversal is : %s\n", rtest);
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您不会以 0 终止反转的字符串。(C 中的所有字符串均以 0 终止)
在这种情况下, printf 将(可能取决于 rtest 数组的统一内容)创建缓冲区溢出。
在 for 循环之后添加一个
rtest[max+1]=0;
,一切都应该没问题。否则,您可以声明
char rtest[50] = {0}
(这将用 0 初始化整个数组)。You are not terminating the reversed string with a 0. (all strings in C are 0-terminated)
In this case, the printf will (likely, depending on the unitialized contents of the rtest array) create a buffer overflow.
Add a
rtest[max+1]=0;
after the for loop and everything should be fine.Otherwise you can declare
char rtest[50] = {0}
(this will initialize the whole array with 0s).rtest 已统一化。
您应该添加 rtest[j] = '\0';在 for 循环之后表示字符串结束的位置
rtest is unitialized.
You should add rtest[j] = '\0'; after the for loop to say where the string ends