簡體   English   中英

C中固定大小的緩沖區數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM