Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Перезапись переменной


Автор: supercelt 27.6.2016, 22:17
STM32. Прога - keil5

Код

char str[] = "EXECUTE";
    
        LCD_ini();
        LCD_Send_String(0, str);
        Delay_ms(1000);
        
        str[] = "set";


Нужно просто перезаписать массив str. А кеил ругается. Подскажите плз как правильно это делается?

Автор: baldman88 28.6.2016, 11:01
Массивы напрямую менять запрещено. Либо делайте в цикле поэлементно (не забыв добавить '\0' в конце), либо воспользуйтесь функциями strcpy или strncpy. Лучше использовать вторую, так как в первой, при копировании строки большей длины, чем исходная, проверка на выход за границы не происходит и можно получить ошибку. Как-то так:
Код
#include "string.h"
...
char str[] = "EXECUTE";
...
strncpy(str, "set", sizeof(str));

Поэтому, если хотите менять содержимое строки, то объявите ее просто как char str[максимально_возможная_длина_строки + 1] (плюс один нужнен для хранения символа конца строки -- '\0'). И каждый раз при изменении строки пользуйтесь функцией strncpy. Для строки на 100 символов будет так:
Код
#include "string.h"

#define MAX_LEN 101

char str[MAX_LEN];
strncpy(str, "EXECUTE", MAX_LEN);
...
strncpy(str, "set", MAX_LEN);

Так же стоит учесть в функции LCD_Send_String, что символы нужно писать до тех пор, пока не встретится символ '\0'.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)