C - 如何使用 sscanf <int><string><int> 进行读取?

标签 c linux string gcc scanf

我有一个 <int><string><int> 的文件然后我将它保存到缓冲区中,然后使用管道读取它。该字符串是字母数字。

FILE *est = fopen ("file.txt","r");
fgets( buffer1, 256, est);
write(fd[i][1], buffer1, BUFFERSIZE);

.
.
.

int r = read(fd[i][0], buffer1, BUFFERSIZE);
sscanf(buffer1,"<%d><%s><%d>", &a, b, &c);

问题是当我读取它“吃掉”><%d> 的字符串时并将所有内容解释为字符串。例如,如果我有 <10><5jj8j><10>变量将是 a=10 , b= "5jj8j"><10>c无论它被初始化。

如何使用 sscanf读取 <> 之间的字符串对吧?

感谢您的回答。

最佳答案

由于 "%s" 保存了所有非空白字符并且 OP 不希望将 '>' 保存为字符串的一部分,因此使用 “%[]”

使用 "%n" 检测扫描是否完成为 n,在最后,只有当 所有 格式匹配时才会改变.

// sscanf(buffer1,"<%d><%s><%d>", &a, b, &c);
int n = 0;
char b[100];
sscanf(buffer1,"<%d><%99[^>]><%d>%n", &a, b, &c, &n);
if (n > 0) {
  ; // Scan completed - success;
} else {
  ; // Scan failed
}

关于C - 如何使用 sscanf <int><string><int> 进行读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33854964/

相关文章:

Java解释: why String immutable make StringBuffer MORE efficient

c - MPI 中的不同进程之间发送和接收

c - ergo wergo weigo

客户端/服务器打印数组并写回

linux - HTTP 请求未响应 404 未找到

java - 如何计算文件中单词的长度? java

c - 读取不阻塞命名管道

html - 根据 HTML 表格中的条件更改列颜色

linux - 在 redhat 6.3 上安装 RPM 失败

java - 对数组中的字符串进行冒泡排序