C 언어 에서 전역 배열 과 부분 배열 의 문제

오늘 학생 들 은 C 언어 에서 전체 배열 과 부분 배열 의 문 제 를 만 났 습 니 다.오래 걸 렸 고 저도 문 제 를 먼저 보지 못 했 습 니 다.지금 문 제 를 정리 하고 해결 방안 을 제시 합 니 다.문제 설명:전역 성명 의 배열 은 부분 성명 의 배열 과 다른 효 과 를 가진다.먼저 프로그램 을 보 겠 습 니 다:
 
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
char a[MAX];
int main()
{
int i;
char b[MAX];
char *c=(char *)malloc(MAX * sizeof(char));
printf("
Array a:
");
for(i=0;i<MAX;i++)
printf("%d ",a[i]);

printf("
Array b:
");
for(i=0;i<MAX;i++)
printf("%d ",b[i]);

printf("
Array c:
");
for(i=0;i<MAX;i++)
printf("%d ",c[i]);
printf("
Done");
free(c);
return 1;
}
컴 파일 실행 결과: 프로그램의 주요 기능 은 문자 배열 의 Ascii 코드 를 인쇄 하 는 것 입 니 다.전체 배열 a 와 동적 으로 생 성 된 배열 c 가 같은 결 과 를 가 진 것 을 발견 할 수 있 습 니 다.일부 성명 의 배열 b 는 무 작위 수 치 를 분 배 했 습 니 다.이것 이 문제 일 수도 있 습 니 다.솔 루 션:
 
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
char a[MAX]={0};
int main()
{
int i;
char b[MAX]={0};
char *c=(char *)malloc(MAX * sizeof(char));
printf("
Array a:
");
for(i=0;i<MAX;i++)
printf("%d ",a[i]);

printf("
Array b:
");
for(i=0;i<MAX;i++)
printf("%d ",b[i]);

printf("
Array c:
");
for(i=0;i<MAX;i++)
printf("%d ",c[i]);
printf("
Done");
free(c);
return 1;
}
운영 결과: 배열 의 초기 화 에서 초기 화 된 수치 개수 가 배열 의 크기 보다 작다 고 가정 하면 모두 0 으로 채 웁 니 다.여기 서 값 을 초기 화하 면 배열 에 확실한 결 과 를 줄 수 있 습 니 다.(서로 다른 시스템 과 서로 다른 컴 파일 러 에 서로 다른 결과 가 나 올 수 있 습 니 다)또 하나의 작은 문 제 는 C 언어 에서 빈 칸 의 문제 입 니 다.아래 의 프로그램 을 보 세 요.
 
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
int main()
{
int i;
char b[MAX]={0};
gets(b);
printf("
Array b:
");
for(i=0;i<MAX;i++)
printf("%d ",b[i]);
printf("
Done");
return 1;
}
 여기에"int"(세 개의 빈 칸+int)를 입력 했 습 니 다.인쇄 결 과 는 위의 그림 과 같 습 니 다.b 중 앞의 세 개 는 빈 칸 의 Ascii 코드,즉 32 를 기록 했다.b 중 뒤에 사용 되 지 않 은 공간 은 여전히 0.아르 바 이 트 를 마치 고 끝난다.

좋은 웹페이지 즐겨찾기