1.memccpy函数
memccpy是一个用于内存复制的函数,它的原型通常在<cstring>,memccpy函数的作用是从源内存区域复制字节到目标内存区域,直到遇到特定的字符或者复制了指定数量的字节为止。
返回值:
如果在复制过程中找到了指定的字符,memccpy函数将返回一个指向目标内存区域中紧跟在复制的字符后的位置的指针。如果没有找到指定的字符,并且复制了num个字节,函数将返回一个空指针。
2.memcpy函数实现:
memcpy函数的主要功能是将一段连续的内存区域从源地址复制到目标地址。
void* memory_copy(void* dest, const void* src, size_t num) {
char* d = static_cast<char*>(dest);
const char* source = static_cast<const char*>(src);
for (size_t i = 0; i < num; i++) {
d[i] = source[i];
}
return dest;
}
int main() {
char source[] = "hello world";//存在栈区
char dest[20];
memory_copy(dest,source,sizeof(source)+1);
cout << "destination:" << dest << endl;
}
3.listen(m_socklisten, 128)
中的第二个参数表示待处理连接的最大排队长度。具体来说,这个值指定在连接请求被接受之前,操作系统可以在队列中保存的最大连接数。
二、TCL线下笔试
1.
Turbo 一般指的是 “Turbo C”,它是一个集成开发环境(IDE),用于编写和编译 C 语言程序。
在 Turbo C 中,int 类型通常占 2 个字节,字符类型占 1 个字节。 对于结构体worker: int no占 2 个字节; char name[20]占 20 个字节; char sex占 1 个字节; 联合体会占用其最大成员的空间,这里最大成员是int类型,占 2 个字节。 所以总的空间为 2 + 20 + 1 + 2 = 25 字节。系统为变量 w 分配 25 字节的空间。
如果在普通的vs编译器中是32字节
2.验证回文串
给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。 本题中,将空字符串定义为有效的 回文串 。
C语言实现如下: 需要判断字符串的大小和特殊字符
isalnum是一个函数,用于判断一个字符是否为字母或数字。如果不是,则忽略掉
bool isPalindrome(char * str){
int len = strlen(str);
int slow = 0;
int fast = len - 1;
while (slow < fast) {
while (slow < fast && !isalnum(str[slow])) slow++;
while (slow < fast && !isalnum(str[fast])) fast--;
if (tolower(str[slow]) == tolower(str[fast])) {
slow++;
fast--;
}
else {
return 0;
}
}
return 1;
}
328.奇偶链表
给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。 请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。 你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。
分离合并,分离偶数索引加入到奇数链表之后。
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
if(head==nullptr){
return nullptr;
}
ListNode* evenHead=head->next;
ListNode* odd=head;
ListNode* even=evenHead;
while(even!=nullptr&&even->next!=nullptr){
odd->next=odd->next->next;
odd=odd->next;
even->next=even->next->next;
even=even->next;
}
odd->next=evenHead;
return head;
}
};