#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];
----------------解决方案--------------------------------------------------------
那没用,建议你定义成
a[N][M];
因为输入的字符串大小不确定,所以我故意用 *a[N]的,
如果用2维数组做,我会的。现在就是想弄清楚,为什么会错....
----------------解决方案--------------------------------------------------------
char *p;
scanf("%s", p);
这样能运行吗?
----------------解决方案--------------------------------------------------------
能啊,我刚刚运行了一下,没有错的
而且我觉得也没有什么问题嘛
----------------解决方案--------------------------------------------------------
那你知道p的值是多少啊?
p指向的单元,你能用吗?
----------------解决方案--------------------------------------------------------
还是不懂你的意思
用 scanf("%s",p);之后,我用*P就可以得到P的值了嘛。
----------------解决方案--------------------------------------------------------