将const char发送到函数并超出范围

时间:2014-03-04 21:13:05

标签: c sockets memory

我正在尝试将我的端口号发送到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来说太大了。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

我认为端口应该是端口的字符表示,基于文档中的说明http://pubs.opengroup.org/onlinepubs/009695399/functions/getaddrinfo.html

char szPort[20];
sprintf(szPort, "%d", port);

答案 1 :(得分:1)

如果getaddrinfo需要字符串,则必须先将portint)转换为一个字符串。这是一种方式:

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的回答。