2015-08-27 58 views
0

我收到一條消息,我在rmsg變量中收到。如果這個緩衝區中的第一個字符是'1',我想刪除這個字符併發送剩餘的消息。刪除接收緩衝區中的第一個字符

那麼,有沒有辦法做這樣的事情:

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

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

如果這不是正確的方向任何人都可以告訴我怎麼樣?

+3

只是要清楚嗎?你需要刪除第一個字符,然後發送新的字符串? – Haris

+0

爲了更清楚地說明,發送後是否要使用字符串(刪除第一個字符)? –

+0

''1''不是一個字符串,而是一個'char'。這些是C和其他語言中非常不同的數據類型。使用正確的術語將有助於他人理解你所要求的。 – Olaf

回答

2

您可以使用第二個字符作爲基址發送和減1的長度:

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

我想這是你想在這種情況下,要實現什麼:

if (rmsg[0] == '1') 
    memmove(rmsg, rmsg+1, strlen(rmsg)); 

這裏使用memmove()功能就像我上面張貼後,您rmsg字符串將不包含第一炭其以前的內容(這是==「1」),所以現在你可以很容易地把它不管你想要的。

現場演示:如果你要複製的字符串新的字符串想到的第一個字符,你可以做這樣的事情http://www.cplusplus.com/reference/cstring/memmove/

2

-

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

有一些想法:'+ 1'不是必需的,因爲複製的字符串會更短,因此有足夠的空間用於結尾的NULL。你爲什麼認爲'1'後面有一個空格?你爲什麼認爲OP想要跳過它,他不這麼說?此外,[避免'strcpy'](http://stackoverflow.com/questions/1258550/why-should-you-use-strncpy-instead-of-strcpy),長度已知('rmsglen')。 – DarkDust

+0

@DarkDust'1'後面的空格只是我的想法,如果它在那裏。而關於'+ 1'是的,這是不需要的。我沒有注意到'rmsglen'因此沒有考慮到這一點。但感謝您的意見,我編輯了我的答案。 – ameyCU

相關問題