使用C函数连接到大字符*

使用C函数连接到大字符*,c,string,memory,char,C,String,Memory,Char,我试图连接char*和const字符串,但系统挂起。下面是代码 unsigned long long size = 2*pow(10,18); char* string = malloc(size); strcat(string," "); 我不知道如何解决这个错误。在windows10中使用devc/c++ 编辑:谢谢你的评论和回答。我已经在代码中做了更改。但它仍然会带来同样的问题。 它不打印语句,仍然挂起 char* string = malloc(20*sizeof(char))

我试图连接char*和const字符串,但系统挂起。下面是代码

unsigned long long size = 2*pow(10,18);
char* string = malloc(size);    
strcat(string," ");
我不知道如何解决这个错误。在windows10中使用devc/c++

编辑:谢谢你的评论和回答。我已经在代码中做了更改。但它仍然会带来同样的问题。 它不打印语句,仍然挂起

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

strcat(string," ");

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

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

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

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

正如评论中提到的,即使分配成功,您的
strcat()
也会失败

在使用以下命令之前,请尝试初始化
字符串

*string = 0; 

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

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

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

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

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

正如评论中提到的,即使分配成功,您的
strcat()
也会失败

在使用以下命令之前,请尝试初始化
字符串

*string = 0; 

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

您正在尝试分配2000000TB。你肯定没有那么大的记忆力。malloc将失败并返回一个空指针,然后您将尝试写入该指针

您正在尝试分配2000000TB。你肯定没有那么大的记忆力。malloc将失败并返回一个空指针,然后您将尝试写入该指针

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

无符号长尺寸=2*pow(10,18)

char*string=malloc(大小)

您正在尝试malloc:20000000000000000000字节


这就是2eb(EB:exabyte)1eb=1000000gb

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

无符号长尺寸=2*pow(10,18)

char*string=malloc(大小)

您正在尝试malloc:20000000000000000000字节



这是2 EB(EB:exabyte)1 EB=1000000 GB

检查
malloc()的返回值
if(string==NULL)printf(“内存分配不成功”)然后
*字符串=0
或在strcat之前复制字符串。最可能的原因是您没有那么多内存,
malloc
返回
NULL
。这是一个巨大的内存请求量。我甚至没有那个容量的磁盘驱动器。@denis请记住不要编辑有问题的原始代码。这将使在过期之前发布的答案和评论过时。请检查
malloc()
的返回值
if(string==NULL)printf(“内存分配不成功”)然后
*字符串=0
或在strcat之前复制字符串。最可能的原因是您没有那么多内存,
malloc
返回
NULL
。这是一个巨大的内存请求量。我甚至没有那个容量的磁盘驱动器。@denis请记住不要编辑有问题的原始代码。这使得以前发布的答案和评论过时。我测试了这个。它不符合if条件。意味着分配内存。正如@BLUEPIXY所写,
strcat
即使有足够的内存也会失败。如果他实际上有1e18字节(~1e9TB),那么其中可能有空字节。strcat的
已损坏,但可能不会失败。我自己肯定想要19 TB的内存@denis,你应该重新检查你的测试。@denis如果(string==NULL)
,它必须是
,而不是
如果(string=NULL)
@ameyaCU和CherubimAnand:很抱歉错过了这一点。我应该扩展我的问题,而不是修改现有的问题。我对此进行了测试。它不符合if条件。意味着分配内存。正如@BLUEPIXY所写,
strcat
即使有足够的内存也会失败。如果他实际上有1e18字节(~1e9TB),那么其中可能有空字节。strcat的
已损坏,但可能不会失败。我自己肯定想要19 TB的内存@denis,你应该重新检查你的测试。@denis如果(string==NULL)
,它必须是
,而不是
如果(string=NULL)
@ameyaCU和CherubimAnand:很抱歉错过了这一点。我应该扩展我的问题,而不是修改现有的问题。