Заранее благодарю за любую помощь. Я делаю простую программу на C и уже объявил две строки с именами: «message1» и «message2». Как мне изменить содержимое этих строк? Сначала я заполняю их "пустыми" для проверки, которая происходит в сегменте кода, показанном ниже:

char message1[32] = "empty";
…
if(message1 != "empty");
{
        printf("\n[USER 1]: %s", message1);
        message1 = "empty";
}

После этой проверки, если message1 содержит что-либо, кроме исходного значения, он затем распечатает это значение и затем сбросит message1 на исходное значение "empty". Однако, очевидно, что это не так. Я искал ответ в Google и очень смущен.

c
0
wafwoof 1 Сен 2020 в 06:47

2 ответа

Лучший ответ

Необходимо поменять местами две вещи.

1 .

if (message1 != "empty");

Используйте strcmp() для сравнения строк. Логические операторы не используются для сравнения строк в C.

if (strcmp(message1,"empty"))
{
    ....
}

2 .

message1 = "empty";

Вы не можете присваивать массивы в C строкой. Для этого используйте strcpy.

strcpy(message1,"empty");
0
RobertS supports Monica Cellio 1 Сен 2020 в 07:48

Кажется, вы путаете семантику массива с семантикой указателя.

Если ваша строка (которая представляет собой формат данных) хранится в массиве, вы можете изменить отдельные символы. Но вы не можете назначить массив. Итак, эта строка

        message1 = "empty";

Становится нарушением ограничения. Вместо этого вам следует использовать strcpy() или лучше snprintf() (не поддавайтесь соблазну использовать strncpy() - это не безопаснее strcpy()) . Также вы не можете осмысленно сравнивать массив и строковый литерал. Итак, эта строка

if(message1 != "empty");

Тоже не имеет никакого смысла. Используйте функцию strcmp(). (Кроме того, точка с запятой, вероятно, не то, что вам нужно, потому что она завершает оператор, поэтому следующий составной оператор не управляется оператором if.

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

2
luser droog 1 Сен 2020 в 04:25