【C语言】新手编程时常见BUG汇总,持续更新中

一.前言

    编程时候新手会遇到一些问题,我在这篇文章中把有代表性的码下来,并简单解释,欢迎大家和我多多交流.

二.正文

 

1.指针声明但为赋值,输入输出会出现错误

#include<stdio.h>
int main(){
int *p;
scanf("%d",p);
printf("%d",*p);
}

看似没有问题的一个程序吧?但是却无法正确执行,是因为虽然对p指针进行了声明,但是没有赋予他内存空间,正确的写法应该改

int *p = (int*)malloc(sizeof(int));

即可正确执行。(至于malloc的作用以及如何填写malloc的参数,可以参看我的另一篇对malloc的详解)。

上面的大家应该都明白,但是下面这个,是同样的原理就有很多人犯糊涂

#include<stdio.h>
#include<stdlib.h>
struct Node
{
    int a;
    int b;
};
int main() {

struct Node *c[5];
c[0]->a = 1;
}

这个程序无法正确执行,是为什么呢?因为c这个结构体指针数组也没有给他分配空间呀,所以出现的是一类问题。请大家要注意

#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
    int value1;
    int value2;
}*p;
struct graph
{
    p a;
};
int main() {
struct graph* g = (struct graph *)malloc(sizeof(struct graph ));
g->a->value1 = 5;
}

   再看下这个代码我只需给graph申请空间,就可以直接操作Node了,因为graph结构体中有node,我申请了graph就自然给node也分配了内存空间

2.指针能否直接赋值?

typedef struct node
{
    int data;
    struct node* next;
}node;

typedef struct linkList
{
    int size=0;
    node* head;
}linkList;
/*******
这样一个普通的链表,省略建立赋值等操作
*******/
能否有这样的操作?
int main()
{
linkList* a,b;
a = add(1,2,3,4,5);//对a进行赋值1,2,3,4,5(伪代码)
b = a;//能否这样干呢?
a = change(1,2,3,4);//将a改为1,2,3,4(伪代码)
print(b);//这时候打印b的结果是什么呢?
}

我们把a赋值给b后,对a进行了更改,再打印b;那么b中的值应该是什么呢?是1,2,3,4,5还是1,2,3,4;答案是b和a永远保持一致,是1,2,3,4;在初次学习时候可能对此会有疑问,为什么会是这样的呢?原因是b和a都是指针指向的都是同一块内存地址。b=a后b和a指向了同一个内存地址,这时候a变化了后,打印b时,打印的是相同的一片空间。这下明白了吧?

 

 

3.scanf gets?puts printf?

#include<stdio.h>
int main()
{   char str1[50];
    scanf("%s",str1);
    printf("%s",str1);
}

执行上述代码输入字符串时候如果有空格,则会导致字符串断掉,不能正确的录入空格,如下图所示的情况:

解决方法是实用GETS函数。即可接纳空格,

#include<stdio.h>
int main()
{   char str1[50];
    gets(str1);
    printf("%s",str1);
}

printf("%s",str)和puts(str)在字符串输出方面没有任何区别,不需要在此进行区分。

 

 

4.未完待续

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
C语言作为一门广泛应用的编程语言,学习它对于新手来说是很有必要的。为了更好地掌握C语言的基本概念和编程技巧,新手可以尝试刷编程50题。以下是一些理由: 首先,刷编程题可以帮助新手熟悉C语言的语法规则和常用函数。通过解决各种不同类型的编程问题,新手可以加深对C语言的理解,并培养编程思维和逻辑思维能力。 其次,刷编程题可以帮助新手锻炼编程的实践能力。学习编程语言不仅仅是理论的学习,更需要通过实践来提高。通过解决编程题目,新手可以学习如何将问题分解为更小的子问题,如何设计实现算法和数据结构,并加深对编程的实践经验。 此外,刷编程题还有助于新手了解常见编程模式和技巧。在解决编程问题的过程新手可以接触到各种常见编程模式,如循环、条件判断、递归等,并学习如何运用这些模式来解决实际问题。 最后,刷编程题可以提高新手的自信心。通过解决一系列编程问题,新手可以逐渐掌握C语言的基本知识和编程技巧,从而在编程能力上取得明显的进步。这种进步不仅可以帮助新手更好地完成后续的学习和项目,还可以增强新手编程方面的自信心。 总而言之,刷编程50题对C语言新手来说是非常有益的。通过解决一系列编程问题,新手可以加深对C语言的理解,锻炼编程实践能力,掌握常见编程模式和技巧,并提升自信心。因此,我强烈推荐C语言新手编程50题来加深对C语言的掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值