下面是对使用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", 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)
时,程序编译时没有错误但是运行失败。切换到malloc(sizeof(buff))
后,一切正常。我很困惑。从而寻求你的帮助。
答案 0 :(得分:5)
strcpy_s(pStr, sizeof(buff), buff);
不正确,你应该使用新目标缓冲区的大小,而不是源缓冲区的大小
只需用
替换整个事物size_t size = strlen(buff)+1;
pStr = malloc(size);
memcpy(pStr, buff, size);
作为一点奖励,这段代码也更快。