C получает длину из двумерного динамического массива

#c #pointers #dynamic-arrays

#c #указатели #динамические массивы

Вопрос:

Я застрял в двумерном динамическом массиве C . Я хочу получить длину массива. Вот код:

 #include <iostream>
using namespace std;
int dosomestuff(char **dict);
int main(){
    int x, y;
    char **dict;  
    cin>>x>>y;    // here to input the 'x'
    dict = new char *[x];
    for(i = 0; i < x; i  ){
        dict[i] = new char[y];
        for(j = 0; j < y; j  ){
            cin>>dict[i][j];
        }
    }
    dosomestuff(dict);
}
int dosomestuff(char **dict){
    int x, y;
    x = sizeof(*dict);     //8 not equal to the 'x'
                           //run in mac_64  I think this is the pointer's length
    y = strlen(dict[0]);   //this equal to the 'y' in function main
    cout<<x<<" "<<y<<endl;
    return 0;
}
 

Я хочу, чтобы в функции dosomestuff значение x было равно «x» в функции main.

Как я могу это получить? Кто-нибудь может мне помочь ~? Спасибо большое.

Комментарии:

1. Используйте какой-то Matrix класс, который сообщает вам размер и очищает память (чего вы не делаете).

2. Есть ли какая-нибудь простая функция, такая как ‘sizeof’, для получения длины? Потому что мне это нужно для решения вопроса о структуре данных.

3. sizeof является оператором. И как только вы преобразуете его в указатель, размер исчезнет.

4. dict[0] совпадает с *dict

5. О, здесь я использую strlen(dict[0]), чтобы получить длину, забыл ее изменить. Спасибо за ваше внимание. @MattMcNabb

Ответ №1:

sizeof(*dict) дает вам только sizeof(char*) то, на что вы не надеетесь.

Невозможно узнать значение x из dict in dosomestuff . Если вы хотите использовать char** for dict , лучшим вариантом будет передать x и y to dosomestuff .

 int dosomestuff(char **dict, int x, int y);
 

Поскольку вы используете C , вы можете использовать:

 std::vector<std::string> dict;
 

Тогда у вас будет вся необходимая информация dosomestuff , если вы передадите ее dict ему.

Комментарии:

1. Даже не заметил, что нижний тип был char . Хороший улов.

2. @RSahu Забыл поблагодарить вас. = = Я новичок в c . Спасибо за вашу помощь ~ 🙂

3. @Tyler.z.yang, добро пожаловать. Я рад, что смог помочь.