我希望函数“ ordenafile”使用candidatos.000-candidatos.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);
sname[12]=si[0];
ordenafile(sname);
}
itoa(i,si2,10);
sname2[12]=si2[0];
sname[13]=si2[1];
ordenafile(sname);
}
最佳答案
您的程序导致缓冲区溢出,itoa
将两个字符写入大小为1
的缓冲区。要解决此问题,请将其设置为char si[2];
。您忘记了空终止符。
您还需要增加si2
的大小。
为避免此类错误,请使用snprintf
代替itoa
(无论如何这都是非标准函数),例如:
snprintf(si2, sizeof si2, "%d", i);
这样就永远不会出现缓冲区溢出。如果您弄错了缓冲区大小,那么您将得到错误的数字,这并不是很糟糕。
关于c - itoa函数不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27180567/