Строка Передача по значению

0

Turbo C++: Я хотел бы передать строку в функцию без изменения исходных данных (передать по значению). Как достичь в этом коде???

#include<iostream.h>
#include<conio.h>
#include<string.h>
void pass(char g[20])
{
 g[0]=g[2];
 cout<<"\nPassed: ";
 for(int i=0;i<strlen(g);i++)
 cout<<g[i];
}
void main()
{
 clrscr();
 char a[20];
 cout<<"\nEnter the Data: ";
 cin.get(a,sizeof a);
 int len=strlen(a);
 pass(a);
 cout<<"\nAfter pass: ";
 for(int i=0;i<len;i++)
 cout<<a[i];
 getch();
}
  • 0
    Скопируйте строку, прежде чем передать ее.
  • 3
    Сначала прекратите писать нестандартный код C ++. stackoverflow.com/questions/1961828/why-not-to-use-turbo-c
Показать ещё 3 комментария
Теги:
string
function
turbo-c++

2 ответа

5

Строки в C - это массивы символов, которые имеют '\0' в качестве последнего элемента (с некоторым синтаксическим сахаром для определения таких массивов). Массивы в C не являются гражданами первого класса; в частности, они не могут быть переданы в качестве аргументов. Когда вы передаете массив в функцию, функция получит указатель на первый элемент массива. Указанная память не копируется, только указатель. Из-за этого при изменении указанной в памяти памяти в вызывающей функции изменяется.

C++ унаследовал эти характеристики от C. Если вы хотите использовать строки C, как вы описали, вы должны скопировать их вручную, либо перед передачей их в функцию, либо внутри самой функции.

Однако предпочтительным методом в C++ является использование std::string из стандартной библиотеки C++. В вашем случае было бы достаточно объявить pass как

void pass(std::string g)

и замените strlen(g) на g.length().

  • 0
    Благодарю. Но я не могу использовать строку, потому что Turbo C ++ старый компилятор и строка там недопустима
0

В C++, когда вы передаете строку, передается базовый адрес строки.

Это означает, что автоматически вызывается по адресу. Поэтому изменения, внесенные в формальные аргументы, отражают фактический аргумент.

Вы не можете передать строку по значению.

Но, альтернативно, вы можете передать каждый символ строки по значению и сохранить каждый символ в другой переменной в этой функции.

Или вы можете сделать временную переменную в функции для хранения исходной строки, а затем внести изменения с временной строкой.

  • 1
    Au противоречит. В C ++, когда вы передаете строку, вы передаете объект класса std::string или тесно связанный. То, что вы сказали, верно для случая, когда вы решаете передать строку C, конечно, но их не следует путать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню