请问下C语言的定义字符指针数组为什么会出错?(char *a[10])

#include<stdio.h>
#include<string.h>
void main()
{
int n,i,k;
char *a[10];
scanf("%d",&n);
k=0;
for(i=0;i<n;i=i+1)
scanf("%s",a[i]);
for(i=0;i<n;i=i+1)
if(strcmp(a[k],a[i])<=0)
k=i;
printf("%s",a[k]);
}

在VC6下编译可以,运行时在输入后按回车会出错。。
麻烦帮帮忙。。

第1个回答  2011-06-06
因为char *a[10]是指向指针数组,并没有分配存放字符串的空间,应该要自己动态分配。正确的程序如下:
#include<stdio.h>
#include<string.h>
void main()
{
int n,i,k;
char *a[10];
for (int k = 0; k < 10; k++)
a[k] = new char;
scanf("%d",&n);
k=0;
for(i=0;i<n;i=i+1)
scanf("%s",a[i]);
for(i=0;i<n;i=i+1)
if(strcmp(a[k],a[i])<=0)
k=i;
printf("%s",a[k]);
}追问

for (int k = 0; k < 10; k++)
a[k] = new char
请问这是为指针数组分配空间吗? new char是什么意思?

本回答被提问者采纳
第2个回答  2011-06-06
只是定义了一个字符指针数组,但没有为每个指针开辟内存空间,scanf时就引用非法内存了。于是崩溃。
第3个回答  2011-06-11
char A[10][10]
char (*pArr10)[10];
pArr10 = A; //或者 pArr10 = &A[0] ;

char B[10];
char *p;
p = B; //或者 p = &B[0] ;
第4个回答  2011-06-07

char A[10][10]
char (*pArr10)[10];
pArr10 = A; //或者 pArr10 = &A[0] ;

char B[10];
char *p;
p = B; //或者 p = &B[0] ;
相似回答
大家正在搜