Как добавить строки в 2d массив символов char? - PullRequest
3 голосов
/ 27 марта 2011

У меня есть следующая программа, написанная на C ++:

#include <iostream>

using namespace std;

int main()

{
    int age[5];
    char name[5][10];

    age[0]=10;
    age[1]=20;
    age[2]=30;
    age[3]=25;
    age[4]=40;

    name[0]="abc";
    name[1]="abc";
    name[2]="abc";
    name[3]="abc";
    name[4]="abc";

    cout<<name[0]<<" is "<<age[0]<<"years old";
    cout<<"\n";
    cout<<name[1]<<" is "<<age[1]<<"years old";
    cout<<"\n";
    cout<<name[2]<<" is "<<age[2]<<"years old";
    cout<<"\n";
    cout<<name[3]<<" is "<<age[3]<<"years old";
    cout<<"\n";
    cout<<name[4]<<" is "<<age[4]<<"years old";
    cout<<"\n\n";

    system("PAUSE");

}

Когда я компилирую и запускаю ее, я получаю следующие ошибки:

ошибка C2440: '=': не могупреобразовать из 'const char [3]' в 'char [10]' Нет контекста, в котором это преобразование возможно

ошибка C2440: '=': невозможно преобразовать из 'const char [2]' в'char [10]' Нет контекста, в котором это преобразование возможно

ошибка C2440: '=': невозможно преобразовать из 'const char [2]' в 'char [10]' Нет контекстав котором это преобразование возможно

ошибка C2440: '=': невозможно преобразовать из 'const char [2]' в 'char [10]' Нет контекста, в котором это преобразование возможно

ошибка C2440: '=': невозможно преобразовать из 'const char [2]' в 'char [10]' Нет контекста, в котором это преобразование возможно

Я использую MSVC 2008под Windows 7. Я перепробовал много возможных решений, но мне не удалось это исправить.Любая помощь будет оценена,

Ответы [ 4 ]

3 голосов
/ 27 марта 2011

Вы обрабатываете массив name, как если бы он был определен следующим образом:

char *name[5];

Так что либо определите его таким образом, либо используйте следующий код для его заполнения:

strcpy(name[0], "abc");
strcpy(name[1], "abc");
strcpy(name[2], "abc");
strcpy(name[3], "abc");
strcpy(name[4], "abc");

Я предпочитаю прежний выбор.Дело в том, что вы пытаетесь присвоить char * для char [], для чего strcpy.В любом случае, поскольку вы в этом случае манипулируете инициализированными строками C, вы также можете иметь дело с char * во всем коде.

2 голосов
/ 27 марта 2011

Вы должны использовать std::string для этой цели.Использование char* и char[] для представления строк не рекомендуется в C ++ по многим веским причинам.

0 голосов
/ 27 марта 2011

Вы также можете использовать std::string name[10] вместо массива 2d char. Только в этом случае вы можете присваивать новые значения строкам через оператор '='. В противном случае вам следует использовать массив char* и использовать функцию strcpy() для присваивания.

0 голосов
/ 27 марта 2011

Учитывая фрагмент программы, name можно инициализировать в самом объявлении.

char name[5][10] = { "abc", "abc", "abc", "abc", "abc" } ;
       // ^ index 5 is not necessary. char name[][10] = { .. } would also suffice.   

Указана длина каждой строки 10 , но только с использованием первого 3 индексы этого.Каждый третий индекс (т. Е. Четвертый элемент в массиве) автоматически добавляется с помощью '\0'.

Инициализация может быть выполнена и для массива age.

...