sockaddr_in导致段错误?

Cur*_*raw 0 c sockets include

现在正在C中创建一个服务器/客户端系统,我在客户端部分遇到了一些麻烦.从我所看到的,我需要使用sockaddr_in,以便我可以连接到服务器.但是,我每次都得到一个段错误.我相信sockaddr_in与它有关,正如评论它,它在程序后面的引用修复了segfault.

码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

可悲的是,我对C很陌生,所以这就像我能想到的那样......谁能告诉我一种消除段错的方法?

谢谢!

Pey*_*man 6

快速评论:

data是指向char的指针,它不指向已分配的内存,因此:

*data = read(con, buf, 100);
Run Code Online (Sandbox Code Playgroud)

是无效的!您不能取消引用NULL指针.

另外,read返回ssize_t,而不是char,所以也许:

ssize_t nread = read(con, buf, 100);
Run Code Online (Sandbox Code Playgroud)

然后打印出nread printf.