Как вернуть массив символов из функции?
имеет следующий код в ответах:
void testfunc(char* outStr){
char str[10];
for(int i=0; i < 10; ++i){
outStr[i] = str[i];
}
}
int main(){
char myStr[10];
testfunc(myStr);
// myStr is now filled
}
Поскольку я буду использовать Arduino, где память драгоценна, я не хочу "временную переменную" для хранения некоторой строки и последующего ее копирования. Я также не хочу, чтобы функция возвращала что-либо. Я хочу использовать эту идею выше и сделать что-то вроде:
void testfunc(char* outStr){
outStr="Hi there.";
}
int main(){
char myStr[10];
testfunc(myStr);
}
Однако в этом случае myStr пуст!
Почему это не работает? Как это исправить?
(Я относительно новичок в C и имею базовое понимание указателей)
Благодарю.
Почему это не работает?
void testfunc(char* outStr){
outStr="Hi there.";
}
У тебя есть:
testfunc(myStr);
Когда testfunc
, outStr
присваивается адрес первого элемента myStr
. Но в функции testfunc
вы переписываете outStr
и теперь он указывает на строковый литерал. Вы ouStr
только ouStr
, а не myStr.
Как это исправить?
Чтобы скопировать строку, используйте функцию strcpy
(или ее безопасную сестринскую strncpy
):
void testfunc(char* outStr){
strcpy(ouStr, "Hi there.");
}
Если вы хотите повторное использование памяти - и это опасное место, нужно ли вам действительно заботиться об ответственности за распределение/освобождение, вы должны использовать указатель на строку, то есть:
#define STATIC_STRING "Hi there"
void testfunc(char**outStr){
*outStr=STATIC_STRING;
}
int main(){
char*myStr;
testfunc(&myStr);
//From now on, myStr is a string using preallocated memory.
}