My function needs to return a string and it builds it using indexing. Ideally I'd like to use that return value in printf(). I understand that given my return type, I need to return a char string pointer, but I can't make reg a string pointer because I need to access individual elements. Also, I know I'd need to malloc() it, but I don't know how I'd free up that memory if it's used as an argument to printf.
Here's my code:
char * printRegister(int num) {
char reg[] = "$error";
memset(reg, 0, sizeof(reg));
switch(num)
{
case 0:
strcpy(reg, "$zero");
break;
case 1:
strcpy(reg, "$at");
break;
case 2:
case 3:
reg[0] = '$';
reg[1] = 'v';
reg[2] = num - 2 + '0';
reg[3] = '\0';
break;
case 4:
case 5:
case 6:
case 7:
reg[0] = '$';
reg[1] = 'a';
reg[2] = num - 4 + '0';
reg[3] = '\0';
break;
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
reg[0] = '$';
reg[1] = 't';
reg[2] = num - 8 + '0';
reg[3] = '\0';
break;
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
case 23:
reg[0] = '$';
reg[1] = 's';
reg[2] = num - 16 + '0';
reg[3] = '\0';
break;
case 24:
case 25:
reg[0] = '$';
reg[1] = 't';
reg[2] = num - 16 + '0';
reg[3] = '\0';
break;
case 26:
case 27:
reg[0] = '$';
reg[1] = 'k';
reg[2] = num - 26 + '0';
reg[3] = '\0';
break;
case 28:
strcpy(reg, "$gp");
break;
case 29:
strcpy(reg, "$sp");
break;
case 30:
strcpy(reg, "$fp");
break;
case 31:
strcpy(reg, "$ra");
break;
default:
strcpy(reg, "error");
break;
}
return reg;
}
Is there a way to do this?