strcpy的一种版本里面有一条语句是这样的: while( (*strDest++ = * s...
发布网友
发布时间:2024-10-20 11:54
我来回答
共5个回答
热心网友
时间:2024-11-20 06:23
strcpy是处理字符串的, 字符串以0结尾, 如果字符串没有问题就不会超出范围
(*strDest++ = * strSrc++) 先把*strSrc赋值给*strDest, 表达式的值是*strDest
然后后缀++让strDest和strSrc指向后一个,
表达式值与'\0'比较做为while条件
strSrc字符串到结尾后, *strSrc是0, 这个0会 = 赋值给strDest后, 才与'\0'比较,然后while结束
所以结束前字符串包括结尾的0都赋值过去了
如果不是字符串或本身就不正确, 那它也会一直循环直到0,这时就有可能超出本身的空间大小
所以实际用的时候一般用带缓存大小的版本 strncpy , 其它的字符串函数也有带n的版本
会要你把缓存的大小也传过去, 如果超过就不继续处理
热心网友
时间:2024-11-20 06:19
while( (*strDest++ = * strSrc++) != ‘\0’ ) ;这是个循环,(*strDest++ = * strSrc++) = ‘\0’就跳出循环了!
热心网友
时间:2024-11-20 06:25
这个子真指向的是数组 !='/0'的意思是截止到分节符处 而数组的最后一个位置存储的是'/0'
假如定义一个 a[5] 你strlen(a)之后得到的值是6 。实际上内存分配的时候给a分配了一个'/0’位置
所以指针是可以访问到的
热心网友
时间:2024-11-20 06:20
一种情况可能是该指针无越界可能性,
热心网友
时间:2024-11-20 06:26
* strdst++表示指针所指向的地址++并不是指针自己的地址++
所以是否越界关键看DST指向的东西是什么
不过指针++貌似有个问题曾经在VC上遇到过,函数堆栈内空间通过指针++访问空间debug和release版本的会有不同的行为
{
char m;
char a;
char b[10];
char *c=a[9];
*(c++)? == m == b
}