【发布时间】:2019-12-24 15:19:38
【问题描述】:
我有一个 char 数组,我需要在函数中定义并返回一个 char 指针,所以我定义了 MAX,这是我的 char 数组可以根据我的分配可以达到的最大大小,并且在我附加它的一部分之后我想要将其复制到 char 指针,以便我可以返回它。 已满的数组部分的大小是 i 并且我用这个大小做了 malloc ,然后我做了 memcpy 只复制我想要的部分(strcpy 也复制了 ampty 字段),但它仍然在我的结果中更多奇怪的东西,我该如何摆脱它?
代码:
char* result = (char*)malloc(i*sizeof(char));
if (result == NULL)
free(result);
memcpy(result, temp, i);
printf("%s", result);
return result;
printf 的结果:
ccbcc²²²²U┤
而结果应该只是“ccbcc”。
【问题讨论】:
-
如果
i是strlen(temp),那么你分配的太少了(用于终止的空值),而你复制的太少了(终止的空值)。 -
temp 的大小是 3000,但只有 i-1 文件有值。 strlen 评论返回我 3000 我不想要那个..
-
如果
temp是一个字符串,请使用strcpy(result, temp)而不是memcpy并确保i > strlen(temp)。另外,不要在 C 程序中强制转换malloc返回的指针。 -
if (result == NULL) free(result);仅供参考:free(NULL)is a no-op,也许更好:if (result == NULL) { fprintf(stderr, "malloc error\n"); exit(EXIT_FAILURE); } -
char* result = (char*)malloc(i*sizeof(char));分配 1 字节的内存。您可以在那里存储的唯一字符串是 empty-string (单个'\0'char -- 不是很有用)
标签: c arrays pointers char memcpy