贝利亚背叛光之国:C 数组字符

来源:百度文库 编辑:高考问答 时间:2024/05/04 08:41:32
#include <string.h>
void main()
{ char *s1=”123”,*s2=”abcedf”,*s3;
s3=strcat(s1,s2);
printf(”%u,%u,%u\n”,s1,s2,s3);
puts(s1);
puts(s2);
puts(s3);
}

程序运行结果:
404,408,404
s1=123abcdef
s2=bcdef
s3=123abcdef

为什么是这个结果 解释1,3行

照你的运行结果,程序开始时,s1,s2指向的内存区域应该如下图所示:
'1' '2' '3' '\0' 'a' 'b' 'c' 'd' 'e' 'f' '\0'
s1 s2
s1指向'1',s2指向'a'。
执行strcat(s1,s2)后,s1的结束符会被s2的第一个字符(即'a')覆盖,而s2的指向不变,此时内存区域如下图所示:
'1' '2' '3' 'a' 'b' 'c' 'd' 'e' 'f' '\0'
s1 s2
因此s2此时指向的是原来'a'的位置,但此时该位置存的是'b'.

%u是将参数以无符号整数形式输出,你这里实际上是将s1,s2,s3这三个指针变量的值以无符号整数,由上图可以知道s2在s1后面四个字节,值比s1大4。

printf(”%u,%u,%u\n”,s1,s2,s3);
输出的是指针s1,s2,s3的地址,而s3=strcat(s1,s2),所以s3与s1的指针地址一样。puts(); 函数应该是输出字符串内容,所以puts(s1)输出指针s1所指向的字符串内容