为什么输出11

xddzccn 2006-12-02 12:00:47
char a[12]="hello world";

char *p;

char str_a[10];


p=str_a;


strcpy(p,a);


printf("the lengh is %d",strlen(p));


}
...全文
297 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
CAIZHU 2006-12-02
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>

void main()
{

char a[12]="hello world";

char *p;

char str_a[10];


p=str_a;


strcpy(p,a);

printf("%s",str_a);
printf("\n");
printf("the lengh is %d\n",strlen(p));


}

运行结果
hello world
the lengh is 11

危险 数据溢出 
会覆盖其他的数据成员的 
最好加给判断 
如果strlen(p)>10 则返回错误 
程序漏洞 就是缺乏判断引起的
wenbaby 2006-12-02
  • 打赏
  • 举报
回复
char str_a[10];


p=str_a;


strcpy(p,a);
____
这样用是很危险的.就算下面这样,结果也应该是11,但是是危险的.
char str_a[2];


p=str_a;


strcpy(p,a);
xddzccn 2006-12-02
  • 打赏
  • 举报
回复
受教了,
危险 数据溢出 
会覆盖其他的数据成员的 
我要是想知道它覆盖了哪些数据成员,要怎么弄啊
FairLu 2006-12-02
  • 打赏
  • 举报
回复
strcpy并不会检查数组是否越界。返回值是字符串长度(以'\0'结束)。
strcpy(p,a);//a是一个12字节的数组,字符串长度为11,所以调用strcpy之后,p所指向的字符串的长度11。
jixingzhong 2006-12-02
  • 打赏
  • 举报
回复
strlen 从指定的位置开始查找,一直到出现 \0 字符的字节数目。

它不考虑参数数组的长度,
可能小于该长度, 也可能大于该长度。

呵呵,
如果越界使用数组,
在一些编译器下是会出错的 ....
灰太狼 2006-12-02
  • 打赏
  • 举报
回复
C語言中使用指針一定要注意,很容易出現指針問題,我個人認為隻要是指針一定要malloc,否則會出現異想不到的結果。
lockhall 2006-12-02
  • 打赏
  • 举报
回复
p指向的是"hello world",所以strlen(p) == 11.
lockhall 2006-12-02
  • 打赏
  • 举报
回复
就楼主本身的程序,如果越界的话也不是因为str_a[10]的缘故.
因为p = str_a;只是将数组str_a[]的首地址赋给了指针p
而指针p的内存并未申请.
所以最好在定义了指针p后,申请内存:p =(char*)mall(100*sizeof(char));
alan001 2006-12-02
  • 打赏
  • 举报
回复
也可以用strncpy
whatsouta 2006-12-02
  • 打赏
  • 举报
回复
虽然会产生越界,但仍然执行strcpy完整个a串,只要对str_a紧接着的内存有W权限。
执行strlen时计算到\0结束,因此为11。
源码直接下载地址: https://pan.quark.cn/s/0c43ed5159df 本资源为HCDA认证培训教程,旨在面向准备参加HCDA考试的学员,或希望掌握TCP/IP基础、路由、交换技术、广域网、以太网技术基本原理以及华为通用路由平台VRP上实现的相关内容。具体涵盖的模块包括:Module 1-网络互联基础、Module 2-路由和路由协议基础与实现、Module 3-以太网交换技术基础与实现、Module 4-广域网技术基本原理与实现、Module 5-网络安全基础、Module 6-华为数通产品概述 ### 华为-NAT技术详解 #### 一、概述 NAT(Network Address Translation,网络地址转换)是一种在专用网络内部使用私有IP地址的情况下,使这些设备能够通过公有IP地址进行外部通信的技术手段。NAT技术在多种网络环境中得到广泛应用,特别是在企业网络中发挥着关键性作用。作为HCDA认证培训教程的一部分,本文档将系统性地阐述NAT的基础理论及其实现方法,并深入探讨在华为VRP平台上的具体应用场景。 #### 二、NAT处理流程 NAT处理流程主要包含两种类型:基于源IP地址和基于目的IP地址的处理模式。 ##### 1. 基于源IP地址的NAT处理 **1.1 一对一NO-PAT** 一对一NO-PAT即非端口地址转换(No-Port Address Translation),在这种模式下,一个私有IP地址对应一个公有IP地址,不涉及端口号的转换。当配置了NAT no-pat时,华为设备会为已配置的多通道协议产生的实际流量数据建立server-map表项。这种方式适用于需要固定公网IP的服务器等场景。 **1.2 多对一...

70,040

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧