Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C itoa功能不工作_C_String_Itoa - Fatal编程技术网

C itoa功能不工作

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);

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