计算长度字符串中的字符数

时间:2017-10-23 09:30:55

标签: c

在我得到的函数中,我在参数中收到一个字符串,理论上可以包含无数个字符(但是说它真的很长)。 我需要扫描这个字符串才能知道它的确切长度。通常我会用

int i = 0;
while (str[i] != '\0') {
   i++;
}

但是,如果我们认为字符串非常长,就像它有1万亿个字符一样,这​​意味着在扫描结束时,“i”的值为1万亿。 实际上,对于整数来说,这太过分了。虽然,不要告诉我使用长期原因我也可以说i = 10 ^ 1000000000 ...

那么,是否有一种技术或功能(手工制作)我可以使用/ make来解决这个问题,还是根本不可能? 如果是这样,它必须重新考虑我的算法并提出另一个问题,但我相信问题最终会是相同的。

一如既往,我只能使用write,malloc,free,不能使用其他函数/命令。其他一切都需要手工制作。

2 个答案:

答案 0 :(得分:2)

除了查找字符串的长度之外,根本没有理由手工编写循环。 C已经具有标准库函数:strlen()。您应该信任您的标准C库,该函数使用可能的最佳方法来扫描字符串。

返回值使用size_t类型的原因是:size_t 保证能够容纳任何大小的对象(在记忆)可以在你的机器上。如果字符串的长度不适合size_t,则字符串本身首先不适合您机器的地址空间。

也就是说,在处理对象大小和索引到数组的任何地方时,最好习惯使用size_t。无论你的物体有多大,你都不必担心溢出。

答案 1 :(得分:0)

标准库中的函数Strlen()为您完成此操作。你尝试用while循环做的每件事都已经完成了。省去重新发明轮子的麻烦。