std::string을 가지고 sprintf같은 작업하기?

rain의 이미지

std::string을 가지고 sprintf같은 작업하기?

어떻게 해야하요?

yielding의 이미지

boost의 format라이브러리를 사용하세요

Life rushes on, we are distracted

익명 사용자의 이미지

std::string myString;
int i=0;

myString.reserve(128);

sprintf(&myString[0], "%d", i);

익명 사용자의 이미지

std::ostringstream 을 쓰는 것이 해답 아닐까요?

string compose2(int n, const string& cs)
{
ostringstream ost("error(") ;
ost << n << ") " << std_  message[n] << " (user comment: " << cs << ´)´;
return ost.str() ;
}
yielding의 이미지

Quote:

std::string myString;
int i=0;

myString.reserve(128);

sprintf(&myString[0], "%d", i);


이건 결과가 나오지 않습니다. sprintf가 의도한 데로 동작을 하지 않습니다. (저도 얼핏 될거라 생각해서 vc7.1 g++ 3.4에서 해봤는데 안되는군요)

그리고 ostringstream은 질문을 주신 의도가 printf의 포메팅 스트링을 그대로 사용하고 싶다고 하신 의도와는 좀 안맞는거 같아요.

Life rushes on, we are distracted

익명 사용자의 이미지

맨 처음의 질문은 'std::string을 가지고 sprintf같은 작업하기?' 였습니다. 그에 대해서 제가 ostringstream을 제시한 것은 전혀 엉뚱한 답변 같지는 않군요. 또한 boost는 아직 표준이 아닙니다.

yielding의 이미지

제가 질문을 임의로 해석했네요.. 죄송합니당 (떱, 그리고 표준으로 구현해달라고 하신적도 없군요.. ^^)

Life rushes on, we are distracted

비행소년의 이미지

간단한 코드를 짜 보았습니다.

#include <cstdio>
#include <string>

int main()
{
	std::string text;
	text.reserve(128);
	
	for (int i=0; i<10;i++)
	{
		sprintf(&text[0], "%d", i);	
		printf("%s\n", text.c_str());
	}

	return 0;
}

VC++ 6에서는 의도한 대로 결과가 나오는 군요. :D
책을 찾아 봤더니. 이런 코드가 된다는 말은 없네요. :evil:
이런 상황에서는 std::vector<char>를 쓰라고 하네요.

이펙티브 STL 참고 했습니다.

높이 날다 떨어지면.
아푸다 ㅡ,.ㅡ

익명 사용자의 이미지

yielding wrote:
(떱, 그리고 표준으로 구현해달라고 하신적도 없군요.. ^^)

std::string으로 하는 것을 조건으로 내세운 질문인 만큼 추가적인 라이브러리 설치를 염두에 두고 한 질문 또한 아닌 것 같군요. 지적한 이유는 그 때문입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.