Linux串口通信发生段错误
作者:互联网
从终端向串口助手发送数据,无法发送,提示段错误:
原因: 可能是数组越界
例子:
int main(int argc,char *argv[])
{
//创建套接字socked
int sockfd;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
printf("socket=%d\n",sockfd);
//定义 网络编程常用结构体 (定义了协议、发送目的ip及端口号)
struct sockaddr_in serveraddr;
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = inet_addr("192.168.31.55");
serveraddr.sin_port = htons(8081);
socklen_t addrlen = sizeof(serveraddr);
char *buf="";
while(1)
{
fgets(buf,N,stdin);
buf[strlen(buf)-1] = '\0';
// 把字符串内容发送给套接字,再发送给强制转换后的网络编程结构体 )
sendto(sockfd,buf,N,0,(struct sockaddr*)&serveraddr,addrlen);
}
close(sockfd);
return 0;
}
代码中使用的是:char* buf = “” ; 不可修改
是否可以修改,根据buf指针指向的区域是什么区域:
文字常量区 : 不可修改
全局区,栈区,堆区: 可以修改
char* a = " abc"保存的是存放的是字符串“abc”的首地址,及'a'的地址
保存的是常量,在文字常量区。
所以无法修改字符内容。
解决办法:
char buf[] = “”;
是buf指向栈区或全局区
之后编译就正常,并且可以发送给指定的ip及端口号
标签:addr,int,串口,通信,char,serveraddr,Linux,sockfd,buf 来源: https://blog.csdn.net/qq_52144697/article/details/120619887