我有以下代码,在执行sprintf
函数后,布尔值use_custom_value
设置为false,我无法弄清楚原因。这是带有一些注释的代码:
bool use_custom_value;
use_custom_value = strncmp(custom_value_id, "", SZ_ID + 1);
/* use_custom_value is true */
int init_complete = localInitTable ( );
char *buf;
int close_fp = 0;
buf = ( char * ) malloc ( 1024 * 1024 );
memset ( buf, ' ', 1024 * 1024 );
*buf = '\0';
int filled_byte = 0;
TEST_DEF test_def;
MYSQL_RES *Result = NULL;
char where_for_test_records[100];
int err1;
char *testp;
testp = ( char * ) malloc ( sizeof ( testp_DEF ) + 1 );
if ( use_custom_value )
{
/* use_custom_value is true */
sprintf ( where_for_test_records,
"test='%s'", test_no );
/* use_custom_value is false, why?*/
Result = Query2Result ( &TestG, where_for_test_records );
}
答案 0 :(得分:1)
什么是test_no
?这是一个数字吗?如果是这样,您的格式说明符错误(请尝试%d
而不是%s
)。
如果test_no
确实是一个字符串,其内容可能是垃圾。这会导致您的sprintf调用从where_for_test_records
开始写出超过99个字符( test =' test_no长度超过100个字符' )。
查找"未定义的行为"一个不相关的错误代码如何以你不期望的方式影响程序。
请注意strncmp
返回一个int,而不是true / false。实际上,在strcmp
!