为什么这个功能不起作用?

时间:2012-03-17 22:59:57

标签: c++ c

我是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);
}

有人可以告诉我为什么吗? 谢谢;):)。

1 个答案:

答案 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++ 动态分配的内存。