На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: JoeUser, Qraizer, Hsilgos
  
> Как передать значение типа char, Я делаю так:
   
char *
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    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();
    }
    Сообщение отредактировано: Kola -
      CODE

      [B]char*[/B] Trec::file() {
      char name[20]
      ................
      cin >> name;
      return name;
      }
        Я не силён в С++, но попытаюсь подумать как компилятор. biggrin.gif
        Твоя ф-ия Trec::file() имеет тип char, т.е. возвращаемое ею значение должно быть типа char.
        А что ты возвращаешь опреатором return на самом деле?
        Ведь name - это адрес первого элемент массива типа char.
        Въехал? wink.gif
        Вот если ты поставишь return *name;
        или return name[0];
        то компилятор ругаться не должен.
          Ладно, еще напишу. у тебя тут две ошибки

          во первых по идее надо возращать в этом случаее 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;
          }

          rolleyes.gif
            Как вернуть строку (char *) из функции

            Способ 1. Использование статического буфера

            CODE
            char *InputFileName ()
            {
             static char buffer [256];

             // здесь вводим buffer с клавы, читаем из файла, все равно как
             
             return buffer;
            }

            void main ()
            {
             char *pFileName = InputFileName ();
            }


            Способ 2. Передача указателя в функцию
            CODE
            void InputFileName (char *pFileName)
            {
              //здесь вводим pFileName с клавы, читаем из файла, все равно как
            }

            void main ()
            {
             char pFileName [256];
             InputFileName (pFileName);
            }


            Естественно, надо следить за тем, чтобы пользователь не мог ввести более 256 символов, иначе произойдет переполнение буфера.
            Среднестатистический житель Петербурга различает до двух с половиной тысяч оттенков серого
            ლ(ಠ益ಠლ) ( ͡- ͜ʖ ͡-) ( ͡° ͜ʖ ͡°) (╯°□°)╯ ¯\_(ツ)_/¯༼ ຈل͜ຈ༽
              Добавлю сказанным ДядейБобом, еще лучше так:
              CODE

              const char *InputFileName ()
              {
              static char buffer [256];

              // здесь вводим buffer с клавы, читаем из файла, все равно как

              return (const char*)buffer;
              }

              void main ()
              {
              const char *pFileName = InputFileName ();
              }


              Чтоб не испытывать желания что-то сделать с возвращенным буфером smile.gif
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script Execution time: 0,0887 ]   [ 17 queries used ]   [ Generated: 19.08.19, 05:53 GMT ]