помогите со строками в C - PullRequest
0 голосов
/ 03 мая 2011

Я готовлюсь к экзамену, и мне нужна помощь со строками

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

char rocky[21], bw[21], boris[21];
int result;

a.) Написатьоператор scanf, который позволил бы прочитать строку Beauregard в скалистом

my answer = scanf("%s", &rocky);

b.) Предполагая, что текст Beauregard - единственная вещь в строке стандартного ввода, напишите утверждение для чтения в тексте и сохраните его в скалистом, используя альтернативу scanf

мой ответ = gets (Beauregard); strcpy(rocky);

в.), предполагая, что текст, читаемый вБорегард, каково значение результата после выполнения следующего оператора?

result=strlen(rocky); 

мой ответ = я понятия не имею ..

d.) Что делает следующий статус?

strcpy(boris, rocky);

answer = делает копию строки .. (не знаю намного больше)

e.) Что делает следующее утверждение?Каковы значения Rocky и BW?

strncpy(bw,rocky,3);

мой ответ = не ключ

помощь очень ценится, и объяснение также поможет:)

Спасибо!

Ответы [ 4 ]

1 голос
/ 03 мая 2011

а. Массивы и указатели тесно связаны в C. В частности, имя массива уменьшается до указателя на первый элемент массива, поэтому ваш ответ должен быть

scanf("%s", rocky); /* note the lack of an & in front of rocky */

б. gets(Beauregard) на самом деле не имеет смысла. Функция gets считывает строку из стандартного ввода (думаю, «клавиатура») и сохраняет ее в массиве символов, на который указывает передаваемый вами аргумент. Таким образом, вы должны предположить, что пользователь напечатает «Beauregard», и вы должны прочитать его в массив rocky с

gets(rocky);

с. strlen возвращает длину строки, не включая завершающий символ \0, поэтому в данном случае 10.

д. strcpy просто копирует содержимое массива rocky в массив boris, чтобы они оба содержали «Beauregard».

е. strncpy работает как strcpy, но копирует только до n символов (где n - последний аргумент, поэтому в этом случае bw будет содержать «Bea» без завершающего нулевого символа.

Обратите внимание, что некоторые из этих утверждений являются действительно плохими идеями в любой реальной программе. Например, никогда не имеет смысла использовать get, поскольку любое использование get открывает недостатки безопасности. Вы должны всегда использовать вместо этого fgets. Функция scanf может использоваться безопасно, если вы укажете ширину, но здесь вы этого не сделали. Я упоминаю эти вещи только в том случае, если ваш учитель рассказал о них, а вы забыли.

1 голос
/ 03 мая 2011

strlen возвращает длину строки C. strlen("Beauregard"); вернет 10, потому что длина строки составляет 10 символов.

strcpy просто копирует строку, вы правы.

strncpy позволяет указать максимальное количество символов, которое вы хотите. Поэтому, если вы передадите его 3, вы получите 3 символа и нулевой терминатор в конце вашей строки.

0 голосов
/ 03 мая 2011

c.) Strlen считает, пока не достигнет завершающего нулевого символа, \0.Таким образом, ответ будет 10, потому что в Борегаре 10 букв. Strlen

d.) Да, он копирует строку.Более конкретно, он копирует скалистые в борис.Я не уверен, что еще они хотели бы, чтобы вы дали как часть ответа там ...

e) Он копирует первые 3 символа rocky в bw.Тем не менее, он не добавляет завершающий нулевой символ. strncpy

0 голосов
/ 03 мая 2011

strlen (rocky) возвращает длину строки того, на что указывает rocky.Количество букв, составляющих «Beauregard».

strncpy (bw, rocky, 3) копирует первые 3 буквы из строки, на которую указывает rocky, в bw.

Вы должны прочитать manстраницы для strlen, strcpy и strncpy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...