请找到下面的代码,它显示了一些奇怪的行为
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的值时,我确实看到了这些值。
1条答案
按热度按时间vjrehmav1#
绝对写得出界了。您的输出显示
10位数的数字。在
sprintf()
中,您添加了一个前导0
,因此您写入了11个字节+'\0'
,总共12个字节,但pid仅定义为char pid[11];
这会调用Undefined Behaviour,在您的例子中,
'\0'
显然会覆盖cmd
的第一个字节,并使其成为空字符串(不是NULL,正如您所说的,这意味着NULL指针)