首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ar.drone控制程序中的故障分割

ar.drone控制程序中的故障分割
EN

Stack Overflow用户
提问于 2014-01-24 08:21:59
回答 2查看 231关注 0票数 0

我试图使用C程序来控制ar.drone。用户在文本文件中编写at命令,并将其逐一传递给程序。但是,如果我尝试使用缓冲区和sprintf语句来实现这一点,我将得到一个分段错误。

我的计划是:

代码语言:javascript
复制
char cmd[MAX_MSG],cmd2[MAX_MSG],cmd3[MAX_MSG];
snprintf(cmd,"AT*CONFIG= %u,\"general:navdata_demo\",\"TRUE\"",seq);
sendto(sd, cmd, MAX_MSG , flags, (struct sockaddr *) &droneAddr, sizeof(droneAddr));
seq++;
snprintf(cmd2,"AT*FTRIM=%u",seq);
sendto(sd, cmd2,MAX_MSG ,flags,(struct sockaddr *) &droneAddr,  sizeof(droneAddr));
seq++;
snprintf(cmd3,"AT*PMODE= %u,2",seq);
sendto(sd, cmd3, MAX_MSG , flags, (struct sockaddr *) &droneAddr,sizeof(droneAddr));
seq++;
char cmd1[MAX_MSG];
for(i=0;i<100;i++)
{ 
cmd1[strlen(cmd1)-1] = 0x0d;//change last character from new line to carriagereturn

 snprintf(cmd1,"AT*REF=%u,290718208",seq);
 printf("%s: %s\n",argv[0],cmd1);

rc = sendto(sd, cmd1, MAX_MSG , flags,  (struct sockaddr *) &droneAddr, sizeof(droneAddr));
if(rc<0) {
    printf("%s: can not send data\n",argv[0]);
    close(sd);
    exit(EXIT_FAILURE);
    }
seq++;
nanosleep(&wait_command , NULL);
}

错误是什么?有人能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-24 08:55:39

第一期

snprintf的原型是:

代码语言:javascript
复制
snprintf ( char * s, size_t n, const char * format, ... );

所以你所有的:

代码语言:javascript
复制
snprintf(cmd, "somestring", seq);

应改为:

代码语言:javascript
复制
snprintf(cmd, MAX_MSG, "somestring", seq);

第二期

代码语言:javascript
复制
char cmd1[MAX_MSG];

for(i=0;i<100;i++)
{ 
  // here cmd1 contains garbage, hence the value of strlen(cmd1) is undefined
  cmd1[strlen(cmd1)-1] = 0x0d;
}
票数 0
EN

Stack Overflow用户

发布于 2014-01-24 08:40:09

您没有提供完整的程序,但至少有一个明显的问题。

缓冲区cmd1未初始化,因此

代码语言:javascript
复制
 cmd1[strlen(cmd1)-1] = 0x0d;

可能会导致节段故障。

我想你想要的是

代码语言:javascript
复制
 cmd1[sizeof(cmd1)-1] = 0x0d;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21327724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档