[英]fixed size buffer array in C
我試圖編寫一個程序,其中緩沖區的大小應該是固定的。固定我的意思是上限要固定。 程序應該將第一個元素向左移動數組並刪除緩沖區數組末尾的新元素。
示例:輸出應類似於:1234 2345 3456 其中最后一位是輸入
這是我嘗試過的
#include<stdio.h>
#include<string.h>
int main(){
char buffer[5]="1234"; //5 for '\0'
//char buffer[]="";
char pattern[]="1234";
char ch;
int idxToDel = 0;
while(1){
scanf("%c",&ch);
memmove(&buffer[idxToDel], &buffer[idxToDel + 1], strlen(buffer) - idxToDel);
buffer[3]=ch;
printf("%s",buffer);
}
return 0;
}
程序中的第一個問題是這個語句:
scanf("%c",&ch);
當你輸入一個字符,然后按“Enter”鍵,按下后“回車”鍵, '\\n'
的輸入流,並在下次調用中還留有性格scanf
,在你無限的while
循環,會消耗它和下一ch 的值將是\\n
字符。
為了解決這個問題,在格式字符串中的轉換說明符之前放置一個空格:
scanf(" %c",&ch);
第二個問題是這個語句:
memmove(&buffer[idxToDel], &buffer[idxToDel + 1], strlen(buffer) - idxToDel);
這在邏輯上是不正確的。
由於idxToDel
值為 0,因此此memmove
將嘗試將strlen(buffer) - 0
(= 4) 字節從源&buffer[0 + 1]
到目標&buffer[0]
(衰減到buffer
)。 但在您的情況下,您只需要移動 3 個字符。
memmove()
函數不會檢查源中的任何終止空字符 - 它總是准確復制字節數。
所以,你可以這樣做:
#include<stdio.h>
#include<string.h>
int main(){
char buffer[5]="1234"; //5 for '\0'
char ch;
int indxtomove = 1;
printf ("%s\n", buffer);
while(1){
scanf(" %c",&ch);
memmove(buffer, &buffer[indxtomove], strlen(buffer) - indxtomove);
buffer[3]=ch;
printf("%s\n",buffer);
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.