Pregunta

Tengo un problema con el siguiente código:

for(i = 0;(i - 1)< n;i++)
{
char* b;
sprintf(b, "%d", i);
}

Se compila bien, pero cuando lo ejecuto me da la infame " 0XC0000005 Infracción de acceso " error. Intenté establecer b en NULL, " ;, " 0 " ;, 0 y un montón de otras cosas, pero luego obtengo el " 0XC0000005 Infracción de acceso " error o " Expresión: string! = NULL. Cualquier ayuda sería apreciada!

¿Fue útil?

Solución

sprintf escribe datos en un búfer existente, que se pasa como primer parámetro. Actualmente no está especificando un valor para b en absoluto, lo que significa (IIRC en C) que el valor podría ser cualquier cosa. Si lo establece en NULL o 0, sprintf intentará escribir en la memoria comenzando en la dirección 0.

Necesita crear un búfer del tamaño apropiado, para que sprintf pueda escribir en él. Por ejemplo:

for(i = 0;(i - 1)< n;i++)
{
    char b[10];
    sprintf(b, "%d", i);
}

Si esa es realmente cómo desea asignar el búfer depende de lo que su código real quiera hacer con los resultados, por supuesto.

Otros consejos

Umm ... Su puntero a b contiene basura ya que no lo ha inicializado ni ha asignado espacio. Springtf requiere que haya asignado un espacio de búfer de destino ...

Como mínimo, desea algo como char b [50] o cualquier tamaño máximo que espere, no solo un char *.

Un char * es un puntero no inicializado a una matriz char o char. Debe definir un carácter de búfer [10], de lo contrario, la dirección de destino de sprintf no está definida.

sprintf requiere pasarle un búfer de caracteres ya asignado lo suficientemente grande como para almacenar cualquier resultado posible. Esto está muy sujeto a desbordamientos de búfer; probablemente desee utilizar el snprintf más seguro. Una forma ineficiente pero segura de hacerlo:

int bufsize = snprintf(NULL, 0, formatstring, ...);
char *buffer = malloc(bufsize+1); # count doesn't include trailing nul
if (buffer == NULL) out_of_memory_error();
snprintf(buffer, bufsize+1, formatstring, ...);

Muchas gracias! Como necesitaba un char * reescribí el código para:

for(i = 0;(i - 1)< n;i++)
{
char* b;
char a[100];
b = a;
sprintf(b, "%d", i);
}

y funciona como un encanto. ¡Finalmente puedo seguir con mi vida! Una vez más muchas gracias!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top