使用C函数连接到大字符*
我试图连接char*和const字符串,但系统挂起。下面是代码使用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))
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:很抱歉错过了这一点。我应该扩展我的问题,而不是修改现有的问题。