gpt4 book ai didi

c - sockaddr_in 导致段错误?

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

我现在正在用 C 语言创建一个服务器/客户端系统,我在客户端部分遇到了一些麻烦。据我所知,我需要使用 sockaddr_in 才能连接到服务器。但是,我每次都遇到段错误。我相信 sockaddr_in 与它有关,因为评论它和它在程序后面的引用修复了段错误。

代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>

int main(int argc, char** argv)
{
int Csock;
int con;
char *data = 0;
char buf[101] = "";
struct sockaddr_in addr;

Csock = socket(AF_INET, SOCK_STREAM, 0);

addr.sin_family = AF_INET;
addr.sin_port = htons(3435);

con = connect(Csock, (struct sockaddr*) &addr, sizeof(addr));

write(con, "Text", sizeof("Text"));
*data = read(con, buf, 100);
puts(data);
return 0;
}

遗憾的是,我对 C 还很陌生,所以我能想到的就这么多了......谁能告诉我消除段错误的方法?

谢谢!

最佳答案

快速评论:

data 是一个指向 char 的指针,它不指向分配的内存,所以:

*data = read(con, buf, 100);

无效!您不能取消引用 NULL 指针。

此外,read 返回 ssize_t,而不是 char,所以可能:

ssize_t nread = read(con, buf, 100);

然后用printf打印出nread。

关于c - sockaddr_in 导致段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4661909/

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