char variable do not show value

I have a problem. Declare the variable below

char devid[] = "v0BAAC63B4E69044" ;

But when I run it in the code below the screen appears only a small square where it should appear the value of "devid"

void loop(){...

   sprintf(postmsg,"GET /pushingbox?devid=%c&status=%d HTTP/1.1",devid,t);

where is the problem?

sprintf(postmsg,"GET /pushingbox?devid=%s&status=%d HTTP/1.1",devid,t);

thanks, problem solved

sprintf() is a very powerful and flexible function, but most programs only use a small fraction of that power. As a result, code size is bigger than it might need be. The code below shows how to have the same functionality but with smaller code size.

void setup() {
  char devid[]  = "v0BAAC63B4E69044";
  char postmsg[50];
  char temp[5];
  int t = 1;
  
  Serial.begin(9600);

  sprintf(postmsg,"GET /pushingbox?devid=%s&status=%d HTTP/1.1",devid,t);
/*
  strcpy(postmsg, "GET /pushingbox?devid="); 
  strcat(postmsg, devid);
  strcat(postmsg, "&status=");
  strcat(postmsg, itoa(t, temp, 10));
  strcat(postmsg, " HTTP/1.1");
*/ 
  Serial.println(postmsg);
  
}

void loop() {

}

As the program stands, it takes 3400 bytes on my machine. Comment out the sprintf() call and uncomment the rest and it performs the same, but with 2124 bytes. Under some circumstances, the memory savings can be important.

Actually, there is no need to concatenate strings for an HTTP request. A simple sequence of consecutive calls to Serial.print() will work fine.

there is no need to concatenate strings for an HTTP request

@aarg: Correct. I was just trying to maintain the "flavor" of the original code.

Better yet, leave the constant strings in flash memory, where they really belong.