Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 10.12.2011
Сообщений: 5

Как правильно передать в процедуру массив строк char*?

11.12.2011, 07:41. Показов 2940. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно чтобы процедура возвращала измененный массив.

Пытаюсь так:

C++
1
2
3
4
Void sss(char**arr[256])
{
*arr[i]="i";
}
возвращает segmentation fault.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2011, 07:41
Ответы с готовыми решениями:

Как передать Правильно в функцию тип char* ?
ошибка происходит на 16 строчке кода в файле console application c++.cpp. Как ее исправить? В программе есть 4 файла: 1...

Массив: Подскажите, пожалуйста, как передать массив А в процедуру Arr?
Добрый день! Подскажите, пожалуйста, как передать массив А в процедуру Arr? using System; using System.Collections.Generic; ...

Как передать в функцию char массив?
Стараюсь сделать консольную змейку. Вообще не понимаю ничего с этими char. #include "stdafx.h" #include "stdio.h" ...

11
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
11.12.2011, 07:51
жуть какая.
Цитата Сообщение от КэтС Посмотреть сообщение
Void sss(char**arr[256])
{
*arr[i]="i";
}
вы передаете трехмерный массив в функцию и соответственно пытаетесь указателю присвоить целое значение.
0
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
11.12.2011, 08:02
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
 
void chageArr(char arr[]){
    arr[0] = 'z';
}
 
 
int main(){
     char arr[] = {'a', 'b', 'c', 'd'};
 
 
     cout << "Before :: " <<arr[0] << endl;
     chageArr(arr);
     cout << "After :: " << arr[0] << endl;
 
     cin.get();
return 0;
}
0
0 / 0 / 0
Регистрация: 10.12.2011
Сообщений: 5
11.12.2011, 08:17  [ТС]
Ну допустим я там указателю присваиваю такой же указатель...

Спасибо =)

Добавлено через 14 минут
Цитата Сообщение от greeezz Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
 
void chageArr(char arr[]){
    arr[0] = 'z';
}
 
 
int main(){
     char arr[] = {'a', 'b', 'c', 'd'};
 
 
     cout << "Before :: " <<arr[0] << endl;
     chageArr(arr);
     cout << "After :: " << arr[0] << endl;
 
     cin.get();
return 0;
}
а если массив char* ?
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
11.12.2011, 08:23
КэтС, не тяните кота за... уши. допустим что угодно, а в примере вы привели иное чем говорите сейчас. покажите код, думаю быстрее разберемся
0
0 / 0 / 0
Регистрация: 10.12.2011
Сообщений: 5
11.12.2011, 08:38  [ТС]
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char*res[256];
char*temp[256];
int t,c;
void OverWrite(char*arr1[256], char*arr2[256], int *len, int w1, int w2)
{
int j;
 
        for(j=w1;j<w2;j++)
            {*arr1[j-w1+*len]=*arr2[j];}
            *len=j-w1+*len;
        
}
;
 
 
OverWrite(temp,res,&t,c,r);
Процедура должна получать два массива строк, копировать r-c элементов res в temp, начиная с элемента t, поменять значение t и возвратить отредактированный массив temp и t.

Только я совсем не понимаю, что нужно передавать процедуре, чтобы она меняла не копию temp, а сам temp = ((
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
11.12.2011, 09:25
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void f(char **x, char n, char m)
{
    char *p = (char*) malloc(sizeof("blablabla") + 1) ;
    char *a = (char*) malloc(sizeof("blabla") + 1) ;
    strcpy(p, "blablabla");
    p[strlen("blablabla")] = 0;
    x[0] = p;
    strcpy(a, "blabla");
    p[strlen("blabla")] = 0;
    x[1] = a;
}
 
//char **
 
int main()
{
    char **a;
    if (a = (char**) malloc(2 * sizeof(char*)) == NULL)
        exit (~0);
    if ((a = (char*)malloc(10 * sizeof(char))) == NULL)
        exit (~0);
    if ((a[1] = (char*)malloc(10 * sizeof(char))) == NULL)
        exit (~0);
 
    f(a, 2, 1);
    printf("%s\n", a[0]);
    printf("%s\n", a[1]);
 
    free(a[0]);
    free(a[1]);
    free(a);
    return 0;
}
1
3 / 3 / 0
Регистрация: 10.05.2010
Сообщений: 39
11.12.2011, 09:26
Давненько не пишу уже на Си\Си++, но все же, обрати внимание на мой пост.
Почитай про указатели и массивы внимательней. Код - ппц полный(правда у самого не лучше).
А про указатели и массивы почитай, т.к. char[23] это уже char*, у тебя же char* asd[3424324]...
0
0 / 0 / 0
Регистрация: 10.12.2011
Сообщений: 5
11.12.2011, 10:21  [ТС]
Цитата Сообщение от eg0ist Посмотреть сообщение
Давненько не пишу уже на Си\Си++, но все же, обрати внимание на мой пост.
Почитай про указатели и массивы внимательней. Код - ппц полный(правда у самого не лучше).
А про указатели и массивы почитай, т.к. char[23] это уже char*, у тебя же char* asd[3424324]...
Да, я представляю, как это дико выглядит для программиста. Я бы с удовольствием не использовала такую чудовищную конструкцию как char* asd[3424324], но код который я пишу должен формировать строку, добаваляя к ней по одному или несколько элементов, а элементы могут быть "1200" "sin" "0.5" "x" "*", короче строчки любой длины. При этом в процессе строку надо менять, обращаясь к этим элементам, и отсчитывая их, так что просто strcat не поможет. Я не придумала ничего лучше чем задать массив строк и на доступном мне людоедском языке его обрабатывать.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
11.12.2011, 10:31
Цитата Сообщение от eg0ist Посмотреть сообщение
А про указатели и массивы почитай, т.к. char[23] это уже char*
чепуха. Непрерывный блок памяти вначале адресного пространства программы, доступ с помощью стековой адресации. Доступ через указатель это другой тип адресации.
0
3 / 3 / 0
Регистрация: 10.05.2010
Сообщений: 39
11.12.2011, 11:09
чепуха не чепуха, пусть лучше почитает
и
КэтС, я не программист, я студент, просто уже делал эти же ошибки. Вообще советую почитать книги, оч хорошая Ритчи и Кернига "язык программиорования Си". Просто понятно и без воды
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
11.12.2011, 11:43
КэтС,
C
1
2
3
4
5
6
7
8
9
10
void fun1 (char **s);
...
char **s;
fun (s);
 
 
void fun2 (char ss[][10]);
...
char ss[20][10];
fun (ss)
Два варианта предачи

Добавлено через 13 секунд
Смотря как вы объявили его
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.12.2011, 11:43
Помогаю со студенческими работами здесь

Как передать массив в процедуру?
:confused: нужно передать в проседуру или функцию массив и поменять там значение элементов как это молжно сделать procedure...

Как передать в процедуру массив (структуру)?
Как передать в другую процедуру структуру переменных? И так, к примеру у нас имеется такой код со структурами переменных. ...

Передать в процедуру массив как константу
Type tarr = array of integer; .... procedure Sort(const a : Tarr); begin //тут массив А сортируется end.

Как передать ссылку на массив в процедуру
Объявляю динамическую структуру данных. type mas=array of byte; pmas=^mas; var a:pmas; Вопрос следующий, как мне передать...

Как передать ссылку на массив в другую процедуру
Добрый день, подскажите пожалуйста как реализовать передачу динамической ссылки из одной процедуры в другую? Вот образец запроса, как я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru