企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# C 编程,复习题 > 原文:[Processes, Part 1: Introduction](https://github.com/angrave/SystemProgramming/wiki/Processes%2C-Part-1%3A-Introduction) > 校验:[_stund](https://github.com/hqiwen) > 自豪地采用[谷歌翻译](https://translate.google.cn/) ## 话题 * C 字符串表示 * C 字符串作为指针 * char p [] vs char * p * 简单的 C 字符串函数(strcmp,strcat,strcpy) * sizeof char * sizeof x vs x * * 堆内存寿命 * 调用堆分配 * 取消引用指针 * 操作符的地址 * 指针算术 * 字符串重复 * 字符串截断 * 双重释放错误 * 字符串文字 * 格式化打印 * 内存超出界限错误 * 静态内存 * 文件io POSIX v C 库 * C io fprintf 和 printf * POSIX 文件 io(读|写|打开) * stdout的缓冲 ## 问题/练习 * 以下是什么打印出来的 ```c int main(){ fprintf(stderr, "Hello "); fprintf(stdout, "It's a small "); fprintf(stderr, "World\n"); fprintf(stdout, "place\n"); return 0; } ``` * 以下两个声明之间有什么区别?其中一个`sizeof`会返回什么? ```c char str1[] = "bhuvan"; char *str2 = "another one"; ``` * c 中的字符串是什么? * 编码一个简单的`my_strcmp`。 `my_strcat`,`my_strcpy`或`my_strdup`怎么样?额外奖励:编写的函数仅需遍历一遍字符串。 * 以下通常应该返回什么? ```c int *ptr; sizeof(ptr); sizeof(*ptr); ``` * 什么是`malloc`?它与`calloc`有何不同?一旦内存被`malloc`编辑,我该如何使用`realloc`? * 什么是`&`运算符? `*`怎么样? * 指针算术。假设以下地址。有以下几种变化? ```c char** ptr = malloc(10); //0x100 ptr[0] = malloc(20); //0x200 ptr[1] = malloc(20); //0x300 ``` ``` * `ptr + 2` * `ptr + 4` * `ptr[0] + 4` * `ptr[1] + 2000` * `*((int)(ptr + 1)) + 3` ``` * 我们如何防止双重释放错误? * 什么是打印字符串,`int`或`char`的 printf 说明符? * 以下代码是否有效?如果是这样,为什么? `output`在哪里? ```c char *foo(int var){ static char output[20]; snprintf(output, 20, "%d", var); return output; } ``` * 编写一个函数,该函数接受一个字符串并打开该文件,第一次打印出文件的40个字节,但其他每次打印都会反转该字符串(请尝试使用POSIX API) * POSIX filedescriptor 模型和 C `FILE*`之间有什么区别(即使用了哪些函数调用,哪些是缓冲的)? POSIX 是否在内部使用 C `FILE*`,反之亦然?