我是C的新手,不知道为什么第一个功能有效但不是第二个功能。
第一
int main(int argc, char** argv) {
char charTest[80] = "this is a test";
char *test = &charTest;
strcpy(test, "one");
printf("%s", test);
return (EXIT_SUCCESS);
}
第二
int main(int argc, char** argv) {
char *test;
test = malloc(80);
strcpy(test, "one");
printf("%s", test);
return (EXIT_SUCCESS);
}
有人可以告诉我为什么吗? 谢谢;):)。
答案 0 :(得分:1)
第一个示例不应该编译,因为您尝试使用类型为&charTest
的{{1}}初始化char (*)[80]
。你可能意味着:
char*
或者:
char *test = &charTest[0];
在第二种情况下,当您使用数组的名称作为 rvalue-expression 时,将衰减为指向第一个元素的指针。也就是说,编译器会隐式将其转换为更明确的版本:char *test = charTest;
。
第二个例子只在C中编译,如果你在C中工作,你应该问C问题而不用C ++标记它们。在C ++中,这是一个错误,因为您需要显式转换才能将&charTest[0]
(malloc
)的结果转换为void*
:
char*
在第二个程序中,你正在泄漏内存(使用C或C ++)。您应该char * test = static_cast<char*>( malloc(80) ); // awkward C++
动态分配的内存。