思创集团深圳市思创科达技术有限公司 认领
深圳市
介绍公司信息及岗位的工作内容
先做题:<br><br>试题1:<br><br>void test1()<br><br>{<br><br> char string[10];<br><br> char* str1 = "0123456789";<br><br> strcpy( string, str1 );<br><br>}<br><br> 试题2:<br><br>void test2()<br><br>{<br><br> char string[10], str1[10];<br><br> int i;<br><br> for(i=0; i<10; i++)<br><br> {<br><br> str1[i] = 'a';<br><br> }<br><br> strcpy( string, str1 );<br><br>}<br><br> 试题3:<br><br>void test3(char* str1)<br><br>{<br><br> char string[10];<br><br> if( strlen( str1 ) <= 10 )<br><br> {<br><br> strcpy( string, str1 );<br><br> }<br><br>}<br><br> 解答:<br><br> 试题1字符串str1需要11个字节才能存放下(包括末尾的’’),而string只有10个字节的空间,strcpy会导致数组越界;<br><br> 对试题2,如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(string, str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10 分;<br><br> 对试题3,if(strlen(str1) <= 10)应改为if(strlen(str1) < 10),因为strlen的结果未统计’’所占用的1个字节。<br><br>试题4:分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)<br><br> 解答:<br><br> BOOL型变量:if(!var)<br><br> int型变量: if(var==0)<br><br> float型变量:<br><br> const float EPSINON = 0.00001;<br><br> if ((x >= - EPSINON) && (x <= EPSINON)<br><br> 指针变量: if(var==NULL)<br><br>试题5:编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh” <br><br> 函数头是这样的:<br><br>//pStr是指向以''结尾的字符串的指针<br><br>//steps是要求移动的n<br><br>void LoopMove ( char * pStr, int steps )<br><br>{<br><br> //请填充...<br><br>}<br><br> 解答:<br><br> 正确解答1:<br><br>void LoopMove ( char *pStr, int steps )<br><br>{<br><br> int n = strlen( pStr ) - steps;<br><br> char tmp[MAX_LEN]; <br><br> strcpy ( tmp, pStr + n ); <br><br> strcpy ( tmp + steps, pStr); <br><br> *( tmp + strlen ( pStr ) ) = '';<br><br> strcpy( pStr, tmp );<br><br>}<br><br> 正确解答2:<br><br>void LoopMove ( char *pStr, int steps )<br><br>{<br><br> int n = strlen( pStr ) - steps;<br><br> char tmp[MAX_LEN]; <br><br> memcpy( tmp, pStr + n, steps ); <br><br> memcpy(pStr + steps, pStr, n ); <br><br> memcpy(pStr, tmp, steps ); <br><br>}<br><br>试题6:编写类String的构造函数、析构函数和赋值函数,已知类String的原型为:<br><br>class String<br><br>{ <br><br> public: <br><br> String(const char *str = NULL); // 普通构造函数 <br><br> String(const String &other); // 拷贝构造函数 <br><br> ~ String(void); // 析构函数 <br><br> String & operate =(const String &other); // 赋值函数 <br><br> private: <br><br> char *m_data; // 用于保存字符串 <br><br>};<br><br> 解答:<br><br>//普通构造函数<br><br>String::String(const char *str) <br><br>{<br><br> if(str==NULL) <br><br> {<br><br> m_data = new char[1]; // 得分点:对空字符串自动申请存放结束标志''的空<br><br> //加分点:对m_data加NULL 判断<br><br> *m_data = ''; <br><br> } <br><br> else<br><br> {<br><br> int length = strlen(str); <br><br> m_data = new char[length+1]; // 若能加 NULL 判断则更好 <br><br> strcpy(m_data, str); <br><br> }<br><br>}<br><br>// String的析构函数<br><br>String::~String(void) <br><br>{<br><br> delete [] m_data; // 或delete m_data;<br><br>}<br><br>//拷贝构造函数<br><br>String::String(const String &other) // 得分点:输入参数为const型<br><br>{ <br><br> int length = strlen(other.m_data); <br><br> m_data = new char[length+1]; //加分点:对m_data加NULL 判断<br><br> strcpy(m_data, other.m_data); <br><br>}<br><br>//赋值函数<br><br>String & String::operate =(const String &other) // 得分点:输入参数为const型<br><br>{ <br><br> if(this == &other) //得分点:检查自赋值<br><br> return *this; <br><br> delete [] m_data; //得分点:释放原有的内存资源<br><br> int length = strlen( other.m_data ); <br><br> m_data = new char[length+1]; //加分点:对m_data加NULL 判断<br><br> strcpy( m_data, other.m_data ); <br><br> return *this; //得分点:返回本对象的引用<br><br>}<br><br>等等。。
正在加载验证码...
思创集团深圳市思创科达技术有限公司软件工程师面试经验&面试问题
面试问题
介绍公司信息及岗位的工作内容
面试过程
先做题:<br><br>试题1:<br><br>void test1()<br><br>{<br><br> char string[10];<br><br> char* str1 = "0123456789";<br><br> strcpy( string, str1 );<br><br>}<br><br> 试题2:<br><br>void test2()<br><br>{<br><br> char string[10], str1[10];<br><br> int i;<br><br> for(i=0; i<10; i++)<br><br> {<br><br> str1[i] = 'a';<br><br> }<br><br> strcpy( string, str1 );<br><br>}<br><br> 试题3:<br><br>void test3(char* str1)<br><br>{<br><br> char string[10];<br><br> if( strlen( str1 ) <= 10 )<br><br> {<br><br> strcpy( string, str1 );<br><br> }<br><br>}<br><br> 解答:<br><br> 试题1字符串str1需要11个字节才能存放下(包括末尾的’’),而string只有10个字节的空间,strcpy会导致数组越界;<br><br> 对试题2,如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(string, str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10 分;<br><br> 对试题3,if(strlen(str1) <= 10)应改为if(strlen(str1) < 10),因为strlen的结果未统计’’所占用的1个字节。<br><br>试题4:分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)<br><br> 解答:<br><br> BOOL型变量:if(!var)<br><br> int型变量: if(var==0)<br><br> float型变量:<br><br> const float EPSINON = 0.00001;<br><br> if ((x >= - EPSINON) && (x <= EPSINON)<br><br> 指针变量: if(var==NULL)<br><br>试题5:编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh” <br><br> 函数头是这样的:<br><br>//pStr是指向以''结尾的字符串的指针<br><br>//steps是要求移动的n<br><br>void LoopMove ( char * pStr, int steps )<br><br>{<br><br> //请填充...<br><br>}<br><br> 解答:<br><br> 正确解答1:<br><br>void LoopMove ( char *pStr, int steps )<br><br>{<br><br> int n = strlen( pStr ) - steps;<br><br> char tmp[MAX_LEN]; <br><br> strcpy ( tmp, pStr + n ); <br><br> strcpy ( tmp + steps, pStr); <br><br> *( tmp + strlen ( pStr ) ) = '';<br><br> strcpy( pStr, tmp );<br><br>}<br><br> 正确解答2:<br><br>void LoopMove ( char *pStr, int steps )<br><br>{<br><br> int n = strlen( pStr ) - steps;<br><br> char tmp[MAX_LEN]; <br><br> memcpy( tmp, pStr + n, steps ); <br><br> memcpy(pStr + steps, pStr, n ); <br><br> memcpy(pStr, tmp, steps ); <br><br>}<br><br>试题6:编写类String的构造函数、析构函数和赋值函数,已知类String的原型为:<br><br>class String<br><br>{ <br><br> public: <br><br> String(const char *str = NULL); // 普通构造函数 <br><br> String(const String &other); // 拷贝构造函数 <br><br> ~ String(void); // 析构函数 <br><br> String & operate =(const String &other); // 赋值函数 <br><br> private: <br><br> char *m_data; // 用于保存字符串 <br><br>};<br><br> 解答:<br><br>//普通构造函数<br><br>String::String(const char *str) <br><br>{<br><br> if(str==NULL) <br><br> {<br><br> m_data = new char[1]; // 得分点:对空字符串自动申请存放结束标志''的空<br><br> //加分点:对m_data加NULL 判断<br><br> *m_data = ''; <br><br> } <br><br> else<br><br> {<br><br> int length = strlen(str); <br><br> m_data = new char[length+1]; // 若能加 NULL 判断则更好 <br><br> strcpy(m_data, str); <br><br> }<br><br>}<br><br>// String的析构函数<br><br>String::~String(void) <br><br>{<br><br> delete [] m_data; // 或delete m_data;<br><br>}<br><br>//拷贝构造函数<br><br>String::String(const String &other) // 得分点:输入参数为const型<br><br>{ <br><br> int length = strlen(other.m_data); <br><br> m_data = new char[length+1]; //加分点:对m_data加NULL 判断<br><br> strcpy(m_data, other.m_data); <br><br>}<br><br>//赋值函数<br><br>String & String::operate =(const String &other) // 得分点:输入参数为const型<br><br>{ <br><br> if(this == &other) //得分点:检查自赋值<br><br> return *this; <br><br> delete [] m_data; //得分点:释放原有的内存资源<br><br> int length = strlen( other.m_data ); <br><br> m_data = new char[length+1]; //加分点:对m_data加NULL 判断<br><br> strcpy( m_data, other.m_data ); <br><br> return *this; //得分点:返回本对象的引用<br><br>}<br><br>等等。。