Перебираем список строк в C , что происходит не так?

#c #string #iterator

#c #строка #итератор

Вопрос:

Я пытаюсь распечатать список строк таким образом:

 std::list<String> const amp;prms = (*iter)->getParams();
std::list<String>::const_iterator i;
for(i = prms.begin(); i != prms.end();   i){
  log.debug("  Param: %s",*i);
}
  

Но моя программа вылетает, говоря Illegal Instruction . Что я делаю не так?

Комментарии:

1. Заглавная строка — что это за класс, тот, что на C / CLI? Или вы имеете в виду std::string ? Если это так, i->c_str() я думаю, вы хотите получить результат, предполагая, что debug принимает char * .

2. Исходя из Java, C иногда меня чертовски смущает…

Ответ №1:

*i это a String , а не a char * . Если log.debug() это функция printf семейства, вам нужна строка с нулевым завершением. В зависимости от того, как реализован ваш String класс, у вас может быть функция, которая возвращает a const char * .

Например, с std::string помощью этой функции c_str :

 for(std::list<std::string>::const_iterator i = my_list.begin(); i != my_list.end();   i)
{
     printf("%sn", i->c_str());
}
  

Комментарии:

1. Вы правы в том, что проблема в том, что это не a char * , на самом деле это проприетарный String класс, и теперь я разобрался с проблемой.