-1

I can't figure out why test is not passed properly to test1

#include <Arduino.h>

char *test1;
char *status_reply(char *test) {
        int ans_rel = 1;
        int ans_led = 0;
        int ans_sw = 1;
        sprintf(test,"%d%d%d",ans_rel,ans_sw,ans_led);
        Serial.println(test);
}

void setup() {
        Serial.begin(9600);
        status_reply(test1);
        Serial.println(test1);
}

void loop() {
        // put your main code here, to run repeatedly:
}
3
  • While commenting on an answer to a previous question of yours, I suggested you read the section Arrays and Pointers of the C FAQ. Judging from from this new questions, it seems you failed to do so. Please, read it! Otherwise you will spend lots of time asking here related (and off-topic) questions. – Edgar Bonet Aug 22 '18 at 10:39
  • @EdgarBonet well I did read it. I must say that the main purpose or motivation of declaring a char as char* - is quite unclear – Guy . D Aug 22 '18 at 10:41
  • To be clear- I understand the technicalities of such definitions, but not when or why to use each one of them. It is a whole different from Python – Guy . D Aug 22 '18 at 10:45
2

This is not about Arduino. It is C. You have only a pointer to char now. You must allocate memory for the c-string.

char test1[128];

If you pass pointer to sprintf, the function will write to memory where the pointer points. Something somewhere in memory will be overwritten and the following print will print the string, but later the memory will be used for something else and your c-string disappear.

2
  • thank you. There's something I'm missing : 1) In any other case if I would init char *test1="hello world" at the beginning, and print it Serial.println(test1) - I would have get proper value. 2) In code here - when I create test inside it does print it as expected, but not passing its value to test2 ? – Guy . D Aug 22 '18 at 6:48
  • char *test1="hello world" would be a pointer to a global allocated constant c-string and should be const char *test1="hello world". I enhanced the answer. – Juraj Aug 22 '18 at 6:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.