C语言中的关于循环与排序问题

其中在排序语句中的循环语言有些不理解,如下图:
for(j=i+1;j<num;j++)
[for(j=i;j<num;j++)]
for(j=i;j<num;j++)
从运行结果上来看没有什么不一样的,但没有为什么运行是一样的?

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


void main (int argc,char *argv[])
{
    int i=0,j=0;
    int num=6;
    char myBuf[30]={0};
    char tempBuf[30]={0};
    char myArray[10][30]={"aaaaa","ffffffff","bbbbbbbbbbb","ccccc","dddddd","eeeeeeee"};

    //打印
    for (i=0;i<num;i++)
    {
        printf("myArray[%d] %s\n",i,myArray[i]);
    }

    //排序
    for (i=0;i<num;i++)
    {
        for (j=i;j<num;j++)
        {
            if (strcmp(myArray[j],myArray[i])>0)
            {
                strcpy(tempBuf,myArray[i]);
                strcpy(myArray[i],myArray[j]);
                strcpy(myArray[j],tempBuf);
            }
        }
    }

    //打印
    printf ("*************\n");
    for (i=0;i<num;i++)
    {
        printf("myArray[%d] %s\n",i,myArray[i]);
    }
    printf("hello word !\n");
    return 0;
}

图片说明
想打印 tempBuf 每个元素的内容却打印,程序崩溃
图片说明
但是以改成打印 tempbuf ,却打印成功,但打印的只是首元素的值
图片说明

以上问题我很疑惑,恳请大家帮忙指点下。

j=i+1是比较性能好的,自己没有必要和自己比较,j=i有点冗余.

temBuf[i]代表一个字符,temBuf代表一个字符串,%s格式代表参数是个字符串,将字符按字符串输出,可能编译器认为语法错误,也可能认为越界了。
至于为什么是ffffff,因为temBuf里存放的就是ffffff. myArray是一个二维的字符数组,可以看成是一维的字符串数组。也就是说myArray是自组字符串,而tembuf只是一个串。
循环输出一个串,当然还是一个串。

图片说明
谢谢

strcpy是字符串拷贝函数。myArry[i]代表字符串,tempBuf代表字符串,myArry[i][j]代表字符,tempBuf[i]代表字符。tempBuf交换用的中间变量,循环结束后,tempBuf存的是最后一次交换的值。
tempBuf==myArry[5].