2009-04-28 9 views
1

현재 시스템 프로그래밍 숙제를 쓰고 있는데 한 부분에서 디렉토리의 일부 파일 정보를 가져와야합니다.변환 : uid_t를 문자열로, off_t를 문자열로

파일의 경우, time_t 유형을 string으로 변환하고 이에 대한 포인터를 반환하는 ctime() 함수가 있습니다.

하지만 uid_toff_t 유형은 어떻습니까? 인터넷을 통해 검색하고 couldnt 어떤 기능을 찾을 수 .. 아니면 어떤 함수가 존재하지 않는 경우 제발 그런 기능을 구현하는 방법을 말해 줄래?

답변

2

size_toff_t은 부호없는 정수 유형입니다.

sprintf (또는 무엇이든)을 사용하여 "% i"형식 지정자를 사용하여 변환하십시오.

편집 : 쓰레기, 내가 대답하는 동안 size_tuid_t으로 변경했습니다. uid_ttypes.h으로 정의됩니다. 저길 봐. (또한 부호없는 정수형하지만 unsigned short입니다.)

+1

나는 실제 수업이 서로 다른 시스템에서 서로 다른 크기라고 생각한다. –

+0

예, 그래서 "머리글 확인"이라고 적었습니다. "당신"에 중점을 둡니다. :) – tpdi

0

off_tlong int입니다 : 형식 = "% ld 개"

size_tunsigned int입니다 :

당신이 사용할 수있는 형식 = "유 %" sprintf의 이러한 형식은 char *로 변환하는 함수입니다.

+1

나는 모든 플랫폼에서 그 유형이 될 것이라고 확신하지 않습니다. –

+0

맞습니다.하지만 off_t 또는 size_t 형식이 아니기 때문에 이것이 유일한 해결책입니다. 이것은 플랫폼을 알기 위해 사전 처리 테스트를 사용하여 향상시킬 수 있습니다. –

+0

왜 값을 부호없는 long long으로 넓힐 수 없습니까? –

1

리눅스 'snprintf()size_t 값에 대해'z '형식 지정자를 지원합니다. 이것이 얼마나 이식성이 좋은지 잘 모르겠다면, "CONFORMS TO"섹션을 면밀히 조사해야 할 것입니다.

off_t의 경우 최대 부호없는 정수 유형 (예 : unsigned long)으로 캐스팅하고 "lu"지정자를 사용해야 할 수 있습니다.

0

GCC 5.4.0에게 다음 줄을 사용하여 :

..main.c:133:9: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 2 has type ‘uid_t {aka unsigned int}’ [-Wformat=]

내가 동일한 기능을 수행하고 컴파일러의 출력을 확인하는 당신을 제안 :

printf("user #%ld did this or that!\n", uid);

다음과 같은 경고를 올렸다. =)