Passing in a char[] then using EEPROM.put() fails

I haven't passed char arrays around much, I usually use char*
But this syntax seems to work... until it comes to using EEPROM.put(). I feel like the local var and param var are pretty much the same, but apparently EEPROM.put() sees a difference.
I am baffled by this. Help is appreciated.

#include <EEPROM.h>

void setup() {
  while (!Serial);
  Serial.begin(9600);

  EEPROM.put(0, "00");

  char c_arr_01[3] = "11";
  fun(c_arr_01);
}

void fun(char c_param_01[]) {
  char c_local_01[3] = "22";
  char temp[3];

  Serial.println("Print out or vars...");

  // just a couple c strings it would seem.  I have compared each char in each of these strings and they're all equivalent
  Serial.print("c_local_01: ");
  Serial.println(c_local_01);

  Serial.print("c_param_01: ");
  Serial.println(c_param_01);

  Serial.println("Now put/get from EEPROM and print out...");

  // put the local var to EEPROM, get it back, print it out
  EEPROM.put(0, c_local_01);
  EEPROM.get(0, temp);
  Serial.print("c_local_01 from EEPROM: ");
  Serial.println(temp);

  // put the param var to EEPROM, get it back, print it out
  EEPROM.put(0, c_param_01);
  EEPROM.get(0, temp);
  Serial.print("c_param_01 from EEPROM: ");
  Serial.println(temp);  
}

void loop(){}

output

Print out or vars...
c_local_01: 22
c_param_01: 11
Now put/get from EEPROM and print out...
c_local_01 from EEPROM: 22
c_param_01 from EEPROM: ⸮

What board?

Nano chg old bootloader, ide's maybe a year old

Have you checked to see if the parameter variable is being stored in eeprom as a pointer, then being read back as an array? The compiler knows the size of the local char arrays, but does not know the size of the array being passed to the function, only that the parameter variable is a char pointer to an array.

david_2018:
Have you checked to see if the parameter variable is being stored in eeprom as a pointer, then being read back as an array?

I'll try to see if that's what's going on.

david_2018:
The compiler knows the size of the local char arrays, but does not know the size of the array being passed to the function, only that the parameter variable is a char pointer to an array.

Ok, that's a really good reason for this to not work. EEPROM.put() is documented to work with custom Structs, but the compiler would know its size.

Yes, seems to be writing the address to EEPROM:

#include <EEPROM.h>

void setup() {
  while (!Serial);
  Serial.begin(9600);

  EEPROM.put(0, "00");

  char c_arr_01[3] = "11";
  fun(c_arr_01);
}

void fun(char c_param_01[]) {
  char c_local_01[3] = "22";
  char temp[3];

  Serial.println("Print out or vars...");

  // just a couple c strings it would seem.  I have compared each char in each of these strings and they're all equivalent
  Serial.print("c_local_01: ");
  Serial.println(c_local_01);

  Serial.print("c_param_01: ");
  Serial.println(c_param_01);

  Serial.println("Now put/get from EEPROM and print out...");

  // put the local var to EEPROM, get it back, print it out
  EEPROM.put(0, c_local_01);
  EEPROM.get(0, temp);
  Serial.print("c_local_01 from EEPROM: ");
  Serial.println(temp);
  
  int i;
  EEPROM.get(0, i);
  Serial.print("c_local_01 as an int: ");
  Serial.println(i);

  // put the param var to EEPROM, get it back, print it out
  EEPROM.put(0, c_param_01);
  EEPROM.get(0, temp);
  Serial.print("c_param_01 from EEPROM: ");
  Serial.println(temp);

  EEPROM.get(0, i);
  Serial.print("c_param_01 as an int: ");
  Serial.println(i);

  i = c_local_01;
  Serial.print("address of c_local_01: ");
  Serial.println(i);
  
  i = c_param_01;
  Serial.print("address of c_param_01: ");
  Serial.println(i);
}

void loop(){}

output

Print out or vars...
c_local_01: 22
c_param_01: 11
Now put/get from EEPROM and print out...
c_local_01 from EEPROM: 22
c_local_01 as an int: 12850
c_param_01 from EEPROM: ⸮
c_param_01 as an int: 2292
address of c_local_01: 2289
address of c_param_01: 2292