2014-12-29 7 views
0

Я использовал массив и хочу удалить содержимое, поместив null в массив [0], но он не работает. Пример ... Если я нахожу Jesper, то serial.print (nameBuffer [1]) возвращает e.Точка массива 0 не сбрасывает содержимое

Временное решение, которое я использую, представляет собой цикл for, чтобы поместить нуль во все его пространства.

char name1[9] = "Jesper"; 
char nameBuffer[9]; 

void setup() 
{ 
    Serial.begin(9600); 
} 

void loop() 
{  

int i = 0; 
nameBuffer[0] = 0; 
Serial.print(nameBuffer[1]); 
Serial.println(" All reset\n"); 

while(Serial.available() == 0) 
{ 
    // wait for data to be send 
} 

while(Serial.available() > 0) 
{ 
    int inByte = Serial.read(); 
    delay(50); 
    nameBuffer[i] = char(inByte); 
    i++; 
    Serial.print("Recieved bytes: "); 
    Serial.println(inByte,DEC); 
} 
    Serial.print("Searching for: "); 
    Serial.println(nameBuffer); 
} 
+1

Пожалуйста, добавьте, какой язык вы используете –

+0

Пожалуйста, укажите, какой язык вы используете? Почему массив 0 должен сбросить все содержимое массива? Сброс в массиве [0] приведет к сбросу значения только в этом месте – Ajay

+2

. Почему, по вашему мнению, установка 'nameBuffer [0]' влияет на то, что находится в 'nameBuffer [1]'? –

ответ

1

nameBuffer представляет собой массив из 9 char элементов. Каждый из этих элементов имеет значение типа char.

Установка char объекта 0 не удалить его из массива (0 или '\0', нулевой символ, является действительным значением char, как и любой другой), а также не влияет на элементы, которые следуют за ней.

Теперь, если вы лечение содержания nameBuffer как строка (определяются стандарт C, как «непрерывная последовательность символов, прерываемых и в то числе первого нуля символа»), а затем хранить '\0' в nameBuffer[0] будет заставьте его содержать пустую строку . Он имеет длину , равную 0, но все еще есть 9 char значений, хранящихся в массиве. Так что это:

printf("%s", nameBuffer); 

ничего не печатать, но namebuffer[1] все еще действует char объект, содержащий любое значение было последнее сохраненное в нем.

Не допускайте, чтобы печать нулевого символа или отправка его по последовательному порту ничего не делала. Если вы не хотите печатать каждый символ в своем массиве, вам понадобится некоторая логика, чтобы избежать печати символов, которые вам не нужны.

Кстати, ваш код, как представляется, C++, а не C. Вы перегруженные версии Serial.print, один принимая char аргумент и один принимая char*; C не поддерживает перегрузку. И char(inByte) - это C++; это синтаксическая ошибка в C. (BTW, приведение не требуется там, значение будет конвертировано неявно.)

Смежные вопросы