Open khankuliyev opened 3 months ago
char ExtractLetters(char const str) { if (str == NULL) { return NULL; }
int len = 0; for (int i = 0; str[i] != '\0'; i++) { if ((str[i] >= 'A' && str[i] <= 'Z') (str[i] >= 'a' && str[i] <= 'z')) { len++; } } char* result = (char*)malloc((len * 2) + 1 + len); // Увеличенный размер выделенной памяти if (result == NULL) { return NULL; } int index = 0; for (int i = 0; str[i] != '\0'; i++) { if ((str[i] >= 'A' && str[i] <= 'Z') (str[i] >= 'a' && str[i] <= 'z')) { result[index++] = str[i]; result[index++] = ','; result[index++] = ' '; } } result[index] = '\0'; return result;
}
char ReadLine(void) { char buffer = NULL; char tempBuffer[1000]; // Увеличенный размер буфера int length = 0;
do { if (fgets(tempBuffer, sizeof(tempBuffer), stdin) == NULL) { break; } int tempLength = strlen(tempBuffer); char* newBuffer = (char*)realloc(buffer, length + tempLength + 1); if (newBuffer == NULL) { free(buffer); return NULL; } buffer = newBuffer; strcpy(buffer + length, tempBuffer); length += tempLength; } while (tempBuffer[strlen(tempBuffer) - 1] != '\n'); return buffer;
int main() { char input = ReadLine(); while (strlen(input) > 0) { char extractedLetters = ExtractLetters(input); if (extractedLetters != NULL) { printf("%s\n", extractedLetters); free(extractedLetters); } else { printf("Error: Failed to extract letters\n"); } free(input); input = ReadLine(); }
free(input); return 0;
I have a problem with buffer overflow
include
include
include
char ExtractLetters(char const str) { if (str == NULL) { return NULL; }
}
char ReadLine(void) { char buffer = NULL; char tempBuffer[1000]; // Увеличенный размер буфера int length = 0;
}
int main() { char input = ReadLine(); while (strlen(input) > 0) { char extractedLetters = ExtractLetters(input); if (extractedLetters != NULL) { printf("%s\n", extractedLetters); free(extractedLetters); } else { printf("Error: Failed to extract letters\n"); } free(input); input = ReadLine(); }
}