나는이처럼 보이는 메모리에 문자열을 표현하는 구조를 가지고 :C의 printf와 문자열의 정밀도를 지정하기위한 size_t로 사용
typedef struct {
size_t l;
char *s;
} str_t;
내가이 size_t를 사용하여 믿고
숯불 문자열의 길이를 지정하는 의미가 있습니다를 . printf("%.*s\n", str.l, str.s)
을 사용하여이 문자열을 인쇄하고 싶습니다. 그러나 *
정밀도는 size_t
이 아니라 int
인수를 필요로합니다. 나는 이것에 관련된 어떤 것을 찾을 수 없었다. 이 구조를 올바르게 사용할 수 있습니까? int
에 캐스트하지 않고 printf()
을 호출합니까?
당신은'char *'을 null로 끝내려하지 않습니까? null로 끝나면 길이에 대한 정밀도를 설정하면 무엇을 얻을 수 있는지 알 수 없습니다. 그 외에도, 여러분의 선택은 다음과 같다 :'size_t'를'int'로 변환하거나 변경하고 부정적인 것으로 허용하지 마십시오. –
@EvanTeran 문자열은 실제로 더 큰 버퍼 내의 조각을 가리키고 있으므로 'null'문자가 더 어딘가에 있습니다. 'int'의 크기는 문자열이 일반적으로 최대 수백 바이트이기 때문에 문제가되지 않습니다. 나에게 좌절감을 느끼는 것은 'size_t'가이 목적에 잘 어울리지 만, C99는 'size_t'인수를 허용하는 특수 정밀도 수정자를 정의하지 않는다는 것입니다. –