user-0 提问: 这个代码哪里错了？请你来找错

回复:
user: user-1
content: 26进制，ZZ=27(10进制）？ 开玩笑吧。

user: user-0
content: 引用 20 楼 ForestDB 的回复: # include <stdio.h> # include <stdlib.h> # include <string.h>  int cmp(const void * a, const void * b) {     const char* ca = *(const char* *)a;     const char* cb = *(const char* *)b;     int la = strlen(ca);     int lb = strlen(cb);      if (la == lb)         return - strcmp(ca, cb);     else         return la - lb; }  int main() {     int n;     char* *a;     int i;      scanf("%d", &n);     a = malloc(sizeof(char*) * n);      for (i = 0; i < n; i++)     {         a[i] = calloc(101, sizeof(char));         scanf("%100s", a[i]);     }      qsort(a, n, sizeof(char*), cmp);      for (i = 0; i < n; i++)         printf("%s\n", a[i]);      for (i = 0; i < n; i++)         free(a[i]);      free(a);      return 0; }  谢谢你啊,码代码辛苦了,虽然有些看不懂,但我一定要把它看懂,谢谢!!!

user: user-2
content: 引用 15 楼 myzts 的回复:我的目的是想自己输入行数让后输入n行字符那就将原代码中的arra[]=1改为 getchar（）读取，然后赋值就行了，注意放在for，for循环之中。。

user: user-2
content: 引用 14 楼 myzts 的回复:我的问题就是如何自己控制一个二维字符串的行数（列数因为不超过一行,所以我直接规定列数为80） 比如我输入 2 CAQFQ AGAGGE 如何控制行数,请各位大神解释一下malloc 为什么这个代码执行完成后会报错 #include <stdio.h> #include <stdlib.h> int main() { 	int nr,nc;     int *Array;     int i,j;     scanf("%d %d",&nr,&nc);     Array=(int *)malloc(nr*nc*sizeof(char *));     for(i=0;i<nr;i++) 		for(j=0;j<nc;j++) 		{Array[i*nr+j]=1; 		printf("%d\n",Array[i*nr+j]);} 	free(Array);     system("pause"); 	return 0; }不知道你用的什么编译器，我的c-free和dev-c都能完美编译，没错啊。（注意写程序的风格，就是注意缩进什么的 ，不然看起来很费劲）。。malloc函数给你返回一片内存的地址。具体你可以在这个上找到。http://blog.csdn.net/xw13106209/article/details/4962479

user: user-0
content: 我的目的是想自己输入行数让后输入n行字符

user: user-0
content: 我的问题就是如何自己控制一个二维字符串的行数（列数因为不超过一行,所以我直接规定列数为80） 比如我输入 2 CAQFQ AGAGGE 如何控制行数,请各位大神解释一下malloc 为什么这个代码执行完成后会报错 #include <stdio.h> #include <stdlib.h> int main() { 	int nr,nc;     int *Array;     int i,j;     scanf("%d %d",&nr,&nc);     Array=(int *)malloc(nr*nc*sizeof(char *));     for(i=0;i<nr;i++) 		for(j=0;j<nc;j++) 		{Array[i*nr+j]=1; 		printf("%d\n",Array[i*nr+j]);} 	free(Array);     system("pause"); 	return 0; }

user: user-0
content: 引用 12 楼 u011337306 的回复:C++   vector 不懂啊

user: user-3
content: C++   vector

user: user-4
content: # include <stdio.h> # include <stdlib.h> # include <string.h>  int cmp(const void * a, const void * b) {     const char* ca = *(const char* *)a;     const char* cb = *(const char* *)b;     int la = strlen(ca);     int lb = strlen(cb);      if (la == lb)         return - strcmp(ca, cb);     else         return la - lb; }  int main() {     int n;     char* *a;     int i;      scanf("%d", &n);     a = malloc(sizeof(char*) * n);      for (i = 0; i < n; i++)     {         a[i] = calloc(101, sizeof(char));         scanf("%100s", a[i]);     }      qsort(a, n, sizeof(char*), cmp);      for (i = 0; i < n; i++)         printf("%s\n", a[i]);      for (i = 0; i < n; i++)         free(a[i]);      free(a);      return 0; }

user: user-0
content: 引用 6 楼 zhouqinghe24 的回复:做成堆上的数组。 用的时候malloc 就可以了  [quote=引用 5 楼 myzts 的回复:] [quote=引用 4 楼 zhouqinghe24 的回复:] c99 支持这样定义的。 没有C99，在普通编译器里面可以实现吗?[/quote][/quote] 可以把代码发给我吗?我是新手,不懂malloc,,,麻烦了,谢谢

user: user-0
content: 引用 8 楼 hnwyllmm 的回复:我运行了一下，是没有问题的： [wangyl11@rhel149 ~]$ ./a.out  123 3 344532 6 谢谢你,我也测试成功了,可是我还是想知道怎么才能自己输入n,来控制输入的个数,在这个代码里面我应该怎么改? #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define  n 2 int main() { 	int	i,j;     char a[n][80],b[n][80],t[80];     int len[n+1],sum[n+1]; 	memset(sum,0,sizeof(sum));     for(i=1;i<=n;i++) 	{	gets(a[i]); 		len[i]=strlen(a[i]);         strcpy(b[i],a[i]);     }     for(i=1;i<=n;i++) 		for(j=0;j<=79;j++) 				{a[i][j]=-a[i][j]+91; 				sum[i]+=a[i][j]*pow(26,len[i]-j-1); 				}          	for(i=1;i<=n-1;i++) 		for(j=1;j<=n-i;j++) 			if(sum[j]>sum[j+1])             {strcpy(t,b[j+1]);strcpy(b[j+1],b[j]);strcpy(b[j],t);} 	for(i=1;i<=n;i++) 		puts(b[i]); 	system("pause"); 	return 0; }

user: user-5
content: 对了，我实在Linux上运行的，GCC编译器， 执行的时候只有system("pause");出错了，因为Linux没有pause命令

user: user-5
content: 我运行了一下，是没有问题的： [wangyl11@rhel149 ~]$ ./a.out  123 3 344532 6

user: user-5
content: 引用 18 楼 myzts 的回复:引用 17 楼 chi_chen 的回复:[quote=引用 15 楼 myzts 的回复:] 我的目的是想自己输入行数让后输入n行字符那就将原代码中的arra[]=1改为 getchar（）读取，然后赋值就行了，注意放在for，for循环之中。。 麻烦告诉我如何控制字符数组的行数,我不是很了解malloc,可以把代码给我看看嘛?你可以举一个简单的例子,万分谢谢了!!![/quote] scanf("%d", &n) ; char (*p)[80] =  malloc(n * sizeof(80) ) ; 这样就由n个 char [80]了 用完了要释放：free (p)

user: user-0
content: 引用 17 楼 chi_chen 的回复:引用 15 楼 myzts 的回复:我的目的是想自己输入行数让后输入n行字符那就将原代码中的arra[]=1改为 getchar（）读取，然后赋值就行了，注意放在for，for循环之中。。 麻烦告诉我如何控制字符数组的行数,我不是很了解malloc,可以把代码给我看看嘛?你可以举一个简单的例子,万分谢谢了!!!

user: user-0
content: #include <stdio.h> #include <stdlib.h> int main() { 	char a[2][80];     int i,len[3];     for(i=1;i<=2;i++) 		{gets(a[i]); 		len[i]=strlen(a[i]); 		printf("%d\n",len[i]);         } 	system("pause"); 	return 0; } 想问一个问题,问什么for循环的时候第一次strlen可以正常运行,第二次输入a【1】时候就出错了呢?这是为什么

user: user-6
content: 做成堆上的数组。 用的时候malloc 就可以了  引用 5 楼 myzts 的回复:[quote=引用 4 楼 zhouqinghe24 的回复:] c99 支持这样定义的。 没有C99，在普通编译器里面可以实现吗?[/quote]

user: user-0
content: 引用 4 楼 zhouqinghe24 的回复:c99 支持这样定义的。 没有C99，在普通编译器里面可以实现吗?

user: user-6
content: c99 支持这样定义的。

user: user-0
content: 引用 2 楼 hnwyllmm 的回复:char a[n+1][80],b[n+1] 这样定义的,n不能是在运行时才能确定的值，一定要是在编译的时候就可以确定的值，比如 #define n 900 char a[n+1][80],b[n+1]; 可是如果我想让n的值由我来控制应该怎么办?