我必须为我的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)
我看到缓冲区溢出:
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)在你试图把任何东西放入其中之前.
| 归档时间: |
|
| 查看次数: |
1106 次 |
| 最近记录: |