#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main ()
{
char *imsi;
unsigned int i;
int val;
char *dest;
imsi = "405750111";
strncpy(dest,imsi,5);
printf("%s",dest);
/* i = 10; */
}
在上面的代码中,i = 10 赋值如上注释,代码运行正常,没有错误。当编译包含赋值时,错误(segmentation fault) 发生在 strncpy(dest,imsi,5);强>.
通过避免优化变量 i(即 volatile int i;),错误被清除即使包含作业 (i = 10)。
最佳答案
在你的代码中,通过说
strncpy(dest,imsi,5);
您正在尝试写入一个未初始化的指针 dest
。它可以(而且很可能会)指向一些您的程序无法访问的内存(无效内存)。它调用 undefined behavior .
对于具有 UB 的程序,没有什么可以保证的。它可以按预期工作(实际上取决于您期望)或者它可能崩溃或打开您的银行账户并转移所有资金一些潜在的恐怖组织。
注意 - 我希望通过阅读最后一行你被吓到了,所以底线是
不要尝试写入任何未初始化的指针(内存区域)。期间。
关于c - strcpy()/uninitialized char pointer 这段代码背后的技巧是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36477421/