malloc遇到的问题(strlen(char*)&x2B;1)
下面是一个小测试,以解决我在使用C编程时的困惑malloc遇到的问题(strlen(char*)&x2B;1),c,C,下面是一个小测试,以解决我在使用C编程时的困惑 int main() { char buff[100] = {}; char* pStr = NULL; printf("Input the string\n"); if (!fgets(buff, sizeof(buff), stdin)) { printf("ERROR INPUT\n"); return 1; } printf("%zd\n", strl
int main()
{
char buff[100] = {};
char* pStr = NULL;
printf("Input the string\n");
if (!fgets(buff, sizeof(buff), stdin))
{
printf("ERROR INPUT\n");
return 1;
}
printf("%zd\n", strlen(buff));
pStr = (char*)malloc(strlen(buff)+1);
strcpy_s(pStr, sizeof(buff), buff);
printf("%s\n", strlen(pStr));
return 0;
}
我尝试使用fgets
捕获输入字符串并将其存储在malloc
分配的内存中。但是,当我尝试使用malloc(strlen(char*)+1)
时,程序编译时没有bug,但运行失败。一旦我切换到malloc(sizeof(buff)),它就可以正常工作了。我很困惑。因此,搜索您的帮助。strcpy_s(pStr,sizeof(buff),buff)代码>不正确,应使用新目标缓冲区的大小,而不是源缓冲区的大小
把整个东西换成
size_t size = strlen(buff)+1;
pStr = malloc(size);
memcpy(pStr, buff, size);
作为一个小小的奖励,这个代码也更快。strcpy_s(pStr,sizeof(buff),buff)代码>不正确,应使用新目标缓冲区的大小,而不是源缓冲区的大小
把整个东西换成
size_t size = strlen(buff)+1;
pStr = malloc(size);
memcpy(pStr, buff, size);
作为一个小的奖励,这个代码也更快。
你使用C还是C++?对于这两种语言,您都有问题。这看起来像是删除了与您的问题无关的,但是看看对malloc
的调用,您分配了多少字节?然后看一看下一行的strcpy调用,您可以在那里复制多少字节?strcpy_s
调用中的长度是目标缓冲区的大小。PS:您不需要在malloc
上强制转换,您的意思肯定是printf(“%s\n”,pStr)代码>。我推荐printf(“\n”,pStr)代码>清楚地看到引导/拖尾空白。你使用C还是C++?对于这两种语言,您都有问题。这看起来像是删除了与您的问题无关的,但是看看对malloc
的调用,您分配了多少字节?然后看一看下一行的strcpy调用,您可以在那里复制多少字节?strcpy_s
调用中的长度是目标缓冲区的大小。PS:您不需要在malloc
上强制转换,您的意思肯定是printf(“%s\n”,pStr)代码>。我推荐printf(“\n”,pStr)代码>以清楚地看到前导/尾随空格。Lundin,感谢您的帮助。可以安全地说,当将字符串从缓冲区复制到memroy区域时,memcpy比strcpy_s好吗?@xiaoshi当您知道字符串的长度时,请使用memcpy,因为它最快。如果您不知道字符串的长度,可以使用strcpyu.Lundin,谢谢您的帮助。可以安全地说,当将字符串从缓冲区复制到memroy区域时,memcpy比strcpy_s好吗?@xiaoshi当您知道字符串的长度时,请使用memcpy,因为它最快。当您不知道字符串的长度时,可以使用strcpy_s。