#include <stdio.h> #include <stdlib.h> #include <string.h> unsigned int GetIpv4(char *ipStr) { unsigned int ip = 0; unsigned int octet; int shift = 0; char * token = strtok(ipStr,"."); while (token != NULL && shift <= 24) { octet = atoi(token); ip |= (octet << shift); shift += 8; token = strtok(NULL, "."); } return ip; } int main() { char *MyIp = "192.168.28.251"; unsigned int IP = GetIpv4(MyIp); printf("IP = 0x%08x\n", IP); return 0; },此程序中,strtok报错
时间: 2024-04-11 14:28:35 浏览: 111
C标准库函数集
5星 · 资源好评率100%
在你的代码中,`strtok`函数可能会报错,这是因为 `strtok` 函数在每次调用时都会修改传入的字符串,而你传入的是一个指向常量字符串的指针。为了解决这个问题,你可以将 `MyIp` 改为一个可修改的字符数组,如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned int GetIpv4(char *ipStr)
{
unsigned int ip = 0;
unsigned int octet;
int shift = 0;
char * token = strtok(ipStr,".");
while (token != NULL && shift <= 24)
{
octet = atoi(token);
ip |= (octet << shift);
shift += 8;
token = strtok(NULL, ".");
}
return ip;
}
int main() {
char MyIp[] = "192.168.28.251";
unsigned int IP = GetIpv4(MyIp);
printf("IP = 0x%08x\n", IP);
return 0;
}
```
通过将 `MyIp` 定义为字符数组,而不是指向常量字符串的指针,你就可以在 `strtok` 函数中传递可修改的字符串了。这样就能够避免 `strtok` 函数报错的问题。
阅读全文