这是密码

#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
  clrscr();
  char a[20],rev[20];
  printf("enter the string");
  scanf("%s",a);
  int len=strlen(a);
  for(int i=0;i<len;i++)
  {
    rev[i]+=a[len-i-1];
  }
  printf("%d \t  \n string is \t %s",len,rev);
  getch();
}

当我们给它一个没有空格的字符串时,它工作正常:
输入:欢迎
长度:7
输出:emoclew
当我们给它一个带空格的字符串时:
输入:欢迎来到这个世界
长度:7
输出:其他一些ascii字符
到目前为止还没见过以及
“len”又是7
当我更改以下语句时:
扫描(“%s”,a)以获取(a);
我得到:
输入:欢迎来到这个世界
长度:21
输出:一些不同的东西。不是那个
字符串的反转。。。
在这种情况下,“len”是正确的,但输出是错误的。
到底发生了什么?上面的代码有什么问题?

最佳答案

scanf不会读取整行。相反,它会读到第一个空格你需要getline
另外,我注意到你有长度超过19的东西,但是你分配了20个字符的空间增加该值,否则您将得到UB

关于c - 在C中查找字符串长度时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6482990/

10-15 00:29