当前位置: 代码迷 >> C语言 >> 关于指针数组的问题
  详细解决方案

关于指针数组的问题

热度:125   发布时间:2007-10-28 21:09:44.0
关于指针数组的问题

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10
void sort(char *a[N])
{
int i,j;
char *p;
for (i=0; i<N-1; i++)
for (j=i+1; j<N; j++)
if (strcmp(a[i],a[j])<0)
{
p=a[i];
a[i]=a[j];
a[j]=p;
}
return ;
}

int main(void)
{
char *a[N];
int i;
printf("Input the country:\n");
for (i=0; i<N; i++)
scanf("%s",a[i]);
sort(a);
printf("The sort is :\n");
for (i=0; i<N; i++)
printf("%s\n",a[i]); /* puts(a[i]);*/
system("pause");
return 0;
}


程序很简单,就是输入几个字符串,进行排序。
问题就出在红色地方的printf,如果用printf输出,某个字符串就会成这种样子:(null)。
但是用puts输出的时候,又是对的。为什么会这样,这两个应该是一样的吧。我用的是TC2。

还有,当我把这个程序放到DEV C++下面的时候,当输入第一个字符串,就谈出一个窗口:“什么内存不能为WRITE之类的东西”。这个是为什么?
希望大家帮忙哈! 谢谢....

搜索更多相关的解决方案: 指针  

----------------解决方案--------------------------------------------------------
来人啊......
----------------解决方案--------------------------------------------------------

a[i]所指的地方,你并没有分配内存.


----------------解决方案--------------------------------------------------------
我用SCANF了嘛
----------------解决方案--------------------------------------------------------
那没用,建议你定义成

a[N][M];

----------------解决方案--------------------------------------------------------
以下是引用我不是郭靖在2007-10-28 21:36:06的发言:
那没用,建议你定义成

a[N][M];

因为输入的字符串大小不确定,所以我故意用 *a[N]的,
如果用2维数组做,我会的。现在就是想弄清楚,为什么会错....


----------------解决方案--------------------------------------------------------
char *p;
scanf("%s", p);

这样能运行吗?
----------------解决方案--------------------------------------------------------
能啊,我刚刚运行了一下,没有错的
而且我觉得也没有什么问题嘛
----------------解决方案--------------------------------------------------------
那你知道p的值是多少啊?
p指向的单元,你能用吗?
----------------解决方案--------------------------------------------------------
还是不懂你的意思
用 scanf("%s",p);之后,我用*P就可以得到P的值了嘛。
----------------解决方案--------------------------------------------------------
  相关解决方案