2012-07-27 10 views
0

구조와 신뢰성에 memset과 memcopy를 사용하는 것에 대한 질의가 있습니다. 예를 들어 : 내가 0으로 설정하면 memset 함수에 괜찮 :Memcpy와 Memset은 C의 Short Type 구조체에

나는

1)이

typedef struct 
    { 
    short a[10]; 
    short b[10]; 
}tDataStruct; 

tDataStruct m,n; 

memset(&m, 2, sizeof(m)); 
memcpy(&n,&m,sizeof(m)); 

내 질문은 같은 코드가 보인다 있습니다. 하지만 2로 설정하면 m.a와 m.b가 2 대신 514가됩니다. 짧은 문자 대신 숯으로 만들면 괜찮습니다. 0이 아닌 초기화에 memset을 사용할 수 없다는 뜻입니까?

2) : short 유형의 위 두 구조 사이에서 memcopy를 수행하는 것이 신뢰할 수 있습니까? 나는 a, b, c, d, e의 거대한 문자열을 가지고 있습니다 ... 나는 완벽한 일대일 복사인지 확인해야합니다.

3) : 위와 같은 구조로 수집하는 것이 아니라 개별 배열에 memset 및 memcopy를 사용하는 것이 더 낫습니까?

하나 이상의 쿼리 나 변수들의 어레이가 위에 structue에서

. 그러나 나는 이러한 배열 에 포인터를 전달하고 그리고 난 또는 memcopy의 memset 함수에만 값이 아닌 주소를 변경하면 나는이 경우 구조

typedef struct 
    { 
    short *pa[10]; 
    short *pb[10]; 
}tDataStruct; 

tDataStruct m,n; 

memset(&m, 2, sizeof(m)); 
memcpy(&n,&m,sizeof(m)); 

이러한 포인터를 수집 할 경우. 대신 값을 어떻게 변경합니까? 프로토 타입이 잘못 되었나요?

좋습니다. 귀하의 입력은 매우

감사 DSP 사람

답변

1
  1. memset 함수 세트의 바이트가 아닌 반바지 꼬마 도깨비 있습니다. 항상. 514 = (256 * 2) + (1 * 2) ... 2s가 바이트 경계에 나타난다. 1.a. 이것은, 틀림없이, 당신이하려고하는 (배열 채우기) 등의 목적에 유용함을 줄입니다.
  2. 두 구조체가 같은 유형 인 한 신뢰할 수 있습니다. 그냥 분명히하기 위해, 이러한 구조는 당신이 제안하는 것처럼 "부족한 타입"이 아닙니다.
  3. 귀하의 질문을 이해할 수 있다면, 같은 유형의 것이 중요하다고 생각하지 않습니다.

바이트 단위 연산입니다. 그 이상도 아무것도 아닙니다. this을 참조하십시오. *
memset 함수 (m.pb, 0, sizeof 연산자 (;

질문의 두 번째 부분에 대한

,

memset 함수 (m.pa, 0, sizeof 연산자 (* (m.pa)를) 시도 . 참조를를 sizeof 아니지만, sizeof 연산자 : (m.pb))이 작업은 두 개의 서로 다른 주소 (m.pa에서 복사 할

주, m.pb 당신이 인정 효율적으로) 해결도 sizeof의 참고 있습니다 memcopy와 유사하게

+0

리차드, 답장을 보내 주셔서 감사합니다. 난 16 비트로 모든 데이터를 가지고있다. memset가 바이트로만 작동하면 잘못된 대답을하기 때문에 단어에 사용할 수 없습니다. 이 올바른지? – user437777

+0

두 가지 예외가 있습니다. 0 또는 -1 (0xFF)을 채우는 데 사용할 수 있습니다. 다른 값들에 대해서는 그렇게 유용하지 않습니다. –

+0

감사합니다. 리차드. 이제 알겠습니다. 한 번 더 쿼리를 업데이트했으며 입력 내용에 감사드립니다. – user437777