C语言 Reg:正在打印NULL值

sgtfey8w  于 2023-05-28  发布在  其他
关注(0)|答案(1)|浏览(177)

请找到下面的代码,它显示了一些奇怪的行为

static int call_apab_process()      
{
   static char *pcFnctnNm = "call_apab_process";
   int rc = SUCCESS;
   char cmd[4000];
   char pid[11];
   char logDir[2000];
   cmd[0] = '\0';
   pid[0] = '\0';
   logDir[0] = '\0';
   dbg_indent(pcFnctnNm);
   dbg_print("Entering Into call_apab_process");
   dbg_print("Print Parameters..");
   dbg_print("MY_HOME     :[%s]",getenv("MY_HOME"));
   dbg_print("SESSION_ID    :[%ld]",pvsp_env->sessionid);
   sprintf(cmd,"%s/bin/GQ19apab_DB_auto.sh %ld",getenv("MY_HOME"),pvsp_env->sessionid);
   sprintf(pid,"0%ld",pvsp_env->sessionid);
   sprintf(logDir,"%s/tmp/db",getenv("MY_HOME"));
   dbg_print("cmd :[%s]",cmd);
}

The output is as given below.

Entering Into call_dadp_process
Print Parameters..
MY_HOME     :[/opt/apnp]
SESSION_ID    :[1054628118]
cmd :[]

有人能告诉我为什么cmd的值显示为null吗?当我分别打印MY_HOME和session_id的值时,我确实看到了这些值。

vjrehmav

vjrehmav1#

sprintf(pid,"0%ld",pvsp_env->sessionid);

绝对写得出界了。您的输出显示

SESSION_ID    :[1054628118]

10位数的数字。在sprintf()中,您添加了一个前导0,因此您写入了11个字节+ '\0',总共12个字节,但pid仅定义为char pid[11];
这会调用Undefined Behaviour,在您的例子中,'\0'显然会覆盖cmd的第一个字节,并使其成为空字符串(不是NULL,正如您所说的,这意味着NULL指针)

相关问题