2013-09-20 8 views
1

У меня возникли мысли о копировании строки в 2d-массив. У меня есть массив 2d char, инициализированный как char labels[100][2], так что это массив 100 * 2. Я бы хотел, чтобы в первом столбце каждой строки содержалась строка, и я знаю, что вы не можете просто назначить строку, вы должны сделать строковое копирование. Мое мышление было я мог сделать:Строка Сравнить с массивом 2d C

strcpy(labels[1][0],"hi");//The compiler doesn't like this 

После исследования, я увидел идею, что вы могли бы сделать:

strcopy(labels[1],"hi") 

мне очень интересно об этом, потому что это strcpy находится в for петле так что я Возможно, у меня будет до десяти экземпляров, и я не знал, будет ли это правильно копироваться в первый столбец только каждый раз.

+0

Он имеет '100' массивы каждого из массива символов' 2'. '100 * 2' - количество символов (элементов) в массиве' labels'. – haccks

+0

- это то, что означает этот синтаксис, я думал, что это означает 100 строк и 2 столбца. –

+0

Я просто использовал «привет» в качестве примера также, строка может быть где угодно до 6 символов. –

ответ

0

Для обработки столбца 2D-массива вы можете сделать так:

char labels[100][2], (*p)[2], i; 
.... 

for (p = &labels[i]; p < &labels[100]; P++) 
    (*P)[i] = //assign a char 
0

Мне интересно ваше утверждение «вы не можете просто назначить строку». Это верно, но вы можете назначить указатель на строковый литерал. Почему бы не упростить это следующим образом:

char *labels[100]; 

labels[0] = "hi"; 
labels[1] = "bye"; 
labels[2] = "arbitrary-length string literal"; 
.... 

Это гораздо проще, чем иметь дело с 2d массивов, зЬгсром() и т.д.

Кроме того, зЬгср(), как правило, считается unsafe.

0

Если вам нужно сохранить метку + адрес в одной строке 7 полукокса, то самый простой способ:

#define MAX_LABELS 100 
char labels[MAX_LABELS][7]; 

// do something with the array 
for (int i=0; i<MAX_LABELS; i++) { 
    strcpy(labels[i], "label"); // watch for buffer overflow here 
    labels[i][6] = (char)i; 
} 

Или, если это не имеет значения, если метка и адрес в той же строка, сделать код более читаемым, используя массив структур:

struct LabelStruct { 
    char label[6]; 
    char address[1]; 
} labels[MAX_LABELS]; 

// do something with the array 
for (int i=0; i<MAX_LABELS; i++) { 
    strcpy(labels[i].label, "label"); // watch for buffer overflow here 
    labels[i].address = (char)i; 
} 

вы не сказали, нужна ли неопределенная завершающей этикетка или нет, но если это так, добавьте еще один символ в массив меток. Также при назначении данных этикетке проверьте переполнение (используйте strncpy или аналогичные).

Смежные вопросы