【问题标题】:copy char array to char* in C将 char 数组复制到 C 中的 char*
【发布时间】: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”。

【问题讨论】:

  • 如果istrlen(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


【解决方案1】:

而不是像这样打印:printf("%s", result);

您应该只打印已初始化并包含值的索引:

for(int k=0;k<i;k++){
  printf("%c", s[k]);
}

【讨论】:

  • 我一开始尝试了这个,它没有工作,但现在突然它工作了!谢谢:)
  • @Ran121 太棒了!
猜你喜欢
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
相关资源
最近更新 更多