发布网友 发布时间:2022-04-20 17:24
共4个回答
热心网友 时间:2023-07-11 22:08
因为指针使用前,必须初始化,指定内存空间。
char *str[3];为指针数组不能存储字符串。
所以需要做如下修改,不明白就追问吧!
#include <stdio.h>
#include <string.h>
int main()
{
char str[3][256];//修改的地方
char *p1=str[0],*p2=str[1],*p3=str[2],*p;
scanf("%s",str[0]);
scanf("%s",str[1]);
scanf("%s",str[2]);
if(strcmp(str[0],str[1])>0)
{
p1=str[1];
p2=str[0];
}
if(strcmp(p1,str[2])>0)
{
p=p1;
p1=p3;
p3=p;
}
if(strcmp(p2,p3)>0)
{
p=p2;
p2=p3;
p3=p;
}
printf("%s,%s,%s\n",p1,p2,p3);
}追问那
char *p;
scanf("%s",p);
也不行吗··
那指针型的变量如何输入给它赋值?
追答对呀,即使程序编译通过,这样的程序也是非法,导致软件跑飞致死!
应该用如下的形式
char str_buf[256];
char *p = str_buf;
scanf("%s", p);
热心网友 时间:2023-07-11 22:09
你的本意是想创建一个字符串数组,但是标准的方法是创建一个二维字符数组,即:
char str[3][128]; % 3个字符串,每个字符串长度<128
而你的char* str[3]只创建了三个指针,没有分配内存,输入字符串无从存放,因此你后面的所有操作都发生了越界。所以会报错。追问那如何分配内存呢··
追答char *str[3];改为char str[3][128];
算了
热心网友 时间:2023-07-11 22:09
str 只是一个指针数组, 没有显式分配存放字符串数据的空间。 不同的C编译器可能有不同的处理方式。 存储空间是不定的, 结果因编译程序而异
热心网友 时间:2023-07-11 22:10
str[]指针数组未做初始化,指针在使用前必须初始化。追问初始化就是赋值对吗·那scanf输入不能算是赋值吗?
追答不能用scanf赋值。指针初始化是将指针指向一片已经分配的内存,scanf可没这功能。