You forgot that you need a null byte to terminate the strings. (In fact, your last strcpy() writes outside the bounds of the array, invoking undefined behaviour.) Use:
char picture[5][6] = { "#####", "#####", "#####", "#####", "#####", };
This saves on the strcpy() calls too.
I commented:
The compiler might well generate warnings if you change the 6 to 5, but I think it is required to allow the initializers (even though it would have to drop the terminating null bytes). But it is a warning that you'd want to fix; it is showing a genuine problem.
In fact, GCC 4.8.2 doesn't even warn about the issue under fairly stringent compilation options.
Compilation:
gcc -O3 -g -std=c11 -Wall -Wextra -Werror ols.c -o ols
Code:
#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;
}
Output:
#########################
####################
###############
##########
#####
#####
#####
#####
#####
#####