Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1933070
  • 博文数量: 312
  • 博客积分: 10170
  • 博客等级: 上将
  • 技术积分: 3667
  • 用 户 组: 普通用户
  • 注册时间: 2005-10-26 15:27
个人简介

可干百业,无一精通。

文章分类

全部博文(312)

分类:

2008-03-05 10:15:40

1.printf的输出问题
printf("%d",total);//this is right
printf(total);//this is wrong
printf("hello");//but this is right
2.整数类型的长度
char 1个子节,8位
unsigned short [int]
[signed] short int
short 2个字节,16位

[signed] int
unsigned int
int 型在vc里是4个子节,32位,也可能是16位,2个字节
long [int]
unsigned long [int]
long型都是32位,4个字节
float 32 ,4
double 64,8
long double 128,16
char 8,一个字节,存放的实际上是字符的ascii码
3、找出错误并改正
char *my_cpy(char* src, int len){
char dest[1024];
memcpy(dest, src, len);
return dest;
}
上面的函数是否有问题,如果有指出其所在,如果没有,给出函数功能描述。
答案:
1。数组应该初始化
2。memcpy不判断是否越界,所以调用前应该判断是否越界
3。不应该返回rest,因为这个数组是在函数内部申请的,所以函数结束之后就会消失,指针也会变成“野指针”,所以指向非法地址
最后一个比较隐蔽
char *memcpy( char *dest, const char *src,int len )
{
char* pDest = (char*)dest;
char* pSrc = (char*)src;
int pos;
for(pos=0;pos{
pDest[pos] = pSrc[pos];
}
return (char*)pDest;
}
存在地问题就是没有判断指针是否非法assert(dest !=NULL || src != NULL); 条件为 FLASE 显示
不调用其他函数,写一个memcpy的函数,函数原型为
void *memcpy(void *dest, void *src, size_t length);
-----------利用好断言---------
/* memcpy ─── 拷贝不重叠的内存块 */
void memcpy(void* pvTo, void* pvFrom, size_t size)
{
void* pbTo = (byte*)pvTo;
void* pbFrom = (byte*)pvFrom;
ASSERT(pvTo != NULL && pvFrom != NULL);
/* 内存块重叠吗?如果重叠,就使用memmove */
ASSERT(pbTo>=pbFrom+size || pbFrom>=pbTo+size);
while(size-->0)
*pbTo++ == *pbFrom++;
return(pvTo);
}
-----------------------
常见函数编程:
char *strcpy(char *strDest, const char *strSrc)
{
ASSERT(strDest != NULL && strSrc != NULL);
char *addr = strDest;
while(*strDest++=*strSrc++)
NULL; //NULL可以省略,但更有利于编译器发现错误
}
return addr;
}

void *memcpy(void *dest, const void *src, int count)
{
ASSERT(dest!= NULL && src!= NULL);
for(int i=0; i< cout; i++)
{
dest = src;
}
}
int strcmp(const char*str1, const char *str2)
{
while (str1 != NULL && str2 != NULL)
{
if(*str1 < *str2) return -1;
else if(*str1 > *str2) return 1;
else { str1++; str2++;}
}
if(str1 == NULL && str2 != NULL)
return -1;
else if(str1 != NULL && str2 == NULL)
return 1;
else return 0;
}

//way2: more compact
int strcmp(const char*str1, const char *str2)
{
int i = strlen( str1 );
int j;
for(j=0; j<=i; j++)
{
if(str1[j] > str2[j]) return 1; //if str2 terminates, then str2[j]=0, str1[j]>str2[j], return 1;
else if(str1[j] < str2[j]) return -1;
else if(str1[j] == '') return 0;
}
}
//way3: optimize again.
int strcmp(const char * str1, const char * str2 )
{
while(1)
{
if(*str1 > *str2) return 1;
else if(*str1 < *str2) return -1;
else if(*str1 == '') return 0;
str1++;str2++;
}
}
阅读(4128) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-03-05 10:18:38

华为3COM招聘数据通信工程师试题 笔试中有英译汉。请翻译一下ipv6的路由发现机制。是将arp和irdp和icmp重定向的融合等等。 1 H.323协商。(笔试题) 2 ipsec为什么是三层的。l2tp为什么是二层的? 答:ipsec是需要三层IP路由的。l2tp是打穿的。 反问:那l2tp不需要ip吗? 无语。 3 ospf中包的ttl值是多少?(回忆不清了。可能是吧。但没听说过有介绍啊。) 4 为什么要划分区域? 答:用来防止LSA在整个区域内泛洪。减少对CPU和内存的损耗。 反问:那area 0的一条路由条目发生了变化。area 1要不要知道呢? 答:要。 反问:既然要的话,那不还是要泛洪吗?那划分区域的话就没有什么意义了嘛。 答:可以通过缺省路由的方式或建立stub区域等方法。 反问:正面回答。 无语。 5 MPLS VPN的标签一共有几层。内网的标签放在哪里。 答:骨干里传递一层。到Mp-ibgp邻居一层。跨域一层。好象TE还可以加一层标签。内网的标签放在lfib表里。 对方没怎么做声。但估计答得不好。

chinaunix网友2008-03-05 10:17:33

华为3com笔试试题目 1 华为3com笔试试题目,看看你能答多少? 2 ipsec为什么是三层的。l2tp为什么是二层的? 3 ospf中包的ttl值是多少? 4 为什么要划分区域? 6 MPLS中RD和RT的作用分别是什么? 7 RR防止环路的机制。 8 BGP控制out-bound用_____,控制进来的用_____ 9 ospf是工作在哪个协议上的? 10 ospf的LSA类型。 11 简述OSPF的基本工作机制。 12 ppp的lcp和ncp协商过程。 13 PSTN的信令控制有哪几种? 14sloari 8.0查看进程的命令是什么?linux 7.3查看IP的命令是什么 15 IP是5.32.0.0,掩码255.224.0.0。请问最大的有效地址是多少 17 LX/LH的有效距离是多少? 18 IP 包头几个字节? 20 CQ能不能有一种流量统治第二种流量,(dominate)? 21 FTP下载一个文件完成。有几个TCP连接

chinaunix网友2008-03-05 10:16:52

华为硬件笔试题 一 选择 13个题目,没有全部抄下来,涉及的课程有电路,模拟电路,数字电路,信号与系统,微机原理 ,网络,数字信号处理 有关于 1.微分电路 2.CISC,RISC 3.数据链路层 二 填空 10个题目,没有全部抄下来,涉及的课程有电路,模拟电路,数字电路,信号与系统,微机原理 ,网络,数字信号处理 有关于 1.TIC6000 DSP 2.二极管 3.RISC 4.IIR 三 简答 1.x(t)的傅立叶变换为X(jw)=$(w)+$(w-PI)+$(w-5) h(t)=u(t)-u(t-2) 问: (1),x(t)是周期的吗? (2),x(t)*h(t)是周期的吗? (3),两个非周期的信号卷积后可周期吗? 2.简述分组交换的特点和不足 四 分析设计 1.波形变换题目 从正弦波->方波->锯齿波->方波,设计电路 2.74161计数器组成计数电路,分析几进制的 3.用D触发器构成2分频电路 4.判断MCS-51单片机的指令正确还是错误,并指出错误原因 (