gpt4 book ai didi

c++ - 动态内存分配给 char 数组

转载 作者:太空宇宙 更新时间:2023-11-04 05:41:19 26 4
gpt4 key购买 nike

我已经手动给出数组大小如下:

int main(int argc, char *argv[] )
{
char buffer[1024];
strcpy(buffer,argv[1]);
...
}

但如果参数中传递的数据超过此大小,可能会产生问题。

这是动态分配内存的正确方法吗?

int main(int argc, char *argv[] )
{
int length;
char *buffer;
length = sizeof(argv[1]); //or strlen(argv[1])?
buffer = (char*)malloc(length*sizeof(char *));
...
}

最佳答案

sizeof 告诉您 char* 的大小。你想要 strlen 而不是

if (argc < 2) {
printf("Error - insufficient arguments\n");
return 1;
}
length=strlen(argv[1]);
buffer = (char*)malloc(length+1); // cast required for C++ only

我在这里建议了一些其他更改

  • 您需要为空终止符添加一个额外的字节到buffer
  • 您应该检查用户是否传入了 argv[1]
  • sizeof(char *) 在计算字符串所需的存储空间时不正确。 C 字符串是 char 的数组,因此您需要 sizeof(char),它保证为 1,因此您不需要乘以它

或者,如果您在 Posix 兼容系统上运行,您可以简化事情并使用 strdup相反:

buffer = strdup(argv[1]);

最后,确保在用完后释放这 block 内存

free(buffer);

关于c++ - 动态内存分配给 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18536125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com