c/c++语言开发共享将int存储在char * 中

int main() { int n = 56; char buf[10]; //want char* buf instead sprintf(buf, "%i", n); printf("%sn", buf); return 0; } 

这段代码有效,我的问题是如果我想要相同的行为,buf是一个char *?

    buf是在堆栈上静态分配的数组。 因为它是char *类型,你需要动态分配内存。 我想你想要的是这样的:

     int main() { int n = 56; char * buf = NULL; buf = malloc(10 * sizeof(char)); sprintf(buf, "%i", n); printf("%sn", buf); // don't forget to free the allocated memory free(buf); return 0; } 

    编辑:正如评论中的’Thomas Padron-McCarthy’所指出的那样,你不应该转换malloc() 。 你会在这里找到更多信息。 你也可以完全删除sizeof(char)因为它总是1

    写作时的主要区别

     char* buf; 

    它是未初始化的,没有分配内存,所以你必须自己照顾:

     char* buf = malloc(10 * sizeof(char)); // ... more code here free(buf); // don't forget this or you'll get a memory leak 

    这称为动态内存分配 (与静态分配相对),它允许您使用realloc或在malloc调用中使用变量来改变运行时分配的内存量等优点。 另请注意,如果内存量太大,内存分配可能会失败,在这种情况下返回的指针将为NULL

    从技术上讲,上面的sizeof(char)是不需要的,因为1个char大小总是1个字节,但大多数其他数据类型更大,乘法很重要 – malloc(100)分配100个字节, malloc(100 * sizeof(int))分配100个int所需的内存量,通常在32位系统上为400字节,但可以有所不同。

     int amount = calculate_my_memory_needs_function(); int* buf = malloc(amount * sizeof(int)); if (buf == NULL) { // oops! } // ... if (more_memory_needed_suddenly) { amount *= 2; // we just double it buf = realloc(buf, amount * sizeof(int)); if (!buf) { // Another way to check for NULL // oops again! } } // ... free(buf); 

    另一个有用的函数是calloc ,它接受两个参数(第一个:要分配的元素数,第二个:元素的大小,以字节为单位),并将内存初始化为0。

    我认为calloc(或malloc,如果你没有calloc)是你所追求的。

      以上就是c/c++开发分享将int存储在char * 中相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/522493.html

      (0)
      上一篇 2020年12月10日
      下一篇 2020年12月10日

      精彩推荐