C ++ конвертирует char в const char * - PullRequest
11 голосов
/ 09 декабря 2011

По сути, я просто хочу пройтись по цепочке символов, которые вытягивают каждый из них, и каждый из них должен иметь тип const char *, чтобы я мог передать его функции. Вот пример. Спасибо за вашу помощь.

    string thestring = "abc123";
    const char* theval;
    string result;

    for(i = 0; i < thestring.length(); i++){
        theval = thestring[i]; //somehow convert this must be type const char*
        result = func(theval);
    }

Ответы [ 5 ]

19 голосов
/ 09 декабря 2011

Вы можете взять адрес этого элемента:

theval = &thestring[i];
15 голосов
/ 09 декабря 2011
string sym(1, thestring[i]);
theval = sym.c_str();

Он дает константный символ * с нулем в конце для каждого символа.

4 голосов
/ 09 декабря 2011

Я предполагаю, что вызов func ожидает C-строку как вход. В этом случае вы можете сделать следующее:

string theString = "abc123";
char tempCString[2];
string result;

tempCString[1] = '\0';

for( string::iterator it = theString.begin();
     it != theString.end(); ++it )
{
   tempCString[0] = *it;
   result = func( tempCString );
}

Это создаст небольшую C-строку (массив символов с нулевым символом в конце), который будет иметь длину 1 для каждой итерации.

Цикл for может быть выполнен с индексом (как вы его написали) или с итераторами (как я написал), и он будет иметь тот же результат; Я предпочитаю итератор только для согласованности с остальной частью STL.

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

4 голосов
/ 09 декабря 2011

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

Если это действительно то, что вы хотите,Ответ прост:

theval = &thestring[i];

Если функция действительно ожидает строку, но вы хотите передать ей строку из одного символа, то требуется немного иной подход:

char theval[2] = {0};
theval[0] = thestring[i];
result = func(theval);
0 голосов
/ 03 октября 2017

Вы можете сохранить адрес этого элемента:

theval = &thestring[i];

...