Hy У меня есть образец кода bleow, который должен написать «MSG» таким образом, чтобы ЖК-дисплей (бегущий текст), и когда он доходил до конца, он снова стирался, но когда я выделить память для «LCD» (который должен быть 10 символов + завершение 0) заполняет его связкой случайных символов. Sample pictureСтранные символы при распределении памяти для char *
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void delay(unsigned int mseconds)
{
clock_t goal = mseconds + clock();
while (goal > clock());
}
int main()
{
int LCDSize = 10;
int MSGSize;
char* LCD = (char *)malloc(LCDSize+1);
char* MSG = (char *)malloc(80);
MSG = "This is a long message, probabli will move.";
MSGSize = strlen(MSG);
if (MSGSize <= LCDSize)
{
printf(MSG);
}
else
{
char* tmpMSG;
int j = 0;
while (j < 2)
{
for (int i = 0; i < MSGSize - LCDSize + 1; i++)
{
tmpMSG = MSG+i;
strncpy(LCD, tmpMSG, LCDSize);
strcat(LCD,"\0");
printf(LCD);
delay(200);
system("cls");
}
printf("----------");
j++;
}
}
getchar();
return 0;
}
Что может быть проблема?
Использование 'printf (MSG);' это не очень хорошая идея; вы должны использовать 'printf ("% s ", MSG);'. Здесь не так важно, потому что пользователь не может управлять содержимым сообщения, а сообщение не содержит процентных символов (если все работает правильно), но в целом с данными, предоставленными пользователем, для печати, то, что вы использовали, является потенциально смертельным. Они называются «уязвимостьми форматированной строки». –