strcat strcpy 使用出现的问题汇总
{
char *Temp=(char *)malloc(sizeof(char)*200);
Temp="strcat";
char *Append=" a test program!";
strcat(Temp,Append);
printf("%s\r\n",Temp);
return 0;
}
在vc6中编程如下函数:
- #include "stdafx.h"
- #include
- #include
- using namespace std;
- int main(int argc, char* argv[])
- {
- char *p="abcde";
- int l=strlen(p);
- char *s="12345";
- strcpy(p,s);
- strcat(p,s);
- return 0;
- }
编译时可以通过,运行时却会出现access violation,这个错误的意思是说访问了一块已经失效的内存,究其原因,char *p="abcde",这一行在执行时,"abcde"(字符串常量)是位于文字常量区,这个区域的内容是不能修改的,而p这个指针变量是位于栈区,也就是说p指向了文字常量区的一个字符串。下面一行char *s的意义相同。
当在执行strcpy(p,s)时,它试图将p所指向的一块内存区域中的内容修改,而这是不可能的,所以会出现上面的那个错误,在执行strcat(p,s)时,它也是试图在修改文字常量区的内容,所以会错误。
当改成以下代码时就不会出现错误:
- #include "stdafx.h"
- #include
- #include
- using namespace std;
- int main(int argc, char* argv[])
- {
- char *p="abcde";
- int l=strlen(p);
- char *s="12345";
- //strcpy(p,s);
- //strcat(p,s);
- char a[]="abcde";
- char b[]="12345";
- char c[6];
- strcat(a,b);
- strcpy(c,b);
- return 0;
- }
此时就不会出错,因为char a[]="abcde"和char *p="abcde"它们的意义是完全不同的,前者的指针变量a是在栈区的,它所指向的"abcde"也是在栈区的,也就是说,a所指向的内存中的内容是可以被修改的。strcat(a,b)的意义也是类似的。
3,strcpy用法:
strcat strcpy 使用出现的问题汇总的更多相关文章
- strlen strcat strcpy strcmp 自己实现
strlen strcat strcpy strcmp 自己实现 strlen include <stdio.h> #include <string.h> #include & ...
- 自己实现字符串操作函数strlen(),strcat(),strcpy(),strcmp()
1.strlen()函数是求解字符串的有效长度的 1)非递归实现 size_t my_strlen(const char *str) { assert(str != NULL); //断言,保证指针 ...
- strlen sizeof strcat strcpy区别
strlen(p): 能计算出p指向字符串的长度(以当前p的位置开始),不包含终止字符'\0': p可以声明为char* p或者char p[],这两种形式strlen均能正确计算. sizeof ...
- strcat strcpy 源代码,用指针去实现
15. 指针实现 strcmp函数 • int newStrcpy(char *p, char *q) • { • while(*p ==*q) { ...
- 字符串操作函数<string.h>相关函数strcpy,strcat,等源码。
首先说一下源码到底在哪里找. 我们在文件中包含<cstring>时,如果点击右键打开文档, 会打开cstring,我们会发现路径为: D:\Program Files\visual stu ...
- 由strcat函数引发的C语言中数组和指针问题的思考
问题一 首先,来看一下下面这段代码: #include <stdio.h> #include <string.h> int main() { char *str = " ...
- c++语言知识点汇总
c++ primer version-5 的整理 section 1: 内置类型和自定义类型: main函数的返回值:指示状态.0:成功:1:系统定义. unix和win系统中,执行完程序可以使用ec ...
- SCNU 2015ACM新生赛初赛【1007. ZLM的扑克牌】解题报告
题目链接详见SCNU 2015新生网络赛 1007. ZLM的扑克牌 . 其实我在想这题的时候,还想过要不要设置求最小的排列,并且对于回文数字的话,可以把扑克牌折起来( ...
- 慕课网:C++ & 数据结构
课程链接:james_yuan的课程 这部分太枯燥了,如果教材难度稍大,根本就学不下去,所以就先看看通俗的视频吧. 课程目录 1.C++远征之起航篇 - C++亮点尽在其中 2.C++远征之离港篇 - ...
随机推荐
- 【IOI2000】邮局设置问题
现在连基础DP都要看题解和代码才能写出来了,怎么办嘛QAQ 原题: 一些村庄建在一条笔直的高速公路边上,我们用一条坐标轴来描述这条公路,每个村庄的坐标都是整数,没有两个村庄的坐标相同.两个村庄的距离定 ...
- [转载]BT656/BT601/BT1120协议
[转载] BT656/BT601/BT1120协议以及DM365/DM355/DM6467上使用的YUV颜色空间说明 ITU-R BT.601和ITU-RBT.656国际电信联盟(Interna ...
- web app变革之rem
rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了.但是我对rem综合评价是用来做web app它绝对是最合适的人选之一. ...
- 微信接口access_token
//调用聚合网笑话接口 $url = 'http://japi.juhe.cn/joke/img/text.from?page=&pagesize=2&key=f0d06a1fe45b ...
- mysql主从复制问题之主从两端binlog日志不同步解决方案
主操作: 进入主的数据库查看状态: mysql> show master statusG; *************************** 1. row **************** ...
- JQuery面试题答案
jQuery面试题答案 转自:http://blog.csdn.net/zhangpei_xf/article/details/8822021 一.Jquery测试题 下面哪种不是jquery的选择器 ...
- C# 深拷贝通用方法
C#深拷贝通用方法(引用类型的拷贝) /// <summary> /// 深度COPY /// </summary> /// <typeparam name=" ...
- Bellman算法
Bellman算法 当图有负圈的时候可以用这个判断最短路! [时间复杂度]O(\(nm\)) &代码: #include <bits/stdc++.h> using namespa ...
- ASP.NET中进行消息处理(MSMQ) 二(转)
在我上一篇文章<ASP.NET中进行消息处理(MSMQ)一>里对MSMQ做了个通俗的介绍,最后以发送普通文本消息和复杂的对象消息为例介绍了消息队列的使用. 本文在此基础上继续介 ...
- [CF #288-C] Anya and Ghosts (贪心)
题目链接:http://codeforces.com/contest/508/problem/C 题目大意:给你三个数,m,t,r,代表晚上有m个幽灵,我有无限支蜡烛,每支蜡烛能够亮t秒,房间需要r支 ...