栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux串口通信发生段错误

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux串口通信发生段错误

从终端向串口助手发送数据,无法发送,提示段错误:

原因: 可能是数组越界
例子:

int main(int argc,char *argv[])
{
//创建套接字socked
    int sockfd;
    sockfd = socket(AF_INET, SOCK_DGRAM, 0); 
    printf("socket=%dn",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] = '';
// 把字符串内容发送给套接字,再发送给强制转换后的网络编程结构体 )
        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及端口号

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/296646.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号