C# klocwork报告循环中的串联问题
循环中的字符串连接。当我在klocwork中测试我的项目时,我遇到了这个bug。我在循环中连接了许多字符串,这是一个很大的错误C# klocwork报告循环中的串联问题,c#,C#,循环中的字符串连接。当我在klocwork中测试我的项目时,我遇到了这个bug。我在循环中连接了许多字符串,这是一个很大的错误 for(int j=0;j<nAttr;j++) { builder = new StringBuilder(); size=rnd.Next(1,10); for(int k=0; k<size; k++) { ch = Convert.ToChar(Convert.ToInt32(26 * rnd.Next
for(int j=0;j<nAttr;j++)
{
builder = new StringBuilder();
size=rnd.Next(1,10);
for(int k=0; k<size; k++)
{
ch = Convert.ToChar(Convert.ToInt32(26 * rnd.NextDouble() + 65)) ;
if(ch=='[' || ch==']')
j--;
else
builder.Append(ch);
}
strXml+=" "+builder.ToString();//here the bug arises
strXml+="="+"\"";
for(int j=0;j听起来您可能在循环中定义了一个变量,该变量与类中的变量同名?您希望出现哪种类型的错误?您能否发布更多的代码,以便我们了解,此操作会产生什么结果
我刚刚将您的代码废弃到一个新项目中,对代码进行了一点清理,但它似乎像预期的那样工作
StringBuilder builder;
int nAttr = 5;
int size;
char ch;
Random rnd = new Random();
for(int j=0;j<nAttr;j++)
{
builder = new StringBuilder();
builder.Append(" ");
size=rnd.Next(1,10);
for(int k=0; k<size; k++)
{
ch = Convert.ToChar(Convert.ToInt32(26 * rnd.NextDouble() + 65)) ;
if(ch=='[' || ch==']')
j--;
else
builder.Append(ch);
}
builder.Append("=\"");
Console.WriteLine(builder.ToString());
}
StringBuilder;
int-nAttr=5;
整数大小;
char ch;
随机rnd=新随机();
对于(int j=0;jKlickwork)创建一个静态分析应用程序
我认为Arunachalam将一些静态分析断言称为“bug”
当strXml是字符串类型时,静态分析可能会将strXml+=“”+builder.ToString();
显示为坏代码(“bug”)
从发布的代码来看,它肯定不是核心.NET库中的bug。您可能希望
if (ch=='[' || ch==']')
k--;
但即使这样也没有意义,因为您只能获取从“A”到“Z”的字符。如果我理解正确,听起来您的工具试图告诉您只更新一次strXml
:
builder = new StringBuilder();
for(int j=0;j<nAttr;j++)
{
builder.Append(" ");
size=rnd.Next(1,10);
for(int k=0; k<size; k++)
{
ch = Convert.ToChar(Convert.ToInt32(26 * rnd.NextDouble() + 65)) ;
if(ch=='[' || ch==']')
j--;
else
builder.Append(ch);
}
builder.Append("\"");
//...
}
strXml += builder.ToString();
builder=新的StringBuilder();
对于(int j=0;jI真的不知道你在问什么,请更具体一点:什么错误,何时发生,预期输出/实际输出,一些代码…需要更多信息,但我非常怀疑你在C#中发现了这么一个基本的错误,以至于微软的测试人员和用户还没有发现。我们需要一些代码,我同意Pax的观点-有probab这只是代码中的一个bug。我想我已经给出了代码问题到底是什么?似乎代码应该创建随机大小的随机字符串,并将它们连接到strXml。预期的行为是什么,实际发生了什么?不,这不会含糊不清。您必须使用“this”引用实例变量在这个范围内。他并没有说这是含糊不清的,这可能只是他得到的一个警告。尽管还不十分清楚。
builder = new StringBuilder();
for(int j=0;j<nAttr;j++)
{
builder.Append(" ");
size=rnd.Next(1,10);
for(int k=0; k<size; k++)
{
ch = Convert.ToChar(Convert.ToInt32(26 * rnd.NextDouble() + 65)) ;
if(ch=='[' || ch==']')
j--;
else
builder.Append(ch);
}
builder.Append("\"");
//...
}
strXml += builder.ToString();