如何从字符串中获取size_t?

2024-03-08

我需要从用户输入中获取数组大小。对我来说,将输入存储为很自然size_t,但是正在寻找合适的strto...()功能我找不到。我刚用过strtoull(), since unsigned long long保证至少是 64 位,而且我无论如何都使用 C99。但我想知道最好的方法是什么size_t来自字符串 - 例如,在 ANSI C 中。

Edit:

澄清一下,我不需要字符串长度!用户将以字符串的形式输入一个大缓冲区的大小,例如"109302393029"。我需要获取该号码并将其存储为size_t。我当然可以使用strtol()甚至atoi(),但这似乎是一个笨拙的黑客(size_t可能持有比int例如,我希望用户能够在可寻址空间中输入任何值)。


如果您有string输入包含 a 的值size_t你想获得价值,你可以使用sscanf() http://linux.die.net/man/3/sscanf with %zu格式说明符读取值并将其存储到相应的size_t多变的。

注意:不要忘记检查是否成功sscanf()和家人.

伪代码:

size_t len = 0;
if (1 == sscanf(input, "%zu", &len))
printf("len is %zu\n", len);

但是,FWIW,这不会处理溢出情况。如果输入长度为任意大你的程序应该能够处理,你可能想利用strtoumax() http://linux.die.net/man/3/strtoumax并检查是否溢出,最后将返回值转换为size_t。请参见蓝月先生 https://stackoverflow.com/users/1275169/blue-moon's answer https://stackoverflow.com/a/32325861/2173917与此相关。


但是,如果您不介意另一种方法,则不要将输入视为sting并将其转换为size_t,你可以直接将输入作为size_t, like

size_t arr_size = 0;
scanf("%zu", &arr_size);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从字符串中获取size_t? 的相关文章

随机推荐