argv中字符串的malloc错误

argv中字符串的malloc错误,c,command-line-arguments,argv,strlen,argc,C,Command Line Arguments,Argv,Strlen,Argc,我使用从arg接收的字符串返回另一个字符串,其中的字符被洗牌 int size = strlen(argv[4]); char* res = malloc(size+1); 然后res被argv[4]的字符填充,但是当我在控制台中键入'test'时,它返回'test'(当我不洗牌字母而只是逐字符复制字符串时) 为什么呢 如果我改为使用size+100,它会起作用,但我不明白为什么。这是因为您没有考虑字符的大小。这应该可以做到: char* res = (char*)malloc((size+1

我使用从arg接收的字符串返回另一个字符串,其中的字符被洗牌

int size = strlen(argv[4]);
char* res = malloc(size+1);
然后res被argv[4]的字符填充,但是当我在控制台中键入'test'时,它返回'test'(当我不洗牌字母而只是逐字符复制字符串时)

为什么呢


如果我改为使用size+100,它会起作用,但我不明白为什么。

这是因为您没有考虑字符的大小。这应该可以做到:

char* res = (char*)malloc((size+1)*sizeof(char))

你是如何复制字符串的?您是否包括
\0
?事实上,我忘了包括\0,现在已更正,但这不是问题所在。谢谢@Sheeft检查评论并编辑您接受的答案-这是错误的,但可能掩盖了您的实际问题。@NigelHarper与+100最初掩盖问题的方式完全相同。_当我在控制台中键入“test”时您能显示提供给程序的所有参数吗?您使用第4个=argv[4]进行游戏。argv[1]、argv[2]、argv[3]可以吗?哦,是的,谢谢,我用了sizeof(char)而不是sizeof(char*)…我确实做到了!为什么要用
sizeof(char*)
乘以?这绝对不是正确的答案。因为sizeof(char)总是1,所以你编辑的答案与OP的答案完全相同,所以它不是一个答案。哦,是的,但现在我不明白为什么它不能按原来的方式工作……我不明白怎么做,但现在问题似乎得到了纠正(我回到了原来的方式)。真奇怪!谢谢你的回答。