2014-10-01 5 views
0

여기에서 가능한 한 명확하게하려고 노력할 것입니다. (나는 C에서 이것을하고있다) 나는 while 루프에서 자라는 부호없는 long long int의 배열 (동적)을 가지고있다. 그 동작은 멋진 것은 아니지만 물어 본 내용을 기반으로 정보를 제공하는 게터 기능이 있습니다.int 배열을 C 언어의 문자열

e. 처음 20 개의 숫자를 구하십시오. 이것은 길이가 20 인 요소의 부호없는 long long int 배열을 반환합니다.

사용자가 반환 된 배열의 요소 수를 선택하므로 1 일 수도 있고 20 개의 큰 숫자 일 수도 있습니다 (예 : array [] = (1233, 123444, 1234124, 1243124, .....).)

내가 UDP 패킷에 그 퍼팅입니다. 문자열로 그것을 얻을. 내가 sprintf를 놀겠다는 거하고 필요

하지만 난 그렇게 도움이 환상적 일 것입니다.

에는 C 전문가는 아니지만 감사합니다!

+1

확인 '인쇄 얼마나 많은 문자의 sprintf'의 반환 값(). – timrau

+0

원하는 출력 문자열의 정확한 형식은 무엇입니까? –

답변

2

가장 효율적인 방법은 각 요소를 버퍼에 반복적으로 넣는 것입니다.

다음은 Python의 join()을 에뮬레이트하는 함수입니다.

#include <stdio.h> 

#define ARRAY_LEN(x)   (sizeof(x)/sizeof(x[0])) 

/** 
* Print an array of unsigned long long integers to a string. 
* Arguments: 
* buf  Destination buffer 
* buflen Length of `buf' 
* ar  Array of numbers to print 
* arlen Number of elements in `ar' 
* sep  Separator string 
* Returns: 
* The number of bytes printed 
*/ 
int join_ull(char *buf, int buflen, 
    unsigned long long ar[], int arlen, const char *sep) 
{ 
    int i; 
    char *p; 
    const char *end = buf + buflen; 

    /* While we have more elements to print, and have buffer space */ 
    for (i=0, p=buf; i<arlen && p<end; ++i) { 
     p += snprintf(p, end-p, "%llu%s", ar[i], 
      (i<arlen-1) ? sep : "");  /* Print separator if not last. */ 

     /* Note that p is advanced to the next place we want to print */ 
    } 

    return p-buf; 
} 


int main(void) 
{ 
    unsigned long long ar[] = {1, 2, 3}; 
    char buf[1024]; 

    join_ull(buf, sizeof(buf), ar, ARRAY_LEN(ar), " "); 
    printf("Output: \"%s\"\n", buf); 

    /* Test the buffer-too-small case */ 
    join_ull(buf, 4, ar, ARRAY_LEN(ar), " "); 
    printf("Output: \"%s\"\n", buf); 

    return 0; 
} 

결과 :

Output: "1 2 3" 
Output: "1 2" 
+0

우아한! – chouaib

+0

@chouaib 질문에 언급 된'('')을 인쇄하는 것으로 정교합니다. OP *가 실제로'()'를 원하는지 확실하지 않습니다. –

+0

하 ... 음, 그게 효과가있다. 절반 밖에 이해하지 못한다. 대단히 고마워! – beasts