문제

여기 내 문제가 있습니다 : 나는 명령 A [1]을 포함하는 배열이 있고, 여러 명령 Args a [2], a [3], ...

내가해야 할 일은 다음과 같습니다

  • CMD와 Args의 조합으로 구성된 문자열을 만듭니다.

CMD ARG1 ARG2 ARG3

  • 해당 명령 문자열을 실행하십시오

내가하는 방법은 다음과 같습니다 (pseudo-code) :

  1. 각 ARG의 길이를 전제하여 배열에 보관하십시오.
  2. 조합 얻기 (GNU Scientific Library 사용)
  3. 문자열을 할당하는 데 필요한 바이트의 크기를 계산합니다 (CMD + 1 + 길이의 길이 arg1 + 1 + argn-1 + 1) (일반적으로 빈에 대한 +1 및 0의 경우).
  4. strcat을 사용하여 문자열을 작성하십시오
  5. 명령-스트링을 실행하십시오

글쎄, 그것은 작동하지만 고의적으로 strcat을 사용하는 것이 실제로 효율적이고 올바른 방법인지 궁금합니다.

제안이 있습니까?

도움이 되었습니까?

해결책

아니요, 사용 strcat() 문자열을 밟아서 전화 할 때마다 끝을 찾아야하므로 효율적이지 않습니다.

한 번에 모두 사용하는 것이 훨씬 낫습니다. snprintf() 당신이 그것을 가지고 있다면 (그리고 거기에 당신의 주장을 짜낼 수 있음) 직접 포인터 조작을 사용하여 직접 수행하십시오.

물론, 이것이 실제로 문제를 해결하기 위해서는이 명령을 매우 자주 실행해야합니다.

다른 팁

사용으로 전환 할 수있는 각 구성 요소 문자열의 길이를 저장 한 경우 memcpy 사용하는 대신 올바른 포인터 오프셋으로 strcat 문자열의 끝을 찾을 필요는 없습니다. '\0', 그러나 그 외에는 그 외에는 연결이 크게 더 빨리 만들어지기 위해 할 수있는 일이 많지 않습니다.

strcat(), 표준 라이브러리의 모든 문자열 조작 기능뿐만 아니라 비효율적입니다. 이는 스트링이 C에 저장되기 때문입니다. 즉, 각각의 함수는 각 문자를 반복하여 문자열의 끝을 찾아야합니다.

어쨌든, 당신은 조기 최적화를하고 있습니다 : 여기서 다중 strcat () 호출은 명령 실행에 비해 실제로 빠르게 실행되므로 연결 방식의 효율성에 대해 걱정하지 않아야합니다.

코드의 일부를 최적화하기 전에 코드가 병목 현상이며 최적화하면 실행 시간이 실제로 향상 될 것임을 보여 주어야합니다. 대부분의 경우 최적화 할 필요가 없습니다. 단순히 보낸 시간의 가치가 없습니다.

나는 그것을 할 것이다 Sprintf.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top