以下是引用no1xijin在2018-7-28 20:27:11的发言:
你的问题在于
1.将i定义为无符号整数( unsigned i =99; //为字符串str创建足够长度 )即表示i一直大于等于0,而你的输出判断又是当i为负时结束输出(for (;i>=0;i--) //字符串str最后一位开始显示到第一位; )自然程序将一直输出,不会结束。将 unsigned 改为 int即可。
2.while (!str) i--; //找到字符串str输入的最后一位;
这个判断逻辑有问题,str[]数组虽然你没有放数据进去,但是并不表示它没有数据,实际上它内部有数据,你的乱码就表示有数据,因此这个循环,根本进不去。
将while内条件判断去掉 ! ,同时将i设为 int i=0, while内将 i-- 改为 i++; 从首位找 字符串str的最后一位。
以下是修改后的代码
#include <stdio.h>
// 倒序显示字符串(不换行)
void put_string(const char str[])
{
int i =0; //为字符串str创建足够长度
while (str) i++; //找到字符串str输入的最后一位;
i=i-1; // 末尾的结束符不输出
for (;i>=0;i--) //字符串str最后一位开始显示到第一位;
{putchar(str);}
}
int main(void)
{
char str[100];
printf("请输入字符串:");
scanf("%s", str);
put_string(str);
putchar('\n');
return (0);
}
谢谢指点。
请您看看我的理解对不对:
主程序
char str[100];比如说输入9个字符后加上null,前10个是我们输入的字符(包括null),但是后面90个仍然有值。是不是这样啊?
我以前的理解是输入完毕后加上null,后面的就全是null了。