Как выдать ошибку, что недостаточно места в массиве? - 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';
}

Объяснение кода листинга программы

  1. Код начинается с объявления трех массивов строк и одной переменной типа int.
  2. Функция my_strcat() вызывается для объединения строк в массиве str2, используя содержимое массива str1.
  3. Функция my_strcpy() вызывается для копирования содержимого массива str1 в массив str3.
  4. Функция my_strncpy() вызывается для копирования первых 4 символов из массива str1 в массив str3.
  5. Ввод с клавиатуры запрашивается с помощью функции scanf().
  6. Возвращаемое значение функции scanf() не проверяется на ноль, что может привести к синему экрану смерти при попытке чтения за пределами диапазона допустимых значений.
  7. Возвращаемое значение функции scanf() не используется в коде.
  8. Функция main() возвращает 0, указывая на успешное завершение программы.
  9. В функции my_strcat() используются два вложенных цикла. Внешний цикл считает символы в массиве str1, а внутренний цикл считает символы в массиве str2.
  10. Вложенные циклы продолжаются до тех пор, пока не будет достигнут нулевой символ в одном из массивов.
  11. Значение символа из массива str1 копируется в массив str2 после каждой итерации внутреннего цикла.
  12. В функции my_strcpy() используется цикл for для копирования символов из массива src в массив dest.
  13. Цикл for продолжается до тех пор, пока не будет достигнут нулевой символ в массиве src.
  14. Значение символа из массива src копируется в массив dest после каждой итерации цикла.
  15. В функции my_strncpy() используется цикл for для копирования первых n символов из массива src в массив dest.
  16. Цикл for продолжается до тех пор, пока не будет достигнуто значение n.
  17. Значение символа из массива src копируется в массив dest после каждой итерации цикла.
  18. В конце всех функций добавляется нулевой символ в массив, чтобы завершить строку.
  19. В функции main() не предусмотрена обработка ошибок для функции scanf().
  20. Программа успешно завершается, возвращая 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.538 из 5
Похожие ответы