原文:https://github.com/angrave/SystemProgramming/wiki/C-Programming%3A-Review-Questions
在下面的例子中,哪些变量可以保证打印零值?
int a;
static int b;
void func() {
static int c;
int d;
printf("%d %d %d %d\n",a,b,c,d);
}
In the example below, which variables are guaranteed to print the value of zero?
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);
}
在以下尝试复制字符串时解释错误。
char* copy(char*src) {
char*result = malloc( strlen(src) );
strcpy(result, src);
return result;
}
为什么以下尝试复制字符串有时会起作用,有时会失败?
char* copy(char*src) {
char*result = malloc( strlen(src) +1 );
strcat(result, src);
return result;
}
解释以下代码中尝试复制字符串的两个错误。
char* copy(char*src) {
char result[sizeof(src)];
strcpy(result, src);
return result;
}
以下哪项是合法的?
char a[] = "Hello"; strcpy(a, "World");
char b[] = "Hello"; strcpy(b, "World12345", b);
char* c = "Hello"; strcpy(c, "World");
完成函数指针 typedef 以声明一个指向函数的指针,该函数接受 void *参数并返回 void *。将您的类型命名为“pthread_callback”
typedef ______________________;
除了函数参数之外还有哪些东西存储在线程的栈中?
仅使用strcpy
strlen
和指针算法实现char* strcat(char*dest, const char*src)
的版本
char* mystrcat(char*dest, const char*src) {
? Use strcpy strlen here
return dest;
}
使用循环并且没有函数调用来实现 size_t strlen(const char *)的版本。
size_t mystrlen(const char*s) {
}
确定以下strcpy
实现中的三个错误。
char* strcpy(const char* dest, const char* src) {
while(*src) { *dest++ = *src++; }
return dest;
}
发现两个错误!
fprintf("You scored 100%");
完成以下代码以打印到文件。将名称,逗号和分数打印到文件'result.txt'
char* name = .....;
int score = ......
FILE *f = fopen("result.txt",_____);
if(f) {
_____
}
fclose(f);
如何将变量 a,mesg,val 和 ptr 的值打印到字符串?打印 a 为整数,mesg 为 C string,val 为 double val,ptr 为十六进制指针。您可以假设 mesg 指向短 C 字符串(<50 个字符)。额外奖励:您如何使此代码更强大或能够应对?
char* toString(int a, char*mesg, double val, void* ptr) {
char* result = malloc( strlen(mesg) + 50);
_____
return result;
}
为什么要检查 sscanf 和 scanf 的返回值?
为什么“变得”危险?
编写一个使用getline
的完整程序。确保您的程序没有内存泄漏。
你什么时候使用 calloc 而不是 malloc?何时 realloc 会有用?
(Todo - 把这个问题移到另一页)程序员在下面的代码中犯了什么错误?是否可以修复它 i)使用堆内存? ii)使用全局(静态)内存?
static int id;
char* next_ticket() {
id ++;
char result[20];
sprintf(result,"%d",id);
return result;
}