gpt4 book ai didi

C 动态数据说明符

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

我想写类似下面的代码,但是我失败了。我想将数组 y 中的动态字符数分配给 x。这个数字将在后面定义。这是我的意思的一个简单例子。

#include<stdio.h>
int main()
{
int x=0;
char y[]={'5','4'};
int z=1;
sscanf(y,"%zi",&x);
printf("%i",x); //Each time value of x=0
sscanf(y,"%1i",&x); //I want to make this 1 dynamic "int z"
printf("%i",x); //Here x value =54.
return 0;
}

最佳答案

简而言之,你不能直接做你想做的事。

对于 printf(),您可以使用它,其中所有三个变量都是 int 类型,宽度将从 x 中读取和 y:

printf("%*.*d", x, y, z);

但是,scanf() 系列函数没有提供类似的功能。 * 表示 scanf() 中的“赋值抑制”。请注意,在 C99 及更高版本中,%zi 告诉 scanf() 指针参数的类型是 size_t *。这可能解释了为什么你得到 0 结果; sscanf() 超出了您传递给它的变量的写入范围。

最好的办法是使用 snprintf() 来创建您希望 scanf() 使用的格式字符串。

int x;
char y[] = { '5', '4' };
int z = 1;
char format[16];
snprintf(format, sizeof(format), "%%%di", z);
if (sscanf(y, format, &x) != 1)
…handle error…
printf("%d\n", x); // Will print 5

请注意,如果 z 为 1 或 2,则可以正常工作;如果 z 较大,则 y 不是以 null 结尾的字符串,您会遇到未定义的行为。如果 z 为零或负数,您也会遇到问题。

关于C 动态数据说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34565983/

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