ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# C 编程:复习题 > 原文:<https://github.com/angrave/SystemProgramming/wiki/C-Programming%3A-Review-Questions> ## 警告 - 问题编号可能会有变化 ## 记忆和字符串 ## Q1.1 在下面的例子中,哪些变量可以保证打印零值? ```c int a; static int b; void func() { static int c; int d; printf("%d %d %d %d\n",a,b,c,d); } ``` ## 问题 1.2 In the example below, which variables are guaranteed to print the value of zero? ```c void func() { int* ptr1 = malloc( sizeof(int) ); int* ptr2 = realloc(NULL, sizeof(int) ); int* ptr3 = calloc( 1, sizeof(int) ); int* ptr4 = calloc( sizeof(int) , 1); printf("%d %d %d %d\n",*ptr1,*ptr2,*ptr3,*ptr4); } ``` ## 问 1.3 在以下尝试复制字符串时解释错误。 ```c char* copy(char*src) { char*result = malloc( strlen(src) ); strcpy(result, src); return result; } ``` ## 问题 1.4 为什么以下尝试复制字符串有时会起作用,有时会失败? ```c char* copy(char*src) { char*result = malloc( strlen(src) +1 ); strcat(result, src); return result; } ``` ## Q 1.4 解释以下代码中尝试复制字符串的两个错误。 ```c char* copy(char*src) { char result[sizeof(src)]; strcpy(result, src); return result; } ``` ## 问 1.5 以下哪项是合法的? ```c char a[] = "Hello"; strcpy(a, "World"); char b[] = "Hello"; strcpy(b, "World12345", b); char* c = "Hello"; strcpy(c, "World"); ``` ## 问题 1.6 完成函数指针 typedef 以声明一个指向函数的指针,该函数接受 void *参数并返回 void *。将您的类型命名为“pthread_callback” ```c typedef ______________________; ``` ## 问 1.7 除了函数参数之外还有哪些东西存储在线程的栈中? ## 问题 1.8 仅使用`strcpy` `strlen`和指针算法实现`char* strcat(char*dest, const char*src)`的版本 ```c char* mystrcat(char*dest, const char*src) { ? Use strcpy strlen here return dest; } ``` ## 问题 1.9 使用循环并且没有函数调用来实现 size_t strlen(const char *)的版本。 ```c size_t mystrlen(const char*s) { } ``` ## 问题 1.10 确定以下`strcpy`实现中的三个错误。 ```c char* strcpy(const char* dest, const char* src) { while(*src) { *dest++ = *src++; } return dest; } ``` ## 印花 ## 问 2.1 发现两个错误! ``` fprintf("You scored 100%"); ``` ## 格式化和打印到文件 ## 问 3.1 完成以下代码以打印到文件。将名称,逗号和分数打印到文件'result.txt' ```c char* name = .....; int score = ...... FILE *f = fopen("result.txt",_____); if(f) { _____ } fclose(f); ``` ## 打印到字符串 ## 问 4.1 如何将变量 a,mesg,val 和 ptr 的值打印到字符串?打印 a 为整数,mesg 为 C string,val 为 double val,ptr 为十六进制指针。您可以假设 mesg 指向短 C 字符串(&lt;50 个字符)。额外奖励:您如何使此代码更强大或能够应对? ```c char* toString(int a, char*mesg, double val, void* ptr) { char* result = malloc( strlen(mesg) + 50); _____ return result; } ``` ## 输入解析 ## 问 5.1 为什么要检查 sscanf 和 scanf 的返回值? ## 问 5.2 为什么“变得”危险? ## 问 5.3 编写一个使用`getline`的完整程序。确保您的程序没有内存泄漏。 ## 堆内存 你什么时候使用 calloc 而不是 malloc?何时 realloc 会有用? (Todo - 把这个问题移到另一页)程序员在下面的代码中犯了什么错误?是否可以修复它 i)使用堆内存? ii)使用全局(静态)内存? ```c static int id; char* next_ticket() { id ++; char result[20]; sprintf(result,"%d",id); return result; } ```