C 不明白我为什么会出现分段错误

C 不明白我为什么会出现分段错误,c,segmentation-fault,dynamic-library,C,Segmentation Fault,Dynamic Library,当我使用签名将数组传递到动态库中的函数中时: void itoa(int n, char s[]); 从我的主函数调用它: int main(int argc, char *argv[]) { if (argc > 1) { char *arg = argv[1]; printf("%s\n", arg); } char str[15]={'0', '0', '0', '0', '0',

当我使用签名将数组传递到动态库中的函数中时:

void itoa(int n, char s[]);
从我的主函数调用它:

int main(int argc, char *argv[])
{
    if (argc > 1) {
        char *arg = argv[1];
        printf("%s\n", arg);
    }   

    char str[15]={'0', '0', '0', '0', '0',
                  '0', '0', '0', '0', '0', 
                  '0', '0', '0', '0', '\0'}; 
    itoa(INT_MIN, str);
    printf("%s\n", str);
    return 1;
}
使用gdb浏览代码时,我可以看到程序在以下行中崩溃:

s[i++] = n % 10 + '0';
注意,i的初始值在函数顶部声明为0

为什么它会崩溃


更新

请注意,它在本地工作

#include <stdio.h>
#include <limits.h>
#include "c_lib.h"

void itoa_local(int n, char s[])
{
    int min_int = 0;
    int i, sign = 0;;

    if (INT_MIN == n) {
        min_int = 10;
        n++;
    }

    if ((sign = n) < 0) n = -n;
    do {
        s[i++] = n % 10 + '0';
    } while ((n /= 10) > 0);

    if (sign < 0) s[i++] = '-';
    s[i] = '\0';
    if (min_int == 10) s[0]++;
    reverse(s);
}


int main(int argc, char *argv[])
{
    if (argc > 1) {
        char *arg = argv[1];
        printf("%s\n", arg);
    }   

    char str[15]={'0', '0', '0', '0', '0',
                  '0', '0', '0', '0', '0', 
                  '0', '0', '0', '0', '\0'}; 
    itoa_local(INT_MIN, str);
    printf("%s\n", str);
    return 1;
}
#包括
#包括
#包括“c_lib.h”
无效itoa_本地(整数n,字符s[])
{
int min_int=0;
int i,符号=0;;
如果(INT_MIN==n){
min_int=10;
n++;
}
如果((符号=n)<0)n=-n;
做{
s[i++]=n%10+'0';
}而((n/=10)>0);
如果(符号<0)s[i++]='-';
s[i]='\0';
如果(min_int==10)s[0]++;
反面;
}
int main(int argc,char*argv[])
{
如果(argc>1){
char*arg=argv[1];
printf(“%s\n”,arg);
}   
char str[15]={'0','0','0','0','0','0',',
'0', '0', '0', '0', '0', 
'0', '0', '0', '0', '\0'}; 
伊藤忠县(国际民街);
printf(“%s\n”,str);
返回1;
}

答案在最初的帖子中。我回答了我自己的问题,所以我不必删除它。主要是存档原因。

您的
itoa\u local
函数没有初始化
i
。哦,等等。Windows的libc中没有
itoa
函数吗?可能是链接的,而不是预期的。您是对的,因为某些原因,我认为int I,a=0也会将I初始化为0。谢谢你的提醒。