gpt4 book ai didi

c - "Stack around the variable ' 缓冲区 ' was corrupted"- 这里出了什么问题

转载 作者:太空宇宙 更新时间:2023-11-04 00:29:59 26 4
gpt4 key购买 nike

我想解析用户输入的 IP 地址中的数字。我编写了以下代码来获取用户输入的 IP 地址并打印地址的每个字节。

代码:(现在我假设用户输入类似于“xx.xx.xx.xx”)

#include <stdio.h>
#include <string.h>
void main(){

char ip[16];
char buffer[6];
int i=0;
char temp;
int len;
char *ptr1;
char *ptr2;
char delim = '.';
while((temp = getchar()) != '\n')
{
ip[i++]=temp;
}
ip[i] = '\0';
ptr2 = ip;
for(i=0;i<4;i++){
ptr1 = strchr(ptr2,(int)delim);
strcpy(buffer,ptr2);
if(ptr1 != NULL){
buffer[ptr1-ptr2] = '\0';
ptr2=ptr1+1;
}
printf("\nString:%s",buffer);
}


getchar();

}

代码运行正常,但在运行或调试 session 结束时出现错误

Run-Time Check Failure #2 - Stack around the variable 'buffer' was corrupted.

我的代码有什么问题?

最佳答案

strcpy(buffer,ptr2);

这一行是错误的原因。您的 buffer 大小为 6,但 ptr2 有超过 6 个字符(例如 xx.xx.xx.xx = 12),因此它溢出了。增加 buffer 大小。它会解决你的问题。

还按照@jonathon 的建议添加数组绑定(bind)检查。此行 ip[i++]=temp; 可能会为更大的输入带来问题。

关于c - "Stack around the variable ' 缓冲区 ' was corrupted"- 这里出了什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24379008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com