2011-03-19 00:28:14|?次阅读|上传:wustguangh【已有?条评论】发表评论
10.下面代码有什么问题?
void test2()
{
char string[10], str1[10];
for(i=0; i<10;i++)
{
str1[i] ='a';
}
strcpy(string, str1);
}
数组越界
---------------------------------------------------------------------
11.下面代码有什么问题?
void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}
==数组越界
==strcpy拷贝的结束标志是查找字符串中的 因此如果字符串中没有遇到 的话 会一直复制,直到遇到 ,上面的123都因此产生越界的情况
建议使用 strncpy 和 memcpy
---------------------------------------------------------------------
12.下面代码有什么问题?
#define MAX_SRM 256
DSN get_SRM_no()
{
static int SRM_no; //是不是这里没赋初值?
int I;
for(I=0;I<MAX_SRM;I++,SRM_no++)
{
SRM_no %= MAX_SRM;
if(MY_SRM.state==IDLE)
{
break;
}
}
if(I>=MAX_SRM)
return (NULL_SRM);
else
return SRM_no;
}
系统会初始化static int变量为0,但该值会一直保存,所谓的不可重入...
---------------------------------------------------------------------