在加入学习讨论群前,请阅读下面代码或题目,将答案或者想法作为入群口令(以下题目三选一),
谢谢合作,拒绝伸手党!(三题都做对者,可以申请群管理)
分析题目,需要分析代码中主要问题,并给出合理解释或者改进意见
题目一:
请回答C/C++类的三大特性:
题目二:请分析以下shell脚本存在的问题(语法问题或者书写问题并不是主要问题)
mathread/basefunc.sh 文件中代码如下
#!/bin/ksh
function LOG
{
typeset time=$(date +%Y%m%d)
typeset functionName=$1
typeset lineNo=$2
typeset msg=$3
typeset findNo=$(find . -name /home/log/test.log | wc -l)
if [ "X${findNo}" = "X0" ];then
touch test.log
fi
echo "[${time}][${functionName}][${lineNo}]:${msg}"
echo "[${time}][${functionName}][${lineNo}]:${msg}" >>test.log
return 0
}
function mytestfunc
{
typeset function=$1
LOG "mytestrfunc" "${LINENO}" "will test ${function}."
./"${function}"
if [ $? -ne 0 ];then
LOG "mytestfunc" "${LINENO}" "execute ${function} failed, please check!"
echo "error reason" >"/hone/log/${function}.errortest.log"
fi
return 0
}
#测试指定模块
function testfunctionModelName
{
#获取待测试模块的测试文件
typeset fileName=$1
LOG "testfunctionModelName" "${LINENO}" "${fileName}-->this is -f opt test."
mytestfunc "${fileName}"
return 0
}
#查找执行目录下测试文件
#输出文件下的所有cpp文件模拟执行测试函数或者测试文件
function FindDirFileAndFuncForTest
{
typeset fileName=$1
list=""
list=$(find ${fileName} -name "*.cpp")
echo "[${LINENO}]find file-number: $(find ${fileName} -name "*.cpp" | wc -l)"
for file in ${list}
do
testfunctionModelName "${file}"
done
return 0
}
function FindDirFileAndFunc
{
typeset fileName=$1
echo "${LINENO}-->${fileName}"
while read -r line
do
echo "${line}"
FindDirFileAndFuncForTest ${line}
done < "${fileName}"
return 0
}
function errorlog
{
typeset lognum=$(find . -name "/hone/log/*.errortest.log" | wc -l)
if [ "X${lognum}" != "X0" ];then
echo "there some error.please check!"
return 1
fi
return 0
}
mathread/dowork.sh 文件代码
#!/bin/ksh
. basefunc.sh
function main
{
##将软件运行时依赖的数据insert到数据库中,软件重新启动会读取数据库中数据
su - ${usrname} -c ${dbname}/${dbpasswd}@${IP}:${port} < patchManual.sql >>"/home/log/sql.errortest.log" 2>&1 &
if [ $? -ne 0 ];then
LOG "main" "${LINENO}" "execute patchManual.sql failed."
return 1
fi
##执行测试脚本,执行通用函数的测试用例,这里只用一个函数代替(实际执行需要切到具体业务用户下执行)
FindDirFileAndFuncForTest &
if [ $? -ne 0 ];then
LOG "main" "${LINENO}" "execute FindDirFileAndFuncForTest failed."
return 1
fi
##执行测试脚本,执行指定位置的测试函数用例,这里只用一个函数代替(实际执行需要切到具体业务用户下执行)
FindDirFileAndFunc ${path} &
if [ $? -ne 0 ];then
LOG "main" "${LINENO}" "execute FindDirFileAndFuncForTest failed."
return 1
fi
wait
errorlog
if [ $? -ne 0 ];then
LOG "main" "${LINENO}" "execute errorlog and return 1, please check!"
return 1
fi
return 0
}
main "$@"
题目三:请分析一下C/C++代码存在的问题(语法问题或者书写问题并不是主要问题)
提示:这段代码可谓是漏洞百出,这是本人刚毕业那段时间写的代码(现在贴出来都够丢人的了,错误太多了)。主要思想是,找到一段数据流中 0xdd 0xf8(图像的开始位置);0xdd 0xf9(图像的结束位置),之后把这部分写进一个*.jpg文件中,就把通过socket传输的过来的图像保存起来了。
- 数据类型有问题;
- 内存使用有问题;
- 这里有部分是打印信息,这是我摘代码时编译增加进去的。
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <stdlib.h>
// 在数据流中查找*.jpg图像的头;如果数据流空返回0x2;如果数据流没有意义返回0x3
int FindImageHead(char *filestream){
if (filestream == nullptr){
return 0x2;
}
int length=strlen(filestream) / 4;
std::cout << "length:" << length <<std::endl;
if(length<=7){
return 0x3;
}
char pixel[8] = "";
char pixel1[8] = "";
for(int i=0;i<length;++i){
strncpy(pixel, (filestream+4*i), 4);
strncpy(pixel1, (filestream+4*(i+1)), 4);
std::cout<< "pixel:" << pixel << " " << "pixel1:" << pixel1 <<std::endl;
if(*(pixel)==0xff && *(pixel1)==0xd8 ){
return i;
}
}
return 0;
}
// 在数据流中查找*.jpg图像的尾
int FindImageTail(char *filestream){
if (filestream == nullptr){
return 0x2;
}
int length=strlen(filestream) / 4;
if(length<=7){
return 0x3;
}
char pixel[8] = "";
char pixel1[8] = "";
for(int i=0;i<length;++i){
strncpy(pixel, (filestream+4*i), 4);
strncpy(pixel1, (filestream+4*(i+1)), 4);
if(*(pixel)==0xff && *(pixel1)==0xd9 ){
return i;
}
}
return 0;
}
int main(int argc, char *argv[]){
char imageStream[]="0x110x000x120xff0xd80x000x000x010x000x010x000x230x200x200xff0xd9";
int imageHead = FindImageHead(imageStream);
std::cout<<"imageHead:"<<imageHead<<std::endl;
int imageTail = FindImageTail(imageStream);
std::cout<<"imageTail:"<<imageTail<<std::endl;
return 0;
}
学习讨论QQ群:41703435