Почему моя программа на C не печатает правильную строку? [закрыто]

[в значительной степени отредактировано, было неправильно в отношении некоторых предположений]

Хорошо, так что команда гномов, похоже, в конце концов поняла, что реализация экрана в GDM 3 является мерзостью. (действительно, это абсолютно ужасно, без всякого сомнения).

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

Так что больше нет отдельного экрана. Встать на пути, причиняя неудобства.

Место, где можно посмотреть на эту новую разработку, пока она еще продолжается, похоже, здесь:

https://gitlab.gnome.org/GNOME/gnome-shell/issues / 276

[править 2]

К сожалению, новый дизайн все еще делает экран экраном обязательной частью экрана входа в систему. Это на самом деле не то, что мы хотели. Хорошее место, чтобы пожаловаться на это было бы по ссылке выше ^ (требуется вход в систему). Или на соответствующей странице / статье в блоге Алана о новом дизайне / предложении экрана входа в систему.

Пока / пока они не передумают, я могу только рекомендовать людям попробовать переключиться на другой менеджер дисплеев, совместимый с другими странами. Исследуя конкуренцию, кроме GDM3, только SDDM в настоящее время также поддерживает Wayland. Какой менеджер входа в систему для KDE Plasma. Так что установка этого на стандартную версию Ubuntu может испортить вашу установку. Из-за всего этого это другие зависимости KDE. Поэтому новая установка kubuntu с нуля безопаснее. Перед подключением попробуйте образ диска Kubuntu Live USB / ISO.

[как я пришел к такому выводу]

Хлебные крошки следов предыдущих ошибок gnome3, ведущих к нему. Поскольку разработчики gnome3 говорят, что они не планируют исправлять существующий / текущий / старый экран, включенный в 18.04, тем временем ...

Эти ошибки перечислены в обратном порядке, от нового к старому:

https://bugzilla.gnome.org/show_bug.cgi?id=720656

[ 1119] https://bugzilla.gnome.org/show_bug.cgi?id=696330

https://bugs.launchpad.net/ubuntu/+source/gnome -оболочка / + ошибка / 1049645

-2
задан 06.05.2020, 21:15

1 ответ

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

Вторая проблема заключается в том, что строка заканчивается символом 0 для обозначения конца строки. Поэтому, если вы напишите последний символ в начале новой строки, он закончится самым первым символом. Таким образом, ваша возвращенная строка не будет видна.

Следующие изменения в вашей функции работали для меня:

char* flip_string(char *string){
  int i = strlen(string);
  int j = 0;
  // Doesn't really matter all I wanted was the same size string for temp.
  char* temp = malloc(strlen(string)); 
  puts("This is the original string");
  puts(string);
  puts("This is the \"temp\" string");
  puts(temp);
    i--;
  for(i; i>=0; i--){
    temp[j] = string[i];
    if (j <= strlen(string)) {
      j++;
    }
  }

  return(temp);
}
2
ответ дан 06.05.2020, 21:16
  • 1
    Брат спасибо, Один последний вопрос, хотя на Вашей второй точке. В тестовом прогоне я ввел " 1234" как моя строка, когда я распечатал длину строки, это сказало 4 (который является тем, что я хотел), поэтому, как он собирающийся завершаться в нулевом символе после печати, поскольку 4-й символ в строке будет " 1" право не пустое право разделителя? – Uzair Sajid 06.05.2020, 21:16

Теги

Похожие вопросы