Hi i am having a problem with the sprintf function. i don't know what i am doing wrong. i created a function where i use sprintf to separate the digits of a decimal number, and the first time that i called the function it works fine. The second time the sprintf starts when the first time left, and so on. The variable looks something like this the first time: "0123" and the second time: "0123123" I don't know if i have to reset a pointer (or how to do it) so everytime i call the function it starts at the beginning of the array. the code looks something like that:
void send_code (void) { int n; if (oper_code < 1000){ n = sprintf (code_char, "%d", 0); } n += sprintf (code_char+n, "%d", oper_code); . . . } void main (void) { . . . while (1) { send_code(); } }
You're talking in riddles. For anybody to offer meaningful help, you absolutely have to show a reproducible test case: i.e. actual, complete source code of an example that exhibits the problem, any non-default compiler options you use, plus any input you feed it, the exact results, and possibly how you extracted those results from the running program. For starters: you said later that 'n' was initialized --- well, in the source you show it rather clearly is not (or rather: only half the time). You also said The variable looks something like this the first time: "0123" and the second time: "0123123" If so, you must have caused undefined behaviour, since code_char is only 5 characters long, so there's absolutely no way it could ever hold an 8-byte string like the above.
Again, "n" is not the problem, but anyway, here is the code and the "exact" results of the simulation on the computer, which is the same results as when I burn the chip. And about the size of code_char, it looked weird to me as well, but that is exactly the problem i am having, i think it keeps writing to the next position of the memory instead of going to zero.
int oper_code; char code_char[5]; void send_code (void) { int n; int p; n=0; p=0; if (oper_code < 1000){ n = sprintf (code_char, "%d", 0); } n += sprintf (code_char+n, "%d", oper_code); } void main (void) { oper_code = 132; while (1) { send_code(); }
code_char[] is not big enough to handle more than one send_code() invocation when oper_code is 132.
Please ignore my comment.
View all questions in Keil forum