Как граммотно передавать массив символов в функцию и возвращать его из функции?
str=(char*)calloc(362,sizeof(char));
if(str==NULL) MemoryErrorMes();
потом я передаю этот массив в функцию, где он заполняется нужными данными и потом с этими данными нужно работать из главной функции:
InputSMS(str,360,OperatorPrice(pname.PhoneNum));
Вроде все верно, и все это работало. Пока я не модифицировал непонятно каким способом код главной функции, что теперь когда в функции InputSMS любому элементу массива str попытаться присвоить любое значение, то программа вылетает с ошибкой:(
После этого сижу вот над кодом несколько часов, ищу, что же я такого наделал, но ничего не могу найти такого, чтобы имело отношение к str. Так как str я объявляю непосредственно перед функцией и сразу же передаю его в нее. Уже дошел до того, что пробовал над массивом делать calloc не в главной функции, а в средине функции(при этом сам указатель на массив обёявлен в главной функции, и передается как и раньше). И этот способ заработал без проблем! Массиву нормально присваиваются значения в самой функции. Но теперь я столкнулся с проблемой, что никак не могу передать этот массив в главную функцию.:( Помогите пожалуйста бедному человеку:(
А модифицировал я в нем лишь следующее:
У меня было перед этим, что объявлялся файловый указатель в главной функции на начале FILE *dbf; и в конце закрывался fclose(dbf);
Я же сделал так, чтобы файл открывался лишь там, где он действительно используется(объявляется указатель и открывается файл непосредственно перед чтением из него данных, а закрывается он сразу после прекращения чтения). Для этого я удалил объявление в главной функции, а также удалил из других функций передаваемый параметр *dbf. Было вот так:
А стало вот так:
И вот после этих манипуляций у меня стала тупо вырубаться программа при попытке записи в массив str любого значения. Я тупо в ауте:confused: Вообще не могу найти никакой логики связи вот этих моих действий и связи с массивом str:eek: Ну почему программа перестала работать при вот таких действиях?? У меня уже просто идей нет, я уже не знаю что делать. Хоть бери и возвращайся к своему резервному коду, который я бекапил до того, как уже успел сделать многое...
str=(char*)calloc(362,sizeof(char));
if(str==NULL) MemoryErrorMes();
потом я передаю этот массив в функцию, где он заполняется нужными данными и потом с этими данными нужно работать из главной функции:
InputSMS(str,360,OperatorPrice(pname.PhoneNum));
Вроде все верно, и все это работало. Пока я не модифицировал непонятно каким способом код главной функции, что теперь когда в функции InputSMS любому элементу массива str попытаться присвоить любое значение, то программа вылетает с ошибкой:(
После этого сижу вот над кодом несколько часов, ищу, что же я такого наделал, но ничего не могу найти такого, чтобы имело отношение к str. Так как str я объявляю непосредственно перед функцией и сразу же передаю его в нее. Уже дошел до того, что пробовал над массивом делать calloc не в главной функции, а в средине функции(при этом сам указатель на массив обёявлен в главной функции, и передается как и раньше). И этот способ заработал без проблем! Массиву нормально присваиваются значения в самой функции. Но теперь я столкнулся с проблемой, что никак не могу передать этот массив в главную функцию.:( Помогите пожалуйста бедному человеку:
У меня было перед этим, что объявлялся файловый указатель в главной функции на начале FILE *dbf; и в конце закрывался fclose(dbf);
Я же сделал так, чтобы файл открывался лишь там, где он действительно используется(объявляется указатель и открывается файл непосредственно перед чтением из него данных, а закрывается он сразу после прекращения чтения). Для этого я удалил объявление в главной функции, а также удалил из других функций передаваемый параметр *dbf. Было вот так:
И вот после этих манипуляций у меня стала тупо вырубаться программа при попытке записи в массив str любого значения. Я тупо в ауте Вообще не могу найти никакой логики связи вот этих моих действий и связи с массивом str Ну почему программа перестала работать при вот таких действиях?? У меня уже просто идей нет, я уже не знаю что делать. Хоть бери и возвращайся к своему резервному коду, который я бекапил до того, как уже успел сделать многое...
(
Первое, что бросилось в глаза: 362!=360
Если отвечать на заглавие темы, то работаете правильно с массивами. Никуда не надо передавать, данные уже в массиве записаны, ибо работала функция, используя адрес первого элемента массива. Все должно работать.
По второму посту. Зачем из передаваемых параметров удалять указатель на файл? Как функция, по вашему, должна узнать об этом файле? Перемещение места объявления никак не влияет на передаваемые параметры.