如何在C中串联字符串和整数?


70

我需要在循环的每次迭代内形成一个字符串,其中包含循环索引i

我尝试使用strcatitoa没有运气的各种组合。


3
向我们展示您尝试过的东西,而不是想要的东西,通过代码注释,您会学到的东西远多于别人告诉您怎么做
CharlesB 2011年

完整说明您的问题...似乎您遇到了问题,但是您没有提到哪个问题?字符串没有形成还是什么?
SM Kamran

6
@SMKamran:这不是他的代码。它是Java风格的伪代码。他的问题是,他不知道如何做到这一点在C
在轨道亮度赛

Answers:


113

字符串在C语言中很辛苦。

12是足够的字节来存储文本"pre_",文本"_suff",最多两个字符(串"99"),并且继续C字符串缓冲区的端NULL结束。

将告诉您如何使用snprintf,但是我建议您读一本不错的C书!


我想给+1,但答案的第一行与其余的矛盾。您已经证明,实际上解决方案很简单;您只需要排除以下观点,即脚本语言中低效的字符串连接习惯用法会转换为C。snprintf这几乎是所有C字符串汇编问题的答案。
R .. GitHub停止帮助ICE,

2
@R。我所展示的是该解决方案并不像OP希望的那么容易。“仅仅”抛出一个概念对某些人来说比对其他人来说更难。
Lightness Races in Orbit

另外,您应该使用snprintf,而不是sprintf。一读我就错过了。您编写的代码非常危险,因为如果在不更改缓冲区大小的情况下更改了100,则会破坏堆栈。
R .. GitHub停止帮助ICE,

@R。更改为100时,将更改缓冲区大小。使用snprintf不会改变这一点;这仅意味着您还有一个地方可以写和更新缓冲区大小。
Lightness Races in Orbit

3
区别在于,当有人忘记更改缓冲区大小,而版本snprintf只是截断字符串时,您的代码将崩溃(或更糟的是,这会导致特权折衷)。无论如何,我都会设置缓冲区大小12+3*sizeof(int),然后您不必担心...但是使用它仍然会更好snprintf
R .. GitHub停止帮助ICE,

7

使用format字符串sprintf(或者snprintf像我一样无法计数)"pre_%d_suff"

对于它的价值,使用itoa / strcat可以做到:


1
“什么itoa”?
Antti Haapala '18

2
根据C ++参考,关于itoa,声明为“此函数未在ANSI-C中定义,也不是C ++的一部分,但某些编译器支持。”
Gaurang Tandon

1

查看snprintf,或者,如果GNU扩展可以,请查看asprintf(它将为您分配内存)。


3
“为您”分配内存几乎对您没有帮助。所需的大小上有一个较小的常量界限,因此,自己提供缓冲区会更有意义。随着asprintf你必须添加一个测试分配失败和代码稍后释放缓冲区。
R .. GitHub停止帮助ICE
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.