This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

sprintf

Hello!

I am trying to use sprintf, but get no result (C51, version 5.20).

char xdata command [80], i=100;
strcpy (command, "Hello!"); // now command contains "Hello!"
sprintf (command, "Test %d", i); // command has not changed
Why would sprintf not work?
Thank you for any help!
Holger

Parents
  • Jon,

    What I initialy did is I took a function I wrote using C166 that uses
    a bunch of sprintf commands, and copied it into my C51 source code.
    Now, my sprintf commands that work fine with C166 don't work with
    C51.
    Is there a major difference?

    After executing the lines:

    char xdata command [80];
    strcpy (command, "Hello");
    sprintf (command, "Just a text");
    
    using C166, the value of command is: "Just a text".
    using C51, the value of command is still "Hello", and didn't get changed
    by sprintf.
    Same result with any possible format string in sprintf.
    Can there be something wrong with my C51 version?
    Holger

Reply
  • Jon,

    What I initialy did is I took a function I wrote using C166 that uses
    a bunch of sprintf commands, and copied it into my C51 source code.
    Now, my sprintf commands that work fine with C166 don't work with
    C51.
    Is there a major difference?

    After executing the lines:

    char xdata command [80];
    strcpy (command, "Hello");
    sprintf (command, "Just a text");
    
    using C166, the value of command is: "Just a text".
    using C51, the value of command is still "Hello", and didn't get changed
    by sprintf.
    Same result with any possible format string in sprintf.
    Can there be something wrong with my C51 version?
    Holger

Children
  • OK, I got it to work just fine. Here's what I did.

    1. Create a new project.

    2. Select the Intel 8052 from the device database.

    3. Add the following file to the project:

    #include <stdio.h>
    #include <string.h>
    
    char xdata command [80];
    
    void main (void)
    {
    strcpy (command, "Hello");
    sprintf (command, "Just a text");
    
    while (1)
      {
      }
    }
    

    4. Compile and link. Note that I set no compiler or linker options.

    5. Start the debugger and set a watchpoint on command (type ws command in the command window).

    6. Single-step thru the program. I see command get set to "hello" and then set to "Just a text".

    If you repeat these steps do you still have trouble?

    Jon

  • Just a note Jon, while (1); may cause compilers to emit a diagnostic. Using for(;;); will not. I've been caught replacing while's with for's in projects where no warnings were permitted at the highest warning level.

    A boring point, I admit.

    Regards.

    - Mark

  • Yeah,

    Back in the old days,

    while (1);

    actually generated code with many compilers while

    for(;;);

    did not.

    I mainly use while(1) because it's immediately obvious what it does.

    I interview about 2 people a week who claim to be C programmers who cannot tell me what for(;;) does!!! So, I try not to give an answer that generates even MORE questions. :-)

    Jon