这个字符串程序为什么第三个成员没有输出来,且第二个成员前面有一个空格,是咋回事

这个字符串程序为什么第三个成员没有输出来,且第二个成员前面有一个空格,是怎么回事?
如题

#include "stdafx.h"
#include "stdio.h"
#include <stdlib.h>
#include "string.h"

int main(void)
{
int i, j;
char *str[3] = {"ab", "cdu", "opq"};
char *p1;
p1 = str[0];

for(i=0; i<3; i++)
{

if(i == 0)
{
for(j=0; j<strlen(str[0])+1; j++)
{
printf("%c", *(p1+j));
}
printf("\n");
}

if(i==1)
{
for(j=0; j<strlen(str[i])+1; j++)
{
printf("%c", *(p1+strlen(str[0])+1+j));
}
printf("\n");
}

if(i==2)
{
for(j=0; j<strlen(str[i])+1; j++)
{
printf("%c", *(p1+strlen(str[0])+1+strlen(str[1])+1+j));
}
printf("\n");
}

}
return 0;
}

------解决方案--------------------
char *str[3] = {"ab", "cdu", "opq"};
char *p1;
p1 = str[0];


你看一下str[0] str[1] str[2] 三个地址是连续的嘛,如果不是连续的,把str[0]给p1,下面的操作应该就不是可行的吧!

给你看一下我这边编译器中它们的地址!
这个字符串程序为什么第三个成员没有输出来,且第二个成员前面有一个空格,是咋回事
------解决方案--------------------
 5 int main(void)
  6 {
  7     int i, j;
  8     char *str[3] = {"ab", "cdu", "opq"};
  9 
 10     char *p1 = NULL;
 11 
 12     for(i=0; i<3; i++)
 13     {
 14         p1 = str[0];
 15         if(i == 0)
 16         {
 17             for(j=0; j<strlen(str[0])+1; j++)
 18             {