我想读取一个文件中写入的不同元素,并将它们保存到不同类型的变量中,我读取的文件只有一行key, value1, value2, value3
,例如10, abc, 5, 2.35
。
我可以找到文件,打开它并读取行。但是,当涉及到将值存储到变量时,我遇到了麻烦。我尝试使用sscanf,因为文件中行的格式总是相同的,但是当我打印行时,我得到了不正确的不同值。我需要更改什么?
#define MAX_LEN 1024
int get_value(int key, char *value1, int *value2, double *value3){
char name[1000];
FILE *f;
char line[MAX_LEN];
char *k = 0;
// Change directory where we work.
if(chdir("FilesPractice1") == -1){
perror("Error while changing directories.");
return -1;
}
// Convert key to the name of the file.
snprintf(name, 1000, "%d.txt", key);
// Open the file.
if((f = fopen(name, "r")) == NULL){
// If the file doesnt exist, return -1.
perror("Error: element with key value does not exist.");
return -1;
}
// Get values and store them.
fgets(line, MAX_LEN, f);
printf("%s\n", line);
sscanf(line, " %s[^,], %s[^,], %d[^,], %lf", k, value1, value2, value3);
// Printing the values.
printf("%s\n", value1);
printf("%p\n", (void *)value2);
printf("%p\n", (void *)value3);
return 0;
}
1条答案
按热度按时间s8vozzvw1#
也许你的代码有多个问题,如问题注解中所建议的,但输出问题在这几行中:
value2
和value3
是指针(指向int
和double
)。指针变量的值是某个其他值在内存中的地址。在sscanf()
上正确使用value2
和value3
(我假设函数get_value()
也被正确调用,并且value1
、value2
和value3
是有效的指针),但是您不打印读取的值,而是打印指针(即它们在内存中的地址)。上面的两行应该是:
这样,您就可以打印存储在这些内存地址中的值,而不是内存地址。
如果你想知道为什么前面的
printf()
行能正常工作,这是因为C语言中的字符串是由它在内存中的地址来标识的,而这正是value1
。*value1
不是整个字符串,而只是它的第一个字符。