strcpy()/ uninitialized char指针这个代码背后的诀窍是什么?

Gok*_*m P 1 c pointers memory-management strncpy

#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; */
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,i = 10赋值如上所述,代码工作正常,没有错误.当包含赋值用于编译时,错误(分段错误)发生在strncpy(dest,imsi,5); .

通过避免对变量i的优化(即,volatile int i;),即使包括赋值(i = 10),也清除错误.

Sou*_*osh 5

在你的代码中,通过说

 strncpy(dest,imsi,5);
Run Code Online (Sandbox Code Playgroud)

你正试图写入一个统一的指针dest.它可以(并且很可能会)指向某些无法从程序访问的内存(无效内存).它调用未定义的行为.

关于具有UB的程序,没有什么可以保证的.它可以按预期工作(实际上取决于您的期望),也可能会崩溃或打开您的银行账户并将所有资金转移到某个潜在的恐怖组织.

注意 - 我希望通过阅读最后一行你害怕,所以底线是

不要尝试写入任何未初始化的指针(内存区域).期.