gpt4 book ai didi

c - 从 argv[] 参数转换为 uint16_t 时出现问题

转载 作者:行者123 更新时间:2023-11-30 14:32:12 25 4
gpt4 key购买 nike

我已经在两台电脑之间创建了一个 TCP 套接字连接,现在我希望客户端能够从命令行选择 IP 和端口(./client ip port),但我在转换 argv 参数时遇到了一些问题端口的实际类型 (uint16_t)。这是建立连接的函数的代码:抱歉变量的意大利语命名;我用“-”标记了给我错误的行

 int connettiAlServer(char **argv, char *indirizzoServer) {
int socketDesc;
- uint16_t porta = (uint16_t)argv[2];
indirizzoServer = ipResolver(argv);
struct sockaddr_in mio_indirizzo;
mio_indirizzo.sin_family = AF_INET;
- mio_indirizzo.sin_port = htons(porta);
inet_aton(indirizzoServer, &mio_indirizzo.sin_addr);
if ((socketDesc = socket(PF_INET, SOCK_STREAM, 0)) < 0)
perror("Impossibile creare socket"), exit(-1);
else
printf("Socket creato\n");
if (connect(socketDesc, (struct sockaddr *)&mio_indirizzo,
sizeof(mio_indirizzo)) < 0)
perror("Impossibile connettersi"), exit(-1);
else
printf("Connesso a %s\n", indirizzoServer);
return socketDesc;
}

关于第一个标记行,错误如下:

warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
45 | uint16_t porta = (uint16_t)argv[2];

最佳答案

argv 本质上是一个字符串数组。您无法通过简单的转换将字符串转换为数字。您需要使用类似 strtoul 的函数:

uint16_t porta = strtoul(argv[2], NULL, 10);
<小时/>

更具体地说,当您执行 (uint16_t) argv[2] 时会发生的事情是转换 argv[2] 中的指针> 到 uint16_t。结果值将是实际指针本身的 16 个低位。

关于c - 从 argv[] 参数转换为 uint16_t 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59930078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com