После выполнения и вывода результата консоль с программой прекращает свою работу через примерно 4-5 секунд. Предполагаю что это связано с динамической памятью. Кому не сложно прошу подсказать как это исправить ) #include <stdio.h> #include <stdlib.h> int strConvent(char *s, char ** parts) { int r = 0; while (*s) { if (*s != ' ') { char *ptr = parts[r++]; do { *(ptr++) = *(s++); } while (*s && *s != ' '); *ptr = '\0'; } else s++; } return r; } int strlen(char *arr) { int i = 0; while (*(arr + i) != '\0') { i++; } return i; } int main(){ int count = 0; int k = 0; char* arr = (char*)malloc(sizeof(char) * 100); char ** parts = (char**)malloc(sizeof(char*) * 100 ); char* word = (char*)malloc(sizeof(char) * 100); for (int i = 0; i < 100; i++) { parts[i] = (char*)malloc(100 * sizeof(char)); } printf("Input the string: "); gets(arr); printf("Input the word: "); gets(word); strConvent(arr, parts); free(arr); printf("Result: "); for(int j = 0; parts[j][0]!='\0'; j++){ for(int l = 0; parts[j][l]!= '\0'; l++){ if(parts[j][l] == word[l]){ count++; } } if(count == (strlen(word))){ printf("%d ", j+1); } count = 0; } free(parts); free(word); getchar(); getchar(); } Код #include <stdio.h> #include <stdlib.h> int strConvent(char *s, char ** parts) { int r = 0; while (*s) { if (*s != ' ') { char *ptr = parts[r++]; do { *(ptr++) = *(s++); } while (*s && *s != ' '); *ptr = '\0'; } else s++; } return r; } int strlen(char *arr) { int i = 0; while (*(arr + i) != '\0') { i++; } return i; } int main(){ int count = 0; int k = 0; char* arr = (char*)malloc(sizeof(char) * 100); char ** parts = (char**)malloc(sizeof(char*) * 100 ); char* word = (char*)malloc(sizeof(char) * 100); for (int i = 0; i < 100; i++) { parts[i] = (char*)malloc(100 * sizeof(char)); } printf("Input the string: "); gets(arr); printf("Input the word: "); gets(word); strConvent(arr, parts); free(arr); printf("Result: "); for(int j = 0; parts[j][0]!='\0'; j++){ for(int l = 0; parts[j][l]!= '\0'; l++){ if(parts[j][l] == word[l]){ count++; } } if(count == (strlen(word))){ printf("%d ", j+1); } count = 0; } free(parts); free(word); getchar(); getchar(); }
Kentaur, у Вас во всех адресах строк, которые оказываются ненужными, мусор. Там, естественно, нет нуля и Вы начинаете по ним работать. Последствия предсказуемы Исправляется легко Вы же подсчитываете число слов! Почему бы не использовать это? 48 k = strConvent(arr, parts); 49 free(arr); 50 printf("Result: "); 51 for (int j = 0; j < k; j++) { C 48 k = strConvent(arr, parts); 49 free(arr); 50 printf("Result: "); 51 for (int j = 0; j < k; j++) {