首 页 行业热点 新车 试驾评测 养车用车 车型库

C语言求教,关于指针数组未初始化,代码如图?

发布网友 发布时间: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可没这功能。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com