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) { |
||||
std::cerr << "Error: Data size exceeds buffer capacity." << std::endl; |
||||
return; |
||||
} |
||||
if(as(length)){ |
||||
} |
||||
// if (dataSize > bufferSize - usedBufferSize) {
|
||||
// std::cerr << "Error: Data size exceeds buffer remaining capacity." << std::endl;
|
||||
// return;
|
||||
// }
|
||||
|
||||
// 安全地复制数据到缓冲区的剩余空间
|
||||
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); |
||||
strncpy(buffer, data, length); |
||||
memset(buffer, data, length); |
||||
void testThree(const char* data, size_t dataSize) { |
||||
// 检查要写入的数据是否超过缓冲区的剩余空间
|
||||
// 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(){ |
||||
std::mt19937 generator(time(0)); // mt19937是32比特的
|
||||
std::cout << generator() << std::endl; |
||||
std::ranlux24_base generator(time(0)); // ranlux24_base是24比特的
|
||||
std::cout << generator() << std::endl; |
||||
std::knuth_b generator(time(0)); |
||||
std::random_device rd; // 用于获取非确定性随机种子
|
||||
|
||||
std::mt19937 generator(rd()); // 使用更好的随机种子初始化mt19937
|
||||
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; |
||||
} |
@ -1,7 +1,8 @@ |
||||
#include <array> |
||||
int main() { |
||||
//std::String a = "/path/to/your/file.txt";
|
||||
std::String a = "path/to/your/file.txt"; |
||||
std::String testString1 = "User\\Documents"; |
||||
//std::string a = "/path/to/your/file.txt";
|
||||
std::string a = "path/to/your/file.txt"; |
||||
std::string testString1 = "User\\Documents"; |
||||
//std::String testString1 = "C:\\Users\\User\\Documents";
|
||||
return 0; |
||||
} |
@ -1,22 +1,38 @@ |
||||
#include <cstring> // 为了使用 memset |
||||
|
||||
struct User { |
||||
char name[50]; |
||||
int age; |
||||
}; |
||||
|
||||
int main() { |
||||
// 假设有一个使用者结构体需要重新分配内存
|
||||
// User* users = (User*)malloc(5 * sizeof(User));
|
||||
// 正确初始化指针
|
||||
User* users = nullptr; |
||||
|
||||
// 首次分配内存
|
||||
users = new User[5]; |
||||
|
||||
// 在重新分配之前,确保已正确初始化或清空(如果需要的话)
|
||||
// 注意:对于结构体中的对象成员,这可能并不必要,因为它们在新分配的内存中会被自动初始化为默认值
|
||||
// memset(users, 0, 5 * sizeof(User)); // 如果确实需要清零整个结构体内容可以使用这个,但对于包含对象的数据类型不一定适用
|
||||
|
||||
// 在使用realloc()函数重新分配内存块之前,先清空使用者信息
|
||||
// memset(users, 0, 5 * sizeof(User));
|
||||
// 使用realloc()函数重新分配内存块 - C++ 中应使用 new 进行动态内存管理
|
||||
// 用户 struct 是内置类型的组合,在 C++ 中通常不会用 realloc,而是使用 new 进行重新分配
|
||||
// 如果坚持使用 realloc 的话,这段代码应该在 C 程序中,并且需要先检查 users 是否为 nullptr
|
||||
// users = (User*)realloc(users, 10 * sizeof(User));
|
||||
|
||||
// 使用realloc()函数重新分配内存块
|
||||
users = (User*)realloc(users, 10 * sizeof(User));//error
|
||||
// C++ 中使用 new 进行重新分配
|
||||
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; |
||||
} |
@ -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() { |
||||
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::cout << "请输入SQL查询语句: "; |
||||
std::getline(std::cin, inputQuery); |
||||
|
||||
std::string inputQuery = ""; |
||||
// if(a(inputQuery)){
|
||||
// }
|
||||
// 对输入的SQL语句进行验证和处理
|
||||
std::string sqlQuery = sanitizeString(inputQuery); // error
|
||||
|
||||
// 执行SQL语句
|
||||
stmt = con->createStatement(); |
||||
res = stmt->executeQuery(sqlQuery); |
||||
|
||||
// 处理查询结果
|
||||
while (res->next()) { |
||||
// 从结果集中获取数据并进行处理
|
||||
std::string resultData = res->getString("column_name"); |
||||
std::cout << "查询结果: " << resultData << std::endl; |
||||
// 对输入的SQL语句进行验证和处理
|
||||
std::string sqlQuery = sanitizeString(inputQuery); |
||||
|
||||
// 创建并执行SQL语句
|
||||
sql::Statement *stmt = con->createStatement(); |
||||
sql::ResultSet *res = stmt->executeQuery(sqlQuery); |
||||
|
||||
// 处理查询结果
|
||||
while (res->next()) { |
||||
// 从结果集中获取数据并进行处理
|
||||
// 这里假设你知道第一列的名字,如果不是,请替换为实际列名
|
||||
std::string resultData = res->getString("your_column_name"); |
||||
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