simple c error hace que el puntero de entero sin un elenco

He realizado el aprendizaje de c con la ayuda de la k & r libro. Muy emocionante, pero me he topado con problemas desde el principio y no estoy seguro de cómo solucionar el problema.

Estoy probando algunos realmente simple código de ejemplo y me da el siguiente error. No entiendo por qué, porque el código está sacada del libro.

main.c:11: warning: passing argument 2 of sprintf makes pointer from integer without a cast


#include <stdio.h>

/* copy input to output; 1st version */
main() {
    int i;
    int power(int base, int n);

    for (i = 0; i < 10; i++) {
        sprintf("%d %d %d\n", i ,power(2, i), power(-3, i));
        return 0;
    }



}

int power(int base, int n) {
    int i;
    int p;

    p = 1;

    for (i = 1; i <= n; ++i)
        p = p * base;
    return p;

}

Te agradecería un empujón para que me va en mi camino de nuevo.

  • ¿Por qué hay un return en el interior de su for bucle?
  • El código es exacta «como es», del libro. Es el regreso de un problema?
  • Voy a tener que llevar a cabo mi copia de K&R, debido a que es algo de FUNKY código.
  • eso definitivamente no es «como es», del libro. Se han añadido un conjunto de llaves alrededor de la printf y return declaraciones. Sí, usted también ha escrito mal printf en sprintf.
  • es el ejemplo 1.7
  • ahhhh…… o.k estoy embarressed
  • Todos cometemos errores, a veces en público. 🙂

InformationsquelleAutor dubbeat | 2010-11-22

6 Kommentare

  1. 5

    sprintf es para la creación de una cadena basada en algún formato. Parece que quieres de salida, por lo que usted desea utilizar printf.

    También, return 0; no debe ser incluido en el for bucle. Esto podría resultar en la terminación del programa después de una iteración.

  2. 3

    De man sprintf:
    int sprintf(char *str, const char *formato, …);

    El primer argumento a sprintf es la cadena que tiene asignados.

    Si desea imprimir en la salida estándar (normalmente el terminal en el que se ejecuta el programa), el uso de printf lugar.

  3. 1

    para todo el mundo que no sabe abouwt el bucle de retorno
    hay una diferencia entre:

    for (i = 1; i <= n; ++i)
        p = p * base;    //inside
    return p;            //outside because no brackets {}

    y:

    for (i = 1; i <= n; ++i){
        p = p * base;    //inside
        return p;}       //inside because brackets {}

    si no hace uso de corchetes en un bucle o si la instrucción, sólo el directo de la siguiente línea será ejecutado. este retorno es fuera del bucle

  4. 0

    sprintf() espera una cadena como primero y segundo de los argumentos.

    El primero designa la cadena en la que desea almacenar el resultado y el segundo es la cadena de formato.

    Puede que desee utilizar printf() en lugar de sprintf().

  5. 0

    El primer argumento de sprintf() es el buffer que se supone que deben imprimir. El segundo es la cadena de formato.

    (También considerar el uso de snprintf(); es mucho más fácil escribir código seguro de que no desbordar el búfer).

  6. 0

    esto es sólo un compilador advertencia, pero el proceso ha sido completado con éxito si usted no recibe mensajes de error…
    usted podría conseguir alrededor de la advertencia mediante la adición de una conversión explícita a la línea 11..
    comprobar «conversión de tipo c» en google 😉

    • Advertencia siempre son indicadores de falta de codificación. En este caso, revela un error, donde el mal se utiliza la función o cuando un argumento es que faltan.
    • cierto, pero mi punto era que el sujeto dice que es un error, mientras que no lo es.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea