2011-03-02 16 views
49

Esto está resultando ser mucho más difícil de lo que debería (no tengo fondo ac):c cuerda y int concatenación

necesito para formar una cadena, dentro de cada iteración del bucle, que contiene el índice del bucle 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; 
} 

he intentado utilizar varias combinaciones de strcat y itoa sin suerte.

+3

muéstranos lo que has intentado en lugar de lo que quieres, aprenderás mucho más con comentarios sobre tu código que las personas que te dicen qué hacer – CharlesB

+0

Indica tu problema en su totalidad ... parece que estás teniendo un problema pero, ¿qué problema no mencionaste? la cuerda no se está formando o qué? –

+5

@SMKamran: Este no es su código. Es un pseudocódigo de estilo Java. Su problema es que no sabe cómo hacerlo en C. –

Respuesta

75

Las cadenas son el trabajo duro en 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 
    } 
} 

El 12 es suficiente bytes para almacenar el texto, el texto "pre_""_suff", una cadena de hasta dos caracteres ("99") y el terminador NULL que pasa el final de los búfers de cadenas C.

This le dirá cómo usar sprintf, pero sugiero un buen libro en C!

+0

Quiero dar +1, pero la primera línea de tu respuesta contradice el resto. Usted ha demostrado que, de hecho, la solución es fácil; solo tiene que descartar la idea de que las expresiones de concatenación de cadenas ineficientes de los lenguajes de script se traducen en C. 'snprintf' es la respuesta a casi cualquier pregunta de ensamblaje de cadenas C. –

+0

@R. Lo que he demostrado es que la solución no es tan fácil como esperaba el OP. "Solo" arrojar esa noción es más difícil para algunos que para otros. –

+0

También debería usar 'snprintf', no' sprintf'. Me perdí eso en la primera lectura. Su código es muy peligroso tal como está escrito, ya que si se cambia el 100 sin actualizar el tamaño del búfer, destruirá la pila. –

5

Use sprintf (o snprintf si me gusta no se puede contar) con formato de cadena "pre_%d_suff".

Por lo que vale la pena, con itoa/strcat que podría hacer:

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

mirada a snprintf o, si extensiones de GNU están bien, asprintf (que asignar memoria para usted).

+3

La asignación de la memoria "para ti" no te está haciendo ningún favor. Hay una pequeña constante en el tamaño necesario, por lo que tiene mucho más sentido proporcionar el buffer usted mismo. Con 'asprintf' tendrías que agregar una prueba para falla de asignación y código para liberar el búfer más tarde. –

-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; 
} 

// Saludos muchachos

+11

Este es el código C++, pero la pregunta es sobre C. – jwodder

-4

tal vez esto funciona:

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

Haga la prueba!