buff給定一個長度為 的位元組陣列n:
unsigned char buff[n] = "....." // len n
我想洗掉m位置的字符pos,
0 < pos, m, pos m < n
我嘗試使用memmove:
memmove(buff pos, buff pos m, n - (pos m) 1);
但這不適用于位元組陣列,因為我們沒有 '\0' 終止符來表示這個 buff(但我們知道它的長度)
如何洗掉兩者之間的位元組?任何人請幫助
編輯:樣本輸入,
位置資料
0000 03 00 02 ef 02 f0 80 64 00 08 03 eb 70 82 e0 40
0010 00 ff 30 00 00 00 00 b3 47 43 00 00 00 00 00 00
0020 00 1e 040 0 c4 00 0 0 0 0 0 0 65 00 66
0030 00 61 00 75 00 6c 00 74 00 41 00 6c 00 74 00 53
假設我想從資料包中洗掉突出顯示的位元組。
新包,
位置資料
0000 03 00 02 ef 02 f0 80 64 00 08 03 00 00 00 00 00
0010 00 00 44 00 65 00 66 00 61 00 75 00 6c 00 74 00
0020 41 00 6c 00 7
uj5u.com熱心網友回復:
這將m在不終止空字符的情況下擦除陣列中的字符。
int main()
{
int pos = 1, m = 3;
unsigned char arr[8] = {1,2,3,4,5,6,7,8};
memmove(arr pos, arr pos m, sizeof(arr)/sizeof(arr[0]) - pos - m);
// if required to zero-out the remaining elements
memset(arr sizeof(arr)/sizeof(arr[0]) - m, 0, m);
for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i )
printf("%hhu ", arr[i]);
return 0;
}
輸出:1 5 6 7 8 0 0 0
uj5u.com熱心網友回復:
你可能想要這樣的東西:
#include <stdio.h>
#include <string.h>
void Display(const char buff[], int nb)
{
for (int i = 0; i < nb; i )
printf("%d ", buff[i]);
printf("\n");
}
int main()
{
unsigned char buff[20] = { 0,1,2,3,4,5 };
// buff has room for 20 elements
int nbelements = 6; // but there are only 6 meaningful elements
Display(buff, nbelements);
int pos = 1; // delete from element 1
int nbtodelete = 2; // delete 2 elements
memmove(buff pos, buff pos nbtodelete, nbelements - pos - 1);
nbelements -= nbtodelete;
Display(buff, nbelements);
}
輸出:
0 1 2 3 4 5
0 3 4 5
這很不言自明。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450306.html
上一篇:從陣列中洗掉所有數字
