Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这段C代码在反转字符串时出错了,但我不知道是什么原因?请帮忙_C_String_Reverse - Fatal编程技术网

这段C代码在反转字符串时出错了,但我不知道是什么原因?请帮忙

这段C代码在反转字符串时出错了,但我不知道是什么原因?请帮忙,c,string,reverse,C,String,Reverse,我是编程新手。我写了这个小程序来反转字符串。但是,如果我试图反转长度小于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

我是编程新手。我写了这个小程序来反转字符串。但是,如果我试图反转长度小于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;
}

您没有使用0终止反向字符串。C中的所有字符串都以0结尾

在这种情况下,printf可能会根据rtest数组的单元化内容创建缓冲区溢出

添加一个rtest[max+1]=0;在for循环之后,一切都应该很好。
否则,您可以声明char rtest[50]={0}这将用0初始化整个数组。

您没有用0终止反转的字符串。C中的所有字符串都以0结尾

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;
 }
}
在这种情况下,printf可能会根据rtest数组的单元化内容创建缓冲区溢出

添加一个rtest[max+1]=0;在for循环之后,一切都应该很好。 否则,您可以声明char rtest[50]={0}这将用0初始化整个数组。

rtest是统一的

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;
 }
}
您应该添加rtest[j]='\0';在for循环之后,表示字符串结束位置的rtest被单位化


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

,但是当字符串长度为5个或更多字符时,为什么它工作正常?@Harbhag:array rtest的内容是不确定的-在赋值之前尝试访问它们是未定义的行为。有时它似乎可以工作——通常不会。但为什么当字符串长度为5个或更多字符时它可以工作?@Harbhag:rtest数组的内容是不确定的——在赋值之前尝试访问它们是不确定的行为。有时它似乎有效,但往往无效。OP正在询问他自己解决方案中的问题。他没有要求一个不同的解决方案,他可以复制和粘贴。如果可以的话,我会给a-2分,因为我在没有任何附加评论的情况下发布了它。另一篇帖子清楚地解释了他的实现中的问题。我认为他应该考虑另一个使用更少资源的解决方案。这没有问题。但也许你应该这么说,而不是把一段代码扔进房间。初学者在没有任何背景的情况下躺在那里可能会被它绊倒-1.OP正在询问他自己解决方案中的问题。他没有要求一个不同的解决方案,他可以复制和粘贴。如果可以的话,我会给a-2分,因为我在没有任何附加评论的情况下发布了它。另一篇帖子清楚地解释了他的实现中的问题。我认为他应该考虑另一个使用更少资源的解决方案。这没有问题。但也许你应该这么说,而不是把一段代码扔进房间。初学者在没有任何背景的情况下躺在那里可能会被它绊倒;