我正在尝试使用fscanf从infile(stdin或文件)读入一个代表如下的文件:
1,2,3
4,5,6
请忽略它们是数字的事实 - 我将它们表示为字符串。
我做的是我用过
fscanf(infile, "%s%*c %s%*c %s%*c[^\n]", x, y, z); where x, y, z are string variables.
我希望该行上的每个代表数字都存储在x,y,z中,但它不起作用,而是将整行存储在x中。
请帮忙吗?感谢。
答案 0 :(得分:1)
您正在使用'%s',它会将整个单词读取到空格。因此res = requests.post( "{hostname}/nifi-api/process-groups/{destination_process_group}/templates/upload".format( **args ),
files={"template": open( file_path, 'rb')} )
会在1,2,3
中读取第一行。
您需要做的是将x
,x
和y
作为整数,然后您可以读取三个整数并使用各种方法将其转换为字符串(例如{ {1}}
z
答案 1 :(得分:0)
如果您必须使用scanf
/ fscanf
,那么您希望使用%[^,]
作为输入格式化程序而不是%s
。 %s
会贪婪阅读尽可能多的内容; %[^,]
将读取由不是,
的字符(包括空格)组成的字符串:
fscanf(infile, "%[^,],%[^,],%[^,]", x, y, z);
请注意,fscanf
的上述用法是不安全,因为它不会限制每个字符串中读取的字符数。因此,它完全容易受到缓冲区溢出攻击。
就个人而言,我会使用fgets
(或getline
,如果可用)阅读整行,然后使用,
在strtok
上对其进行标记。 scanf
/fscanf
are notoriously hard to use correctly通常应该避免。