Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> argv to string, передать переменной из argv строку 
V
    Опции темы
tht
  Дата 14.1.2010, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



компилятор Microsoft Visual C++ 2008 Express Edition
у меня крышу сносит, не могу сделать простейшую программу.
Код

#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[]){
    char *dll_name_for_load, ch_key;
    long int error_code;
    int len;

    //dll_name_for_load = (char*)argv[1];
    //strcpy(dll_name_for_load,(char*)argv[1]);
    strcpy_s(dll_name_for_load,3,(char*)argv[1]);
    printf("%s\n",dll_name_for_load);
    len = strlen(dll_name_for_load);
    printf("len: %d\n",len);

    ch_key = _getch();
    return 0;
}


запускаю прогу "prog.exe file_name"
в переменную dll_name_for_load передается только первая буква от строки "file_name" то есть "f",
в общем то пробовал на мой взгляд уже несколько простых вариантов, и нифига не врубаюсь, почему переменная содержит строку в один символ только, когда как argv определяется во всю длину от строки "file_name". smile 

Это сообщение отредактировал(а) tht - 14.1.2010, 17:33
PM MAIL   Вверх
comcon1
Дата 14.1.2010, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



А память выделить под строку?
Код

char *dll_name_for_load = (char*) calloc (500,sizeof(char));



--------------------
PM MAIL   Вверх
tht
Дата 14.1.2010, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



что за ... а попроще нельзя ? smile

Добавлено через 1 минуту и 14 секунд
между прочим не помогло, веришь не веришь !!!  smile 
PM MAIL   Вверх
djamshud
Дата 14.1.2010, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



strcpy(dll_name_for_load,(char*)argv[1]);

Работает?

Алсо под dll_name_for_load конечно же нужно память выделить.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
tht
Дата 14.1.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



блин у меня три темы создалось одинаковых... глюк какой-то.
не помогает выделение памяти и strcpy(dll_name_for_load,(char*)argv[1]);
не помогает. результат тот же
PM MAIL   Вверх
comcon1
Дата 14.1.2010, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



а ну-ка посмотри сюда внимательно!
http://www.cplusplus.com/reference/clibrary/cstring/strncpy/

Код

#include "string.h"
#include "malloc.h"
#include "stdio.h"

int main(int argc, char* argv[]){
    char *dll_name_for_load = (char*)calloc(500, sizeof(char)), ch_key;
    long int error_code;
    int len;

    strncpy(dll_name_for_load, argv[1], 3);
    printf("%s\n",dll_name_for_load);
    len = strlen(dll_name_for_load);
    printf("len: %d\n",len);

    return 0;
}



Код

m@liquidspice ~/test
$ gcc-4.exe -o tst.exe tst.cpp -lstdc++

m@liquidspice ~/test
$ ./tst.exe Your\ program\ works
You
len: 3




А вот теперь смотри, что случилось, когда я убрал выделение памяти:
Код

m@liquidspice ~/test
$ gcc-4.exe -o tst.exe tst.cpp -lstdc++

m@liquidspice ~/test
$ ./tst.exe Your\ program\ works
Yout
len: 4


Это сообщение отредактировал(а) comcon1 - 14.1.2010, 16:58


--------------------
PM MAIL   Вверх
tht
Дата 14.1.2010, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



мне нужно под Microsoft Visual C++ 2008
но твой код все равно не помог, но скомпилировался
PM MAIL   Вверх
comcon1
Дата 14.1.2010, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



Мой код работает. И точка. Я тебе продемонстрировал логи. Если бы у меня был msvc, я бы тебе сказал какую буковку можно где поставить, чтобы было лучше. Но у меня есть стойкое ощущение, что все должно работать.

Посмотри внимательно на мой код и найди ошибки у себя. Данной программе похрену на чем компилиться и исполняться. Попробуй, возьми соответствующие моему коду мелкомягкие функции.


P.S. Тьфу. Даже такую ###программу мелкомягкие технологии напичкивают каким-то калом.


--------------------
PM MAIL   Вверх
tht
Дата 14.1.2010, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



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

int _tmain(int argc, _TCHAR* argv[]){


и когда начинаю компилить твой код выдает ошибку
что второй параметр фкнкции strncpy не может быть конвертирован в const char *
и мне приходится там менять на (char*)argv[1]
тогда компилияция проходит. но результат один символ.
PM MAIL   Вверх
djamshud
Дата 14.1.2010, 17:35 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



comcon1 и правда выдал рабочий код. Правда можно было сделать чуть лучше и проще (для данного примера) (это я адресую топикстартеру - новичку, как я понимаю):
- память выделить конкретно под длину строки;
- выделить ее статически;
- глобальные инклуды включать угловыми скобками.

>int _tmain(int argc, _TCHAR* argv[])

Бгг. Надо же, как микрософт с++ испортил)).


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
bsa
Дата 14.1.2010, 17:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



tht, выключи в проекте UNICODE. Просто у тебя _TCHAR это wchar_t, а не char!
PM   Вверх
tht
Дата 14.1.2010, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.5.2006

Репутация: нет
Всего: 1



bsa Урррааа !!! тебе респект !!! помогло потому чт  smile 
всем спасибо за участие !
PM MAIL   Вверх
comcon1
Дата 14.1.2010, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



Ты, надеюсь, воспринял все, что тебе написали, а не просто ограничился отключением юникода.


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0504 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.