C itoa功能不工作
我希望我的函数“ordenafile”接受CandidateTos.000-CandidateTos.068。 由于某种原因,我认为si[0]被窃听了,因为如果我让程序打印si[0],它就会崩溃。有人知道为什么吗C itoa功能不工作,c,string,itoa,C,String,Itoa,我希望我的函数“ordenafile”接受CandidateTos.000-CandidateTos.068。 由于某种原因,我认为si[0]被窃听了,因为如果我让程序打印si[0],它就会崩溃。有人知道为什么吗 int i; char si[1],si2[2],sname[20]="candidatos.00",sname2[20]="candidatos.0"; for(i=0;i<=68;i++){ if (i<=9){ itoa(i,si,10);
int i;
char si[1],si2[2],sname[20]="candidatos.00",sname2[20]="candidatos.0";
for(i=0;i<=68;i++){
if (i<=9){
itoa(i,si,10);
sname[12]=si[0];
ordenafile(sname);
}
itoa(i,si2,10);
sname2[12]=si2[0];
sname[13]=si2[1];
ordenafile(sname);
}
inti;
char si[1],si2[2],sname[20]=“candidateos.00”,sname2[20]=“candidateos.0”;
对于(i=0;i您的程序导致缓冲区溢出,itoa
将两个字符写入大小为1
的缓冲区。若要解决此问题,请将其设置为char si[2];
。您忘记了空终止符
您还需要增加si2
的大小
为避免此类错误,请使用snprintf
而不是itoa
(这是一种非标准功能),例如:
那么你将永远不会得到缓冲区溢出。如果你得到的缓冲区大小错误,那么你就得到了错误的数字,这不是很糟糕。尝试使用sprintf(str,“%d”,value)
而不是itoa
,因为itoa
不是一个标准函数。对于初学者来说,si[1]
对于C字符串来说太短了,因为si[1]
应该是0
。
snprintf(si2, sizeof si2, "%d", i);