2016-03-23 3 views
-4

Мне нужно получить последовательный ввод с консоли на строку. Когда пользователь вводит «xyz» в консоль и нажимает enter, ввод «Строка» должен быть определен как «xyz». С этого момента я буду интерпретировать строку. Это то, что я в настоящее время:C++ read Последовательный ввод для строки

Defintion:

char input[] = {0}; 
char bufferChar[] = {0}; 

Использование:

bool canInput = true; 
while(canInput == true) { 
    if(Serial.available() > 0) { 
    char bufferChar2 = Serial.read(); 
    bufferChar[1] = bufferChar2; 
    strcpy(input[1], input[1]); 
    strcat(input[1], bufferChar[1]); 
    Serial.print(input); 
    tft.print(input); 
    } 
} 

Я новичок в C, так что извините, если этот код плохо. Спасибо advace, Линус

+0

Пожалуйста, добавьте код. – Harry

+0

@harry добавил мое текущее состояние –

+0

Это больше похоже на C++, а не C. Вы программируете на C# или * управляете * C++? –

ответ

0
char bufferChar[] = {0}; 

Это объявляет массив с одним элементом.

bufferChar[1] = bufferChar2; 

Это попытка установить значение 2-го элемента в массиве из одного элемента. Переполнение буфера. Неопределенное поведение.

strcpy(input[1], input[1]); 

Это не имеет никакого смысла. Помимо сомнительной причины для того, чтобы хотеть strcpy() что-то сверху, input является массивом char, поэтому input[1] - это одно значение char, а strcpy() принимает char * аргументов.

Эта строка, должно быть, заставила ваш компилятор высвободить кучу предупреждений и/или ошибок. Пожалуйста, не игнорируйте диагностические сообщения от вашего компилятора. Это компилятор, говорящий вам, что вы делаете это неправильно.

strcat(input[1], bufferChar[1]); 

Таким образом, мы пытаемся strcat() другая пара char с вместо char * с. Это не будет работать лучше, чем попытка сделать strcpy() то же самое.

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

Вам нужно:

  1. Объявить input и charBuffer массивы, которые имеют достаточный размер, для того, что вы собираетесь делать с ними.

  2. Проходные указатели, не char s, как для strcpy() (если вам нужно), и strcat().

  3. char * параметров, как для strcpy(), так и для strcat() массивов должны быть строками с нулевым символом. Вы несете ответственность за '\ 0'-завершение каждого параметра. Хотя есть несколько способов получить это «бесплатно», если вы сомневаетесь, явно 0-завершите их.

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