楼主:
leepair (leepair)
2014-12-09 12:29:11开发平台(Platform): (Ex: VC++, GCC, Linux, ...) linux
额外使用到的函数库(Library Used): (Ex: OpenGL, ...) no
问题(Question):
各位版大午安,C新手遇到query语句内容过长被切断导致失败,请问
Char* str = mallco(max)会有最大长度限制吗?因为宣告的matchList超过一定长度
后会变"...", 如下:
"8731566,3936716,8130337,3354438,2053144,2851501,6844897,5783871,
5955828,7111137,4619358,5153177,8982397,5722294,9477904,9621609,5946231,
3959745,5844175,1853635,9266298,2098142,7880399,5827968,2090412,7400260,
5673557,7441594,8688008,4716395,4325968,8119113,3204530,2471006,7910962,..."
query的语句的最后也变成"...", 被切掉变成不完整的语句,如下:
"INSERT INTO userTable (`userNo`, `matchList`, `matchCount`) values(
'1016807', '3650073,4943658,2108930,3211272,3027544,9850878,1777923,1237709,
5564440,9438165,3484492,3243042,7807987,4522503,2282327,8531729,5378840,
9542612,6544303,8833169,5817709,1097157,9129560,7570933,9493099,1280278,
3351816..."
请问是我的char*宣告的不够长吗? 还是超过了限制? 请大大们指导一下,感恩。
程式码:
for (int i = 0; i < UserAmount; i++) {
int userNo = get_random_number(1000000, 9999999);
char userNoStr[128];
snprintf(userNoStr, 128, "%d", userNo);
printf("user no: %s\n", userNoStr);
int matchCount = get_random_number(10, 1000);
int matchlength = matchCount * (int)(strlen(userNoStr) + 1) * sizeof(char);
char* matchList = malloc(matchCharLength);
for (int j = 0; j < matchCount; j++) {
char matchUserNo[256];
if (strlen(matchList) == 0) {
snprintf(matchUserNo, 256, "%d", get_random_number(1000000, 9999999));
}
else{
snprintf(matchUserNo, 256, ",%d", get_random_number(1000000, 9999999));
}
strcat(matchList, matchUserNo);
}
int queryCharLength = (int)strlen(matchList) + 128;
char* sqlInsertUserNo = malloc(queryCharLength);
snprintf(sqlInsertUserNo, queryCharLength, "INSERT INTO userTable (`userNo
`, `matchList`, `matchCount`) values('%d', '%s', '%d') ON DUPLICATE KEY
UPDATE `userNo` = '%d'", userNo, matchList, matchCount, userNo);
int queryFail = mysql_query(mysqlConnection, sqlInsertUserNo);
if (queryFail) {
printf("Error query: %s\n", sqlInsertUserNo);
printf("Error %s\n", mysql_error(mysqlConnection));
mysql_close(mysqlConnection);
exit(0);
}
}