функция для чтения строки и получения длины - C

У меня проблемы с написанием функции C, которая считывает строку из STDIN и возвращает длину указанной строки... Предложения?


person tekknolagi    schedule 14.05.2011    source источник
comment
нет, на самом деле... звучит полезно.   -  person tekknolagi    schedule 14.05.2011


Ответы (2)


Итак, просто используйте strlen из стандартной библиотеки C:

#include <string.h>

Итак, функция strlen() доступна. Вам просто нужно передать указатель char, и он вернет длину строки:

size_t length = strlen( myStr );

Обратите внимание, что size_t — целочисленный тип.

Кстати, если вы не знаете об этой функции, вам действительно следует покопаться в библиотеке C и узнать об основных функциях, которые она предоставляет.

person Macmade    schedule 14.05.2011
comment
где эта функция БЫЛА всю мою жизнь?!?!?! - person tekknolagi; 14.05.2011
comment
Ха-ха опередил меня на минуту Macmade :P - person JohnKlehm; 14.05.2011
comment
@tekknolagi: Это все время было здесь: size_t strlen(char* s) {size_t l = 0; for (;*s;++s,++l); return l;} - person Michael Burr; 14.05.2011
comment
Обратите внимание, что версия Майкла — самая медленная strlen() версия. Вы можете легко сделать это примерно в 10 раз быстрее. - person Philip; 14.05.2011
comment
@Philip: это была просто шутка, но я думаю, что придумать что-то, что будет в 10 раз быстрее (и останется без ошибок), может быть сложнее, чем вы могли подумать на первый взгляд. Особенно для тех, кто до вчерашнего дня даже не слышал о strlen(). - person Michael Burr; 15.05.2011
comment
@Michael: к сожалению, я знаю. См. strlen() glibc на странице tsunanet.net/~tsuna/strlen.c.html. Детали. Однажды я провел временной анализ и сравнил его с наивной версией, и оказалось, что она намного быстрее (на постоянный фактор, о котором я уже забыл). С другой стороны, если мне нужна оптимизация в strlen(), я, наверное, изначально что-то сделал не так... ;-) - person Philip; 15.05.2011

person    schedule
comment
Обратите внимание, что strlen возвращает тип size_t, который может быть больше, чем unsigned int. - person Macmade; 14.05.2011
comment
Действительно, но подумал, что не примитивный тип может сбить с толку кого-то нового. - person JohnKlehm; 14.05.2011
comment
@Macmade: это был бы адский аргумент! - person Michael Burr; 14.05.2011
comment
@Macmade: обычный int гарантированно сможет хранить все возможные размеры массива. Поскольку строки являются массивами (или лучше: всегда могут рассматриваться как таковые), strlen() не может переполнить int. - person Philip; 14.05.2011
comment
@Philip: я не верю, что это правда. - person Michael Burr; 15.05.2011
comment
@Michael: Вы правы, это не так. Подробности см. в моем последнем вопросе: stackoverflow.com/questions/6004415/ - person Philip; 15.05.2011