2015-11-30 10 views
0

Я пытаюсь преобразовать char [] в std :: string. Всюду, где я смотрел, я нашел тот же ответ, что строка имеет конструктор, выполняющий эту точную вещь. Проблема в том, что она не работает для меня.Как преобразовать char [] в std :: string

Вот мой код:

std::string getKey(double xTop,double yTop,double zTop,double xBottom,double yBottom,double zBottom,double zGridPoint) 
{ 
     std::string outfile = correctPath(getCurrentDirectory().toStdString()) + "keys.txt"; 
     FILE *f; 
     f= fopen(outfile.c_str(),"a"); 
     char buffer[100]; 
     double s; 

     if((zBottom-zTop) ==0) 
     { 
      sprintf(buffer,"%e %e %e", xTop, yTop, zTop); 
     }else 
     { 
      s=(zGridPoint - zTop)/(zBottom - zTop); 
      sprintf(buffer,"%e %e %e",xTop+ s*(xBottom - xTop), yTop+ s*(yBottom - yTop), zGridPoint); 

     } 

     std::string ret (buffer); 
     fprintf(f,"buffer: %s ; ret: %s\n",buffer,ret); 
     fclose(f); 
     return ret; 
} 

fprintf, чтобы проверить, если моя строка является правильной, что не правда дела. буфер печатается правильно, но ret дает мне некоторые странные признаки, которые я не могу ни читать, ни воспроизводить здесь.

Есть ли проблемы с моим кодом?

Благодаря

+0

попытка fprintf (е, "буфер:% S ; ret:% s \ n ", & buffer, ret); – hanshenrik

+0

'% s' не может использоваться с' std :: string'. try 'fprintf (..., ret.c_str());' – Shloim

+1

@hanshenrik Нет, это неправильно. –

ответ

2

ret не char*. Однако для спецификатора printf%s требуется char* (т. Е. Строка стиля C).

Вы можете использовать printf с ret.c_str() (что делает ваша строка ненужной, потому что вы преобразовать его обратно в массив символов) или C++ вывода объектов:

fprintf(f, "buffer: %s ; ret: %s\n", buffer, ret.c_str()); 

std::ofstream f(outfile); 
f << ret << std::endl; 
f.close(); 
+0

Спасибо, файловый поток работает. – Myrkjartan

1

Вы не можете передать объект строки в Printf используя% с.

Вам необходимо передать ret.c_str() в качестве параметра, или еще лучше использовать cout.

Подробнее здесь: C++ printf with std::string?

Смежные вопросы