字符型指针数组的题
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<limits.h>
void maxLenStr(char *str[],int n,int *max);
int main()
{
int i=0;
int t=0;
int *max=&t;
//千万不能max赋值为NULL,NULL 为空指针,是操作系统的预留块,不可修改!!!
char *str[101];
while(str[i]=(char *)malloc(80*sizeof(char)),gets(str[i]),strcmp(str[i],"****")!=0){
i++;
}
//这里要记住用malloc给指针数组的每个元素分配一块足够大的内存空间,不能不分配内存直接赋值,str[i]没有确定的指向是一垃圾值,需要让str[i]指向一个确定的空间后,才可将字符串存入str[i]。
maxLenStr(str,i,max);
//printf("%d",*max);
puts(str[*max]);
return 0;
}
void maxLenStr(char *str[],int n,int *max){
int i=0;
int j=0;
int t;
int a=INT_MIN;
// printf("%d\n",a);
for(i=0;i<n;i++){
t=strlen(str[i]);
// printf("%d ",t);
if(t>a){
a=t;j=i;
}
}
// printf("%d",a);
*max=j;
}
字符串指针数组
相比字符串二维数组的好处:
1.可以节约内存空间(在知道字符串长度的情况下(通常情况下是以字符串常量的形式为指针元素赋值),我这道题属于是妹节约
2.能利用字符指针对字符串进行高效处理。
这种表达指的是字符类型的指针数组。作为函数的形参时同样是这样的形式。
char *str[]
这种表达指的是字符串数组。表示有m个字符串,每个字符串最大长度为n;
char str[m][n];
作为函数参数时
char str[][n];
输出字符串时(与字符串指针数组相同)
puts(str[i]);
最后,空指针不可修改!!!
还有,malloc我忘了free。。。