我收到一條消息,我在rmsg
變量中收到。如果這個緩衝區中的第一個字符是'1',我想刪除這個字符併發送剩餘的消息。刪除接收緩衝區中的第一個字符
那麼,有沒有辦法做這樣的事情:
if(rmsg[0]=='1')
//remove the first character in rmsg
strncpy(newbuf,rmsg,rmsglen)
如果這不是正確的方向任何人都可以告訴我怎麼樣?
我收到一條消息,我在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」),所以現在你可以很容易地把它不管你想要的。
現場演示:如果你要複製的字符串新的字符串想到的第一個字符,你可以做這樣的事情http://www.cplusplus.com/reference/cstring/memmove/
-
char rmsg[]="1 I can go";
char *newbuf;
newbuf=malloc(strlen(msg));
if(rmsg[0]=='1')
{
strncpy(newbuf,&rmsg[1],rmsglen-1);
}
free(newbuf);
小例子:http://ideone.com/1dJjAn
更多memmove()
FUNC - https://ideone.com/IotuBy
有一些想法:'+ 1'不是必需的,因爲複製的字符串會更短,因此有足夠的空間用於結尾的NULL。你爲什麼認爲'1'後面有一個空格?你爲什麼認爲OP想要跳過它,他不這麼說?此外,[避免'strcpy'](http://stackoverflow.com/questions/1258550/why-should-you-use-strncpy-instead-of-strcpy),長度已知('rmsglen')。 – DarkDust
@DarkDust'1'後面的空格只是我的想法,如果它在那裏。而關於'+ 1'是的,這是不需要的。我沒有注意到'rmsglen'因此沒有考慮到這一點。但感謝您的意見,我編輯了我的答案。 – ameyCU
只是要清楚嗎?你需要刪除第一個字符,然後發送新的字符串? – Haris
爲了更清楚地說明,發送後是否要使用字符串(刪除第一個字符)? –
''1''不是一個字符串,而是一個'char'。這些是C和其他語言中非常不同的數據類型。使用正確的術語將有助於他人理解你所要求的。 – Olaf