2012-12-05 4 views
85

memset()은 항상 함수에 전달 된 주소와 동일한 값인 void*을 반환하도록 선언되었습니다.memset() 반환 값의 용도는 무엇입니까?

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

+0

다른'mem *'함수와의 일관성은 대개'void *'를 반환합니까? –

+9

http://thevirtualmachinist.blogspot.co.uk/2010/08/whats-return-value-of-memset.html – BoBTFish

+0

@BoBTFish 좋은 링크. – Cartesius00

답변

33
서명은 다른 모든 유사한 기능과 라인에

: memcpy(), strcpy() 등 난 항상이가 연쇄 호출에 하나를 가능하게 할 줄 알았는데 그러한 함수를 사용하고 표현식에서 그러한 호출을 사용합니다.

그런데, 나는 그런 방식으로 반환 값을 사용하도록 강요당하는 실제 상황을 결코 경험하지 못했습니다. 반환 무엇 memset 함수를보고 인터넷 검색을 할 때 나는이 질문에 건너 온 같은 sprintf

115

이 호출이 같은 체인에 사용될 수있다 :

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

예, 확실히 '연결'사용 사례입니다. – Cartesius00

+6

나는 그것이 흥미로운 경우이기 때문에 대답을 upvoted했습니다. 하지만 실생활에서는 memset과 strcpy 호출을 별도로 유지하는 것이 더 낫다고 생각합니다. –

+23

C 프로그래머는 읽을 수없는 코드를 좋아하기 때문에 표준 함수를 설계 할 때 무한 사슬을 허용해야합니다. –

12

.

하나의 값을 테스트하는 코드가 있는데, 그 값이 0인지 확인하기 위해 참인 테스트가 수행됩니다.

제로에 대한 테스트를 위해 C에서 완전히 이식 가능한 방법이 없기 때문에 중간에 memset을 실행해야합니다. 이것은 이전의 질문에 나와있는 체인 목적에 말을

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

하지만이 기술의 사용의 예는 다음과 같습니다

그래서 내 코드입니다.

좋은 코딩인지 아닌지 판단하기 위해 남겨 두겠습니다.

0

같은 다른 함수의 인수로 기능을 사용하기 위해서는

관련 문제