
疑难随笔
一些一直纠结的事
枕上
这个作者很懒,什么都没留下…
展开
-
段错误查找之gdb调试的简易使用
例子:demo.c#include <stdio.h>int main(){ int *p = (int *)10; printf("%d\n",*p); return 0;}先说为什么会段错误:因为我们对空指针访问了它的内容。gdb调试步骤:1、 编译的时候加上 -g 得到一个可执行文件gcc -g demo.c2、 运行的使用用 gdbg...原创 2021-07-14 23:11:47 · 133 阅读 · 0 评论 -
int *p = (int *)整数,这是强制转换
例子: int *p = 10; //这会产生一个警告,提示左右类型不一致 //因为 p 是指针变量,存放的是地址。而10是一个整数常量而: int *p = (int *)10 //强制转换成同一类型就可以消除警告 //强制类型转换,10强制转换成了一个地址那么此时: p 的地址就是 10 ,相当于我们自己给他指定了一个地址,而不是系统自动分配的...原创 2021-07-14 22:56:45 · 1450 阅读 · 0 评论 -
C语言assignment makes pointer from integer without a cast
这个警告的意思是将一个int整数值直接赋值给了一个指针变量。(重点是类型不一致)消除警告的方法就是明确类型转换是否是正确的,如果确实要把整数变量赋予指针变量,那么请使用强制类型转换。否则,请用相同的数据类型,这样编译器就不会显示警告。比如: int *p = 10; //这就会产生这个警告 //因为 p 是指针变量,存放的是地址。而10是一个整数常量改成: int *p = (int *)10 //强制转换成同一类型...原创 2021-07-14 22:39:07 · 66798 阅读 · 0 评论 -
linux编译提示:warning: return from incompatible pointer type [enabled by default]
在 C 语言中:warning: return from incompatible pointer type [enabled by default]这句话的意思是:警告:从不兼容指针类型返回[默认启用]乍看这句话,就是返回的指针类型不对,但是我找了好久都没有发现参数类型定义有错,最后竟然是返回值的命名中有个字母打错了下面是错误的代码截图:错误的地方已标识...原创 2021-04-01 20:28:58 · 4032 阅读 · 1 评论 -
each undeclared identifier is reported only once for each function it appears in
each undeclared identifier is reported only once for each function it appears in意思是:对于每个出现在其中的函数,每个未声明的标识符只报告一次1.按照百度大多数的做法是,添加完整头文件。2.但是在我的代码里,却是一个大家都很难想象到的情况。由于是一个代码demo,代码量少,无意中被我弄好了,居然是一个不知道是不是格式的问题。原本出错的代码:#include <sys/types.h>#in.原创 2021-04-20 03:37:21 · 25026 阅读 · 0 评论 -
warning: implicit declaration of function ‘sleep’
头文件添加:#include <unistd.h>原创 2021-07-10 00:14:28 · 2613 阅读 · 0 评论 -
implicit declaration of function
1.缺少对应的头文件,或打错2.头文件没有缺少或者打错,就是伴随的这句话 implicit declaration of function 的 函数错误原创 2021-06-10 01:47:00 · 387 阅读 · 0 评论 -
登陆csdn卡死机,进入不了csdn内容管理页面终极解决方案
有一段时间没有发博客了,主要是我电脑用不了csdn。我刚开始的原因是:csdn的内容管理页面进入不了。我咨询过客服,通过一顿操作客服说的原因是,他们CSDN方面没有问题,问题是我的电脑本地IP服务,以及手机运营商有问题。(我还是说两句,到这个时候我还是觉得是csdn的问题,因为此前都是正常的,只是突然就这样了,而且我的电脑csdn是能进的,只是内容管理页面进入不了)我试过网上很多的方法,没有用,后来是我无意中解决的......废话不多说,解决方案:先尝试第一种,第二种酌情考虑吧,原创 2021-06-06 16:25:37 · 2713 阅读 · 0 评论 -
C语言:return 0 , return 1 和 return -1 以及 return ,break 的区别
1. return 没有返回值 和 break的区别:return 多用于void 类型的函数。例如:void aa(){ while(1){ for(){ return; //break; } if(){ } }}在这个函数中,不管你因为什么原因你想结束这整个函数,此时你就可以用return 。记住是结束整个aa函数。而如果此时.原创 2021-03-30 19:18:10 · 40176 阅读 · 3 评论 -
C语言:结构体指针和函数综合处理学生成绩(常见错误解析)
谨记:malloc是在堆上面开辟空间,函数结束调用不会释放,malloc的空间一直存在 。#include <stdio.h>#include <stdlib.h>struct Student{ int score; char *name;};struct Student* initStuScore(int *len){ //初始化 int i; printf("请输入总人数:\n"); //思考为什么len不..原创 2021-03-28 18:17:29 · 502 阅读 · 0 评论 -
C语言:结构体用指针时的致命错误,易造成段错误
在结构体中,定义了一个指针(通常是野指针),在主函数中引用他的时候,如果是直接strcpy则会造成段错误。 在引用结构体中指针的时候必须要给空间malloc一下。此时顺带初始化memset。 而数组则可以直接strcpy( ) 原因: 1.1 在结构体"Test"声明的时候,数组就已经有空间了 2.2 在结构体"Datas"声明之后,指针只是一个野指针,所以要malloc一下,安排一个空间给他代码如下:#include <stdio.h>#include ...原创 2021-03-27 22:35:14 · 2424 阅读 · 2 评论 -
C语言:数组赋值字符串,指针赋值字符串需要malloc给空间,初始化memset(常常纠结,入门级)
直接定义赋值都是没有问题的,正确的。但是,数组,指针都是定义了之后再赋值则有规则。目录1.数组可以直接定义赋值字符串。如char str[128] = "dasdasdasda"; 此时的访问可以用字符串的占位符%s ,也可以用数组的 for( ) 循环访问。2.给(数组)定义后再赋值字符串。此时要用拷贝函数strcpy( )。3.直接给指针赋值字符串。4.先定义一个指针(也叫野指针,没有指向的空间),再赋值字符串。此时需要给指针先malloc给空间,让指针指向这个malloc开辟的空.原创 2021-03-27 20:52:42 · 4701 阅读 · 0 评论