
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.207] |
![]() |
|
![]() |
|
|
BC 3.1
Как передать значение типа char . Я делаю так: char Trec::file() { char name[20] ................ cin >> name; return name; } А он мне ошибку типа не могу char * to char // А всего - то надо передать имя файла в из одной функции в другую. // ====================================================== Если так, то ошибка: char File(); char File() { char name[10]; cin >> name; cout << name << endl; // return *name; } void main() { clrscr(); char path[10]; path = (File()); // Error: Lvalue required cout << path; getch(); } // ======А так ================================== char* File(); char* File() { char name[10]; cin >> name; cout << name << endl; // return name; } void main() { clrscr(); char *path[10]; *path = (File()); // Адрес name, но мне нужно его зачение cout << path; getch(); } |
Сообщ.
#2
,
|
|||
|
|
Сообщ.
#3
,
|
|
|
Я не силён в С++, но попытаюсь подумать как компилятор.
![]() Твоя ф-ия Trec::file() имеет тип char, т.е. возвращаемое ею значение должно быть типа char. А что ты возвращаешь опреатором return на самом деле? Ведь name - это адрес первого элемент массива типа char. Въехал? ![]() Вот если ты поставишь return *name; или return name[0]; то компилятор ругаться не должен. |
Сообщ.
#4
,
|
|
|
Ладно, еще напишу. у тебя тут две ошибки
во первых по идее надо возращать в этом случаее char* а не просто char. во вторых возращать указатель на локальные переменные нельзя, вернее можно, но результат может нехороший получиться, потому как при выходе из функции локальные переменные уничтожаются. По нормальному делается так int GetFile( char[] FileName, int MaxFileName ) { strncpy( FileName, "win.com", MaxFileName ); return 1; } Вызов соответственно char file[MAX_PATH]; if( 1 != GetFile( file, MAX_PATH ) ) { cout << "Unknown file name" << endl; } или если исползовать класс обертку для строк, к примеру из STL то #include <string> std::string File() { std::string file = "Hello"; cout << file << endl; return file; } ![]() |
Сообщ.
#5
,
|
|||||
|
Как вернуть строку (char *) из функции Способ 1. Использование статического буфера
Способ 2. Передача указателя в функцию
Естественно, надо следить за тем, чтобы пользователь не мог ввести более 256 символов, иначе произойдет переполнение буфера. |
Сообщ.
#6
,
|
|||
|
Добавлю сказанным ДядейБобом, еще лучше так:
Чтоб не испытывать желания что-то сделать с возвращенным буфером ![]() |