是itoa在闹鬼。修改后的程序如下,仅针对以上谈及错误,其他漏洞未关注:
int main(){
int i,j,k,l,m,p;
string str; //存放4位数字的字符串
char num[4];
char val[4];
for(i = 1000;i <= 9999;i++)
{
for(j = 2;j <= i;j++)
{
if(i % j == 0)
break;
}
if(j >= i)
{
//itoa(i,num,10); //有漏洞的操作
str = to_string(i);
for(size_t idx=0; idx<str.size(); ++idx){ //遍历字符串,取出各个字符,现在为4个
num[idx]=str[idx];
}
for(l = 0,k = 3;k >= 0;k--,l++)
{
val[l] = num[k];
}
p=stoi(val); //p = atoi(val);
for(m = 2;m <= p;m++)
{
if(p % m == 0)
break;
}
if(m >= p)
{
i = atoi(num);
printf("%d ",i);
}
}
}
printf("\n");
}