其中在排序语句中的循环语言有些不理解,如下图:
[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].