gpt4 book ai didi

c - 如何使用函数 sscanf 读取特定字符?

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:01 24 4
gpt4 key购买 nike

我想从文件中读取信息,并将文件中a的值赋给“a”,将b的值赋给“b”。但它没有用。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
FILE *fp;
char buffer[1024];
char zahla[128];
char zahlb[128];
char zimu[128];

fp = fopen("./0312.conf", "r");
if (fp == NULL) {
perror("error");
return (-1);
}
while (fgets(buffer, 1024, fp) != NULL) {
sscanf(buffer, "%^", zimu);
printf("zimu is: %s\n", zimu);

if (strcmp(zimu, "a") == 0) {
sscanf(buffer, "%[1-9]s", zahla);
}
if (strcmp(zimu, "b") == 0) {
sscanf(buffer, "%[1-9]s", zahlb);
}
}
printf("a=%s, b=%s\n", zahla, zahlb);
}

文件内容为:

       a=10                b=5

最佳答案

  • 格式说明符 "%^" 没有意义,实际上不会做任何事情 -- 所以您永远不会在 zimu 数组中得到任何东西。

  • 格式说明符中 %[1-9] 之后的 s 表示“匹配文字的‘s’字符”,因此永远不会匹配。您可能只想删除它。

  • 由于您的输入行以 a=b= 开头,因此 "%[1-9]" 格式说明符将不匹配。

很可能你想要的是类似的东西

char name[100], value[100];
if (sscanf(buffer, " %99[a-z] = %99[0-9]", name, value) == 2) {
// matched a line with name=value, do something with it
} else {
// didn't match -- give an error?
}
  • 在格式中使用空格字符来跳过空格——只要有空格,它就会跳过 0 个或多个空格字符。注意 0 -- 不需要空格,可以有任意数量的空格
  • 始终检查返回值以查看是否匹配预期的项目数
  • 你需要一些格式来匹配行中的所有字符,尽管 %[%c 以外的格式说明符也会跳过空格,你可以如果您不关心尾随的内容,请忽略它。如果您确实关心尾随内容,您可以使用 %n 检查扫描了多少个字符以确保它是整行。
  • 对读取固定数组的 %s%[ 说明符使用边界以确保它们不会溢出。

关于c - 如何使用函数 sscanf 读取特定字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55148326/

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