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,但该值会一直保存,所谓的不可重入...
---------------------------------------------------------------------