Петля формы for(k=0; k < strlen(buffer); k++) { ... }
, как правило, очень плохой код. Это O (n ²), что означает, что время цикла увеличивается квадрически с ростом n. Зачем? Каждый проходит через цикл, вызывается функция strlen
, чтобы определить длину строки в buffer
. Если строка длиной 1000 символов, каждый strlen
внутренне петли 1000 раз, а сам он называется 1000 раз, для 1000000 итераций внутреннего цикла! Вместо этого длина строки должна вычисляться один раз, вне цикла. Например)
int buffer_len = strlen(buffer);
for(k=0; k<buffer_len; k++) { ... }
Вы можете также использовать char *
как ваш индекс цикла, и цикл, пока вы не столкнетесь с нулевым символом:
for(char *c_ptr = buffer; *c_ptr != '\0'; *c_ptr++) { ... }
Во всяком случае, для вашей проблемы, вы не нужна двойная петля:
for(k = 0; k < strlen(buffer); k++)
{
// ...
while(/* incorrect condition here */) {
// ...
}
// ...
}
Вышеупомянутое предлагает вам пройти через каждый символ в вашей строке, Затем, начиная с каждого из этих символов, выполните другой внутренний цикл. То, что вы вероятно хотите просто if()
заявления:
for(k = 0; k < strlen(buffer); k++)
{
// ...
if(buffer[k] == '\r' && buffer[k+1] == '\n') {
// ...
}
// ...
}
Я оставлю вам бороться с тем, что идет в // ...
комментариях, если что-нибудь. Вы узнаете больше, делая.
Как указывали другие, ваши i
& j
переменные остались неинициализированными. Прежде чем использовать их, вы захотите убедиться, что вы их правильно инициализировали. Вы выполнили инициализацию k
до нуля, что фактически не нужно, поскольку цикл for(k=0; ... ; ...)
уже инициализирует значение k
.
Кажется, вы не инициализируете 'i' и' j' нигде перед их использованием. –
Йоахим прав: «int i, j, k = 0» инициализирует только k до нуля. – jdarthenay
Нет инициализации буфера после запятой. – Jiminion