我已经尝试解决这个问题并且最终没有任何结果,我希望你能向我提示正确的方向.我有一个程序,我用这种方式初始化一个char数组:
char variable1[8];
Run Code Online (Sandbox Code Playgroud)
然后我尝试复制函数的返回值,即
...
strcpy(variable1, (char *)function1());
Run Code Online (Sandbox Code Playgroud)
其中function1()返回char数组值.这是function1的结构:
char* function1()
{
....
char variable2[8]={'\0'};
...
return (variable2);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试执行strcpy行时程序崩溃.
我已阅读strcpy函数这里是
要点:必须确保目标缓冲区(s1)能够包含源数组中的所有字符,包括终止空字节.否则,strcpy()将覆盖缓冲区末尾的内存,导致缓冲区溢出,这可能导致程序崩溃
因此我尝试将variable1大小增加到20,但程序仍然崩溃.
除此之外,我尝试了不同的方法,即使用strncpy函数调用,它仍然给我同样的错误.
奇怪的是我可以执行function1(),它返回一个没有问题的值.只有当我试图复制它时,我的程序崩溃了.我接下来应该做些什么?
pax*_*blo 10
您的问题不是因为您的目标缓冲区太小,而是因为包含源字符串的变量在您尝试使用之前已超出范围.
内function1,variable2是在栈上创建的,但是当你退出功能,这是有效地破坏.之后尝试使用它(例如在strcpy操作中)是未定义的行为.
如果你想要一个能在函数退出后存活的数组,你可能想要从堆中分配它:
char *function1 (void) {
return calloc (1, 8); // allocate and zero out 8 bytes
}
Run Code Online (Sandbox Code Playgroud)
并记得随后释放指针.
| 归档时间: |
|
| 查看次数: |
1453 次 |
| 最近记录: |