gpt4 book ai didi

c - 在c中解析char数组

转载 作者:行者123 更新时间:2023-11-30 19:17:34 25 4
gpt4 key购买 nike

我正在尝试使用 C 来解析此字符数组:“Smith C. John, 103, 10, 10, 10”(不带引号)。

我已经尝试过这个:

int group = 0, mark1 = 0, mark2 = 0, mark3 = 0; 

char input[100];
char lastName[100];
char firstName[100];
char initial[100];
int n;

fgets(input, 1000, sourceFile);
n = sscanf(input,"%s %s. %s, %d, %d, %d, %d\n", lastName, initial, firstName, group, mark1, mark2, mark3);

此代码仅正确读取姓氏和首字母(不幸的是带有点)。这些值应该是这样的:

lastName = Smith
initial = C
firstName = John
group = 103
mark1 = 10
mark2 = 10
mark3 = 10

请帮助我!谢谢!

更改为这样即可工作:

int i = 1, group = 0;
float mark1 = 0, mark2 = 0, mark3 = 0;
char input[100];
char lastName[100];
char firstName[100];
char initial[100];
int n;

fgets(input, sizeof(input), sursa);
n = sscanf(input,"%99s %99[^'.']. %99[^','], %d, %f, %f, %f\n", lastName, initial, firstName, &group, &mark1, &mark2, &mark3);

最佳答案

您应该为 "%d" 说明符传递一个整数指针,在这种情况下,您应该只获取要传递的 int 变量的地址

n = sscanf(input,
"%s %s. %s, %d, %d, %d, %d\n",
lastName,
initial,
firstName,
&group,
/* ^ pass the address of group */
&mark1,
&mark2,
&mark3
);

如果您启用了编译器警告,它会警告您。

此外,您还声明输入

char input[100];

然后像这样调用fgets()

fgets(input, 1000, sourceFile);

这可能会溢出输入,以防止您使用 sizeof 运算符

fgets(input, sizeof(input), sourceFile);

请注意,sizeof 运算符不会计算 input 数组中字符串的长度,而是计算数组大小(以字节为单位)。

要查找字符串的长度,您需要 strlen() 函数。

您还应该将格式字符串更改为

"%99s%99[^'.'].%99[^','],%d,%d,%d,%d\n"

这里的%99可以防止缓冲区溢出,它应该比缓冲区的大小小1“1表示终止'\0' ""%99[^'.']" 表示消耗除 '.' 之外的所有字符,因此当 '.' 时它会停止。找到 然后显式使用 '.', "%99[^',']"'.'< 的解释相同 但对于 ','

因此生成的代码将是

n = sscanf(input,
"%99s%99[^'.'].%99[^','],%d,%d,%d,%d\n",
lastName,
initial,
firstName,
&group,
/* ^ pass the address of group */
&mark1,
&mark2,
&mark3
);

关于c - 在c中解析char数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28009916/

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