2011-03-02 52 views
49

这谈到了将方式难度比它应该(我没有AC背景):C字符串和INT级联

我需要形成串,该循环的每次迭代,其中包含了循环索引内i

for(i=0;i<100;i++) { 
    // Shown in java-like code which I need working in c! 

    String prefix = "pre_"; 
    String suffix = "_suff"; 

    // This is the string I need formed: 
    // e.g. "pre_3_suff" 
    String result = prefix + i + suffix; 
} 

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

+3

告诉我们您尝试了什么,而不是你想要什么,你会在你的代码比人的意见更了解告诉你该怎么做 – CharlesB 2011-03-02 19:09:27

+0

国家的问题,在全......看来你是有问题但是你没有提到哪个问题?字符串没有形成或什么? – 2011-03-02 19:11:10

+5

@SMKamran:这不是他的代码。这是Java风格的伪代码。他的问题是,他不知道如何做到这一点在C – 2011-03-02 19:12:14

回答

75

字符串是辛勤工作在C

int main() 
{ 
    int i; 
    char buf[12]; 

    for (i = 0; i < 100; i++) { 
     sprintf(buf, "pre_%d_suff", i); // puts string into buffer 
     printf("%s\n", buf); // outputs so you can see it 
    } 
} 

12是足够的字节来存储文本"pre_",文字"_suff",最多两个字符("99")和NULL结束的字符串的推移C字符串缓冲区的结尾。

This将告诉你如何使用sprintf,但我建议一个好的C书!

+0

我想给+1,但你的答案的第一行与其余部分相矛盾。你已经证明,实际上解决方案很简单;你只需要抛出这样一个概念:从脚本语言中将低效的字符串连接成语转换为C语言。“snprintf”是几乎任何C字符串汇编问题的答案。 – 2011-03-02 22:06:03

+0

@R。我所看到的是,解决方案并不像OP期望的那么容易。 “只是”抛出这个概念对于某些人而言比对其他人更难。 – 2011-03-02 22:10:40

+0

你也应该使用'snprintf',而不是'sprintf'。第一次阅读时我错过了。你的代码是非常危险的,因为如果在不更新缓冲区大小的情况下更改100,那么你将会破坏堆栈。 – 2011-03-02 22:11:11

5

使用sprintf(或snprintf如果像我一样无法计数)与格式字符串"pre_%d_suff"

对于它的价值,用itoa/strcat的你可以这样做:

char dst[12] = "pre_"; 
itoa(i, dst+4, 10); 
strcat(dst, "_suff"); 
0

snprintf,或者,如果GNU扩展都OK,asprintf(这将分配内存给你)。

+3

分配内存“为您服务”也不是帮你的忙。在需要的大小上有一个小的常量,所以自己提供缓冲区更有意义。使用'asprintf'你必须添加一个分配失败测试和代码以便稍后释放缓冲区。 – 2011-03-02 22:08:32

-11
#include < string> 
#include < sstream> 
#include < iostream> 
#include < fstream> 
int main(){ 
ofstream fileHandle; 
stringstream fileName; 
myInt = 100; 
fileName << "filename_out_"; 
fileName << myInt << ".log"; 
fileHandle.open(fileName.str().c_str()); 
fileHandle << "Writing this to a file.\n"; 
fileHandle.close(); 
return 0; 
} 

//欢呼家伙

+11

这是C++代码,但问题是关于C. – jwodder 2013-05-19 23:50:33

-4

也许这个作品:

int num = 1; 
char str1[] = "something"; 
char str2[] = num; 
str1 = str1 str2; 

只是试试吧!