Вызов функции с передачей указателей на два массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет, помогите найти ошибку. Суть, из функции main() вызывается функция int test(char* v, char* c) и ей передаётся два указателя на массивы из функции test вызывается функция int strend(char* s, char* t) и её передается два указателя, Идея заключается в том что strend возвращает результат в test, а он в main(). В результате компилируется запускается и вылетает критическая ошибка.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <vector>
using namespace std;
//char* str_in(char*);
int strend(char*, char*);
int test(char*, char* );

int main()
{
 
    char  *s="Test";
    char  *t="st";
 
    test(s,t);
//....
//....
    getch();
    return 0;
}
 
/*-------------------------------------------------------*/
 
int test(char* s, char* t){
 
//....
//....
 
strend(s,t);
//....
//....
return 0;
}

/*-------------------------------------------------------*/
int strend(char* s, char* t)
{
    strrev(s);
    strrev(t);
    if(strstr(s,t)!=0)
    {
        strrev(s);
        strrev(t);
        return 1;
    }
    else 
    {
        strrev(s);
        strrev(t);
        return 0;
    }
}
Да чуть не забыл, ответить на коменты смогу только вечером.

Решение задачи: «Вызов функции с передачей указателей на два массива»

textual
Листинг программы
int strend(char *s, char *t)
{
 char *ps, *pt;
 char *es, *et;
 int ls, lt;
 for (es=s; *es!=0; ++es);
 for (et=t; *et!=0; ++et);
 ls=es-s;
 lt=et-t;
 if (ls<lt)
 {
  return 0;
 }
 for (ps=es-1, pt=et-1; (ps>=s)&(pt>=t); --ps, --pt)
 {
  if (*ps!=*pt)
  {
   return 0;
  }
 }
 return 1;
}

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

В данном коде представлена функция strend, которая принимает два указателя на строки (s и t). Она сравнивает эти строки, подсчитывая их длины и проводя поэлементное сравнение символов до тех пор, пока не встретит различия или не дойдет до конца одной из строк. Если строки являются одинаковыми, функция возвращает 1, в противном случае - 0. Список действий в коде можно представить следующим образом:

  1. Инициализация переменных:
    • char *ps, char *pt - указатели на символы строк s и t
    • char *es, char *et - указатели на последний символ строк s и t
    • int ls, int lt - переменные для хранения длин строк s и t
    • int i - счётчик для цикла
  2. Определение длины строк s и t:
    • Цикл for с переменной es=s и условием *es!=0 для определения последнего символа строки s
    • Цикл for с переменной et=t и условием *et!=0 для определения последнего символа строки t
  3. Вычисление разницы между указателями на последний символ строки s и t:
    • ls=es-s
    • lt=et-t
  4. Проверка условия для возврата значения:
    • Если ls<lt - возврат 0, так как строка s короче строки t
  5. Цикл for для сравнения символов строк s и t:
    • Переменные ps=es-1 и pt=et-1 перед началом цикла
    • Условие для цикла (ps>=s)&(pt>=t) для продолжения цикла, пока ps и pt больше или равны начальным адресам строк s и t
    • В каждой итерации цикла сравниваются символы, на которые указывают ps и pt
    • Если символы не совпадают, возврат 0
  6. Возврат 1, если цикл завершен и все символы строк совпадают.

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


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

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

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