首页 > 编程知识 正文

strncat越界,踩内存

时间:2023-05-04 20:33:37 阅读:265422 作者:1477

#include <string.h>#include <stdio.h> #include <stdlib.h>int main(){char *a = (char *)malloc(sizeof(char) * 10);char w[30]="WWWWWWWWWWWWWWWWWWWWWWWWWWWW";printf("w[30]: %c n", w[30]); //越界memcpy(a, "123456789", 10);memcpy(a+10, "123456789", 10);for (int i = 0; i < 20; i++) {printf("before, %cn", *(a + i));}strncat(a, w, 5); // 超出a的大小printf("a: %s, a: %pn", a, a);for (int i = 0; i < 20; i++) {printf("after, %cn", *(a + i));}return 0;}

打印

w[30]: before, 1before, 2before, 3before, 4before, 5before, 6before, 7before, 8before, 9before, before, 1before, 2before, 3before, 4before, 5before, 6before, 7before, 8before, 9before, a: 123456789WWWWW, a: 0x55e3aee24260after, 1after, 2after, 3after, 4after, 5after, 6after, 7after, 8after, 9after, Wafter, Wafter, Wafter, Wafter, Wafter, after, 6after, 7after, 8after, 9after,

 

strncat()将会从字符串src的开头拷贝n 个字符到dest字符串尾部,dest要有足够的空间来容纳要拷贝的字符串。

如果n小于字符串src的长度,那么仅拷贝n 个字符到dest字符串尾部, 字符追加完成后,再追加''。

如果n大于字符串src的长度,那么仅将src指向的字符串内容追加到dest的尾部。

strncat()会将dest字符串最后的''覆盖掉,字符追加完成后,再追加''。

// 当使用像strncat()函数时,必须在缓冲区的末尾为终止空字符留下一个空字节,避免off-by-onestrncat(fullname, lastname, sizeof(fullname) - strlen(fullname) - 1); #include <string.h>#include <stdio.h> #include <stdlib.h>int main(){char firstname[30] = "123456789123456789";char fullname[10] = "**********";fullname[0] = '';strncat(fullname, firstname, 6);for (int i = 0; i < 10; i++) {printf("[i:%d], %c, %sn", i, fullname[i], fullname);} return 0;}

打印

[i:0], 1, 123456[i:1], 2, 123456[i:2], 3, 123456[i:3], 4, 123456[i:4], 5, 123456[i:5], 6, 123456[i:6], , 123456[i:7], *, 123456[i:8], *, 123456[i:9], *, 123456

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。