我正在尝试将我的端口号发送到const char *的函数。接收时的存储器地址超出范围。有人可以告诉我这样做的正确方法是什么?
这是我的代码
在main()
内 socket_open("host", 12345); // host and port number
在功能方面
socket_open(char * host,int port) {
int error;
struct addrinfo hints;
struct addrinfo *res;
...
error = getaddrinfo(host,(char *)port,&hints,&res);
我在getaddrinfo上获得了细分。看起来12345对于char来说太大了。我该如何解决这个问题?
答案 0 :(得分:1)
我认为端口应该是端口的字符表示,基于文档中的说明http://pubs.opengroup.org/onlinepubs/009695399/functions/getaddrinfo.html
char szPort[20];
sprintf(szPort, "%d", port);
答案 1 :(得分:1)
如果getaddrinfo
需要字符串,则必须先将port
(int
)转换为一个字符串。这是一种方式:
char portStr[MAX_PORT_STR_LEN];
snprintf(portStr, MAX_PORT_STR_LEN, "%d", port);
现在您可以将其发送到getaddrinfo
:
error = getaddrinfo(host, portStr, &hints, &res);
答案 2 :(得分:1)
参数端口中有一个int。然后将它传递给一个将其解释为字符指针的函数,并开始从int中的地址读取字符,直到找到零。但是地址指出了你的可读内存段。或者,如果没有找到零,它会一直读取,直到出现分段错误。
将您的号码正确转换为字符串。
请参阅@Raz Wilson的回答。