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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
КэтС
0 / 0 / 0
Регистрация: 10.12.2011
Сообщений: 5
#1

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

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

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

Пытаюсь так:

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

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

Как правильно передать массив в функцию? - C++
Возникла такая загвоздка: написал три функции для работы с массивом. Вроде всё компилирует, кроме вызова этих функций, а конкретнее при...

Как правильно занести данные в массив char и вывести их из него - C++
char a1; //Массив в который надо перенести данные char a2 = "32167aqe"; //Массив - источних данных cout << "Musor v a1:" << endl;...

Как правильно передать массив через указатель? - C++
#pragma once #include <vector> class TOMathModel { public: TOMathModel(void); ~TOMathModel(void);

Как правильно передать в функцию указатель на двумерный массив? - C++
Сабж #include <windows.h> #include <stdio.h> using namespace std; //ОТ безысходности сделал матрицу глобальной int A = {2,...

Как правильно передать массив объектов пользовательского типа в функцию? - C++
Доброго всем, пишу впервые пишу огромную программу - игру и столкнулся с проблемой, которую так сам и не могу решить. Нужно передать массив...

11
alkagolik
Заблокирован
11.12.2011, 07:51 #2
жуть какая.
Цитата Сообщение от КэтС Посмотреть сообщение
Void sss(char**arr[256])
{
*arr[i]="i";
}
вы передаете трехмерный массив в функцию и соответственно пытаетесь указателю присвоить целое значение.
0
greeezz
273 / 166 / 4
Регистрация: 10.07.2011
Сообщений: 441
11.12.2011, 08:02 #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 / 0
Регистрация: 10.12.2011
Сообщений: 5
11.12.2011, 08:17  [ТС] #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* ?
0
alkagolik
Заблокирован
11.12.2011, 08:23 #5
КэтС, не тяните кота за... уши. допустим что угодно, а в примере вы привели иное чем говорите сейчас. покажите код, думаю быстрее разберемся
0
КэтС
0 / 0 / 0
Регистрация: 10.12.2011
Сообщений: 5
11.12.2011, 08:38  [ТС] #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 = ((
0
alkagolik
Заблокирован
11.12.2011, 09:25 #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;
}
1
eg0ist
3 / 3 / 0
Регистрация: 10.05.2010
Сообщений: 39
11.12.2011, 09:26 #8
Давненько не пишу уже на Си\Си++, но все же, обрати внимание на мой пост.
Почитай про указатели и массивы внимательней. Код - ппц полный(правда у самого не лучше).
А про указатели и массивы почитай, т.к. char[23] это уже char*, у тебя же char* asd[3424324]...
0
КэтС
0 / 0 / 0
Регистрация: 10.12.2011
Сообщений: 5
11.12.2011, 10:21  [ТС] #9
Цитата Сообщение от eg0ist Посмотреть сообщение
Давненько не пишу уже на Си\Си++, но все же, обрати внимание на мой пост.
Почитай про указатели и массивы внимательней. Код - ппц полный(правда у самого не лучше).
А про указатели и массивы почитай, т.к. char[23] это уже char*, у тебя же char* asd[3424324]...
Да, я представляю, как это дико выглядит для программиста. Я бы с удовольствием не использовала такую чудовищную конструкцию как char* asd[3424324], но код который я пишу должен формировать строку, добаваляя к ней по одному или несколько элементов, а элементы могут быть "1200" "sin" "0.5" "x" "*", короче строчки любой длины. При этом в процессе строку надо менять, обращаясь к этим элементам, и отсчитывая их, так что просто strcat не поможет. Я не придумала ничего лучше чем задать массив строк и на доступном мне людоедском языке его обрабатывать.
0
alkagolik
Заблокирован
11.12.2011, 10:31 #10
Цитата Сообщение от eg0ist Посмотреть сообщение
А про указатели и массивы почитай, т.к. char[23] это уже char*
чепуха. Непрерывный блок памяти вначале адресного пространства программы, доступ с помощью стековой адресации. Доступ через указатель это другой тип адресации.
0
eg0ist
3 / 3 / 0
Регистрация: 10.05.2010
Сообщений: 39
11.12.2011, 11:09 #11
чепуха не чепуха, пусть лучше почитает
и
КэтС, я не программист, я студент, просто уже делал эти же ошибки. Вообще советую почитать книги, оч хорошая Ритчи и Кернига "язык программиорования Си". Просто понятно и без воды
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
11.12.2011, 11:43 #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 секунд
Смотря как вы объявили его
0
11.12.2011, 11:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2011, 11:43
Привет! Вот еще темы с ответами:

Составить прототип функции: Как правильно передать динамический массив по ссылке - C++
В dll библиотеке на экспорт имеется прототип следующей функции: extern &quot;C&quot; __declspec(dllexport) void process(double, double(&amp;), const...

Как правильно вызвать методы, чтобы передать весь массив объектов - C++
#include &lt;iostream&gt; using namespace std; class f { public: int a; f() { a = 0;

Как передать в функцию массив символьных строк? - C++
Допустим имею char* T={&quot;aaaa&quot;, &quot;bbbb&quot;, &quot;ccc&quot;}; как передать например по указателю.

Нюансы работы с массивами: как правильно передать массив в функцию в качестве аргумента? - C++
Здравствуйте!!!Начал недавно изучать с++ и с по книге!!!там есть пример и возник небольшой вопрос к нему!Скину весь код, чтобы было...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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