【发布时间】:2018-01-23 17:37:30
【问题描述】:
我正在尝试将字符串/*char 扫描到变量中并将其传递给函数,但我收到错误“format specifies type 'char *' but the argument has type 'const char *'”。我需要 *info 成为 const char,但如果我改变它,我会得到其他错误。
如何将const char *info 正确扫描到sscanf()?
int main(int argc, char** argv) {
blk *block;
char *line;
const char *info;
block = block_new();
printf("insert info");
while ( (line = readline()) != NULL) {
sscanf(line, "%s", info);
insert(block, info);
free(line);
}
}
插入:insert(blk *block, const char *info)
当我更改为 char *info 而不是 const char 时,出现错误:
warning: variable 'info' is uninitialized when used here
sscanf(line, "%s", info);
note: initialize the variable 'info' to silence this warning
char *info; = NULL
【问题讨论】:
-
除了删除
const限定符以满足编译器的要求外,line和info都是未初始化的变量。他们没有指出任何具体的事情。所以sscanf(line, "%s", info);将无法做任何明智的事情,这是未定义的行为。 -
为什么你“需要
*info成为一个常量字符”? -
"我需要
*info成为一个 const char" - 不,你需要它是一个适当长的 array 的 non-const字符,或指向适当大的、动态分配的 non-const空间的指针。无论是否动态分配,空间的内容都不能是const,因为你需要修改它们(通过sscanf)。 -
可以为
const参数提供非常量参数,但反之则不行。 -
这个问题太笼统了——这不是一个教程服务!您可以使用比您期望的任何输入更长的固定长度数组,例如
char info[1000];并使用sscanf(line, "%999s", info);限制输入,或者您可以跟进关于 SO 的许多类似问题,例如 How can I read an input string of unknown length?