예 (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이됩니다. 이유는 무엇입니까? 이해할 수 없다. 또는 내가 왜? 이해할 수없는 기본 뭔가 :(
"이 이상 작성하는 [0]"메모는 잘못되었습니다. 루프가 끝나면 변수'i'는'sizeof (dest) - 1'과 같습니다. –
책 내용을 올바르게 복사 한 것처럼 보이지 않습니다. 그것은 보여 주려는 의도가 무엇인지 보여주지 않습니다. – user2357112
예를 들어'src'와 같이 지역 변수 (그리고 비 정적 변수)를 선언하면 변수를 초기화하지 않으면 변수는 초기화되지 않은 상태로 유지됩니다. 이러한 초기화되지 않은 변수와 데이터는 * 불확정 * 값을가집니다. –