2017-03-15 4 views
-2

예 (CERT C 코딩 표준)에서 예제를 실행하려고합니다. 책 예제는 추상 코드보다는 완전한 완전한 프로그램입니다.
RULE STR31-C : 문자열 저장에 문자 데이터 및 널 종결 자용 공간이 충분하다는 것을 보장.C에서 하나씩 오류가 발생했습니다

#include <stdio.h> 
#include <stddef.h> 

enum {ARRAY_SIZE = 32 }; 
int main(void) 


char dest [ARRAY_SIZE] = {1,2,3,4,5}; 
char src[ARRAY_SIZE]; 
size_t i; 

for (i = 0;src[i] && (i < sizeof(dest)-1);++i) 
{ 
dest[i] = src[i]; 

} 

dest [i] = '\0'; //this over writing the dest[0],Right? 

printf("original -> copied \n"); 

for(i = 0; i < 5; ++i) 
{ 
    printf(" %2d  %2d\n", src[i], dest[i]); 
} 

    return 0; 
} 

출력 : 나는 이명 령이 [0] '\ 0'.It이 발생하지 않아야 -overwritten 이해

original -> copied 
    0   0 
    0   2 
    0   3 
    0   4 
    0   5 

질문 1. ... 수정하거나이 디자인을 변경하는 방법에 대해 설명합니다.

질문 2 : src []가 모두 0이됩니다. 이유는 무엇입니까? 이해할 수 없다. 또는 내가 왜? 이해할 수없는 기본 뭔가 :(

+1

"이 이상 작성하는 [0]"메모는 잘못되었습니다. 루프가 끝나면 변수'i'는'sizeof (dest) - 1'과 같습니다. –

+1

책 내용을 올바르게 복사 한 것처럼 보이지 않습니다. 그것은 보여 주려는 의도가 무엇인지 보여주지 않습니다. – user2357112

+0

예를 들어'src'와 같이 지역 변수 (그리고 비 정적 변수)를 선언하면 변수를 초기화하지 않으면 변수는 초기화되지 않은 상태로 유지됩니다. 이러한 초기화되지 않은 변수와 데이터는 * 불확정 * 값을가집니다. –

답변

0

src가 [] 모든 0이 될를 그리워. 또는 내가 기본 뭔가 :(

당신은 하나 src 아무것도 초기화되지 않은를 그리워 .

의 최종 도착 [내가] '\ 0'; //은 이명 령을 작성하는 동안 [0], 오른쪽

내 질문은 ㅁ이다이 너 그렇게 생각해? 귀하의 모든 i0

0

과 같지 않습니다. 이제 예상대로 작동합니다. 내 잘못이야. 잘못 src []와 dest []가 변경되었습니다.