Я тут пишу консольную програмку которая получает вкачестве пареметра имя дериктории и записывает его в переменную типа char*. Походу мне надо скопировать это в другую переменную типа char*. Я пробывал использовать strcpy(char*,char*). Но при дебаге получаю такую ошибку:
Unhandled exception at 0x102aecda (msvcr80d.dll) in testapp.exe: 0xC0000005: Access violation writing location 0x0045d73c.
Кроме того открывает файл strcat.asm.
Я пишу в VC++ 2005.
Подскажите, плиз, как быть. Может кто ссылочку подбросит на примерчик.
И, плиз, не бейте ногами, я давно в VC не писал.
Здравствуйте, FelixK, Вы писали:
FK>Подскажите, плиз, как быть. Может кто ссылочку подбросит на примерчик. FK>И, плиз, не бейте ногами, я давно в VC не писал.
Ты хоть код приведи И скажи зачем копируешь, и вообще на чем пишешь? C или C++? А то может тебе std::string лучше подойдет.
int main(int argc, char **argv)
{
char *copy = 0;
if (argc > 1)
{
copy = malloc(strlen(argv[1]));
strcpy(copy, argv[1]);
}
// ... do something with copy
free(copy);
return 0;
}
int main(int argc, char **argv)
{
std::string copy;
if (argc > 1)
{
copy = std::string(argv[1]);
}
// ... do something with copyreturn 0;
}
Здравствуйте, FelixK, Вы писали:
FK>Всем доброго времени суток!
FK>Я тут пишу консольную програмку которая получает вкачестве пареметра имя дериктории и записывает его в переменную типа char*. Походу мне надо скопировать это в другую переменную типа char*. Я пробывал использовать strcpy(char*,char*). Но при дебаге получаю такую ошибку:
FK>
FK>Unhandled exception at 0x102aecda (msvcr80d.dll) in testapp.exe: 0xC0000005: Access violation writing location 0x0045d73c.
FK>
Скорее всего память для строки не выделена.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
AD>Ты хоть код приведи И скажи зачем копируешь, и вообще на чем пишешь? C или C++? А то может тебе std::string лучше подойдет.
Я пишу на C++, компилятор VC++ 2005 (VC++ .Net Pro).
Но в любом случае огромное спасибо и гранд мерси. Я вроде начинаю соображать где собака порылась.
Если будут ещё какие-нибудь советы или примеры на эту тему, то я буду очень рад посмотреть ещё варианты.
И всё таки, огромное спасибо за помощь и за время потраченное на мой вопрос.
FK>Что тут можно посоветовать? Как быть?
Объявить переменную как std::string, а не char *, как я и написал ранее.
FK>Заранее спасибо за помощь.
Пожалуйста.
Разумеется, нельзя присвоить массиву char значение типа string. Нужно либо объявить strPath как string, либо воспользоваться методом c_str(), который возвращает как раз указатель на char:
strPath = std::string(argv[2]).c_str();
Мир не просто сложнее, чем мы себе представляем, -- он сложнее, чем мы можем себе представить.
S>Разумеется, нельзя присвоить массиву char значение типа string. Нужно либо объявить strPath как string, либо воспользоваться методом c_str(), который возвращает как раз указатель на char:
S>strPath = std::string(argv[2]).c_str();
что же вы такое пишете, любезный.
std::string::c_str()
всегда возвращала const char*
Здравствуйте, andrey.desman, Вы писали:
AD>Здравствуйте, FelixK, Вы писали:
FK>>Я попробывал использовать malloc но компелятор выдал ошибку:
AD>В C++ надо явно приводить тип (я приводил код для C):
FK>>Вот код: FK>>
Огромное спасибо и за подсказки и за то что не побили.
Я уже гора 3 не трогал VC++, всё как-то другими штуками занимался типа SQL, perl и т.д.
Чувствую себя в 1 классе сново.
Здравствуйте, FelixK, Вы писали:
FK>Подскажите, плиз, как быть. Может кто ссылочку подбросит на примерчик. FK>И, плиз, не бейте ногами, я давно в VC не писал.
Работа со строками, тем более с голыми строками — это одно из самых тяжёлых для новичка мест.
Поэтому ссылочку можно на разнообразные учебники по С/С++. Это не шутка и не издевательство, а нормальный практический совет.
На примерах же — ты только узнаешь про узкое подмножество граблей и способах их обойти.
Можешь поискать онлайновые C FAQ, C++ FAQ — это тоже пригодится.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[6]: Копирование char* в другой char*.
От:
Аноним
Дата:
21.04.08 14:42
Оценка:
S>И то верно . Но, во всяком случае, можно присвоить это выражение константе.
ну если только при инициализации оной...
но по рукам за такие дела бить надо со всей дури...
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, FelixK, Вы писали:
FK>>Подскажите, плиз, как быть. Может кто ссылочку подбросит на примерчик. FK>>И, плиз, не бейте ногами, я давно в VC не писал.
К>Работа со строками, тем более с голыми строками — это одно из самых тяжёлых для новичка мест. К>Поэтому ссылочку можно на разнообразные учебники по С/С++. Это не шутка и не издевательство, а нормальный практический совет. К>На примерах же — ты только узнаешь про узкое подмножество граблей и способах их обойти.
К>Можешь поискать онлайновые C FAQ, C++ FAQ — это тоже пригодится.
чисто для строк, имхо, вполне подойдет и rsdn-Овская статья: здесь
и все же присоединюсь к большинству, используйте С++ и готовые классы, такой код подойдет если только это единственное место в программе, где требуется подобное
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, FelixK, Вы писали:
FK>>Подскажите, плиз, как быть. Может кто ссылочку подбросит на примерчик. FK>>И, плиз, не бейте ногами, я давно в VC не писал.
К>Работа со строками, тем более с голыми строками — это одно из самых тяжёлых для новичка мест. К>Поэтому ссылочку можно на разнообразные учебники по С/С++. Это не шутка и не издевательство, а нормальный практический совет. К>На примерах же — ты только узнаешь про узкое подмножество граблей и способах их обойти.
К>Можешь поискать онлайновые C FAQ, C++ FAQ — это тоже пригодится.
Самое страшное для меня во всей этой истории, то что я в 2001 году получил MCSD на базе VC++ 6 (VS 6). Так что я как бе и не новичок, а вот с 2002 года я к С/С++ и не притрагивался, восновном скрипты разные писал. Моя основная работа это тестирование софта.
Но в любом случае я воспользуюсь всеми советами втой или иной мере. Так что всем огромное спасибо.