strcpy-自己对一个const定义的数组不能更改,用库函数却能进行相应操作,

问题描述

自己对一个const定义的数组不能更改,用库函数却能进行相应操作,
  自己对一个const定义的数组不能更改,用库函数却能进行相应操作,比如strcpy(),其实现也是一个个赋值的,为什么自己用赋值语句就不行呢?有点疑问,没搞清楚,请大侠帮小弟解解惑,感激不尽。 前提我是知道const的含义的,知道其用法的。

解决方案

http://blog.csdn.net/heyabo/article/details/8745942
根据C++标准,对于修改const变量,属于:未定义行为(指行为不可预测的计算机代码),这样一来此行为取决于各种编译器的具体实现(即不同编译器可能表现不同)。
不要纠结这个问题,不要故意做危险而不可预测的编码。

解决方案二:
这是因为库函数,比如你所说的strcpy()函数,在参数传递时已经将数组按指针进行了转换。库函数不再认为指针所指的区域是常量!
但实际的结果呢?你可以看看修改后你的数组的值是否改变?这部分会有一些奇怪的现象的,例如:看着是相同的地址,但显示的字符串是不相同的。

解决方案三:
strcpy的时候进行的地址操作,你const定义的数组,不会直接修改值

时间: 2025-01-07 17:29:09

strcpy-自己对一个const定义的数组不能更改,用库函数却能进行相应操作,的相关文章

关于java数组定义一个函数清除该数组的重复元素,返回一个不能浪费长度的数组.

问题描述 关于java数组定义一个函数清除该数组的重复元素,返回一个不能浪费长度的数组. package cn.xtgj.testarr; /** 目前有数组" int[] arr = {11,2, 4, 2, 10, 11},定义一个函数清除该数组的重复元素,返回一个不能浪费长度的数组. * */ public class Arr { public void method(int[] arr){ int count=0; for(int i=0;i<arr.length;i++){ fo

结构体数组-C++中一个很奇怪的数组

问题描述 C++中一个很奇怪的数组 static const AP_Scheduler::Task scheduler_tasks[] PROGMEM = { { ins_update, 1, 1000 }, { one_hz_print, 50, 1000 }, { five_second_call, 250, 1800 }, }; 注:AP_Scheduler是一个类,Task是这个类的结构体成员,一下是Task的定义: struct Task { task_fn_t function; u

一个关于指针和数组的问题

问题描述 一个关于指针和数组的问题 #define _CRT_SECURE_NO_WARNINGS#include ""stdlib.h""#include ""stdio.h""#include ""string.h"" int main(){ char buf1[100] = { 0 }; char buf2[100] = { 0 }; char *p1 = buf1; char *

c-C++,定义大数组时出现了未知错误

问题描述 C++,定义大数组时出现了未知错误 错误 ||=== Build: Debug in proj1 (compiler: GNU GCC Compiler) ===| obj/Debug/main.o||In function `__static_initialization_and_destruction_0':| relocation truncated to fit||R_X86_64_32 against `.bss'| relocation truncated to fit||

c++-C++中,定义的数组怎么由输入来确定维度

问题描述 C++中,定义的数组怎么由输入来确定维度 eg: int a[m][n]; 请问这个mn的值怎么通过用户输入来获取; 解决方案 int main(){ int n; int m; int **p = new int*[m]; for(int i = 0; i < m; i++) { p[i] = new int[n]; } return 0;} 解决方案二: 数组一般都是编译时分配内存,必须知道大小,否则编译器报错,如果程序需要运行时分配存储空间的话,用动态内存分配方法 解决方案三:

嵌入式C实战项目开发技巧:如果对一个有规律的数组表进行位移操作

在嵌入式项目开发中,LED灯的操作是一定要会的,也是基础中的基础,比如用51单片机写个跑马灯,这不简单嘛,定义一个数组把那8个跑马灯存起来,然后搞个for循环不就可以了嘛,但是,实际工作开发中写一个跑马灯可不像学校和书本上那么简单噢,往往最简单的东西,有可能也是最复杂的.现在我的需求是这样的,我要求实现以下形式的流水灯: 跑马灯在这个表格中是一位一位进行存储的,如果要一行全亮,那么写0xff,灯就全亮了,写0x00,灯就全灭了. 要求从led1流水到led100这个灯,也就是实现100个灯的跑马

c++ 对象数组-C++应该如何定义对象数组

问题描述 C++应该如何定义对象数组 #include using namespace std; class Student { public: Student(int n,int a,float s):num(n),age(a),score(s){} void set_student(); void total(); static float average(); private: int num; int age; float score; static float sum; static

c 字符串输入-c语言中如何动态输入字符串而不需要事先定义字符数组大小

问题描述 c语言中如何动态输入字符串而不需要事先定义字符数组大小 如标题 c语言中如何动态输入字符串而不需要事先定义字符数组大小或为字符指针分配空间 解决方案 你这个要求实际使用度太低,或者说,完全没有必要非要这样去想. 解决方案二: c语言中字符串与字符数组c语言中的字符数组与字符串C语言 字符数组和字符串 解决方案三: 你这样定义好了char *p; 解决方案四: #include #include #include #define Step 10 //空间增加的步长. char * get

c++-新手求助!!C++用const初始化字符串数组报错

问题描述 新手求助!!C++用const初始化字符串数组报错 const char Snames[] = {"Spring", "Summer", "Fall", "Winter"} // error C2078: too many initializers 解决方案 楼主你const char Snames[]只是一个const的普通一维字符数组,不能这样初始化 你要放多个字符串的话可以使用二维数组或者指针数组 const