В чем ошибка в этом коде 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]);
}
Другие вопросы по тегам