int _tmain(int argc, _TCHAR* argv[])
{
char *s="Golden Global View";
char *d="Hello, GGV Programmers";
strncpy(d,s,strlen(s));
printf("%s\n",d);
getchar(); return 0;
}
运行错误,调出了strncpy.asm,why?
感觉虽然strncpy是弃用函数,但这段函数并未造成溢出啊
{
char *s="Golden Global View";
char *d="Hello, GGV Programmers";
strncpy(d,s,strlen(s));
printf("%s\n",d);
getchar(); return 0;
}
运行错误,调出了strncpy.asm,why?
感觉虽然strncpy是弃用函数,但这段函数并未造成溢出啊
char d[32]="Hello, GGV Programmers";
char *d="Hello, GGV Programmers";
两个指针都是指向不可修改的静态区
所以strncpy(d,s,strlen(s)); 写d的内存时出错
“运行错误,调出了strncpy.asm,why?”
VC实现的strncpy为提高效率使用了汇编实现,所以进入了汇编文件中访问地址出错的地方
这行代码是把字符串的指针赋给指针变量d;而该字符串是只读的(其内存空间位于代码段),所以当要修改d指向的内存空间时会非法操作。因为是在strncpy函数中执行了非法操作,所以调试功能自动定位到了执行非法操作的代码上,即调出了strncpy.asm。程序的正确写法见1楼。