CodingUniversity Ответов: 2

Как я могу использовать строку в растровом изображении


я использую библиотеку "gdiplus", и у меня есть проблема, я хочу использовать строковую переменную внутри этой переменной, я не знаю, как ее назвать, потому что я новичок в этой библиотеке.

Моя программа просто берет путь image.bmp внутри переменной.

string username()
{
    char username[UNLEN + 1];
    DWORD username_len = UNLEN + 1;
    GetUserName(username, &username_len);
    string pcuser = username;
    return pcuser;
}

int main()
{
    Gdiplus::Bitmap bmp("C:\\Users\\" + username() + "\\Documents\\Visual Studio Things\\image.bmp");
    return 0;
}

Итак, как я могу использовать username() внутри растрового изображения ?

Что я уже пробовал:

Я попытался использовать .c_str с именем пользователя (), но это не работает. есть предложения ? Я получаю эту ошибку

Ошибка (активная) E0289 ни один экземпляр конструктора "Gdiplus::Bitmap::Bitmap" не соответствует списку аргументов типы аргументов: (std::basic_string, std::allocator>)

2 Ответов

Рейтинг:
1

Dave Kreskowiak

[РЕДАКТИРОВАТЬ]
Поправка, вы используете неправильную терминологию.

Вы не "используете строку в растровом изображении". Вы пытаетесь использовать возвращаемое значение из функции имени пользователя в пути.

Это не имеет ничего общего с растровым изображением. Это просто манипуляция строками в языке Си.

А пока упростите то, что вы делаете. Забудьте о растровом мусоре и перестаньте пытаться использовать как можно меньше строк кода. НЕ ИСПОЛЬЗУЙТЕ НЕПОСРЕДСТВЕННО ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ ВЫЗОВА МЕТОДА В СОСТАВНОМ ОПЕРАТОРЕ. Ты просто делая это тяжелее на себя, чтобы отлаживать код.

Прочитай: https://www.codingame.com/playgrounds/14213/how-to-play-with-strings-in-c/string-concatenation[^]


[no name]

Глупый гребаный ответ, но спасибо! мне это уже удалось.

Dave Kreskowiak

Еще более глупый вопрос. Ваша тема не соответствовала тому, с чего вы начали вопрос, и не соответствовала коду, который вы опубликовали.

[no name]

Да, это так, но вы не можете дать простой ответ, вам всегда нужно быть разными и давать какие-то глупые функции. (":

Dave Kreskowiak

Вы либо читаете о том, как делать манипуляции со строками В C, и выясняете это для себя, либо вы навсегда будете зависеть от других людей, которые будут писать ваш код для вас.

Манипуляция строками-это набор основных приемов, которые вы должны изучить, если хотите иметь хоть какой-то шанс преуспеть в написании кода.

[no name]

Конечно, мне это нужно, но не для этой конкретной проблемы, ответ на нее просто использовать wstring вместо string. Это все.

Dave Kreskowiak

ДА, ДЛЯ ЭТОЙ КОНКРЕТНОЙ ЗАДАЧИ!!! Вы не можете построить строку пути для передачи в конструктор растровых изображений!

[no name]

Есть простой способ решить эту проблему.

Dave Kreskowiak

Да. Напишите свой код, чтобы было легче отлаживать и проверять содержимое переменных, прежде чем пытаться его использовать.

Разница между string и wstring заключается в том, что wstring использует широкие символы (несколько байтов на символ), а string-нет.

Я думаю, вы бы увидели, что имя пользователя возвращается в виде одного символа, и удивились бы, почему это так.

[no name]

Спасибо вам за информацию, я узнал кое-что новое!

Dave Kreskowiak

Это всего лишь то же самое дерьмо, о котором мы говорили тебе снова и снова.

Richard MacCutchan

Дэйв, этот человек уже был обвинен в злоупотреблениях, пожалуйста, просто добавьте свой голос на страницу OP.

[no name]

std::cout < & lt; "ты уродина";

Dave Kreskowiak

Я бы с удовольствием.

Рейтинг:
1

KarstenK

Очень простой код в вашей основной функции:

string name = username();
Gdiplus::Bitmap bmp("C:\\Users\\" + name + "\\Documents\\Visual Studio Things\\image.bmp");