【问题标题】:concatenating using C function to large char*使用 C 函数将大字符连接到大字符 *
【发布时间】:2016-11-07 17:32:37
【问题描述】:

我正在尝试连接 char* 和 const 字符串,但系统挂起。以下是代码

unsigned long long size = 2*pow(10,18);
char* string = malloc(size);    
strcat(string," ");

我不确定如何解决该错误。在 Windows 10 中使用 Dev c/c++。

编辑:感谢您的所有 cmets 和回答。我已经对我的代码进行了更改。但它仍然给出了同样的问题。 它不打印语句并且仍然挂起。

char* string = malloc(20*sizeof(char));
if(string=NULL){
    printf("unsuccessful memory allocation");
}

strcat(string," ");

【问题讨论】:

  • 检查malloc() ... if(string==NULL)printf("unsuccessful memory allocation");的返回值
  • 然后*string = 0;或复制strcat之前的字符串。
  • 最可能的原因是你没有那么多内存,malloc 返回NULL
  • 这是一个非常大的内存请求。我什至没有那种容量的磁盘驱动器。
  • @denis 请记住不要编辑有问题的原始代码。这会导致在过时之前发布的答案和 cmets。

标签: c string memory char


【解决方案1】:

最可能的原因可能是malloc() 可能无法分配您请求的内存量。始终以这种方式检查内存是否已成功分配:

char *p; //some pointer
p=malloc(size*sizeof(char));

if(p==NULL)
{
    printf("unsuccessfull memory allocation");
    exit(1);
}

注意:

  • malloc()成功分配时返回新分配的内存地址。
  • 如果内存分配不成功则返回NULL

正如@BLUEPIXY在cmets中提到的那样,即使分配成功,您的strcat()也会失败,

在使用之前尝试初始化string

*string = 0; 

或在strcat() 函数之前复制string

【讨论】:

  • 我对此进行了测试。它不会进入 if 条件。意味着它分配内存。
  • 正如@BLUEPIXY 所写,即使内存足够,strcat 也会失败。
  • 如果他实际上有 1e18 个字节(~1e9TB),那么某处可能有一个 NULL。 strcat 已损坏,但可能不会失败。我自己肯定想要 1e9TB 的 RAM。 @denis,你应该重新检查你的测试。
  • @denis 它必须是if(string == NULL),而不是if(string=NULL)
  • @ameyaCU 和 CherubimAnand:抱歉错过了。我应该扩展我的问题而不是修改现有的问题。
【解决方案2】:

您正在尝试分配 20000000TB。你肯定没有那么多记忆。 malloc 将失败并返回一个您正在尝试写入的 NULL 指针!

【讨论】:

    【解决方案3】:

    我认为失败的原因是您尝试 malloc 的内存大小。

    unsigned long long size = 2*pow(10,18);

    char* string = malloc(size);

    你正在尝试 malloc:2000000000000000000 字节

    那是 2 EB(EB:艾字节)1 EB = 1000000 GB

    【讨论】:

      猜你喜欢
      • 2015-06-18
      • 2016-03-05
      • 1970-01-01
      • 2017-02-14
      • 2020-03-01
      • 2016-03-02
      • 2021-09-28
      • 2021-10-19
      • 1970-01-01
      相关资源
      最近更新 更多