IvankoPo, Возможно, что в вашем случае путь к файлу уже задан в Юникоде и ничего преобразовывать не нужно. Посмотрите под отладчиком что конкретно содержится в argv[1]. Каждый символ в Юникодной строке в винде будет представлен двумя байтами, а не одиним.
В свойствах проекта включите поддержку Unicode, тогда argv должен стать wchar_t.
Встречные вопросы: В какой кодировке задано имя файла? Эта кодировка установлена в винде?
Vitaly Melnikov, Решать вам в конечном итоге, я же не знаю вашей ситуации.
Если для дублирования информации у вас нет веских причин, то нужно этого избегать, т.к. дублирование ведет к проблеме синхронизации информации.
И еще один момент: хранить полный путь в БД так же не стоит - так вы связываете себя с конкретным местом расположения файлов. Хранить в БД стоит относительный путь, относительно какого-либо базового какталога, который задается в параметрах программы. Абсолютный путь будете получать складывая базовый каталог и относительный путь из БД.
evg_96, Вы сначала освободили память: free(current), а потом обращаетесь к уже освобожденной памяти: current->next. После free указатель уже не действительный и его использовать нельзя.
В gcc ошибка не проявляется, потому что используются разные менеджеры памяти внутри стандартной библиотеки (она хоть и стандартная снаружи, но внутри все реализовывают по разному).
Вообще, по моему, тут и компилятор мог ругнуться, возможно надо выставить уровень предупреждений по выше.
evg_96, Почему?
Обычно я делаю так: собираю приложение с отладочной информацией, запускаю под отладчиком в IDE, стартую без точек останова. Там где произойдет ошибка программа остановится и вернется в отладчик, в отладчике нужно по стеку вызовов перейти на свою последнюю функцию и уже в нужной точке анализируешь, что ж ты там написал.
Иногда бывает, что программа с отладочной информацией работает, а в "релизной" сборке не работает - значит где-то выход за пределы массива/обращение к не выделенной памяти (не инициализированному указателю)...
На каком этапе работы программа вываливается (это можно определить по сообщениям, которые выводятся программой)? Какие входные данные подаете при этом? На чем именно из входных данных программа вываливается?
Вроде бы вы все правильно делаете, не раз переносил БД таким способом.
Файлы БД лежат на локальном диске сервера БД?
Вы работаете в SSMS на сервере или на удаленном раб.месте?
Какой конкретно путь указываете при присоединении в SSMS?
ТопМетаФизик, Если что, VLA - это:
int v[b];
т.е. массив переменной длинный, невзирая на то что b у вас const int, но инициализируется она от простого int, компилятор это видит, поэтому это VLA, а не статический массив.
Да, у микрософта на многие вещи свой взгляд, впрочем так же как и у остальных. И компилятор микрософт не поддерживает полностью C99, где появились VLA.
Что именно не работает?
Ошибка компиляции, не верные результаты?
Напишите тест - простую консольную программу на С++, чтоб не приплетать яву и отлаживайте на ней свою функцию, пока не получите правильный результат. Потом работающую функцию используйте в связке с явой. Функцию лучше сразу выделить в отдельный файл cpp, чтоб проще было использовать ее в разных сборках.
tar по моему достаточно быстрый, учитывая, что это не архиватор.
Еще tar умеет архив кидать в stdout и получать из stdin при распаковке, с помощью этого механизма можно передавать без использования дополнительных файлов.
В свойствах проекта включите поддержку Unicode, тогда argv должен стать wchar_t.
Встречные вопросы: В какой кодировке задано имя файла? Эта кодировка установлена в винде?