我想從無符號字符緩沖區中洗掉字符
C語言:
unsigned char buff[n] = "...."; // len n byte array
我想過使用 memmove
memmove(buff pos, buff pos m, ???);
誰能幫忙看看 ??? 是,我得到了洗掉 m 個字符的正確結果,而不管 ??? 值(n - pos 到 n 之間的任何值)
m 和 pos 的值小于 n 并且 buff 是一個位元組陣列(一個資料包)
uj5u.com熱心網友回復:
好吧,這段代碼根本沒有優化,但顯示了我認為最容易理解的方法:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void delete(int p, const char * str){
char *done;
int t = strlen(str);
if(p>t||p<=0){
return;
}else{
strcpy(done, str);
strcpy(done p-1,str p);
}
strcpy(str, done);
}
int main(int argc, char **argv){
char buff[] = "abcdefghi";
delete(3, buff);
printf(buff);//it prints abcdefghi
return 0;
}
這個想法很簡單,strcpy 接受兩個引數,第一個是指向目標字串(str)的指標,第二個是指向源的指標。
我們首先將整個原始字串(str)復制到我們的臨時字串(done)
然后我們只需復制str p( p 是字串上從 1 開始到 strlen 結束的位置,因為 strlen 不包括我們檢查到最后一個位置的終止符位元組)到done p-1我們想要擦除/重疊位置 p 的字符
最后我們只是將 , 復制done到原始字串(str)中,我們已經成功擦除了一個字符
此外,由于我們使用的是 strcpy,該函式負責處理終止符位元組,我們也不必太注意釋放臨時指標,盡管編譯器會抱怨原始字串的轉換,這很容易解決,但是為了便于弄清楚我沒有回答的邏輯
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450307.html
