Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2015, 19:20   #1
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию Строки типа TCHAR * argv[]

Доброго вечера!!

Подзабыл ( ще й не знав ) как работать со строками!

Вот прога!

Код:
#include <fstream>
#include <iomanip>
#include <windows.h>
#include <tchar.h>
#include "TChar.h"
#include "iostream"


int _tmain( int argc, TCHAR * argv[], TCHAR * envp[]) 
{

int i, n;
double a;


TCHAR Sljah1[MAX_PATH+1]={ 0 }, Sljah2[MAX_PATH+1]={ 0 };


  
  int Len_Shljahu = strlen(argv[0]); 

  printf("%i", Len_Shljahu);

  //for (int i=o; i<Len_Shljahu;i++) Sljah1[i]=

   _tcscpy(Sljah1,argv[0]);
  
   Sljah1[Len_Shljahu-4]="."; Sljah1[Len_Shljahu-3]="t"; Sljah1[Len_Shljahu-2]="x"; Sljah1[Len_Shljahu-1]="t"; Sljah1[Len_Shljahu]='0';
  
    printf("%s \n" Sljah1);
  
   
 
return 0;
}
25 22 C:\T\Zapys.cpp [Error] invalid conversion from 'const char*' to 'TCHAR {aka char}' [-fpermissive]

Не пойму... Забыл я!! ! Это Sljah1[Len_Shljahu-4]="."; Если что не судите строго!

Последний раз редактировалось Dimka-novitsek; 27.11.2015 в 19:25.
Dimka-novitsek вне форума Ответить с цитированием
Старый 27.11.2015, 19:57   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Такого нет: Sljah1[Len_Shljahu-4]="."

Читайте про strcpy()
waleri вне форума Ответить с цитированием
Старый 27.11.2015, 20:03   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
int Len_Shljahu = strlen(argv[0]);
Опа:
Код:
int Len_Shljahu = wcslen(argv[0]);
Цитата:
Sljah1[Len_Shljahu-4]=".";
Айнанэй... Это строка.
А символ вот так:
Код:
Sljah1[Len_Shljahu-4]='.';
Не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.11.2015, 02:58   #4
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

Спасибо!!!

А вот, я что то никак не пойму чего ему надо...


108 43 C:\T\Zapys_2.cpp [Warning] multi-character character constant [-Wmultichar]
C:\T\Zapys_2.cpp In function 'int main(int, TCHAR**, TCHAR**)':
19 5 C:\T\Zapys_2.cpp [Error] expected ')' before '{' token
22 5 C:\T\Zapys_2.cpp [Error] expected primary-expression before '}' token
22 5 C:\T\Zapys_2.cpp [Error] expected ';' before '}' token
C:\T\Zapys_2.cpp In function 'int Parametry()':
110 56 C:\T\Zapys_2.cpp [Error] 'argc' was not declared in this scope
113 65 C:\T\Zapys_2.cpp [Error] 'argv' was not declared in this scope
117 15 C:\T\Zapys_2.cpp [Error] 'envp' was not declared in this scope

Код:
#include <fstream>
#include <iomanip>
#include <windows.h>
#include <tchar.h>
#include "TChar.h"
#include "iostream"




struct Sljahy  { TCHAR S[MAX_PATH+1];}; 


int _tmain( int argc, TCHAR * argv[], TCHAR * envp[]) 
{
 
if (argc<1){
 if(!strcmp(argv[1], "vid_bat_faylyaviklikayu") 
    {
      Parametry();
return 0;  
}   }


//TCHAR SljahProg[MAX_PATH+1]={ 0 },SljahText[MAX_PATH+1]={ 0 }, SljahBat[MAX_PATH+1]={ 0 };


   Sljahy SljahProg={ 0 },SljahText={ 0 },SljahBat={ 0 },SljahTemp={ 0 };


   
  int Len_Shljahu = strlen(argv[0]); 
  printf("%i", Len_Shljahu);
  //for (int i=o; i<Len_Shljahu;i++) SljahText[i]=
  _tcscpy(SljahProg.S,argv[0]);
  
   SljahText= SljahBat= SljahProg;
   
   SljahText.S[Len_Shljahu-4]='.'; SljahText.S[Len_Shljahu-3]='t'; SljahText.S[Len_Shljahu-2]='x'; SljahText.S[Len_Shljahu-1]='t';// SljahText[Len_Shljahu]='0';
   SljahBat.S[Len_Shljahu-4]='.'; SljahBat.S[Len_Shljahu-3]='b'; SljahBat.S[Len_Shljahu-2]='a'; SljahBat.S[Len_Shljahu-1]='t';
  
   printf("%s \n", SljahProg.S);
  
   
     
  
  
  
  

//описывает поток для записи данных в файл
std::ofstream f1;
std::ofstream f2;
//открываем файл в режиме записи,
//режим ios::out Відкрити для виводу устанавливается по умолчанию  
f1.open(SljahText.S, std::ios::app); //  дозапис у кінець файлу
f2.open(SljahBat.S,std::ios::out | std::ios::trunc); // Відкрити для операцій введення.
if ( ! f2) {
      std::cerr <<"помилка: не можу відкрити вихідний файл: "
           << f2 <<std::endl;
	 if (f2.bad())   {
                      std::cerr << "Unrecoverable write error" << std::endl;
				      f2.close();
                    return 1;
                    }
     else {
        std::cerr << "Output file open error \"" << SljahBat.S << "\"" << std::endl;
      return 1;
      }
   }

f2<<SljahProg.S <<">"<<SljahText.S<<" vid_bat_faylyaviklikayu"<<"\t";
//}
//закриття потоку
f1.close();
f2.close();
/*
{
  if (check_is_OK())
      execl(SljahBat.S,0);
  printf ("Классно...\n");
  exit(0);
}
*/




return 0;
} 







    // Опишемо в цій функції красиво виведення всіляких параметрів оточення!
    
    int Parametry   ( ) 
    {   
        TCHAR buffer[256] = TEXT("");
        DWORD dwSize = sizeof(buffer);
        std::cout<<"Comruter name:"<<std::endl;
            if (!GetComputerNameEx((COMPUTER_NAME_FORMAT)0, buffer, &dwSize))
            {            _tprintf(TEXT("GetComputerNameEx failed (%d)\n"), GetLastError());
            }
            else         _tprintf(buffer, '/n');
        std::cout<<std::endl;    
                         _tprintf(TEXT("argc = %d\n"), argc);      
        std::cout<<std::endl;                 
        for(int i = 0; i < argc; ++i)      
            {          _tprintf(TEXT("argv[%d] = \"%s\"\n"), i, argv[i]);      
    		}        
    		
        int n = 0;     
        while(envp[n] != NULL)     
    		
    		{         _tprintf(TEXT("envp[%d] = \"%s\"\n"), n, envp[n]);
    		         n++;     
    		} 
    
     return 0;
     }
Dimka-novitsek вне форума Ответить с цитированием
Старый 29.11.2015, 03:49   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
C:\T\Zapys_2.cpp In function 'int Parametry()':
110 56 C:\T\Zapys_2.cpp [Error] 'argc' was not declared in this scope
113 65 C:\T\Zapys_2.cpp [Error] 'argv' was not declared in this scope
117 15 C:\T\Zapys_2.cpp [Error] 'envp' was not declared in this scope
Ну нет у вас в этой функции этих параметров, нет. Они есть в мейне.

Код:
if(!strcmp(argv[1], "vid_bat_faylyaviklikayu")
Считайть умеете? Сколько открывающих скобок, а сколько закрывающих?

Последний раз редактировалось p51x; 29.11.2015 в 03:51.
p51x вне форума Ответить с цитированием
Старый 29.11.2015, 18:04   #6
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

Спасибо! Єто у меня что-то заезді біли, утром программа (ошибка) решилась минут за десять, за двадцать секунд скобка, и еще минут задесять, посли двух тыков, аргументы.

А вот я снова что-то не понимаю! Все немного закрученей. Это ни прямо ошибка.

C:\T\collect2.exe [Error] ld returned 1 exit status

Может, кто-то попробуит скомпилировать???

Код:
#include <fstream>
#include <iomanip>
#include <windows.h>
#include <tchar.h>
#include "TChar.h"
#include "iostream"
#include <process.h>
#include <unistd.h>




struct Sljahy  { TCHAR S[MAX_PATH+1];}; 

int Parametry   (int argc, TCHAR** argv, TCHAR** envp ) ;


int _tmain( int argc, TCHAR * argv[], TCHAR * envp[]) 
{
 
if (argc>2)
{
  if(strcmp (argv[1], "vid_bat_faylyaviklikayu")) 
    { printf("%s \n", argv[1]);
      Parametry( argc,  argv,   envp);
      return 0;  
    }
	if (argc>3)
if(strcmp (argv[2], "TWO"))
    {printf("%s \n", argv[1]); Sleep (3600000);
    }

}


//TCHAR SljahProg[MAX_PATH+1]={ 0 },SljahText[MAX_PATH+1]={ 0 }, SljahBat[MAX_PATH+1]={ 0 };


   Sljahy SljahProg={ 0 },SljahText={ 0 },SljahBat={ 0 },SljahTemp={ 0 };


   
  int Len_Shljahu = strlen(argv[0]); 
  printf("%i", Len_Shljahu);
  //for (int i=o; i<Len_Shljahu;i++) SljahText[i]=
  _tcscpy(SljahProg.S,argv[0]);
  
   SljahText= SljahBat= SljahProg;
   
   SljahText.S[Len_Shljahu-4]='.'; SljahText.S[Len_Shljahu-3]='t'; SljahText.S[Len_Shljahu-2]='x'; SljahText.S[Len_Shljahu-1]='t';// SljahText[Len_Shljahu]='0';
   SljahBat.S[Len_Shljahu-4]='.'; SljahBat.S[Len_Shljahu-3]='b'; SljahBat.S[Len_Shljahu-2]='a'; SljahBat.S[Len_Shljahu-1]='t';
  
   printf("%s \n", SljahProg.S);
  
   
     
  
  
  
  

//описывает поток для записи данных в файл
std::ofstream f1;
std::ofstream f2;
//открываем файл в режиме записи,
//режим ios::out Відкрити для виводу устанавливается по умолчанию  
f1.open(SljahText.S, std::ios::app); //  дозапис у кінець файлу
f2.open(SljahBat.S,std::ios::out | std::ios::trunc); // Відкрити для операцій введення.
if ( ! f2) {
      std::cerr <<"помилка: не можу відкрити вихідний файл: "
           << f2 <<std::endl;
	 if (f2.bad())   {
                      std::cerr << "Unrecoverable write error" << std::endl;
				      f2.close();
                    return 1;
                    }
     else {
        std::cerr << "Output file open error \"" << SljahBat.S << "\"" << std::endl;
      return 1;
      }
   }

f2<<SljahProg.S <<">"<<SljahText.S<<" vid_bat_faylyaviklikayu"<<"\t";
//}
//закриття потоку
f1.close();
f2.close();

{
 // if (check_is_OK())
  execle(SljahBat.S,argv[0],"ONE","TWO","THREE",NULL);
  perror("EXEC:");
  printf ("Классно...\n");
  exit(0);
}





return 0;
} 







    // Опишемо в цій функції красиво виведення всіляких параметрів оточення!
    
    int Parametry   (int argc, TCHAR** argv, TCHAR** envp) 
    {   
        TCHAR buffer[256] = TEXT("");
        DWORD dwSize = sizeof(buffer);
        std::cout<<"Comruter name:"<<std::endl;
            if (!GetComputerNameEx((COMPUTER_NAME_FORMAT)0, buffer, &dwSize))
            {            _tprintf(TEXT("GetComputerNameEx failed (%d)\n"), GetLastError());
            }
            else         _tprintf(buffer, '/n');
        std::cout<<std::endl;    
                         _tprintf(TEXT("argc = %d\n"), argc);      
        std::cout<<std::endl;                 
        for(int i = 0; i < argc; ++i)      
            {          _tprintf(TEXT("argv[%d] = \"%s\"\n"), i, argv[i]);      
    		}        
    		
        int n = 0;     
        while(envp[n] != NULL)     
    		
    		{         _tprintf(TEXT("envp[%d] = \"%s\"\n"), n, envp[n]);
    		         n++;     
    		} 
    
     return 0;
     }

Последний раз редактировалось Dimka-novitsek; 29.11.2015 в 18:06.
Dimka-novitsek вне форума Ответить с цитированием
Старый 29.11.2015, 18:10   #7
Dimka-novitsek
Форумчанин
 
Аватар для Dimka-novitsek
 
Регистрация: 22.04.2013
Сообщений: 588
По умолчанию

Чи можна зробити так, що б програма досконало повідомляла про своє оточення, створювала текстовий документ, а потім красиво записувала у нього усі параметри оточення?

Можно ли сделать так, что бы программа в совершенстве сообщала о своем окружении, создавала текстовый документ, а потом красиво записывала у него все параметры окружения?

Последний раз редактировалось Dimka-novitsek; 29.11.2015 в 18:16.
Dimka-novitsek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аргументы функции main(); argc и argv Lunex.08 Общие вопросы C/C++ 7 15.09.2012 00:11
Как считать из объекта типа stringstream в буфер TCHAR 8Observer8 Общие вопросы C/C++ 7 02.06.2012 13:19
argс argv zolman Помощь студентам 11 24.12.2011 02:24
argc, argv в Паскале virtuhay266 Паскаль, Turbo Pascal, PascalABC.NET 2 05.12.2011 23:17
как элементы массива argv могли бы указывать записи командной строки? Serjuk Помощь студентам 7 22.01.2010 10:50