TL; DR: Сделайте это:
string verpfad = std::string(argv[1]) + '\\' + "veraenderungen.csv";
И это все.
Проблема (к сожалению) связана с указателями и неявным приведением и обратной совместимостью с C и ассоциативностью операторови некоторые другие технические особенности языка C ++.
Видите ли, argv[1]
- это не"строка" (т. е. std::string
), а просто указатель на NUL-концевой массивперсонажи. Тем не менее, применение +
к char *
слева и std::string
справа (т. Е. argv[1] + std::string("...")
) является законным, и оно выполняет конкатенацию строк , что вам и нужно. .
Но затем вы идете и помещаете между ними один символ (который должен быть типа char
, но довольно часто это int
), который изменяет оценку результата +
операция. Теперь, когда вы добавляете три вещи вместе, сначала выполняется первое добавление, которое находится между указателем и целым числом, и его результат далек от конкатенации строк.
Правильный путь (ну, один правильный путь)это сделать первое, что в этой строке (argv[1]
) в std::string
. Тип std::string
может объединять символы и указывать на NUL-концевые массивы символов и некоторые другие элементы для себя, используя оператор +
, и в результате все эти операции снова std::string
s, а также при наличии нескольких +
операторов в том же выражении, которые они оценивают слева направо ... так что все будет в порядке!
Еще одна вещь, которую нужно помнить: в отличие от некоторых других языков, добавление чисел к std::string
не будет работать. Вы можете использовать std::to_string(x)
, чтобы превратить числа в строки.