gpt4 book ai didi

c - itoa 功能不起作用

转载 作者:行者123 更新时间:2023-11-30 19:18:05 26 4
gpt4 key购买 nike

我希望我的函数“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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com