строки выглядят как странные символы - PullRequest
1 голос
/ 07 ноября 2011

У меня были проблемы с этим с другим заданием, где мои строки печатали бы как бессмысленные символы, например, знак вопроса в виде ромба или случайных символов.

На этот раз я пытаюсь сделать

char *word = "blah";
printf("word: %s", word);

Это дает мне тарабарщину, которая даже не равна длине слова.Я включил string.h.

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

int len = strlen(word);
word[len] = 'd';

Кроме того, как мне извлечь, скажем, последние два символа?Я предполагаю, что извлеку это, получив строчку слова и превратив ее в массив символов и копируя из индекса в индекс.Есть ли способ лучше?Кроме того, случайный вопрос: когда я использую '\ 0'?Нужно ли это в этом случае?

Большое спасибо всем, кто может мне помочь.

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011

Ваш код находит длину word, число, которое не включает нулевой терминатор в конце.Затем вы перезаписываете терминатор следующей строкой:

word[len] = 'd';

Итак, теперь у вас есть строка, которая не заканчивается должным образом и не будет хорошо работать с функциями ввода / вывода.Помните;Индексы начинаются с нуля.Строка длиной x содержит доступные символы в диапазоне от 0 до x-1.

Кроме того, вы не покажете нам, как вы создали word в первую очередь, поэтомутам тоже может быть проблема.Если вы не инициализировали его должным образом для начала, вы, вероятно, просто растоптали всю память, которую не следует изменять.

РЕДАКТИРОВАТЬ: Хорошо, поэтому вы разместили код, в котором вы создали строкуи вот еще одна проблема:

char *word = "blah";

Это действительно должно быть

const char *word = "blah";

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

char word[] = "blah";
0 голосов
/ 07 ноября 2011

Здесь слово - указатель на символ, поэтому его malloc фиксируется за раз. поэтому для любого изменения в этой строке необходимо использовать memcpy функции или strcpy,strcat функции.

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

...