gpt4 book ai didi

C:分配中的不兼容类型

转载 作者:太空宇宙 更新时间:2023-11-04 05:03:57 26 4
gpt4 key购买 nike

我正在编写一个程序来检查端口是否在 C 中打开。特别是一行将参数之一复制到 char 数组。但是,当我尝试编译时,它说:

error: incompatible types in assignment

这是代码。错误在 addr

的赋值上
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <netdb.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char **argv) {
u_short port; /* user specified port number */
char addr[1023]; /* will be a copy of the address entered by u */
struct sockaddr_in address; /* the libc network address data structure */
short int sock = -1; /* file descriptor for the network socket */

port = atoi(argv[1]);
addr = strncpy(addr, argv[2], 1023);
bzero((char *)&address, sizeof(address)); /* init addr struct */
address.sin_addr.s_addr = inet_addr(addr); /* assign the address */
address.sin_port = htons(port); /* translate int2port num */

sock = socket(AF_INET, SOCK_STREAM, 0);
if (connect(sock,(struct sockaddr *)&address,sizeof(address)) == 0) {
printf("%i is open\n", port);
}
if (errno == 113) {
fprintf(stderr, "Port not open!\n");
}
close(sock);
return 0;
}

我是 C 的新手,所以我不确定它为什么会这样做。

最佳答案

addr 是一个数组,因此您不能直接分配给它。

addr = strncpy(addr, argv[2], 1023); 更改为 strncpy(addr, argv[2], 1023);

返回指向您传入的内容的指针,但不需要该值。单独调用 strncpy 会将字符串从 argv[2] 复制到 addr


注意:我注意到有时您传递数组的地址,有时您传递数组本身而不传递运算符的地址。

当参数只要求char*...

虽然两者都可以工作,但传入 addr 而不是 &addr 更正确。 &addr 给出一个指向字符数组的指针 char (*)[1023]addr 给出一个 char*这是第一个元素的地址。这通常无关紧要,但是如果您进行指针运算,那将会有很大的不同。

关于C:分配中的不兼容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2589982/

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