Hi,
I have one question about Cortexm3 from smartfusion device from actel. Could you pls help me? I add follwing codes into retarget.c and then add retarget.c into source code group and find : printf function works.however scanf function doesn't. anybody knows why?
int fputc(int ch, FILE *f) { return ((int)ITM_SendChar(ch)); } int fgetc(FILE *f) { int i=0; i=ITM_ReceiveChar(); if((-1)!=i) return ((int)ITM_SendChar((uint32_t)i)); else return (0); }
printf("hello world\n\r"); // when executed, string displayed in debug(printf)window scanf("%s",str); // when executed, hard fault occurs
I asked how he did ensure it - not how he could (or should) have ensured it...
And we did get an answer too, containing:
volatile unsigned char str='\0';
and
scanf("%s\n",&str);
The huge problem with scanf() is that you may specify a width attribute. But no one is making sure you do. And since people tends to test with good data, huge amounts of programs have been released with sprintf() and no width attribute set. But then again, the world is full of programs that calls scanf() without checking the return value, happilly doing their magic even without all parameters.