memset () 반환 값의 용도는 무엇입니까?


89

memset()void*함수에 전달 된 주소와 항상 동일한 값 을 반환 하도록 선언됩니다 .

반환 값의 용도는 무엇입니까? 왜 반환되지 void않습니까?



2
의 반환 값의 용도는 무엇입니까 strcat()? 때로는 표준 기능이 지정 되어야하는 것이 아니라 지정되는 것입니다.
DevSolar 2012-12-05

4
@MatthieuM .: 또한 일반적으로 물건을 반환하는 것과 관련된 0이 아닌 비용이 있습니다. 반환 값이 레지스터에 맞더라도 일반적으로 해당 값을 레지스터에로드해야합니다. 그러나 비용은 적습니다.
NPE

15
@sharptooth : "kill all humans"함수는 물론 죽인 인간의 수를 반환합니다.
개별적으로

2
@MatthieuM : 당신은 그런 사소한 걱정하지,하지만 나는 확실히 있습니다. 제한된 리소스 시스템 용 컴파일러를 작성하는 경우 어떻게합니까? 흠?
Thomas Eding

답변:


36

서명은 다른 모든 유사한 기능과 라인에 있습니다 memcpy(), strcpy()등 난 항상이이 같은 기능에 체인 호출에 1을 활성화하기 위해 수행하고, 그렇지 않은 경우에 표현 이러한 호출을 사용했다 생각했다.

즉, 이러한 방식으로 반환 값을 사용해야하는 실제 상황을 본 적이 없습니다.


122

다음과 같은 콜 체인에 사용할 수 있습니다.

char a[200];
strcpy(memset(a, 0, 200), "bla");

9
예, 확실히 '체인'사용 사례입니다.
Cartesius00

6
흥미로운 경우이기 때문에 답변을 찬성했습니다. 그러나 실제 생활에서는 memset 및 strcpy 호출을 별도로 유지하는 것이 좋습니다.
Tsvetomir Dimitrov

26
C 프로그래머는 읽을 수없는 코드를 좋아하므로 표준 함수를 설계 할 때 무한 체인을 허용하는 것이 필수입니다.
Chad Schouggins

@ChadSchouggins 읽기 일부 하스켈 코드와 해당 C 프로그래머가 꽤 그대로 실제로 알고) () = ~ "연산자"정규식 생각 ...
BitTickler

물론이 예제에서는 strcpy복사 된 마지막 포인터를 지나서 포인터를 반환하는 것이 더 합리적이었을 것 입니다. memset(my_strcpy(a, "bla"), 0, a + 200);( C ++에서 좋아 std::copy_n하고 std::fill_n수행).
alfC

12

함수를 다음과 같은 다른 함수의 인수로 사용하려면 sprintf


1

나는 인터넷 검색에서 memset이 반환 한 것을 볼 때이 질문을 보았습니다.

하나의 값을 테스트하는 코드가 있으며 이것이 사실이면 값이 0인지 테스트합니다.

C에서 0을 테스트하는 완전히 이식 가능한 방법이 없기 때문에 중간에 memset을 실행해야합니다.

그래서 내 코드는 다음과 같습니다.

if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )

이것은 이전 질문에 나열된 연결 목적을 말하지만이 기술에 대한 사용의 예입니다.

이것이 좋은 코딩인지 아닌지 판단하기 위해 다른 사람들에게 맡기겠습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.