В чем ошибка в этом коде c
main() {
char names [5][20] = {
"rmaesh",
"ram",
"suresh",
"sam"
"ramu"
};
char *t;
t = names[2];
names[2] = names[3];
names[3] = t;
printf(" the array elemsnt are \n");
int i = 0;
for (i = 0; i < 5; i ++)
printf("\n%s", names[i]);
}
я получаю ошибку ниже при компиляции этой программы
stringarrary.c: In function ‘main’:
stringarrary.c:12:11: error: incompatible types when assigning to type ‘char[20]’ from type ‘char *’
names[2] = names[3];
^
stringarrary.c:13:11: error: incompatible types when assigning to type ‘char[20]’ from type ‘char *’
names[3] = t;
4 ответа
Недопустимо пытаться присвоить массив. В этом случае вы должны использовать strcpy
функция. Обратите внимание, что ваш char *t;
Идея также не работает, если вы собираетесь поменять местами два массива, потому что она указывает только на одну из ваших существующих строк; как только ты напишешь names[2]
, эти данные исчезли.
char t[20];
strcpy(t, names[2]);
strcpy(names[2], names[3]);
strcpy(names[3], t);
Также, "\n%s"
должно быть "%s\n"
- Вы хотите, чтобы новая строка пришла после того, что вы напечатали. И не забудьте #include <stdio.h>
а также #include <string.h>
,
Ошибка в строке 13 легче всего понять: names[3]
это массив char
; Вы не можете просто назначить указатель на него. В строке 12 компилятор преобразует names[3]
к указателю и пытается присвоить его массиву names[2]
, что также не может сделать.
Попробуйте скопировать строки вместо этого. В C вы не можете копировать массивы, используя =
оператор; использовать функции из memcpy
или же strcpy
семьи.
names
массив - это двумерный массив символов. Как указывалось в других ответах, когда вы хотите скопировать массив символов, вам нужно использовать memcpy
или же strcpy
,
Альтернативное решение состоит в том, чтобы сделать names
одномерный массив указателей. Полученный код будет выглядеть следующим образом.
int main( void )
{
char *names[5] = {
"rmaesh",
"ram",
"suresh",
"sam",
"ramu"
};
char *t;
t = names[2];
names[2] = names[3];
names[3] = t;
printf(" the array elemsnt are \n");
int i = 0;
for (i = 0; i < 5; i ++)
printf("\n%s", names[i]);
}
Преимущество этого метода в том, что он позволяет вам манипулировать указателями так, как вы хотели. Недостатком является то, что строки доступны только для чтения. Попытка изменить строки приведет к неопределенному поведению.
Попробуй это
#include<stdio.h>
#include <string.h>
main() {
char names [5][20] = {
"rmaesh",
"ram",
"suresh",
"sam", //<----- You are missing this (,) at the end
"ramu"
};
char *t;
strcpy( t, names[2]); // And also use this syntax
strcpy(names[2] , names[3]);
strcpy(names[3], t);
printf(" the array elemsnt are \n");
int i = 0;
for (i = 0; i < 5; i ++)
printf("\n%s", names[i]);
}