系统相关
首页 > 系统相关> > Linux串口通信发生段错误

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