是否可以在C中读取字符串,而无需提前分配固定大小的数组?
每次我声明一个固定大小的char数组时,我觉得我做错了.我总是猜测我认为最大的用途,但这并不总是那么容易.
另外,我不喜欢将较小的弦放在较大的容器中的想法.感觉不对劲.
我错过了什么吗?还有其他方法我应该这样做吗?
在您读取数据时,您的缓冲区将具有固定大小 - 这是不可避免的.
但是,您可以使用fgets读取数据,并检查最后一个字符是'\n',(或者您是否已到达文件末尾),如果没有,则检查realloc缓冲区,并阅读更多内容.
我很少发现必要,但通常会为读取分配一个固定缓冲区,将数据读入其中,然后为其副本动态分配空间,仅分配实际占用的空间,而不是整个大小.我最初使用的缓冲区.
当你说“提前”时,你的意思是在运行时,还是在编译时?在编译时你这样做:
char str[1000];
Run Code Online (Sandbox Code Playgroud)
在运行时你这样做:
char *str = new char[size];
Run Code Online (Sandbox Code Playgroud)
获得正确大小的唯一方法是知道您要读入多少个字符。如果您正在从文件中读取,您可以寻找最近的换行符(或其他一些条件),然后您就知道如何执行数组需要很大。IE:
int numChars = computeNeededSpace(someFileHandle);
char *readBuffer = new char[numChars];
fread(someFileHandle, readBuffer, numChars); //probly wrong parameter order
Run Code Online (Sandbox Code Playgroud)
没有其他方法可以做到这一点。站在程序的角度来看,它如何知道用户要按多少个键?您能做的最好的事情就是限制用户或任何输入。
还有一些更复杂的事情,例如创建缓冲区的链接列表,分配缓冲区块然后将它们链接起来。但我认为这不是您想要的答案。
编辑:大多数语言都有字符串/输入缓冲区类,可以向您隐藏这一点。
| 归档时间: |
|
| 查看次数: |
9640 次 |
| 最近记录: |