sprintf正在改变布尔值

时间:2015-02-25 15:14:46

标签: c

我有以下代码,在执行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 );
}

1 个答案:

答案 0 :(得分:1)

什么是test_no?这是一个数字吗?如果是这样,您的格式说明符错误(请尝试%d而不是%s)。

如果test_no确实是一个字符串,其内容可能是垃圾。这会导致您的sprintf调用从where_for_test_records开始写出超过99个字符( test =' test_no长度超过100个字符' )。

查找"未定义的行为"一个不相关的错误代码如何以你不期望的方式影响程序。

请注意strncmp返回一个int,而不是true / false。实际上,在strcmp

的上下文中,返回0并非完全错误