东南融通笔试题

来源:互联网 发布:vue require引入js 编辑:程序博客网 时间:2024/05/17 07:28

感觉题很简单,但是还有很多问题是值得思考的

一、

int main()

{

  char *a="Hello";

  char *b="world/n";

  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 <stdio.h>
int convert(char *p){
 int i=0;
 int sum=0;
 while(p[i]!='/0'){
  if(p[i]>='0'&&p[i]<='9')
   sum=sum*16+p[i]-'0';
  else
   sum=sum*16+p[i]-55;
  i++;
 }//while
 return sum;
}//convert

int main()
{
 char a[4];
 gets(a);
 printf("16
进制 %s 转换为 10进制 %d/n",a,convert(a));
 return 0;
}

原创粉丝点击