2015-02-21 4 views
0

Как мне правильно скомпоновать DataBuffer? от PHP до C++ нелегко ха-ха, что именно я делаю неправильно здесь?Несколько символов в C++

while(true) { 
    DWORD TitleID = XamGetCurrentTitleId(); 
    char DataBuffer[] = "Here's the current title we're on : "; 
    char DataBuffer[] = (DWORD)TitleID; 
    char DataBuffer[] = "\n\n"; 
    DWORD dwBytesToWrite = (DWORD)strlen(DataBuffer); 
} 
+0

Вы пытаетесь инициализировать 'полукокса DataBuffer []' 3 раза, что является ошибкой. –

+4

Это зависит от того, чего вы пытаетесь достичь? Например, для расчета pi. Вы пытаетесь объединить 3 строки в 1? – BoBTFish

+0

@ ArunA.S Я вижу эту ошибку в консоли, как это сделать? так как мне нужно добавить символы, поэтому я попытался разбить его на 3 – Curtis

ответ

2

В C++ обычно работает с типом std::string. Чтобы создать строку из нескольких входов, особенно если они не все строки в первую очередь, мы используем ostringstream.

Так что вы можете создать свое сообщение что-то вроде этого:

while(true) { 
    DWORD TitleID = XamGetCurrentTitleId(); 
    std::ostringstream titleMessageSS; 
    titleMessageSS << "Here's the current title we're on : " 
        << TitleID // already a DWORD, no need for the cast 
        << "\n\n"; 
    std::string titleMessage = titleMessageSS.str(); // get the string from the stream 
    DWORD dwBytesToWrite = (DWORD)titleMessage.size(); 
    // You don't do anything with this, so can't help you with how to write the string... 
} 

Теперь, если вы используете WriteToFile, вам нужно, чтобы получить char указатель из строки. Сделайте это, используя titleMessage.c_str().

В качестве альтернативы, вы можете использовать +, чтобы построить std::string, в сочетании с std::to_string для преобразования TitleID (так что вы можете + его с string).

+0

Это похоже на работу, хотя теперь я получаю эту ошибку 'ошибка C2664: 'WriteFile': не может преобразовать параметр 2 из 'std :: string' в 'LPCVOID'' при запуске этой функции' WriteFile (logFile, titleMessage, dwBytesToWrite, & dwBytesWritten, NULL); ' – Curtis

+0

@Curtis Добавил упоминание об использовании' c_str() 'для этого. – BoBTFish

+0

Я нашел это уже, но спасибо за обновление :) – Curtis

1

В то время как у PHP есть автоматическое преобразование в строку, C++ не имеет (за исключением некоторых случаев). Вы (обычно) должны быть явными с вашими типами. К счастью, C++ 11 предоставляет std::to_string, что делает это намного проще:

while(true) { 
    DWORD TitleID = XamGetCurrentTitleId(); 
    std::string DataBuffer = "Here's the current title we're on : " 
          + std::to_string(TitleID) 
          + "\n\n"; 
    DWORD dwBytesToWrite = static_cast<DWORD>(DataBuffer.size()); 
    /* ... */ 
} 
Смежные вопросы