Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从接收的缓冲区中删除第一个字符_C - Fatal编程技术网

C 从接收的缓冲区中删除第一个字符

C 从接收的缓冲区中删除第一个字符,c,C,我在rmsg变量中收到一条消息。如果此缓冲区中的第一个字符是“1”,我想删除此字符并发送消息的其余部分 那么有没有办法做到这一点: if(rmsg[0]=='1') //remove the first character in rmsg strncpy(newbuf,rmsg,rmsglen) 如果这不是正确的方向,有人能告诉我怎么做吗?您可以使用第二个字符作为发送的基址,并将长度减少1: if (rmsglen > 0 && rmsg[0]=='1')

我在
rmsg
变量中收到一条消息。如果此缓冲区中的第一个字符是“1”,我想删除此字符并发送消息的其余部分

那么有没有办法做到这一点:

if(rmsg[0]=='1')

//remove the first character in rmsg
strncpy(newbuf,rmsg,rmsglen)

如果这不是正确的方向,有人能告诉我怎么做吗?

您可以使用第二个字符作为发送的基址,并将长度减少1:

   if (rmsglen > 0 && rmsg[0]=='1')
      send (&rmsg[1], rmsglen-1);

我想这就是你在这种情况下想要实现的:

if (rmsg[0] == '1') 
    memmove(rmsg, rmsg+1, strlen(rmsg));
在这里,在使用了我上面发布的
memmove()
函数之后,您的
rmsg
字符串将包含其以前的内容,而不包含第一个字符(即=='1'),因此现在您可以轻松地将其发送到任何您想要的地方

现场演示:

有关
memmove()
func:

的详细信息如果要将字符串复制到新字符串,除了第一个字符,您可以执行以下操作-

char rmsg[]="1 I can go";
char *newbuf;
newbuf=malloc(strlen(msg));
if(rmsg[0]=='1')
{
    strncpy(newbuf,&rmsg[1],rmsglen-1);  
}
free(newbuf);

小例子-

只是为了清楚起见?您需要删除第一个字符,然后发送新字符串?为了进一步澄清,您是否要在发送后使用该字符串(删除第一个字符)?
'1'
不是字符串,而是
字符。在C和任何其他语言中,这些数据类型都是非常不同的。使用正确的术语有助于其他人理解您的问题。您的问题解决了吗,@CodeHeadgood?有几个想法:
+1
是不需要的,因为复制的字符串会更短,因此有足够的空间容纳后面的NULL。你为什么认为
1
后面有空格?为什么你认为OP想跳过它,他没有这么说?另外,长度已经知道了(
rmsglen
)。@DarkDust
1
后面的空格就是我的想法,以防它在那里。关于
+1
是的,这是不需要的。我没有注意到
rmsglen
,因此没有考虑到这一点。但是谢谢你的输入,我编辑了我的答案。