을 보여줍니다. (. 사실, 당신의 마지막 strcpy()
가 정의되지 않은 동작을 호출, 배열의 범위를 벗어난 기록)을 사용
char picture[5][6] = { "#####", "#####", "#####", "#####", "#####", };
이 너무 strcpy()
전화에 저장합니다.
내가 댓글 :
는 6 5로 변경,하지만 난 그게 종료를 삭제해야하더라도 (가 초기화를 할 수 있도록해야합니다 생각하는 경우도 경고를 생성 할 수 있습니다 컴파일러 null 바이트). 그러나 당신이 고치기를 원한다는 경고입니다. 그것은 진짜 문제를 보여주고 있습니다.
실제로 GCC 4.8.2는 상당히 엄격한 컴파일 옵션에서이 문제에 대해 경고하지 않습니다.
편집 :
gcc -O3 -g -std=c11 -Wall -Wextra -Werror ols.c -o ols
코드 :
#include <stdio.h>
static char picture1[5][5] = { "#####", "#####", "#####", "#####", "#####", };
static char picture2[5][6] = { "#####", "#####", "#####", "#####", "#####", };
int main(void)
{
for (int i = 0; i < 5; i++)
printf("%s\n", picture1[i]);
for (int i = 0; i < 5; i++)
printf("%s\n", picture2[i]);
return 0;
}
출력 : C
문자열에서
#########################
####################
###############
##########
#####
#####
#####
#####
#####
#####
감사합니다. 생각 나는 당신이 전에 준 구문을 시도하고 그것은 (그것은 null 바이트 문제가되었을 수도 있지만) 작동하지 않았다. – Zimm3r
6에서 5로 변경하면 컴파일러에서 경고를 생성 할 수 있지만 이니셜 라이저를 허용해야한다고 생각합니다 (종료 null 바이트를 삭제해야 함에도 불구하고). 그러나 당신이 고치기를 원한다는 경고입니다. 그것은 진짜 문제를 보여주고 있습니다. –
나중에 끝내지 않을 루프 용으로 모두 사용 했으므로 나중에 실제로 사용하지 않았습니다. 감사 – Zimm3r