这是代码
#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();
}
当我们给它一个没有空格的字符串时它正常工作:
输入:欢迎
LEN:7
输出:emoclew
当我们给它一个带空格的字符串时:
输入:欢迎来到这个世界 LEN:7
输出:我的其他一些ascii字符 到目前为止还没见过。和 “len”再次只有7个
当我更改以下声明时:
scanf(“%s”,a)得到(a);
我明白了:
输入:欢迎来到这个世界 LEN:21个
输出:不同的东西。不是 字符串的反转...
在这种情况下,“len”是正确的,但输出错误。
真正发生了什么?上面的代码有什么问题?
答案 0 :(得分:5)
答案 1 :(得分:3)
除了其他人所说的内容之外,rev
无法保证初始化为NUL字符,因此您的rev[i]+=a[len-i-1];
行最终可能会产生垃圾。
答案 2 :(得分:2)
使用以下内容:
的scanf( “%[^ \吨\ n]的”,字符串);
答案 3 :(得分:1)
评论: