이 나는 입력의 다음을보다 간단하게 /보다 효율적으로 만들 수 있습니까?
내가 변환하는 방법을 결정 디스패처 기능이 C.
로 아직 내가 실제적인 경험이 없기 때문에 저와 C.에 동적 타입 언어에서 곰을 몇 가지 코드를주십시오 변환하려고 해요 플래그 인수의 값을 에 기초합니다.void output_dispatcher(char *str, int strlen, int flag) {
char output[501];
char *result;
switch (flag) {
/* No conversion */
case 0:
result = str;
break;
case 1:
result = convert_type1(output, str, strlen);
len = strlen(result);
break;
/* ... */
}
/* do something with result */
}
나는 현재 5 개 가지 출력 컨버터가 만 300 ~ 500 자 생산에 모두 (심지어 미래 들)이 보장됩니다. 필자의 글에서 은 가능한 경우 스택에 동적으로 공간을 할당하는 것보다 힙 변수를 사용하는 것이 더 바람직합니다. 내가 디스패처에서 나 strlen을 피하려고
static char * convert_type1(char *out, const char *in, int inlen);
가 출력을 구성 때 출력 컨버터가 그것을 알고 있기 때문에 출력 크기를 계산하는 것이 uncessary 때문에, : 같은 하나의 함수 선언 보인다. 또한, 내가 출력 변수에 대한 포인터를 전달하기 때문에 결과 포인터를 반환 할 필요가 없습니다. 그래서 나는 다음과 같이 을 수정하지만 '호환되지 않는 타입'컴파일 오류가 발생합니다.
void output_dispatcher(char *str, int strlen, int flag) {
char output[501];
switch (flag) {
/* No conversion */
case 0:
output = str; /* ERROR: incompatible type */
break;
case 1:
strlen = convert_type1(output, str, strlen);
break;
/* ... */
}
/* do something with result */
}
이 접근 방식이 효과가 있습니까? 아니면 더 좋은 방법이 있습니까?
두 번째 예제 ('output1 = output;')는 작동하지 않습니다. 왜냐하면 C에는 이러한 종류의 직접 지정을 허용하지 않는 배열에 대한 특별한 경우 규칙이 있기 때문입니다. 'memcpy (& output1, & output, sizeof output)'은 작동합니다. – caf