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