这段反转字符串的 C 代码有问题,但我不知道是什么?请帮忙

发布于 2024-10-11 08:55:26 字数 406 浏览 7 评论 0原文

我是编程初学者。我写了这个小程序来反转字符串。但是,如果我尝试反转长度小于 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

剧终人散尽 2024-10-18 08:55:26

您不会以 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).

蹲墙角沉默 2024-10-18 08:55:26

rtest 已统一化。

您应该添加 rtest[j] = '\0';在 for 循环之后表示字符串结束的位置

rtest is unitialized.

You should add rtest[j] = '\0'; after the for loop to say where the string ends

时光是把杀猪刀 2024-10-18 08:55:26
void reverse(char* str)
{
 int len = strlen(str);
 for (int i = 0; i < len / 2; ++i) {
  char tmp = str[i];
  str[i] = str[len - 1 - i];
  str[len - 1 - i] = tmp;
 }
}
void reverse(char* str)
{
 int len = strlen(str);
 for (int i = 0; i < len / 2; ++i) {
  char tmp = str[i];
  str[i] = str[len - 1 - i];
  str[len - 1 - i] = tmp;
 }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文