/*实在是不想用数组来解决这个问题,应为会消耗过多的资源*/
#include <stdio.h>
#include <string.h>
char strlen_MM(char *s);
main(void)
{
char i;
char DATA,Num=0;
printf("please input a String\n");
scanf("%s",&DATA);
Num=strlen_MM(&DATA);//
//char Inverse[Num];//这里也无法定义
???
printf("%d",Num);
return 0;
}
char strlen_MM(char *s)
{
char i=0;
while(*(s+i))
{
i++;
}
return i;
}
各路大神帮帮我吧!!
获取数组末元素的方法: *(*(&str+1)-1)
头指针 char *begin = str
尾指针 char *end = *(&str+1)-1
接下来:
while( --end >= begin ){ printf("%c",*end); }
刚试了一下,感觉有点问题,程序在while那块直接跳过了,没有运行,char *end = *(&str+1)-1这个赋值有问题玛?编译出错了,应该是吧char 型数据赋给地址了~~,不过还是谢谢了
@小淼博客: 数组可以这么用,字符串常量不行,比如:char str[]="ABCD";上面的结果就是DCBA
@葡萄不吐皮: 哦哦,懂你的意思了,数组应该行的,谢谢
获取字符的长度,指针一直移到最后,再输出回移
多谢了,试了一下基本上可行,但是有点小bug,倒序输出的字符串中老是会出现一个错误的字符,不知道为什么~~代码如下:
#include <stdio.h>
#include <string.h>
char strlen_MM(char *s);
main(void)
{
char i;
char DATA,Num=0;
printf("please input a String\n");
scanf("%s",&DATA);
Num=strlen_MM(&DATA);
char *P=&DATA+Num-1;
for(i=0;i<Num;i++)
{
printf("%c",*(P-i));
}
printf("%d",Num);
return 0;
}
char strlen_MM(char *s)
{
char i=0;
while(*(s+i))
{
i++;
}
return i;
}
对了,刚试了一下,当输入的字符串长度大于4的时候才会出现这个情况~这是个啥情况呢?
@小淼博客: char DATA 你声明的DATA只能保存1个字符,你输入ABCDEFGHIJK,只有'A'被保存在DATA
@葡萄不吐皮: 我申明的char DATA只是一个地址的位置,地址是存在DATA里面的,当用scanf之后就会将字符串的首地址存在DATA里面而不是把数据存在里面,数据是存在以&DATA为首地址的内存空间的吧~~,所以就不存在char DATA型变量大小不够呀---
@小淼博客: 很遗憾,不是这样。
@葡萄不吐皮: 那既然char DATA只能保存一个字符,为啥后面的地址里会存储我输入的字符串呢?既然DATA只保存了我的数据‘A’,为啥后面还能正常输出‘KJIHGF?DCBA’呢?比如像这段程序:
char s[3];
scanf("%s",s);
printf("%s",s);
你告诉了scanf函数你的输入类型以及存储的首地址,数组的起始地址s,函数就会自动将字符串中的每个字符输入到以s为首地址的存储空间中,再输出出来就是没问题的呀~
@小淼博客: 就因为char DATA只能保存一个字符,所以只有'A'被保存,后面的地址数据是不确定的。为什么能输出那些字符我也不太清楚,估计跟编译器的实现方式有关。
char s[3];这里你声明的是一个字符数组,编译器会分配相应的内存空间,这样输入的字符就会被保存了。
@葡萄不吐皮: 恩恩,我懂了,谢谢你了!