当像这样转换 int 时:
char a[256];
sprintf(a, "%d", 132);
确定多大的最佳方法是什么a应该?我认为手动设置它是可以的(因为我已经看到它到处使用),但它应该有多大? 32 位系统上可能的最大 int 值是多少,是否有一些棘手的方法可以动态确定该值?
这里有些人认为这种方法太过分了,对于将整数转换为字符串,我可能更倾向于同意。但是,当无法找到字符串大小的合理界限时,我看到了这种方法的使用,并且自己也使用过。
int size = snprintf(NULL, 0, "%d", 132);
char * a = malloc(size + 1);
sprintf(a, "%d", 132);
我将分解这里发生的事情。
- 在第一行,我们想要确定需要多少个字符。前 2 个参数
snprintf
告诉它我想将结果的 0 个字符写入NULL
。当我们这样做时,snprintf
实际上不会在任何地方写入任何字符,它只会返回已写入的字符数。这就是我们想要的。
- 在第二行,我们动态分配内存给
char
指针。确保所需大小加 1(对于尾随\0
终止符)。
- 现在已经有足够的内存分配给
char
指针,我们可以安全地使用sprintf
将整数写入char
指针。
当然,如果你愿意的话,你可以让它更简洁。
char * a = malloc(snprintf(NULL, 0, "%d", 132) + 1);
sprintf(a, "%d", 132);
除非这是一个“快速而肮脏”的程序,否则您总是要确保释放您调用的内存malloc
。这就是 C 的动态方法变得复杂的地方。但是,恕我直言,如果您不想分配巨大的内存,char
当大多数时候你只会使用其中的一小部分时,我不认为这是一个糟糕的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)