我正在爲AVR編碼一段代碼。我想構建一個可以推送和彈出的隊列,並且此隊列是一個字符數組(字符串)。所以,當我把 '一':
['b', 'c', 'd', 'e', 'f']
變爲:
['a','b', 'c', 'd', 'e', 'f']
當我彈出,f
出來。我已經寫了這段代碼,但它只將1個字符推送到隊列中,就好像它刪除了整個隊列。這裏是我的隊列代碼:
作爲隊列中的字符數組C
char queue[50] = "";
char* queue_tail = &queue[0];
char* queue_head = &queue[0];
void queue_push(char l_item)
{
if(queue_head != &queue[strlen(queue) - 1]) //if queue is not full, do the job
{
//Push all elements one step further
char* traveler = queue_head;
for(; traveler != queue_tail; --traveler)
{
*(traveler+1) = *traveler;
*traveler = '';
}
++queue_head;
*queue_tail = l_item;
}
}
char queue_pop()
{
char temp = *queue_head;
*queue_head = '';
--queue_head;
return temp;
}
這是我的主要功能:
#include <mega32.h>
#include <alcd.h>
#include <delay.h>
#include <string.h>
void main(void)
{
const char text[] = "Hello world!";
int col_counter = 0;
char* p_head = '';
lcd_init(32);
p_head = &text[12];
while(1)
{
lcd_clear();
if(col_counter + strlen(text) > 32)
{
queue_push(*p_head);
--p_head;
}
lcd_gotoxy(col_counter, 0);
lcd_puts(text);
lcd_gotoxy(0,0);
lcd_puts(queue);
delay_ms(200);
++col_counter;
}
}
任何幫助,將不勝感激。提前致謝。
'strlen(隊列)'可能爲0,則'queue [strlen(queue)-1]'超出範圍。 – MikeCAT
爲什麼'strlen(隊列)'爲0? –
因爲你用空字符串初始化了'queue'。 – MikeCAT