Использование строк C ++ с функциями библиотеки C - PullRequest
2 голосов
/ 05 февраля 2012

Ошибка возникает, когда я пытаюсь использовать функцию atoi (const char *) в следующей строке ...

externalEncryptionRawHolder[u] = atoi(parser.next()); 

Объект 'parser' - это анализатор строк и метод 'next'возвращает строкуЯ думаю, что ошибка связана с тем фактом, что строка в функции 'atoi' не является константой ... но я не уверен.Суть ошибки заключается в том, что «невозможно преобразовать строку в const char *».Как я могу сделать мою строку постоянной?Любая помощь будет принята с благодарностью (кстати, если вам интересно, что такое индекс u, это внутри цикла for).

Ответы [ 2 ]

7 голосов
/ 05 февраля 2012

Вы должны вызвать c_str() на объекте string, чтобы получить const char*:

externalEncryptionRawHolder[u] = atoi(parser.next().c_str());

Заметьте, однако, что вы не должны делать это:

const char* c = parser.next().c_str();

Поскольку c будет указывать на память, которой управляла string, возвращаемая parser.next(), которая уничтожается в конце выражения, поэтому c указывает на освобожденную память,Первый пример вполне подходит, потому что строка не уничтожается до тех пор, пока не вернется atoi.

1 голос
/ 05 февраля 2012

string::c_str() преобразует string в const char*, чего и ожидает atoi.

externalEncryptionRawHolder[u] = atoi(parser.next().c_str()); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...