正确的声明形式

时间:2010-08-01 11:27:51

标签: c

c中这段代码的正确形式是什么?

char *x = malloc(100);

#include <stdlib.h>
#include <stdio.h>
int main(){
    char *x=malloc(100);
    free(x);
    //in c++
    // char *x=new char[100];






     return 0;
}

这里是错误

1>------ Build started: Project: memory_leaks, Configuration: Debug Win32 ------
1>Build started 8/1/2010 2:32:21 PM.
1>PrepareForBuild:
1>  Creating directory "c:\users\david\documents\visual studio 2010\Projects\memory_leaks\Debug\".
1>InitializeBuildStatus:
1>  Creating "Debug\memory_leaks.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>ClCompile:
1>  memory_leaks.cpp
1>c:\users\david\documents\visual studio 2010\projects\memory_leaks\memory_leaks\memory_leaks.cpp(5): error C2440: 'initializing' : cannot convert from 'void *' to 'char *'
1>          Conversion from 'void*' to pointer to non-'void' requires an explicit cast
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.64
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

2 个答案:

答案 0 :(得分:9)

您有有效的C代码,但您正在尝试使用C ++编译器进行编译。 (事实上​​,如果您将源重命名为memory_leaks.c,您的开发环境可能会自动调用C编译器;使用memory_leaks.cpp它会调用C ++编译器。)

C和C ++是不同的语言。 C ++看起来像C一样有额外的东西,因为它是从一种带有额外东西的C语言发展而来的。但它现在是它自己的语言。不要混淆它们。

特别是,如果在malloc之前添加一个强制转换,您可能会得到编译的C ++代码,但是您将无法获得良好的C ++代码。不要这样做:如果你是用C ++编程,请使用new;如果您使用C编程,请使用C编译器。

答案 1 :(得分:-3)

你必须像“<* p>”一样投射到“char *”

char * x = (char *)malloc(100*sizeof(char));

由于:

void *malloc(int);