为了账号安全,请及时绑定邮箱和手机立即绑定

作业社区

探索学习新天地,共享知识资源!

0 提交作业
0 布置作业
0 满分作业
得分 100
学习任务

胡汉三66 的学生作业:

debug.h #ifndef _DEBUG_H_ #define _DEBUG_H_ /* __FILE__ : 输出文件名 __FUNCTION__ : 输出函数名 __LINE__ : 输出行号 */ #define DEBUG_INFO(args...) do{ \ char b__[1024];\ sprintf(b__,args);\ fprintf(stderr,"[%s,%s,%d] : %s",__FILE__,__FUNCTION__,__LINE__,b__); \ }while(0) #endif tcpsocket.h #ifndef __TCP_SOCKET_H_ #define __TCP_SOCKET_H_ #include #include #include #include #include #include #include #include // 用于创建 tcp server socket extern int create_tcp_server_socket(const char *ip,unsigned short port); #endif tcpsocket.c #include "tcpsocket.h" #include "debug.h" #define BACKLOG 10 // 监听队列最大值 // 用于创建 tcp server socket int create_tcp_server_socket(const char *ip,unsigned short port) { int sfd,ret; struct sockaddr_in svr_addr; socklen_t len = sizeof(struct sockaddr_in); // 1.创建套接字 sfd = socket(AF_INET,SOCK_STREAM,0); if(sfd == -1){ DEBUG_INFO("[ERROR] Failed to socket : %s\n",strerror(errno)); return -1; } bzero(&svr_addr,sizeof(struct sockaddr_in)); // 指针指向空间初始化(清零) svr_addr.sin_family = AF_INET; // 协议族 svr_addr.sin_port = htons(port); // 端口 svr_addr.sin_addr.s_addr = inet_addr(ip); // IP // 2.绑定ip地址与端口号 ret = bind(sfd,(const struct sockaddr *)&svr_addr,sizeof(struct sockaddr_in)); if(ret == -1){ DEBUG_INFO("[ERROR] Failed to bind : %s\n",strerror(errno)); return -1; } // 3.建立监听队列 ret = listen(sfd,BACKLOG); if(ret == -1){ DEBUG_INFO("[ERROR] Failed to listen : %s\n",strerror(errno)); return -1; } return sfd; }

得分 100
学习任务

浪潮君 的学生作业:

#include #include #include class String { private: char *data_; // 指向动态分配的字符数组,存储字符串内容 size_t size_; // 字符串长度,不包含结尾的 '\0' public: // 构造函数:根据传入的 C 字符串初始化对象 explicit String(const char *str) { if (str == NULL) { // 如果传入空指针,初始化为空字符串 size_ = 0; data_ = new char[1]; data_[0] = '\0'; // 以空字符结束 } else { // 计算字符串长度 size_ = std::strlen(str); // 分配内存空间,包含结尾空字符 data_ = new char[size_ + 1]; // 复制字符串内容 std::strcpy(data_, str); } } // 析构函数:释放动态分配的内存 ~String() { delete[] data_; } // 拷贝构造函数:实现深拷贝 String(const String &other) { size_ = other.size_; data_ = new char[size_ + 1]; std::strcpy(data_, other.data_); } // 赋值运算符重载:实现深拷贝,防止自赋值 String &operator=(const String &other) { if (this != &other) { delete[] data_; // 释放原有内存 size_ = other.size_; data_ = new char[size_ + 1]; std::strcpy(data_, other.data_); } return *this; } // 返回字符串长度 size_t size() const { return size_; } // 下标运算符重载(非 const 版本):允许修改字符 char &operator[](size_t index) { if (index >= size_) { // 越界访问,抛出标准异常 throw std::out_of_range("index out of range"); } return data_[index]; } // 下标运算符重载(const 版本):只读访问字符 const char &operator[](size_t index) const { if (index >= size_) { // 越界访问,抛出标准异常 throw std::out_of_range("index out of range"); } return data_[index]; } // 返回底层 C 风格字符串指针,方便与标准库兼容 const char *c_str() const { return data_; } }; // 全局输出流运算符重载:实现直接输出 String 对象 std::ostream &operator

得分 100
学习任务

浪潮君 的学生作业:

#include #include #include // 自定义 String 类,模拟 std::string 的基本行为 class String { private: char *data_; // 指向字符串数据的动态分配内存 size_t size_; // 字符串长度,不包括结尾符 '\0' public: // 显式构造函数:从 C 字符串初始化 String 对象 explicit String(const char *str) { if (str == NULL) { // 空指针处理,创建一个空字符串 size_ = 0; data_ = new char[1]; data_[0] = '\0'; } else { // 正常字符串,计算长度并复制内容 size_ = std::strlen(str); data_ = new char[size_ + 1]; // 多分配 1 个字节用于 '\0' std::strcpy(data_, str); // 拷贝字符串内容 } } // 析构函数:释放动态分配的内存,防止内存泄漏 ~String() { delete[] data_; } // 拷贝构造函数:深拷贝另一个 String 对象 String(const String &other) { size_ = other.size_; // 拷贝长度 data_ = new char[size_ + 1]; // 分配新内存 std::strcpy(data_, other.data_); // 拷贝字符串内容 } // 拷贝赋值运算符:避免自我赋值,释放旧内存后深拷贝 String &operator=(const String &other) { if (this != &other) { delete[] data_; // 释放旧内存 size_ = other.size_; // 拷贝长度 data_ = new char[size_ + 1]; // 分配新内存 std::strcpy(data_, other.data_); // 拷贝内容 } return *this; // 返回自身引用以支持链式赋值 } // 获取字符串长度(不含 '\0') size_t size() const { return size_; } // 下标运算符重载:非 const 版本,返回字符引用,可修改内容 char &operator[](size_t index) { if (index >= size_) { throw std::out_of_range("Index out of range"); } return data_[index]; } // 下标运算符重载:const 版本,返回只读字符引用 const char &operator[](size_t index) const { if (index >= size_) { throw std::out_of_range("Index out of range"); } return data_[index]; } }; // 主函数:测试自定义 String 类的基本功能 int main() { String str("hello"); // 创建字符串对象 str,内容为 "hello" str[0] = 'w'; // 修改第 0 个字符为 'w' str[1] = 'x'; // 修改第 1 个字符为 'x' // 逐字符打印修改后的字符串内容 for (size_t i = 0; i < str.size(); ++i) { std::cout

微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号