这是密码
#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/