再来看一个指针问题,同样的来自一个本科生的代码。这段代码想要实现将一个全是小写字母的字符串转换成对应的大写字母字符串:
char *covert_to_upper_case(char *string) { char p[100]; int i = 0; for(; i < strlen(string); i++ ) { p[i] = string[i] - ('a' - 'A'); } p[i] = '\0'; return p; }
然而这段代码没有能实现期望的功能。原因如下:
要想正确实现对应的功能,应该将目标指针作为额外参数传递给该函数,并由上层调用者提供内存空间的创建。当然也可以使用malloc()将内存分配在堆中,但是需要注意使用对应的free()释放空间,否则会有内存泄露的问题。