У меня есть string
в main
, и я хотел бы передать адрес этой строки функции, которая будет редактировать содержимое этой строки. Я не хочу использовать malloc.C: Как я могу редактировать C-строку в функции без использования malloc
Мой код в настоящее время выглядит следующим образом:
int main(){
char* str = "Hello";
char* para1[] = {"Tea", "Coffee"};
printf("str: %s\n para1: %s\n", str, para1[0]);
my_func(str, ¶1);
printf("str: %s\n para1: %s\n", str, para1[0]);
return 1;
}
int my_func(char* str, char** para1){
printf("str: %s\n", str);
str[0] = 'W';
para1[0] = "Popcorn";
return 1;
}
Я не понимаю, как я могу изменить первую букву строки из H
в W
Не могли бы вы объяснить, что я делаю неправильно?
1) 'char * str =" Hello ";' -> 'char str [] =" Hello ";' 2) 'my_func (str, & para1);' -> 'my_func (str, para1) ; 'Также перед использованием этой функции у вас должен быть прототип. – BLUEPIXY
@BLUEPIXY В C89 эта функция может быть вызвана без прототипа, и, поскольку, к сожалению, даже современные компиляторы по-прежнему используют режим C89, не может быть предупреждения –
, вы можете определить тип punchard, например 'typedef struct {char data [80]; } punchcard_t' и передать строку в функцию punchcard_t и вернуть ее punchcard_t (длина строки сохраняется, в отличие от передачи по ссылке).В противном случае вам понадобится malloc или реализация malloc локально-статической памяти-пула, поскольку вы не можете вернуть указатель на локальные данные, так как истекает срок его жизни. Это работает, потому что struct действует как обертка над массивом байтов, тем самым сохраняя свою структуру как тип ввода, так и тип возвращаемого значения (тогда как вы не можете «вернуть» char [80]). – Dmitry