在xcode上崩溃但在Windows上没有崩溃.SIGABRT?

Dar*_*arc 1 c

我必须为我的C编程类编写一个程序,将IPV4地址转换为IPV6.我们提供了执行转换的功能(以下代码执行实际转换).我运行此代码时在XCode中遇到问题.我已经使用了断点,并确定它在击中sprintf()线时会崩溃.它崩溃了:Program received signal: “SIGABRT”. sharedlibrary apply-load-rules all.我在基于Windows的编译器上测试了完全相同的代码,运行正常.什么会导致它在一个而不是另一个上失败?我的程序必须在Windows上运行,而不是Mac用于评分过程,如果没有解决这个问题,那么我将在Windows上编写并编写其余的程序,但我更愿意使用Mac,所以任何帮助都是值得赞赏的.

    strncpy(IPV6, "0000:0000:0000:0000:0000:0000:", 30); 
    sscanf(input, "%u.%u.%u.%u", &a, &b, &c, &d); 
    sprintf(hexIP, "%02X%02X:%02X%02X", a, b, c, d );
    strncat(IPV6, hexIP, 9); 
Run Code Online (Sandbox Code Playgroud)

谢谢

编辑

int makeIPV6(const char input[25], char IPV6[40], int style)  
{
        unsigned int a, b, c, d, e, f;
        char hexIP[9];
        char hexMAC[24];
        printf("Stage 2\n");
        strncpy(IPV6, "0000:0000:0000:0000:0000:0000:", 30);
        sscanf(input, "%u.%u.%u.%u", &a, &b, &c, &d);
        sprintf(hexIP, "%02X%02X:%02X%02X", a, b, c, d );
        strncat(IPV6, hexIP, 9);

        return strlen(IPV6)
}
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 6

我看到缓冲区溢出:

char hexIP[9];
/*...*/
sprintf(hexIP, "%02X%02X:%02X%02X", a, b, c, d );
Run Code Online (Sandbox Code Playgroud)

您的格式字符串将产生9个字符,但sprintf将包含nul终止符.尝试制作hexIP十个字符.

并注意乔伊亚当斯所说的或memset(IPV6, '\0', 40)在你试图把任何东西放入其中之前.