Ampliando ligeramente las respuestas dadas aquí (que son todas excelente) ... Me encontré con esto más de una vez cuando estaba empezando con C, y es un error fácil de hacer.
Un ajuste rápido a su while
lazo lo arreglará. Todos los demás se le ha dado el por qué, a enganchar para arriba con la forma:
#include <stdio.h>
int main() {
char *s = "lolololololololol";
while (*s != '\0') {
printf("%c", *s);
s++;
}
}
Tenga en cuenta que en lugar de un bucle infinito (while(1)
), estamos haciendo una comprobación de bucle para asegurar que el puntero nosotros' volver a tirar no es el terminador nulo de la cuerda, evitando así el desbordamiento que estás encontrando.
Si está completamente necesitado de while(1)
(por ejemplo, si esto es una tarea y el instructor desea que lo use), use la palabra clave break
para salir del ciclo.El siguiente código olores, al menos para mí, pero funciona:
#include <stdio.h>
int main() {
char *s = "lolololololololol";
while (1) {
if (*s == '\0')
break;
printf("%c", *s);
s++;
}
}
Ambos producen la misma salida de la consola, sin ningún salto de línea al final:
lolololololololol
Por cierto, si usa un sistema * nix, generalmente puede restablecer su terminal a un estado utilizable con "sty cuerdo", aunque tendrá que escribirlo a ciegas. –
Para consola Linux, puede hacer eco c –
También puede escribir "reiniciar" incluso si no puede verlo, esto funciona para muchos. –