Я использую stringstream для получения содержимого текстового файла (на самом деле это источник шейдерного кода), чтобы передать его функции, которая принимает const char * const * (glShaderSource). Во-первых, я сделал этоТот же адрес, но различный контент
std::stringstream buffer;
buffer << input.rdbuf();
char const *code = buffer.str().c_str();
glShaderSource(id, 1, &code, 0);
Это не сработало, по той причине, что содержание кода было не то, что ожидалось. На самом деле, если я делаю это:
std::stringstream buffer;
buffer << input.rdbuf();
char const *code = buffer.str().c_str();
printf("Code*: %p\n", code);
printf("Buff*: %p\n", buffer.str().c_str());
printf("Code0: %c\n", code[0]); // ERROR: prints garbage.
printf("Buff0: %c\n", buffer.str().c_str()[0]);
printf("Code1*: %p\n", &code[1]); // ERROR: prints garbage.
printf("Buff1*: %p\n", &buffer.str().c_str()[1]);
printf("Code1: %c\n", code[1]);
printf("Buff1: %c\n", buffer.str().c_str()[1]);
я получаю те же выходы для значений указателей, правильные выходы для символов в буфере, но случайные из них для содержания кода.
Теперь, если я использую такую функцию:
void workaround(char const *code) {
printf("Code*: %p\n", code);
printf("Code: %s\n", code);
}
-------------------------------------
std::stringstream buffer;
buffer << input.rdbuf();
workaround(buffer.str().c_str());
printf("Buff*: %p\n", buffer.str().c_str());
printf("Buff: %s\n", buffer.str().c_str());
Я получаю правильные значения для указателей и содержимого строки.
Почему этот код работает, а не первый?
Вы можете уточнить смешные/неожиданное? –
Не удалось дублировать: http://ideone.com/9G45jT – PaulMcKenzie
Не ставьте решение в вопрос, опубликуйте его как ответ. – Barmar