c语言指针输入

vc6.0
#include<stdio.h>
int main()
{
char *str;
str="l love china";
puts(str);

return 0;
}

运行成功

int main()
{
char *str;
scanf("%s",str);
puts(str);

return 0;
}
出错 在输出时无法显示 调试就出错了
在我看来这二者时一样的 求指教
最新回答
山间雾安

2024-05-15 21:35:09

#include<stdio.h>

int main()

{

int a,b,c,s[3],t;

int *x,*y,*z;//定义指针变量 

x=&a;//将a的地址赋给指针x,下同 

y=&b;

z=&c;

scanf("%d%d%d",x,y,z);

s[0]=*x;//将指针x所指向的变量值赋给数组s的第一个元素;依次类推 

s[1]=*y;

s[2]=*z;

for(int i=0;i<3;i++)//冒泡排序 

for(int j=0;j<3-i-1;j++)

if(s[j]<s[j+1])

{

t=s[j];

s[j]=s[j+1];

s[j+1]=t;

}

for(int i=0;i<3;i++)

printf("%d ",s[i]);

return 0;

}

——————————————————————————

#include<stdio.h>

void input(int *a)

{

int *p=a;//将数组a的首地址赋给指针p 

for(int i=0;i<10;i++)

scanf("%d",&p[i]);//指针下标法输入 

}

int max_min(int *a)

{

int *p=a;//将数组a的首地址赋给指针p

int max,min,x=0,y=0,t;

max=min=p[0];

for(int i=0;i<10;i++)

{

if(p[i]>=max)

{

max=p[i];

x=i;

}

if(p[i]<=min)

{

min=p[i];

y=i;

}

}

t=p[y];

p[y]=p[0];

p[0]=t;

t=p[9];

p[9]=p[x];

p[x]=t;

}

void output(int *a)

{

int *p=a;//将数组a的首地址赋给指针p

for(int i=0;i<10;i++)

printf("%d ",p[i]);//指针下标法输出 

}

int main()

{

int a[11];

input(a);//调用函数,下同 

max_min(a);

output(a);

return 0;

}

墨语三千

2024-05-15 06:50:50

指针的使用要先初始化,上面正确是因为会自动为str分配一个地址,下面的没有初始化。
野稚

2024-05-15 18:53:20

下面这种情况是不可以的,因为指针没有明确的指向,str的值是任意的,也许所指向的区域不是用户可以访问的内存区域,或者根本不存在的地方,可以将指针换成数组形式,即char str[]。另外,scanf不能输入空格,当遇到空格或enter时代表字符串结束。
一川绿风

2024-05-15 17:32:13

str="l love china"是吧"l love china"的地址赋给str,str只能是一个地址, scanf("%s",str);是要把str当变量赋值,自然是错的
沫小默丿

2024-05-15 02:25:53

str仅仅是一个没有初始化的指针,接下来需要动态分配内存来存放输入的字符串才可以