【问题标题】:New char command in c for dynamic allacation [closed]c中用于动态分配的新char命令[关闭]
【发布时间】:2013-12-25 22:18:51
【问题描述】:

当我用 c++ 编写这段代码时,它可以工作,但我不知道如何将这段代码转换为 c 格式。我已经为 c 搜索了新的字符代码,但没有找到任何有用的东西。

这是我的错误:表达式必须具有类类型。但它已经是类类型?

    char satir [10000];    
    char *line;
    int length = 0;
    new char [];
line = new char[satir.length() + 1];
strcpy(line, satir.data()); 
line[satir.length()] = '\0';

【问题讨论】:

  • c 中没有 new 运算符。要动态分配内存,您可以使用malloc() 函数系列。
  • 再次证明c和c++是不同的语言。你应该搜索过dynamic memory allocation in c
  • 即使satir 的类型是std::string,将data() 返回的指针值传递给strcpy 也可能会崩溃。 data() 不需要返回指向空终止字符串的指针,因为您应该调用 c_str
  • @Captain Obvlious,你错了。 c_str() 和 data() 返回指向以零结尾的字符数组的指针。 c_str() 和 data() 没有任何区别
  • @VladfromMoscow 这仅适用于 C++11。我应该更具体一点,它只适用于以前的版本。

标签: c++ c arrays string


【解决方案1】:

new 运算符在 C++ 中而不是在 C 中。在 C 中使用 malloc 动态分配内存。

line = malloc(sizeof(satir));

【讨论】:

    【解决方案2】:

    即使在 C++ 中,您的代码示例也是无效的。我用以下方式重写了它

    std::string satir = "Some Data";    
    
    char *line = new char[satir.length() + 1];
    
    std::strcpy( line, satir.data() );
    

    在 C 中它可能看起来像

    char satir[] = "Some Data";
    
    char *line = ( char * )malloc( strlen( satir ) + 1 );
    
    strcpy( line, satir );
    

    【讨论】:

    • 如果需要保持分配数组的大小,可以添加语句 size_t length = strlen( satir ) + 1;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2013-06-23
    • 1970-01-01
    • 2015-09-25
    • 2015-11-17
    • 2016-10-04
    • 1970-01-01
    相关资源
    最近更新 更多