东南融通的笔试题
考研1.62W
最新东南融通的笔试题(一)
一、
int main()
{
char *a="Hello";
char *b="worldn";
strcpy(a,b);
printf("%s,%s",a,b);
}
程序运行的结果是什么?
解析:这道题看上去很简单,第一想到的就是strcpy的地址越界问题,所以认为结果可能是
world
world
或者是运行错误,因为出现了地址越界,对于越界后的地址我们并不知道存的是什么,有可能是很重要的内容。
第二想到的是n在结果中怎么输出呢,这个问题考虑的多余,n才是输出n,而n直接以回车形式输出。
第三真正上机运行会发现,即使地址不发生越界,运行也会错误,仔细分析原因,得出如下结论
char *a="Hello";
其中的"Hello"是字符串常量,存放在常量存储区(具体存放在内存什么位置,还有待于验证),但有一点是肯定的,常量是不允许修改的。
改正:char a[6]="Hello";
或者是char *a=(char *)malloc(sizeof(char)*6);
strcpy(a,"Hello");
二、下面这道题很简单,但刚看到时也思考了一会儿,考虑怎么做会更好一些呢
输入16进制数,编写程序将其以10进制数形式输出
代码:已经上机运行通过,只要输入的16进制数合法,就能输出正确结果,如果有不对的地方,还希望明白的朋友给予指正
#include
int convert(char *p){
int i=0;
int sum=0;
while(p[i]!='