gpt4 book ai didi

c - 我可以使用scanf捕获宽度由变量指定的指令吗?

转载 作者:行者123 更新时间:2023-12-02 06:12:05 25 4
gpt4 key购买 nike

我有以下代码:

scanf(" %Xs %Ys", buf1, buf2);

其中X和Y应该是整数。问题在于X和Y的值是编译时常量,即使我想将这些值硬编码到格式字符串中,也不能,因为我不知道这些值。在printf中,您可以发送一个宽度变量以及带有“%* s”的参数。有什么与scanf类似的东西吗?

编辑:澄清一下,常量在编译时是已知的,但在编码时却不是,而且我一点也不知道。它们可能因平台或实现而异,并且在我完成后可能会发生变化。即使它们没有,我仍然不想在格式字符串中复制缓冲区大小,以便在我忘记保持它们同步的那一刻准备进行段错误处理。

最佳答案

您可以使用sprintf()生成格式字符串:

sprintf( format, " %%%is %%%is", X, Y );
scanf(format, buf1, buf2);

编辑:惊人的,但下面的gcc代码正在工作:
#include <stdio.h> 

#define LIST(...) __VA_ARGS__

#define scanf_param( fmt, param, str, args ) { \
char fmt2[100]; \
sprintf( fmt2, fmt, LIST param ); \
sscanf( str, fmt2, LIST args ); \
}

enum { X=3 };
#define Y X+1

int main(){
char str1[10], str2[10];

scanf_param( " %%%is %%%is", (X,Y), " 123 4567", (&str1, &str2) );

printf("str1: '%s' str2: '%s'\n", str1, str2 );
}

关于c - 我可以使用scanf捕获宽度由变量指定的指令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1549906/

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