c语言-关于c的一道纠错题 求助!!

问题描述

关于c的一道纠错题 求助!!
#include
#include

struct container {
int number;
char *string;
};

int main()
{
struct container *c;

c = malloc(sizeof(struct container));if (c == NULL) exit(1);scanf(""%d"" &c->number);scanf(""%s"" c->string);printf(""%d:%sn"" c->number c->string);free(c);return 0;

}
一运行就崩溃
问如何改正

解决方案

container里面string只是个char型指针,没有分配内存

解决方案二:
数据结构中的指针都是用来指向别的地方的,通常用来配合使用其他固定的地方,别当做有内存直接拿来使用或者赋值;这里的错误就是直接将数据结构中的指针拿出来输出,导致踩空指针异常。

解决方案三:
struct container {
int number;
char string[20];//字符数组分配内存空间。否则怎样存数据?
};

int main()
{
struct container *c;

c =(container*) malloc(sizeof(struct container));//加一个类型转换
if (c == NULL) exit(1);

scanf(""%d"" &c->number);
scanf(""%s"" c->string);

printf(""%d:%sn"" c->number c->string);
free(c);
return 0;
}

解决方案四:
把结构体的字符指针改为字符数组,就可以存放数据了,因为你定义的字符指针很可能指向一个未知地址,对未知地址写入可能会出现段错误

时间: 2024-11-04 20:42:14

c语言-关于c的一道纠错题 求助!!的相关文章

c++-一道acm题,通过不了,请求帮忙纠错

问题描述 一道acm题,通过不了,请求帮忙纠错 Problem Description 假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量. Input 输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数.然后是n行数据,每行包括m个整数(即:考试分数). Output 对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数:第

内存管理-一道编程题用c语言实现这些功能时间有限1天时间求大神解答

问题描述 一道编程题用c语言实现这些功能时间有限1天时间求大神解答 有用户空间100kb,并规定作业的相应程序浇入内存连续区域,并不能被移动.作业与进程均采用sjf算法.输入为一组作业的进入时间,需要的内存容量(不超过100k)和运行时间. 要求: (1)按时间顺序给出每个作业的执行顺序,开始时间和结束时间,以及发生调度时内存各分区的状态: (2)计算这组作业的平均周转时间和平均带权周转时间: (3)实现作业一级调度和进程一级调度,包括调度算法和数据结构: (4)实现动态分区内存管理,包括内存分

c语言-一道水题谁想我比水题还水

问题描述 一道水题谁想我比水题还水 求指点求指点不知道是哪里的错误算法是否可以优化实在没c币了请谅解 谢谢了 解决方案 没有C币无所谓,但是真心没法回答你的问题.如果你希望得到及时解答,请使用电脑提问,贴出文本格式的代码. 解决方案二: 你的代码太乱了 没法看 估计是你的排序算法有问题你去百度下常见的排序算法就可以

pat-PAT上的一道水题,网上提交总是提示运行超时

问题描述 PAT上的一道水题,网上提交总是提示运行超时 以下是我的代码: #include int main(void) { char ch; int count[10]; for (int i = 0; i < 10; i++) { count[i] = 0; } while ((ch = getchar()) != 'n') count[ch - '0']++; for (int i = 0; i < 10; i++) if (count[i] != 0) printf("%d:

ctf-新手求教一道CTF题……

问题描述 新手求教一道CTF题-- 10C 这个题目应该就是要模仿本地登录吧,题目网址是校园网,求大神告解怎么本地登录-- 解决方案 估计是问你sql注入攻击.比如填上密码 aa' or '1'='1 解决方案二: 解决方案三: 学一下http头..................

字符串-一道ACM题,为什么会这样?

问题描述 一道ACM题,为什么会这样? Description输入一个字符串,判断其是否是C++的合法标识符. Input输入数据包含多个测试实例,数据的第一行是一个整数n表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串.输入保证不为C++的关键字(保留字). Output对于每组输入数据,输出一行.如果输入数据是C++的合法标识符,则输出""yes"",否则,输出"no". Sample Input312ajffi8x_

阿里巴巴一道智力题笔试题

问题描述 阿里巴巴一道智力题笔试题 有三张牌A,B,C,其中一张是King.如果你押中了King,那么就获胜,否则就输.现在你选择了押其中的一张牌1,电脑帮你排除了另外两张牌中的一张2,那么你是否重新选择押3,从而更容易获胜? http://www.manong1024.com/q/403 解决方案 google 三扇门问题真怀疑这是不是阿里的题,感觉很低级很low,像庙会灯谜上的题. 解决方案二: 假设挑选A其为king的概率p=1/3剩下的BC中为king的概率p=2/3.假设主持人又给你排

c语言编程-关于C语言字符串的简单题求助

问题描述 关于C语言字符串的简单题求助 进行对输入的字符串重新排列,要求字母在前,数字在后,并不改变字母和数字之间的字符排列顺序. 解决方案 #include void main() { char a[10] = {0}, b[10] = {0}, c[10]={0}; int n = 0, m = 0, k = 0,f = 0; printf("输入字符串:"); gets(a); for(int j = 0; j < 10; j++) { if((a[j] >= 'a'

求助一道算法题,关于数组算法

问题描述 求助一道算法题,关于数组算法 有一个字符串数组{"用户1,商品1,200","用户2,商品2,100","用户3,商品1,300","用户4,商品3,50","用户5,商品3,50"},写的方法需要返回的是{"用户2,商品2","用户3,商品1","用户4,商品3"}也就是说比较下每种商品的最高价格是谁,并返回谁买了,如果价格相同取最先买