我想知道这是错误的代码。原因pleasec
#include <stdio.h>
#include <string.h>
#include <malloc.h>
void func(char **c)
{
strcpy(c[0],"he");
strcpy(c[1],"h");
// memcpy(*c[2],"hell",sizeof("hell"));
// c[0]="hello";
//c[1]="hi";
}
int main()
{
char *arr[2];
arr[0]=malloc(sizeof(char[3]));
arr[1]=malloc(sizeof(char[2]));
func(arr);
printf("%sn",arr[0]);
printf("%sn", arr[1]);
return 0;
}
这行似乎分配了3 * sizeof(char)
arr[0]=malloc(sizeof(char[3]));
这行似乎分配了2 * sizeof(char)
arr[1]=malloc(sizeof(char[2]));
数组的指针指向可变大小的字符串?
是的。
这个代码是错误的吗?
func()
是脆性,因为它可能根据输入值表现出未定义行为。
没有
c[]
可以被索引的信息没有关于
strcpy(c[i], ....)
可以复制多少字节的信息。
func()
在main()
中是OK,因为它传递的值恰好不超过OP的功能限制。
func()
是一个错误的设计,因为它缺乏参数来指导它的局限性,并且缺少空指针错误检测。