2013-03-27 4 views
-2

나는이 같은 문자로 INT의 배열, 뭔가를 출력, (내가 생각하는) 매우 간단한 무언가를 시도하고있다 :int 배열을 char에 넣습니다. C 또는 C++

int Z[10]={0}; 
char buff[100]; 

for(int i =0; i<10; i++){ 
    Z[i]+=10; 
    } 

    sprintf(buff,"%d",Z); 
retunr buff; 

난 당신이 helpme 수 있기를 바랍니다 또는 대안 솔루션을 제공합니다.

어떻게 int 배열의 모든 값을 하나의 변수에 넣을 수 있습니까?

감사합니다. Zint의 배열이기 때문에 %dint을 포함하는 반면

+0

질문이 명확하지 않습니다. 투표를 끝내 겠지만이 내용을 수정하고 분명한 질문을하면 투표를 취소하겠습니다. –

+0

무엇이 당신의 질문입니까? – Nima

+0

C 또는 C++ : 매우 다른 답변. – hmjd

답변

0

귀하가 제공 한 코드는 잘 작동하지 않아야합니다. sprintf를 사용하여, 문자열에 Z의 각 값을 넣을 수 있습니다 :

#include <stdio.h> 

int size = 0; 

for (i = 0; i < 10; i++) 
{ 
    size += sprintf(buff+size, "%d", Z[i]); 
} 
+0

제이의 해결책과 같은 코멘트. 틀렸어. –

+0

감사합니다.이 작품은 저에게 완벽합니다. – Joaquin

0
sprintf(buff,"%d",Z); 

가 잘못된 것입니다. 당신의 생각은 글자 그대로 전체 배열을 버퍼에 넣는 것으로, 작동하지 않습니다.

이 코드 조각 그냥 예입니다

int ret = 0; 
for(int i=0; i<10; i++) 
{ 
    ret += sprintf(buff+ret, "%d", z[i]); 
} 

해야한다. 충분한 오류 검사를 수행했는지 확인하십시오.

또 다른 제안은 snprintf을 사용하는 것으로 sprintf의 안전한 대안입니다.

+0

이 솔루션은 버퍼에 하나의 매우 큰 수 또는 버퍼 오버플로 (및 정의되지 않은 동작)로 끝납니다. –

+0

정말 고마워,이 작품은 나를 위해 완벽. – Joaquin

0

우선, 이 아닙니다. sprintf을 사용하십시오. 그것은 너무 위험합니다. 둘째, 구분 기호를 잊지 마세요. 예 :

std::ostringstream dest; 
for (int const* p = std::begin(Z); p != std::end(Z); ++ p) { 
    if (p != std::begin(Z)) { 
     dest << ' '; 
    } 
    dest << *p; 
} 
std::string results = dest.str(); 

트릭을해야합니다.