首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

错误记录】C 语言中通过指针操作字符串常量出错记录 ( 只有 栈内存 或 堆内存 的数据才能通过指针修改 | 不要通过指针修改常量区的字符串 )

// 记录 p_start 指针指向的首部字符 char c = *p_start; // 将尾部字符赋值给首部字符 *p_start = *p_end;...// 将首部字符赋值给尾部字符 *p_end = c; // 指向头部的指针自增 p_start++; // 指向尾部的指针自减..., 该字符串存储 全局区 的 常量区 ; char *str 指针指向了 常量区 ; 之后 , 通过指针尝试修改该常量区的字符串 , 才有了上述报错 ; // 交换收尾字符...// 将首部字符赋值给尾部字符 *p_end = c; 修改方案 : 将字符串定义为如下样式 , 字符 栈区 和 常量区各有一份 , 可以任意修改栈区的字符串 ,...// 交换收尾字符 // 记录 p_start 指针指向的首部字符 char c = *p_start; // 将尾部字符赋值给首部字符

57810

Java的IO流(一)字节流的常用操作

与其他输出流不同,PrintStream 永远不会抛出 IOException;它产生的IOException会被自身的函数所捕获并设置错误标记, 用户可以通过 checkError() 返回错误标记,...PrintStream append​(char c) 将指定的字符追加到此输出流。 void close() 关闭流. void flush() 刷新流....随机访问文件的行为类似存储文件系统的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。...如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。...该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。 用途:例如迅雷的下载资源是随机下载资源的各个部分,而不是从头到尾。有些视频下载也是随机资源块下载。

1K20
您找到你想要的搜索结果了吗?
是的
没有找到

C++:数组与多维数组

引用的数组完全可以用指针数组实现,所以引用的数组完全没有出现的意义 char c1[] = "C++";                //自动添加' \0 ',所以这个字符数组维度为4 char(*a...  C++,使用数组,编译器会把他转换成指针。...使用指针也可以遍历整个数组。直接指向数组对象名则是指向第一位类似begin()函数,如果指向尾元素后的一个不存在的元素,则与end()函数相似,但是这种方法容易出现错误。...字符串面值的结构就是C++由C继承而来的C风格字符串。C风格字符串不是类型,而是约定俗成的表达和使用字符串的写法。按照此习惯必须在字符以空字符串' \0 '结束。...C++11新标准的提出,通过使用auto或者decltype就能尽可能避免使用指针数组数组指针了。  for(auto p = ia;p !

1.9K30

C语言的驱动法编程详细解析(超多代码案例)

此时可将每个区间的上限(或下限)存到一个表,将对应的值存到另一表通过第一个表确定所处的区段,再由区段下标第二个表里读取相应数值。...要保证循环找出属于最高一级范围内的值后恰当地结束,同时也要保证恰当处理范围边界。 1.2 实战示例 本节多数示例取自实际项目。表形式为一维数组、二维数组和结构体数组;表内容有数据、字符串和函数指针。...1.2.1 字符统计 问题:统计用户输入的一串数字每个数字出现的次数。...普通解法主体代码如下: INT32U aDigitCharNum[10] = {0}; /* 输入字符各数字字符出现的次数 */ INT32U dwStrLen = strlen(szDigits)...若编译器未检查出错误,而又不小心将return (*f)(x,y);写成return (*f)(x);,那么后果可能很严重。 因此C语言中使用函数指针,一定要小心"类型陷阱"。

70330

C语言】深入解开指针(三)

▶️、 数组名的理解 %d:用于打印整数。 %f:用于打印浮点数。 %c:用于打印单个字符。 %s:用于打印字符串。 %p:用于打印指针地址。 %x:用于以十六进制格式打印整数。...实际编程,sizeof经常用于程序动态计算数组的大小,或者确保处理内存分配和复制不会出现越界的情况。 其实不然,并没有打印我们想要的? 那这怎么解释呢?...二级指针C语言中通常用于动态内存分配,例如在使用malloc函数分配内存,可以返回一个指向指针指针,以便在程序对内存进行操作。...strArr[2] = "C"; // 将指向字符串"C"的指针存储在数组的第三个元素 // 通过字符指针数组访问存储的字符串 printf("String 1:...一维数组传参的本质: C语言中,当将数组传递给函数,实际上传递的是数组的首元素的地址。 因此,函数参数声明数组形参实际上被解释为指向数组首元素的指针。 4️⃣.

6910

【进阶指针一】字符数组&数组指针&指针数组

4.指针变量类型决定了(1)指针+-整数的跳过多少个字节;(2)指针解引用的时候访问的权限。 2.字符指针 2-1 字符指针长什么样?...,实际上p2所指向的是字符串"abcdef”首个字符'a'的地址(原因有两点:1.指针变量x86位(32位机器下)是4个字节,但是"abcdef“有7个字符,一个指针只能存放一个地址;2.通过指针解引用打印出...(2)打印字符'a:打印出'a'都是通过拿到字符指针变量内存放的地址进行解引用,得到的都是指针变量所指向的那个变量。 2...."abcdef"是不允许修改的 那么p2指向这块内存空间的时候就会产生隐患,一旦通过解引用试图修改就会造成程序的运行时错误,程序瘫痪; - 因此使用const修饰(也就是const char* p2...="abcdef")来阻止对指针解引用试图修改的行为 ,及时给出编译错误,程序压根编译不通过

92340

C++快速扫盲(基础篇)

+创建变量,必须给变量一个初始值,否则会报错 ---- 常量 作用:用于记录程序不可更改的数据 C++定义常量两种方式 #define 宏常量: #define 常量名 常量值 通常在文件上方定义...---- 标识符命名规则 作用:C++规定给标识符(变量、常量)命名,有一套自己的规则 标识符不能是关键字 标识符只能由字母、数字、下划线组成 第一个字符必须为字母或下划线 标识符字母区分大小写...a'; 注意1:显示字符型变量,用单引号将字符括起来,不要用双引号 注意2:单引号内只能有一个字符,不可以是字符CC++字符型变量只占用1个字节。...ASCII 打印字符:数字 32-126 分配给了能在键盘上找到的字符,当查看或打印文档就会出现。...&b; //错误 //*p3 = 100; //错误 system("pause"); return 0; } ---- 指针数组 **作用:**利用指针访问数组中元素 示例: int main

71520

C 语言】指针数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

右指 (左边数据是常量, 右边指针是常量)***; 左数 : const 出现在 * 左边, 指针指向的数据为常量, 指向的数据不可改变; 右指 : const 出现在 * 右边, 指针地址本身是常量...1.数组定义必须声明大小 : 数组定义, 必须显示 或 隐式 的声明数组的大小 ; 2.显示声明数组大小 : 定义数组, 在数组名称后的括号声明数组大小 ; int array[5];...正确使用数组 p 打印字符串的方法(模仿编译器行为手工寻址) : p 是指针, 指向 "Hello", 但是本文件声明为类数组, 数组指针打印编译器会做不同处理; // ( 1 ) 首先 p 是地址...1.字符串常用方式 : 一般函数中使用字符, 需要指明字符串的大小, 因为字符数组 一旦当做函数参数, 就退化成指针, 失去了大小信息 ; 2.字符串相关的函数不需要大小信息 : string.h..., 一般为 size_t 类型, 用于限定字符串的字符数 ; 2.推荐使用 : 函数调用的时候, 优先使用长度受限制的字符串函数, 这样会减少出现错误的几率 ; 长度受限字符串函数 举例说明 : 1.

3.6K30

C与数据结构】——寒假提高每日练习Day2

,而数组首元素在这里指的是“ABCD”的首字符,p+1也就是s+1,即指向“EFGH”的‘E’,而打印一个字符知道该字符串的首字符便可以打印出来完整的该字符串,因此这里会打印出ABCDEFGHIJKLMNOP...A、*(&a[0][0]+5)     B、*(*(a+1)+1)     C、*(&a[1]+1)     D、*(a[1]+1) 答案:->C 解析:首先,A选项,二维数组在内存的存储它的地址也是连续的...3、void (*s[5])(int) 表示意思为 A、函数指针     B、函数指针数组     C数组指针函数     D、语法错误 答案:-> B 解析:[]优先级高于*,因此s与[]结合...,可以用一级指针接收,而调用的函数参数为二级指针,因此A错误。...D、&数组名表示的是取出整个数组的地址,因此也不能用二级指针接收。 ---- 编程题 描述 一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).

17520

c语言每日一练(8)

,它的判定条件是变量c大于等于字符0且小于等于字符9才打印YES,实际上要实现这样的功能代码得是'0'<=c&&c<='9' 代码1的执行是先进行'0'<=c这个运算,再把运算所得到的值与'9'进行比较...观察代码发现,目标是打印出ans的值,ans最开始的时侯被赋值为0,然后进入for循环,走向代码1,不停地^i%3的值。...而第332次1,2,0的时候是偶数,意味着第332次,1,2,0都是一对一对的,那么全部都会被^为0,故最后的结果为(0^1^2)^1^2,等于0,所以选B 3、下面有关空指针和未初始化指针,说法错误的是...空指针是没有指先任何空间的指针,未初始化的指针是野指针,是不安全的可能指向任何地方,B正确。空指针没指向任何空间,没有值,故C正确。malloc创建失败的话会返回空指针,故D错误。...B、计算s所指字符串占用内存字节的个数 C、计算s所指字符串的长度 D、将s所指字符串复制到字符串t 解析:易错题,遇到这种题最好的方法就是传一个东西进去试一下,我们传字符

10610

c++系列之二 指向成员函数的指针(烧脑)

开始之前,让我们先看一段第一次看一定会高呼“我++”的代码(说明,这些代码都是翻译君重新手敲的,改正了原文代码的一些不太好的空格、缩进,下同): //mem_fun1.cpp#include <...int (Foo::*fptr) (string) = &Foo::f; 上面这行代码g++ 4.2.4编译的错误信息为:“不能将 int (*)(std::string)转化成 int (Foo:...成员函数指针数组及其应用 成员函数指针的一个重要应用就是根据输入来生成响应事件,下面的 Printer 类和指针数组 pfm 展示了这一点: class Printer { // 一台虚拟的打印机 public...字符串目的地;4. 字符串来源。上述代码字符串来源是两个字符串常量"Strings "和"concatenated!",而成员函数指针数组被用来根据菜单选项执行相应的打印动作。...而在我们的例子 this 指针并没有被解引用,所以,编译器放了我们一马(翻译君表示,这其实跟编译器没有关系,即使我们成员函数中使用this指针,编译照样能通过,只不过在运行时会crash)。

2.8K20

C语言的灵魂——指针

解释: main()是主调函数,Increment()是被调函数,当我们主调函数调用其他函数,这个参数叫做实参,这个被调函数的参数叫做形参,实参会被映射到形参,当这个函数被调用的时候,主函数的实参...---- 指针字符数组 字符数组 C语言中为了更高效的操作字符串,我们需要理解一些事情, 我们如何把字符串存入和字符数组, 为了能够字符数组存储字符串,首要的需求就是字符数组必须要足够大,大到能够容纳字符串...char c[5] = {'A','B','C','D','\0'}; 引入指针 声明一个字符数组和一个字符指针。...char c1[5] = "hello";char* c2; 我们使用这个数组的名字和这个字符指针的名字放到等式是成立的。...但是,将换个位置, c1 = c2;是非法的 c2存的就是字符数组c1首元素的地址(同上面的整型数组)。 c2 =c1; 解引用操作同上面的数组。 代码示例:打印数组的所有元素。

85410

c语言基础学习07_指针

函数,使用的时候需要包含头文件 #include 、 3、字符指针字符串、通过指针访问字符数组通过指针使得字符串逆置、函数的参数为char *(即char *作为函数的参数...,所以代码避免出现指针, 如果一个指针不能确定指向任何一个变量地址,那么就将这个指针变成空指针。...11 } 编译上段程序没有错误,运行上段程序会出现一个错误:Segmentation fault(段错误,也即分段故障) ----------------------------------------...(这只是粗浅易懂的解释) 13 return 0; 14 } 程序不要出现指针,但可以出现指针。...解决方法:传递一个数组的时候,需要同时提供另外一个参数,标明这个数组有几个成员变量。 例外:如果函数的参数是一个字符,那么并不需要再传递一个参数说明这个字符串有多长。

1.4K10

第八节(字符字符串)

每次递增mychar,第13行 都打印mychar的值和mychar的字符值。 记住,%c用于打印字符值(或ASCII值)。 用%c打印数字的字符值。 初始化字符类型变量,要用单引号括起来。...3.2初始化字符数组: 与C语言的其他数据类型一样,可以声明字符数组初始化它。...这类错误通常会导致许多烦人的bug。 四.字符串和指针: 上面介绍了储存在char类型数组,并以空字符结尾的字符串。...五.未储存在数组字符串: 前面介绍了通过数组名和空字符来定义一个字符串——数组名是char类型的指针,指向字符串的开始,而空字符则标记了字符串的末尾。...使用gets()或其他函数通过指针储存数据,要确保指针指向已分配的空间。

25930

详解指针(超详细)(第一卷)

1.指针+整数 这两个算法都是用指针遍历数组然后打印,把数组第一个元素的地址存进指针,然后顺藤摸瓜找出数组剩余元素的地址。...我们都知道C语言中有个函数叫做strlen,统计一个字符串中出\0外的字符个数 就像这样,那么接下来我们可以用指针-指针自己设计一个类似于strlen函数的函数,来更直观的体验一下指针-指针: 具体代码如下...越界访问指针指针指向超出分配内存范围的地址。 4. 空指针解引用:对一个空指针进行解引用操作。 5. 指针运算错误指针运算过程中出现错误,导致指针指向错误的地址。...使用智能指针:智能指针可以自动管理动态分配的内存,避免手动释放内存出现错误。 3. 检查指针有效性:使用指针之前,通过检查指针是否为 NULL 或者是否指向有效的内存地址来确保指针的有效性。...使用错误处理机制:程序添加错误处理机制,捕获和处理可能出现的野指针错误

7110

深入理解字符串函数(strstr、strtok、strerror)(二)

strstr 的使用和模拟实现​ 作用:返回字符另外一个字符第一次出现的位置,即查找子串 字符串str1查找是否存在与str2相等的子串 如果存在,则返回一个地址(返回字符串str2...字符串str1第⼀次出现的位置) 如果不存在,则返回空指针 char * strstr ( const char * str1, const char * str2); Returns a...(函数返回字符串str2字符串str1第一次出现的位置)。​...b,而str2此时为c,不相等,再指向下一个字符进行比较 str1再指向下一个字符,对比成功,在这str1和str2数次对比后,str2已经指向了字符'\0'(),此时终止比较,返回值为str1bbc...不同的系统和C语言标准库的实现中都规定了一些错误码,一般是放在 errno.h 这个头文件说明的,C语言程序启动的时候就会使用一个全面的变量errno来记录程序的当前错误码,只不过程序启动的时候errno

12710

【团队分享】刀锋铁骑:常见Android Native崩溃及错误原因

本文中,SIGABRT(中止进程)属于这种信号。 用户(手贱)或第三方App(恶意)通过kill-信号 pid的方式给错误进程发送,这时signal的si_code会小于0。...解决方法 使用指针前加以判断,如果为空,则是不可访问的。 Bug评述 空指针是很容易出现的一种bug,代码量大,赶开发进度很容易出现,但是它也很容易被发现和修复。 2....这时查看Crash显示的调用栈,和野指针所在的代码部分,有可能基本上没有任何关联。 解决方法 指针变量定义,一定要初始化,特别是结构体或类的成员指针变量。...解决方法 所有数组遍历的循环,都要加上越界判断。 用下标访问数组,要判断是否越界。 通过代码分析工具可以发现绝大部分的数组越界问题。...6、缓冲区溢出 代码示例 char szBuffer[10]; //由于函数栈是从高地址往低地址创建,而sprintf是从低地址往高地址打印字符, //如果超出了缓冲区的大小,函数的栈帧会被破坏,函数返回时会跳转到未知的地址上

4.1K62

C文件读写

为什么会出现回车和换行两个字符 早期的电传打字机上,有一个部件叫“字车”,类似于打印机的喷头。“字车”从最左端开始,每打一个字符,“字车”就向右移动一格。当打满一行字后,“字车”需要回到最左端。...否则,两行字将被重叠打印在一起。这个动作被称作“换行”。 随着时代的发展,字符不仅仅只打印纸上。例如,屏幕上打印字符,无需“字车”。...Linux系统和C语言采用同一种惯例\n,无需转换。 C语言Windows系统上写入文件,会将\n写入为\r、\n。而读取文件,会将\r、\n读取为\n。...二进制模式 如果,不希望C语言把对文件输入输出的数据当做文本,不进行换行时的自动转换。可以在打开文件使用二进制模式。函数fopen的第二个参数的字符添加字符b,代表二进制binary。...程序结束后,文件内出现了内容。 fflush函数 C语言中提供的文件操作函数是带有缓存的,数据会先写入到缓存。待缓存的数据积累到一定数量,再一起写入文件。

3.5K20
领券