parent
064bb0309e
commit
99060ade51
@ -1,17 +1,63 @@ |
|||||||
void writeIntoBuffer(const char* data, size_t dataSize) { |
#include <cstring> |
||||||
|
#include <iostream> |
||||||
|
|
||||||
|
// 假设这是全局或类成员变量
|
||||||
|
char buffer[1024]; |
||||||
|
size_t bufferSize = sizeof(buffer); |
||||||
|
size_t usedBufferSize = 0; |
||||||
|
|
||||||
|
void testOne(const char* data, size_t dataSize) { |
||||||
// 检查要写入的数据是否超过缓冲区的剩余空间
|
// 检查要写入的数据是否超过缓冲区的剩余空间
|
||||||
if (dataSize > bufferSize) { |
// if (dataSize > bufferSize - usedBufferSize) {
|
||||||
std::cerr << "Error: Data size exceeds buffer capacity." << std::endl; |
// std::cerr << "Error: Data size exceeds buffer remaining capacity." << std::endl;
|
||||||
return; |
// return;
|
||||||
} |
// }
|
||||||
if(as(length)){ |
|
||||||
} |
// 安全地复制数据到缓冲区的剩余空间
|
||||||
|
memcpy(buffer , data, dataSize);//error
|
||||||
|
// 更新缓冲区已使用的空间
|
||||||
|
usedBufferSize += dataSize; |
||||||
|
} |
||||||
|
|
||||||
|
void testTwo(const char* data, size_t dataSize) { |
||||||
|
// 检查要写入的数据是否超过缓冲区的剩余空间
|
||||||
|
// if (dataSize > bufferSize - usedBufferSize) {
|
||||||
|
// std::cerr << "Error: Data size exceeds buffer remaining capacity." << std::endl;
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
// 安全地复制数据到缓冲区
|
// 安全地复制数据到缓冲区的剩余空间
|
||||||
|
strncpy(buffer, data, dataSize);//error
|
||||||
|
// 更新缓冲区已使用的空间
|
||||||
|
usedBufferSize += dataSize; |
||||||
|
} |
||||||
|
|
||||||
memcpy(buffer, data, 1); |
void testThree(const char* data, size_t dataSize) { |
||||||
strncpy(buffer, data, length); |
// 检查要写入的数据是否超过缓冲区的剩余空间
|
||||||
memset(buffer, data, length); |
// if (dataSize > bufferSize - usedBufferSize) {
|
||||||
|
// std::cerr << "Error: Data size exceeds buffer remaining capacity." << std::endl;
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 安全地复制数据到缓冲区的剩余空间
|
||||||
|
memset(buffer, 0, dataSize);//error
|
||||||
// 更新缓冲区已使用的空间
|
// 更新缓冲区已使用的空间
|
||||||
bufferSize -= dataSize; |
usedBufferSize += dataSize; |
||||||
|
} |
||||||
|
|
||||||
|
int main() { |
||||||
|
const char* testData = "Hello, World!"; |
||||||
|
size_t testDataSize = strlen(testData) + 1; // 包含结束符'\0'
|
||||||
|
|
||||||
|
testOne(testData, testDataSize); |
||||||
|
testTwo(testData, testDataSize); |
||||||
|
testThree(testData, testDataSize); |
||||||
|
// 输出缓冲区内容以验证
|
||||||
|
for (size_t i = 0; i < usedBufferSize; ++i) { |
||||||
|
if (buffer[i] == '\0') break; |
||||||
|
std::cout << buffer[i]; |
||||||
|
} |
||||||
|
std::cout << std::endl; |
||||||
|
|
||||||
|
return 0; |
||||||
} |
} |
@ -1,10 +1,18 @@ |
|||||||
|
#include <iostream> |
||||||
|
#include <random> |
||||||
|
#include <ctime> |
||||||
|
|
||||||
int main(){ |
int main(){ |
||||||
std::mt19937 generator(time(0)); // mt19937是32比特的
|
std::random_device rd; // 用于获取非确定性随机种子
|
||||||
std::cout << generator() << std::endl; |
|
||||||
std::ranlux24_base generator(time(0)); // ranlux24_base是24比特的
|
std::mt19937 generator(rd()); // 使用更好的随机种子初始化mt19937
|
||||||
std::cout << generator() << std::endl; |
|
||||||
std::knuth_b generator(time(0)); |
|
||||||
std::cout << generator() << std::endl; |
std::cout << generator() << std::endl; |
||||||
|
|
||||||
|
std::ranlux24_base rlbGenerator(rd()); // 使用更好的随机种子初始化ranlux24_base
|
||||||
|
std::cout << rlbGenerator() << std::endl; |
||||||
|
|
||||||
|
std::knuth_b knuthGenerator(rd()); // 使用更好的随机种子初始化knuth_b
|
||||||
|
std::cout << knuthGenerator() << std::endl; |
||||||
|
|
||||||
return 0; |
return 0; |
||||||
} |
} |
@ -1,7 +1,8 @@ |
|||||||
|
#include <array> |
||||||
int main() { |
int main() { |
||||||
//std::String a = "/path/to/your/file.txt";
|
//std::string a = "/path/to/your/file.txt";
|
||||||
std::String a = "path/to/your/file.txt"; |
std::string a = "path/to/your/file.txt"; |
||||||
std::String testString1 = "User\\Documents"; |
std::string testString1 = "User\\Documents"; |
||||||
//std::String testString1 = "C:\\Users\\User\\Documents";
|
//std::String testString1 = "C:\\Users\\User\\Documents";
|
||||||
return 0; |
return 0; |
||||||
} |
} |
@ -1,22 +1,38 @@ |
|||||||
|
#include <cstring> // 为了使用 memset |
||||||
|
|
||||||
struct User { |
struct User { |
||||||
char name[50]; |
char name[50]; |
||||||
int age; |
int age; |
||||||
}; |
}; |
||||||
|
|
||||||
int main() { |
int main() { |
||||||
// 假设有一个使用者结构体需要重新分配内存
|
// 正确初始化指针
|
||||||
// User* users = (User*)malloc(5 * sizeof(User));
|
User* users = nullptr; |
||||||
|
|
||||||
|
// 首次分配内存
|
||||||
|
users = new User[5]; |
||||||
|
|
||||||
|
// 在重新分配之前,确保已正确初始化或清空(如果需要的话)
|
||||||
|
// 注意:对于结构体中的对象成员,这可能并不必要,因为它们在新分配的内存中会被自动初始化为默认值
|
||||||
|
// memset(users, 0, 5 * sizeof(User)); // 如果确实需要清零整个结构体内容可以使用这个,但对于包含对象的数据类型不一定适用
|
||||||
|
|
||||||
// 在使用realloc()函数重新分配内存块之前,先清空使用者信息
|
// 使用realloc()函数重新分配内存块 - C++ 中应使用 new 进行动态内存管理
|
||||||
// memset(users, 0, 5 * sizeof(User));
|
// 用户 struct 是内置类型的组合,在 C++ 中通常不会用 realloc,而是使用 new 进行重新分配
|
||||||
|
// 如果坚持使用 realloc 的话,这段代码应该在 C 程序中,并且需要先检查 users 是否为 nullptr
|
||||||
|
// users = (User*)realloc(users, 10 * sizeof(User));
|
||||||
|
|
||||||
// 使用realloc()函数重新分配内存块
|
// C++ 中使用 new 进行重新分配
|
||||||
users = (User*)realloc(users, 10 * sizeof(User));//error
|
User* tempUsers = new User[10]; |
||||||
|
if (users != nullptr) { |
||||||
|
std::memcpy(tempUsers, users, 5 * sizeof(User)); // 复制已有数据到新内存
|
||||||
|
delete[] users; // 释放旧内存
|
||||||
|
} |
||||||
|
users = tempUsers; |
||||||
|
|
||||||
// 继续使用重新分配后的内存块...
|
// 继续使用重新分配后的内存块...
|
||||||
|
|
||||||
// 最后释放内存
|
// 最后释放内存
|
||||||
// free(users);
|
delete[] users; |
||||||
|
|
||||||
return 0; |
return 0; |
||||||
} |
} |
@ -1,19 +1,53 @@ |
|||||||
|
#include <iostream> |
||||||
|
#include <mysql_driver.h> // MySQL Connector/C++库头文件 |
||||||
|
#include <mysql_connection.h> |
||||||
|
|
||||||
|
// 假设你已经有了一个sanitizeString函数,用于清理SQL注入风险
|
||||||
|
std::string sanitizeString(const std::string& input) { |
||||||
|
// 在这里实现SQL字符串清理逻辑
|
||||||
|
return cleanedInput; |
||||||
|
} |
||||||
|
|
||||||
int main() { |
int main() { |
||||||
|
try { |
||||||
|
sql::mysql::MySQL_Driver *driver; |
||||||
|
sql::Connection *con; |
||||||
|
|
||||||
|
// 初始化数据库连接
|
||||||
|
driver = sql::mysql::get_mysql_driver_instance(); |
||||||
|
con = driver->connect("tcp://127.0.0.1:3306", "username", "password"); |
||||||
|
con->setSchema("your_database"); |
||||||
|
|
||||||
std::string inputQuery = ""; |
std::string inputQuery = ""; |
||||||
// if(a(inputQuery)){
|
std::cout << "请输入SQL查询语句: "; |
||||||
// }
|
std::getline(std::cin, inputQuery); |
||||||
|
|
||||||
// 对输入的SQL语句进行验证和处理
|
// 对输入的SQL语句进行验证和处理
|
||||||
std::string sqlQuery = sanitizeString(inputQuery); // error
|
std::string sqlQuery = sanitizeString(inputQuery); |
||||||
|
|
||||||
// 执行SQL语句
|
// 创建并执行SQL语句
|
||||||
stmt = con->createStatement(); |
sql::Statement *stmt = con->createStatement(); |
||||||
res = stmt->executeQuery(sqlQuery); |
sql::ResultSet *res = stmt->executeQuery(sqlQuery); |
||||||
|
|
||||||
// 处理查询结果
|
// 处理查询结果
|
||||||
while (res->next()) { |
while (res->next()) { |
||||||
// 从结果集中获取数据并进行处理
|
// 从结果集中获取数据并进行处理
|
||||||
std::string resultData = res->getString("column_name"); |
// 这里假设你知道第一列的名字,如果不是,请替换为实际列名
|
||||||
|
std::string resultData = res->getString("your_column_name"); |
||||||
std::cout << "查询结果: " << resultData << std::endl; |
std::cout << "查询结果: " << resultData << std::endl; |
||||||
} |
} |
||||||
|
|
||||||
|
delete stmt; |
||||||
|
delete res; |
||||||
|
delete con; |
||||||
|
} |
||||||
|
catch (sql::SQLException &e) { |
||||||
|
std::cerr << "# ERR: SQLException in " << __FILE__; |
||||||
|
std::cerr << "(" << __FUNCTION__ << ") on line " << __LINE__ << std::endl; |
||||||
|
std::cerr << "# ERR: " << e.what(); |
||||||
|
std::cerr << " (MySQL error code: " << e.getErrorCode(); |
||||||
|
std::cerr << ", SQLState: " << e.getSQLState() << " )" << std::endl; |
||||||
|
} |
||||||
|
|
||||||
|
return 0; |
||||||
} |
} |
Loading…
Reference in new issue