#include <stdio.h>
#define N 81
void fun(char *s)
{
char c=*s;
for(;*(s+1);s++)
*s=*(s+1);
*s=c;
*(s+1)='\0';
}
void main()
{
char a[N];
gets(a);
fun(a);
puts(a);
}
这是一道期末考试题目,主要的作用是将输入的字符串第一个字符取出来放到这串字符的末尾,我主要的疑问是这一句话char c=*s;
,为什么字符变量C存储的是字符数组a中的第一个字符,而不是最后一个字符?我有这个疑问是因为在<C陷阱与缺陷>P12页中提到:有些C编译器允许在一个字符常量(以及字符串常量)中包含多个字符,二最后这个字符变量的值按照特定编译器实现中定义的方式组合得到。在Visual C++和Gcc v2.95中采取的做法是,依次用后一个字符覆盖前一个字符,最后得到的整数值即最后一个字符的整数值。我用Dev C++运行。
想复杂了,书中那段描述不是说的这种场景。这里理解字符数组的逻辑顺序足够了。
上面代码的for循环把第2个字符赋给第1个位置,第3个字符赋给每个位置。。。 直到字符串结尾,自然先要把第1个位置的字符保存下来。
*(s+1)='0';这行貌似是不需要的。for循环的中止条件就是它是'0'。