Alc*_*ott 10 c const strcpy memmove
memmove/memcpy/strcpy原型中的第二个arg是类似的:例如:
void *memmove(void *dest, const void *src, size_t n); //const void*
char *strcpy(char *dest, const char *src); //const char*
Run Code Online (Sandbox Code Playgroud)
但显然,如果dest和src重叠,那么src的内容会被改变,违反const void/char*?
Ste*_*sop 20
const void*表示不会通过该指针修改referand .
如果存在指向同一对象的其他非常量指针(也称为"别名"),那么当然它仍然可以通过这些指针进行修改.在您描述的场景中,其他指针是dest.
顺便说一下,strcpy如果区域重叠,则行为未定义,而在C99中,签名是char *strcpy(char * restrict s1, const char * restrict s2);.但是对于memmove,别名是可以的.通过赋予它重叠的区域,你已经"允许"修改dest区域,它就会这样做.
| 归档时间: |
|
| 查看次数: |
7458 次 |
| 最近记录: |