Возвращаемое значение изменяет исходное переданное значение
Итак, я пишу основную функцию, которая передает два значения char в пять различных функций char* одну за другой, но когда я возвращаю ее значение, она полностью меняет мое значение; как бы это исправить?
Например:
Передача char в мою функцию myStrCat возвращает мир! так как это то, что делает моя функция (кстати, назначение - как кодировать определенные библиотечные функции без какого-либо импорта библиотеки). Но он не только возвращает его, но и меняет его. Поэтому, когда я передаю один в следующую функцию, он возвращает неправильное значение, так как один (Hello) не передается, вместо двух (World!).
char one[size] = "Hello ";
char two[size] = "World!";
cout << "strlen: " << myStrLen(one) << endl;
cout << "strcat: " << myStrCat(one, two) << endl;
Функция Word передается в
char* myStrCat(char inputOne[], char inputTwo[]){
int sizeOne = myStrLen(inputOne);
int sizeTwo = myStrLen(inputTwo);
for(int i = 0; i < sizeTwo; i++){
inputOne[i + sizeOne] = inputTwo[i];
}
return inputOne;
}
1 ответ
Вы побочно воздействуете на свой входной параметр в своей функции: вы передали указатель на массив символов в качестве параметра, затем вы получили доступ к массиву и изменили значения его ячеек. Это изменение не будет ограничено областью действия функции, поскольку это изменение сегмента памяти, которое было создано до вызова функции.
Это означает, что как только ваша функция завершает работу, ваш массив символов был изменен. это делает возврат массива char в функцию избыточным.
Я приказываю предотвратить побочный эффект, просто используйте временный массив символов внутри вашей функции - создайте новый массив и скопируйте значения вашего массива символов inpur в ячейки нового массива. Управляйте копией и возвращайте ее вместо параметра.
В качестве дополнительного примечания - позаботьтесь об этом:
for(int i = 0; i < sizeTwo; i++){
inputOne[i + sizeOne] = inputTwo[i];
}
Вы потенциально переполняете свой массив inputOne здесь - это запись в ячейки памяти, которые не были выделены для вашего массива. Это может вызвать исключения во время выполнения. Я бы предложил добавить проверку, чтобы убедиться, что вы не пытаетесь записывать в индексы за пределами длины вашего массива.