分类：电脑/网络-程序设计-C/C++
问题：一个c语言程序,帮忙指点一下哪里错了定义了一个字符串xx[80] 
定义了一个字符串xx[80],字符数未知,将它一分为二,左半部分升序排列(字符按ＡＳＣＩＩ排列)，右半部分按降序排列，排列后左半部分和右半部分交换．如果字符串长度是奇数，则中间的字符不动．　我编的如下（附件里也有我编的c程序）：#include<stdio.h>main(){int i,j,strl,half;char temp;char xx[80]={'a','b','c','d','e','f','g','h','j','i','k','l'};clrscr();strl=strlen(xx[8定义了一个字符串xx[80],字符数未知,将它一分为二,左半部分升序排列(字符按ＡＳＣＩＩ排列)，右半部分按降序排列，排列后左半部分和右半部分交换．如果字符串长度是奇数，则中间的字符不动．　我编的如下（附件里也有我编的c程序）：#include<stdio.h>main(){int i,j,strl,half;char temp;char xx[80]={'a','b','c','d','e','f','g','h','j','i','k','l'};clrscr();strl=strlen(xx[80]);printf("%d",strl);half=strl/2;for(i=0;i<half;i++)for(j=i+1;j<half;j++) if(xx[i]>xx[j]) {temp=xx[i];xx[i]=xx[j];xx[j]=temp;}if(strl%2!=0){half++;}for(i=half;i<strl;i++)for(j=i+1;j<strl;j++) { if(xx[i]<xx[j])  {temp=xx[i];xx[i]=xx[j];xx[j]=temp;}  }for(i=strl/2-1,j=strl-1;i>=0;i++,j++) {temp=xx[i];xx[i]=xx[j];xx[j]=temp;}for(j=0;j<strl;j++)printf("%c",xx[j]);}我感觉是strl=strlen(xx[80]);这句有问题，输出strl等于０．谢谢回答．
回答：你说的没错，就是strl=strlen(xx[80])这一句有问题，应该改成strl=strlen(xx)，下面给你分析一下为什么会得到结果0
对字符数组xx[80]以12个字符初始化后，从xx[13]到xx[79]都为'\0'，而xx[80]是在字符数组xx以外（千万记住C语言的数组下标是从0开始的），其内容是随机的，可能是0，也可能是别的，在你的机器上碰巧是0，strlen函数的参数是一个char型的指针char*，0恰好代表的是空指针，strlen(0)的结果当然就是0了.而strlen(xx)的结果则是12