Ну, во-первых, вам не хватает объявления 'case' в вашем операторе switch, а также разрывы в конце оператора. Попробуйте изменить свой код на это:
char* f(int i) {
int i;
char buffer[20];
switch ( i ) {
case 1: strcpy( buffer, "string1"); break;
case 2: strcpy( buffer, "string2"); break;
case 3: strcpy( buffer, "string3"); break;
default:
strcpy(buffer, "defaultstring"); break;
}
return buffer;
}
Кроме того, вы переопределяете свой параметр i
локальной переменной с именем i
. Так что удалите это:
char* f(int i) {
char buffer[20];
switch ( i ) {
case 1:
strcpy( buffer, "string1");
break;
case 2:
strcpy( buffer, "string2");
break;
case 3:
strcpy( buffer, "string3");
break;
default:
strcpy(buffer, "defaultstring");
break;
}
return buffer;
}
Наконец, вы возвращаете указатель на символ, который указывает на локально статически объявленный массив символов с именем buffer
. buffer
выпадает из области видимости, как только возвращается указатель на его первый элемент (что делает ваш оператор return). Это означает, что вы получите указатель на переменную, которой больше не существует. Чтобы это исправить, вы можете передать указатель на буфер в функцию, например так:
void f(char *buffer, int i) {
switch ( i ) {
case 1:
strcpy( buffer, "string1");
break;
case 2:
strcpy( buffer, "string2");
break;
case 3:
strcpy( buffer, "string3");
break;
default:
strcpy(buffer, "defaultstring");
break;
}
}
Эта последняя версия должна работать, при условии, что вы убедитесь, что buffer
достаточно длинный, чтобы принять строку. Если вы действительно хотите сделать его безопасным, возьмите также длину buffer
и сравните ее с длиной копируемой строки.