看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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); } } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.219.220.135 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1418099355.A.DEA.html
q82419: malloc出來記得要先memset 12/09 15:44
q82419: 你的malloc吃的應該是matchlength吧? 12/09 15:46
q82419: malloc吃的是size_t 出來的東西要轉char*不然會有warning 12/09 15:47
q82419: 看起來很像是C字串結尾沒有補'\0'的關係 12/09 15:50
MOONRAKER: 好偉大的資料庫欄位。 :| 12/09 18:34
MOONRAKER: SUPER BIG 12/09 18:39
Killercat: 這個問題不在你 在資料庫的設計人 去把他抓出來打屁屁 12/09 22:34