Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
КэтС
0 / 0 / 0
Регистрация: 10.12.2011
Сообщений: 5
11.12.2011, 07:41     Как правильно передать в процедуру массив строк char*? #1
Нужно чтобы процедура возвращала измененный массив.

Пытаюсь так:

C++
1
2
3
4
Void sss(char**arr[256])
{
*arr[i]="i";
}
возвращает segmentation fault.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2011, 07:41     Как правильно передать в процедуру массив строк char*?
Посмотрите здесь:

C++ Как правильно передать в функцию указатель на двумерный массив?
C++ Нюансы работы с массивами: как правильно передать массив в функцию в качестве аргумента?
Как правильно занести данные в массив char и вывести их из него C++
C++ Как правильно объявить массив строк c++
Как правильно передать динамический массив в функцию, увеличивающую его размер, чтобы изменения сохранились C++
Составить прототип функции: Как правильно передать динамический массив по ссылке C++
Как передать в функцию массив символьных строк? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
11.12.2011, 07:51     Как правильно передать в процедуру массив строк char*? #2
жуть какая.
Цитата Сообщение от КэтС Посмотреть сообщение
Void sss(char**arr[256])
{
*arr[i]="i";
}
вы передаете трехмерный массив в функцию и соответственно пытаетесь указателю присвоить целое значение.
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
11.12.2011, 08:02     Как правильно передать в процедуру массив строк char*? #3
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
Регистрация: 10.12.2011
Сообщений: 5
11.12.2011, 08:17  [ТС]     Как правильно передать в процедуру массив строк char*? #4
Ну допустим я там указателю присваиваю такой же указатель...

Спасибо =)

Добавлено через 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* ?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
11.12.2011, 08:23     Как правильно передать в процедуру массив строк char*? #5
КэтС, не тяните кота за... уши. допустим что угодно, а в примере вы привели иное чем говорите сейчас. покажите код, думаю быстрее разберемся
КэтС
0 / 0 / 0
Регистрация: 10.12.2011
Сообщений: 5
11.12.2011, 08:38  [ТС]     Как правильно передать в процедуру массив строк char*? #6
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 = ((
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
11.12.2011, 09:25     Как правильно передать в процедуру массив строк char*? #7
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;
}
eg0ist
3 / 3 / 0
Регистрация: 10.05.2010
Сообщений: 39
11.12.2011, 09:26     Как правильно передать в процедуру массив строк char*? #8
Давненько не пишу уже на Си\Си++, но все же, обрати внимание на мой пост.
Почитай про указатели и массивы внимательней. Код - ппц полный(правда у самого не лучше).
А про указатели и массивы почитай, т.к. char[23] это уже char*, у тебя же char* asd[3424324]...
КэтС
0 / 0 / 0
Регистрация: 10.12.2011
Сообщений: 5
11.12.2011, 10:21  [ТС]     Как правильно передать в процедуру массив строк char*? #9
Цитата Сообщение от eg0ist Посмотреть сообщение
Давненько не пишу уже на Си\Си++, но все же, обрати внимание на мой пост.
Почитай про указатели и массивы внимательней. Код - ппц полный(правда у самого не лучше).
А про указатели и массивы почитай, т.к. char[23] это уже char*, у тебя же char* asd[3424324]...
Да, я представляю, как это дико выглядит для программиста. Я бы с удовольствием не использовала такую чудовищную конструкцию как char* asd[3424324], но код который я пишу должен формировать строку, добаваляя к ней по одному или несколько элементов, а элементы могут быть "1200" "sin" "0.5" "x" "*", короче строчки любой длины. При этом в процессе строку надо менять, обращаясь к этим элементам, и отсчитывая их, так что просто strcat не поможет. Я не придумала ничего лучше чем задать массив строк и на доступном мне людоедском языке его обрабатывать.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
11.12.2011, 10:31     Как правильно передать в процедуру массив строк char*? #10
Цитата Сообщение от eg0ist Посмотреть сообщение
А про указатели и массивы почитай, т.к. char[23] это уже char*
чепуха. Непрерывный блок памяти вначале адресного пространства программы, доступ с помощью стековой адресации. Доступ через указатель это другой тип адресации.
eg0ist
3 / 3 / 0
Регистрация: 10.05.2010
Сообщений: 39
11.12.2011, 11:09     Как правильно передать в процедуру массив строк char*? #11
чепуха не чепуха, пусть лучше почитает
и
КэтС, я не программист, я студент, просто уже делал эти же ошибки. Вообще советую почитать книги, оч хорошая Ритчи и Кернига "язык программиорования Си". Просто понятно и без воды
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2011, 11:43     Как правильно передать в процедуру массив строк char*?
Еще ссылки по теме:

C++ Как правильно передать массив в функцию?
C++ Char** - массив строк?
Как правильно передать массив объектов пользовательского типа в функцию? C++
C++ Как правильно передать массив через указатель?
C++ Как правильно вызвать методы, чтобы передать весь массив объектов

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
11.12.2011, 11:43     Как правильно передать в процедуру массив строк char*? #12
КэтС,
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 секунд
Смотря как вы объявили его
Yandex
Объявления
11.12.2011, 11:43     Как правильно передать в процедуру массив строк char*?
Ответ Создать тему
Опции темы

Текущее время: 17:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru