Как выдать ошибку, что недостаточно места в массиве? - C (СИ)
Формулировка задачи:
Простенькое упражнение - написать собственную функцию strcat(char dest[],char src[]). Уже сделал, за исключением двух нюансов:
- Если я работаю с неизвестным размером массива для dest и src, то как проверить, и соответственно выдать ошибку, о нехватке места в dest?
- Функция должна называться strcat(), а мой Eclipse категорически отказывается принимать это название. Наверное из-за того, что такая библиотечная функция уже существует. Как это обойти?
Заранее благодарен,
Максим
Решение задачи: «Как выдать ошибку, что недостаточно места в массиве?»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> void my_strcat(char str2[],char str1[]); void my_strcpy(char dest[],char src[]); void my_strncpy(char dest[],char src[],int n); int main(void) { char str1[30]="I'm very good programmer!"; char str2[50]="OK,"; char str3[10]="Maksim"; int stam; my_strcat(str2,str1); printf("%s\n",str2); my_strcpy(str1,str3); printf("%s\n",str1); my_strncpy(str3,str1,4); printf("%s\n",str3); scanf("%d",&stam); return 0; } void my_strcat(char str2[],char str1[]) { int count1=0,count2=0; while(str1[count1]!='\0'){ while(str2[count2]!='\0') count2++; str2[count2++]=str1[count1++]; } } void my_strcpy(char dest[],char src[]) { int count1; for(count1=0; src[count1]!='\0'; count1++) dest[count1]=src[count1]; dest[count1]='\0'; } void my_strncpy(char dest[],char src[],int n) { int count1; for(count1=0; count1<n; count1++) dest[count1]=src[count1]; dest[count1]='\0'; }
Объяснение кода листинга программы
- Код начинается с объявления трех массивов строк и одной переменной типа int.
- Функция my_strcat() вызывается для объединения строк в массиве str2, используя содержимое массива str1.
- Функция my_strcpy() вызывается для копирования содержимого массива str1 в массив str3.
- Функция my_strncpy() вызывается для копирования первых 4 символов из массива str1 в массив str3.
- Ввод с клавиатуры запрашивается с помощью функции scanf().
- Возвращаемое значение функции scanf() не проверяется на ноль, что может привести к
синему экрану смерти
при попытке чтения за пределами диапазона допустимых значений. - Возвращаемое значение функции scanf() не используется в коде.
- Функция main() возвращает 0, указывая на успешное завершение программы.
- В функции my_strcat() используются два вложенных цикла. Внешний цикл считает символы в массиве str1, а внутренний цикл считает символы в массиве str2.
- Вложенные циклы продолжаются до тех пор, пока не будет достигнут нулевой символ в одном из массивов.
- Значение символа из массива str1 копируется в массив str2 после каждой итерации внутреннего цикла.
- В функции my_strcpy() используется цикл for для копирования символов из массива src в массив dest.
- Цикл for продолжается до тех пор, пока не будет достигнут нулевой символ в массиве src.
- Значение символа из массива src копируется в массив dest после каждой итерации цикла.
- В функции my_strncpy() используется цикл for для копирования первых n символов из массива src в массив dest.
- Цикл for продолжается до тех пор, пока не будет достигнуто значение n.
- Значение символа из массива src копируется в массив dest после каждой итерации цикла.
- В конце всех функций добавляется нулевой символ в массив, чтобы завершить строку.
- В функции main() не предусмотрена обработка ошибок для функции scanf().
- Программа успешно завершается, возвращая 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д