Немного расширив ответы, данные здесь (которые все превосходны) ... Я сам сталкивался с этим не раз, когда только начинал с C, и сделать легкую ошибку.
Быстрая настройка вашей петли while
исправит это. Все остальные объяснили вам, почему, а я подскажу, как:
#include <stdio.h>
int main() {
char *s = "lolololololololol";
while (*s != '\0') {
printf("%c", *s);
s++;
}
}
Обратите внимание, что вместо бесконечного цикла (while(1)
), мы делаем проверку цикла, чтобы убедиться, что указатель, который мы вытащим, не является нулевым ограничителем для строки, таким образом, избегая переполнения встречая.
Если вы застряли, абсолютно нуждаясь в while(1)
(например, если это домашняя работа, и инструктор хочет, чтобы вы ее использовали), используйте ключевое слово break
, чтобы выйти из цикла. Следующий код пахнет, по крайней мере для меня, но это работает:
#include <stdio.h>
int main() {
char *s = "lolololololololol";
while (1) {
if (*s == '\0')
break;
printf("%c", *s);
s++;
}
}
Оба выдают одинаковый вывод на консоль без разрыва строки в конце:
lolololololololol