我想解析用戶輸入的IP地址中的數字。我寫了下面的代碼,從用戶處獲取輸入IP地址並打印地址的每個字節。」圍繞變量「緩衝區」的堆棧已損壞「 - 這裏有什麼問題
CODE:(現在我假設用戶輸入是像「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();
}
的代碼運行正常,但在運行或調試結束它會給出錯誤
Run-Time Check Failure #2 - Stack around the variable 'buffer' was corrupted.
我的代碼有什麼問題?
您不檢查*任何內容*以確保您處於堆棧緩衝區的範圍內! –
@JonathonReinhart現在我假設輸入是A.A.A.A,其中A <= 255。 – Bishal
在調試器下運行您的代碼,並驗證對緩衝區的每次訪問。再說一遍,你不能在堆棧損壞的情況下發布到SO,也不會指望你缺少邊界檢查,* hard *。 –