gpt4 book ai didi

C:使用 scanf 之前计算字符串的长度

转载 作者:行者123 更新时间:2023-11-30 20:38:36 25 4
gpt4 key购买 nike

我正在尝试找到一种以更有效的方式操作 C 中的字符串的方法(也许就像 java 的做法一样)。我想到的一种方法是计算字符串的大小直到行尾(可能包括空格),使用 malloc() 分配此大小的内存,然后返回到行的开头行并扫描字符串。有没有办法做到这一点?我不知道是否有办法将“光标”返回到行的开头以“重新扫描某些内容”。如果您知道另一种/更好的方法来处理 C 中的字符串,请告诉我。谢谢

最佳答案

没有办法直接做你所要求的事情,但是有一个(在我看来更好的)替代方案:fgets() .

它的作用是读取文本直到行尾,包括最后的换行符。如果该行比缓冲区长,那么它会忽略换行 --- 您可以使用该事实来检查该行是否已完成。

类似这样的东西(未经测试的代码):

// WARNING: Example does not include error checking
// (check the return value of `fgets()`, `malloc()` and `realloc()`!)

size_t buflen = 64;
size_t pos = 0;
char* buf = malloc(buflen);

// `for(;;)` is an infinite loop
for(;;)
{
// read data into buf[pos..buflen] (total of `buflen-pos` bytes)
fgets(buf + pos, buflen - pos, file);
pos = pos + strcspn(buf + pos, "\r\n");
if(buf[pos]) // reached end of line; end the loop
break;

buflen += 64;
// alternative (double the size):
// buflen <<= 1;
buf = realloc(buf, buflen); // resize the buffer
}
// `buf` contains our line; `pos` contains the end of it
// optional: remove the trailing newline
// buf[pos] = 0;

相关文档:

关于C:使用 scanf 之前计算字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28487901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com