{{notification.text}}

MirGames

08.05.10 14:10
0
Есть строка :

std::string s ("blablabla");

Есть irrlicht который умеет выводить строку на экран, только строка типа wchar_t :

guienv->addStaticText(L"123", rect<s32>(10,20,260,32), true);

Так вот вопрос в том, как вывести строку s на экран?

Желательно с помощью префикса L.

UPD

Вопрос решен засчет встроенного в Irricht типа stringw.
Отредактировано: 08.05.10 15:45
#1
21.05.10 23:04
0
Очередной вопрос по строкам :

Есть
string A;

Ещё есть
typedef char* str;
str B;

Вопрос в том, как бэ перегнать все из A в B?
#2
21.05.10 23:30
0
str B = new char[A.size()];
A.copy(B, A.size(), 0 );


если нужно взять указатель типа char* из строки A то A.c_str();
#3
Программир Всия Руси!
22.05.10 02:21
0
strcpy(B,A.c_str());
#4
22.05.10 03:10
0
DRON

strcpy(B,A.c_str());

Компилировал, но выдавал ошибку (Я ещё до того как здесь написать пробовал этот метод). Не знаю почему, по идеи то да, должно все работать :(

Но все равно, спасиб :)

ra1n

Супер )

str B = new char[A.size()];
A.copy(B, A.size(), 0 );

Работает как часы =)


P.S. Вот когда я начинал давным давно изучать Делфи, все было как то просто, простые понятные операторы, простые функции, простые конвертации типов...
А Си как то с трудом прям даеться... Фиг знает почему. А изучать его нужно и никуда не деться ^_^ Не холивар, так, мысли в слух.
Отредактировано: 22.05.10 03:14
#5
22.05.10 04:38
0
Цитата(Bengamin @ Сегодня, 21:10)
[snapback]103663[/snapback]
DRON

strcpy(B,A.c_str());

Компилировал, но выдавал ошибку (Я ещё до того как здесь написать пробовал этот метод). Не знаю почему, по идеи то да, должно все работать sad.gif

Но все равно, спасиб smile.gif


strcpy подразумевает что под B выделена память:

str B = new char[A.size()];
strcpy(B,A.c_str());
#6
23.05.10 16:45
0
Ещё вопрос.

Если например задавать в A, например "C:\Windows", то в B будет "C:\Windowsикучакакихтознаковтипа┌╞╒".

Вопрос в том, почему возникает такая фигня и как с этим бороца.
#7
23.05.10 16:50
0
Цитата
Вопрос в том, почему возникает такая фигня и как с этим бороца.

нет символа конца строки, поэтому и выводится лишнее

решается так:
str B = new char[A.size()+1];
strcpy(B,A.c_str());
B[A.size()] = '\0'

еще можно использовать strcpy_s
#8
23.05.10 17:05
0
Спасиб, пашет =)
#9
23.05.10 17:27
0
Решил использовать strcpy_s (Судя по всему лучше её использовать, говорят безопастнее)

код получаеться такой :

str B = new char[A.size()];
strcpy_s(B,A.size(),A.c_str());

Компилиться, но вылетает с какой то критической ошибкой MVS.

Чего делаю не правильно?
#10
23.05.10 17:42
0
UPD

А, кажись понял, нужно было

strcpy_s(B,A.size()+1,A.c_str());

писать.

В таком случае, следующий вопрос : а если мне нужно будет сравнить B например с какой нибудь строкой, то получаеться сравнение не будет происходить корректно из за лишнего символа в B?
#11
23.05.10 17:45
0
памяти нехватает

str B = new char[A.size()+1];
strcpy_s(B,A.size(),A.c_str());

Цитата
В таком случае, следующий вопрос : а если мне нужно будет сравнить B например с какой нибудь строкой, то получаеться сравнение не будет происходить корректно из за лишнего символа в B?


string А - тоже заканчивается на ноль символ
сравнение идет до первого ноль-символа, а размер выделенной памяти не учитывается
Отредактировано: 23.05.10 17:53
#12
23.05.10 17:57
0
Вот так пашет :

str B = new char[A.size()];
strcpy_s(B,A.size()+1,A.c_str());

А вот так нет (Ошибка MVS) :

str B = new char[A.size()+1];
strcpy_s(B,A.size(),A.c_str());

Так как ты написал, судя по логике правильней, но MVS вываливаеться, и ничего нельзя поделать...

Сделал проверку :

if B=="1" {blablabla}

Не работает. Точнее, в B как бы есть 1, но видно и чего то лишнее тоже присутствует.
Отредактировано: 23.05.10 17:57
#13
23.05.10 18:17
0
вот так правильно:
str B = new char[A.size()+1];
strcpy_s(B,A.size()+1,A.c_str());
#14
23.05.10 18:20
0
Сделал. Путь находит правильно, а вот проверку if B=="1" не проходит.

:unknw:
#15
23.05.10 18:33
0
Цитата
а вот проверку if B=="1" не проходит

строки так не сравниваются, так сравниваются указатели на строки
используй strcmp (с учетом регистра) и stricmp (без учета регистра)
if (strcmp(B, "1") == 0) {}
Отредактировано: 23.05.10 18:34
#16
23.05.10 19:08
0
string A,B = "asdasdsa";

if (A == B) profit();

// пс : дурацкие смайлы
Отредактировано: 23.05.10 19:08
#17
23.05.10 19:16
0
В общем не очень понимаю пока разницу между

A==B и strcmp, но все пока работает, всем спс
#18
23.05.10 19:39
0
а разницы и нет, string - c++ , strcmp - pure c
#19
24.05.10 06:30
0
ra1n

Так вот метод strcmp работает, а a==b нет.

ПыСы ну есесна, если string a; string b; if a==b то все работать будет. Здесь видимо какой то другой случай..
#20
24.05.10 13:50
0
ясное дело a == b работать не будет, т.к. ты указатели сравниваешь а не строки
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}